各位大侠,小弟问题如下:
Function long VCI_Receive (ulong DeviceType, ulong DeviceInd , ulong CANInd, ref VCI_CAN_OBJ Receive, ulong length, ulong WaitTime ) Library "ControlCAN.dll" alias for "VCI_Receive;Ansi"
or
Function long VCI_Receive (ulong DeviceType, ulong DeviceInd , ulong CANInd, ref VCI_CAN_OBJ Receive, ulong length, ulong WaitTime ) Library "ControlCAN.dll"
以上都有试过;
timer(0.1)
timer事件:
VCI_ERR_INFO ErrInfo
If m_connect = 0 Then
ll_x= 1
return
End If
long length ,i,j
VCI_CAN_OBJ frameinfo[50]
String str ,tmpstr
length = VCI_Receive(2, 0, 0,frameinfo[1], 50, 10)
If length <= 0 Then
//'注意:如果没有读到数据则必须调用此函数来读取出当前的错误码,千万不能省略这一步(即使你可能不想知道错误码是什么)
VCI_ReadErrInfo(m_devtype, m_devind, m_cannum, ErrInfo)
ll_x= 1
return
else
messagebox('test',length)
End If
For i = 1 To length
str = "接收到数据帧: "
If frameinfo[i].TimeFlag = 0 Then
tmpstr = "时间标识:无 "
Else
tmpstr = "时间标识:0x" + f_10to16(frameinfo[i].TimeStamp)
End If
str = str + tmpstr
tmpstr = " 帧ID:0x" + f_10to16(frameinfo[i].ID)
str = str + tmpstr
str = str + " 帧格式:"
If frameinfo[i].RemoteFlag = 0 Then
tmpstr = "数据帧 "
Else
tmpstr = "远程帧 "
End If
str = str + tmpstr
str = str + " 帧类型:"
If frameinfo[i].ExternFlag = 0 Then
tmpstr = "标准帧 "
Else
tmpstr = "扩展帧 "
End If
str = str + tmpstr
mle_1.text = mle_1.text + str+'~r~n'
If frameinfo[i].RemoteFlag = 0 Then
str = " 数据:"
If frameinfo[i].DataLen > 8 Then
frameinfo[i].DataLen = 8
End If
if frameinfo[i].DataLen > 0 then
For j = 1 To frameinfo[i].DataLen
tmpstr = f_10to16(frameinfo[i].data[j]) + " "
if integer(tmpstr) < 10 then
tmpstr ='0'+tmpstr
end if
str = str + tmpstr
Next
End if
mle_1.text = mle_1.text + str+'~r~n'
End If
Next
length 变量返回的结果值是2,即代表是2笔数据结构,但我进行for处理时,只有一笔有值;mle_1.text 内容如下:
接收到数据帧: 时间标识:无 帧ID:0x3 帧格式:数据帧 帧类型:标准帧
数据:CC
接收到数据帧: 时间标识:无 帧ID:0x0 帧格式:数据帧 帧类型:标准帧
数据:
本身是: 0x3与0x2; 但其中一笔值变为0了
(以下是VB、Delphi结果都是正常)
接收到数据帧: 时间标识:无 帧ID:0x3 帧格式:数据帧 帧类型:标准帧
数据:CC
接收到数据帧: 时间标识:无 帧ID:0x2 帧格式:数据帧 帧类型:标准帧
数据:CC
帮我看看是什么原因?谢谢!!
------解决方案--------------------
只要在数组增加一个VCI_CAN_OBJ[8]就可以了!!