读书人

调用ControlCAN.dll为何只能取第1笔数

发布时间: 2012-03-13 11:21:12 作者: rapoo

调用ControlCAN.dll为何只能取第1笔数据??
各位大侠,小弟问题如下:

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]就可以了!!

读书人网 >PB

热点推荐