当前位置: 代码迷 >> PB >> 调用ControlCAN.dll为什么只能取第1笔数据?
  详细解决方案

调用ControlCAN.dll为什么只能取第1笔数据?

热度:99   发布时间:2016-04-29 06:08:53.0
调用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]就可以了!!
  相关解决方案