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

season8862008 2011-03-29 10:12:39
各位大侠,小弟问题如下:

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


帮我看看是什么原因?谢谢!!
...全文
481 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq402613110 2013-07-31
  • 打赏
  • 举报
回复
引用 3 楼 yyoinge 的回复:
VCI_CAN_OBJ frameinfo[50]
 String str ,tmpstr
  
 length = VCI_Receive(2, 0, 0,frameinfo[1], 50, 10)

你这边虽然初始了50个VCI_CAN_OBJ ,但却只获取了一个VCI_CAN_OBJ ,就是frameinfo[1],这样肯定是只有第一个是有数据的
嗯,这就是问题的原因啦,奇怪你用frameinfo[1]不报错吗?这里应该是一个指针类型的,用frameinfo就对了
cap_ping 2011-10-15
  • 打赏
  • 举报
回复
只要在数组增加一个VCI_CAN_OBJ[8]就可以了!!
yyoinge 2011-06-03
  • 打赏
  • 举报
回复
VCI_CAN_OBJ frameinfo[50]
String str ,tmpstr

length = VCI_Receive(2, 0, 0,frameinfo[1], 50, 10)



你这边虽然初始了50个VCI_CAN_OBJ ,但却只获取了一个VCI_CAN_OBJ ,就是frameinfo[1],这样肯定是只有第一个是有数据的
guilinhang 2011-06-03
  • 打赏
  • 举报
回复
把“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"”这一段改为
Function long VCI_Receive (ulong DeviceType, ulong DeviceInd , ulong CANInd,
[out]VCI_CAN_OBJ[] Receive, ulong length, ulong WaitTime ) Library "ControlCAN.dll" alias for "VCI_Receive;Ansi"
把“length = VCI_Receive(2, 0, 0,frameinfo[1], 50, 10)”改为
length = VCI_Receive(2, 0, 0,frameinfo, 50, 10)
试试看.
xuam 2011-03-29
  • 打赏
  • 举报
回复
tmpstr = f_10to16(frameinfo[i].data[j]) + " "
返回NULL值了吧?
免费试听地址:B站搜索JeeGit观看《JeeSite4.x数据权限教程》、《JeeSite1.2.7系列基础教程》、《JeeSite4.x系列基础教程》等相关课程! 郑重声明:购课前,请认真听完第一章 课程简介 建议实战人群直接听:第九章、第十章 学生人群、刚入门:全听       数据权限主要讲解内容包含第一章 课程简介31.1 课程目标31.2 适用人群31.3 课程简介31.4 环境要求31.5 课程知识点大全31.6 课程售价31.7 购课声明31.8 资源清单31.9 售后方式41.10 讲师介绍4第二章 权限基础42.1 权限模型概述4第三章 JeeSite权限管理模型123.1 JeeSite1.2.7 权限管理模型123.2 JeeSite4.x 权限管理模型123.3 JeeSite4.x权限设计的扩展13第四章 用户管理144.1 JeeSite4.x内置用户类型144.1.1 用户管理思路144.1.2 网站会员、员工、单位、个人登录视图配置154.2 用户数据权限类型164.3实战训练、调试、日志查看16第五章 机构管理16第六章 角色管理186.1 JeeSite4.x角色管理概述186.2 JeeSite4.x越级授权与菜单权重186.3 JeeSite4.x 越级授权可能存在的隐患极其解决方案196.4用户表如何区分非管理员、系统管理员、二级管理员206.5 角色权限注意事项206.6 角色授权数据范围使用注意事项216.7 为何用户不设置员工权限无效?236.8 岗位管理与角色分类的岗位分类与角色分类有何区别?23第七章 二级管理员23第八章 系统管理员238.1 系统管理员238.2 总结:何时使用超级管理员、系统管理员、二级管理员?23第九章 Jeesite数据权限调用239.1 JeeSite4.x数据调用基础239.2 JeeSite4.x 实现数据列权限推荐解决方案249.3多数源模式下数据权限bug简易解决方案249.4 JeeSite4.x 自定义扩展数据权限249.5支持全球地区、全球企业、全球机构、全球部门授权24第十章 JeeSite数据权限实战2410.1 案例一2410.2 案例二2410.3 案例三2510.4 案例四2510.5 案例五25第十一章 JeeSite4.x常见问题解答251.1数据权限管理的代码会公开吗,购买了能看吗?251.2 JeeSite数据权限教程是Thinkgem录制的吗?25第十二章 参考阅读2612.1、JeeSite官方文档2712.2、美国国家标准与技术研究院2712.3、中国国家标准化管理委员会2712.4、ITSEC欧洲安全评价标准2812.5、百度学术2812.6、开源框架2912.6.1 JeeSite2912.6.2 Casbin2912.6.3 Eladmin2912.6.4 Spring-boot-demo2912.6.5 Jeeplatform3012.6.6 Pig3012.6.7 Jeecg-boot3012.6.8 Jfinal3012.6.9 Guns3112.6.10 Zheng3112.6.11 Cloud-Platform3112.7 博文资源31

680

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder API 调用
社区管理员
  • API 调用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧