Labview的CAN通讯

首先你要有一根kvaser

一切的前提是硬件,当然如果你是那种靠俩根线自己写CAN大牛当我没说。供货商会提供相应的驱动程序“can King”,我建议先装上再说,不装也没关系,里面有支持Labview的资源,在“KvaSer驱动\Drivers\LabView Library”路径下可以找到,里面有两个Lib文件,我们要用的是KvCan.lib,另一个Kvlin.lib是做lin通讯开发。在这里插入图片描述注意里面的kvCanExample,开始阶段全靠它,这是官方提供的一个CAN报文收发以及总线性能显示的范例,用起来很方便,简单的通讯,很直接。

你要对CAN有那么一点点的了解

注意我这里用的是了解,而不是理解,所以如果你是临时开发,且对此没有深入了解的,你只需要知道你要做的项目CAN相关的以下几个属性就可以了:波特率、通道(接收报文);报文ID、位数(DLC一般都是八位)、需要发送的数据字节内容、发送报文的种类有远程、标准、扩展(这个要搞清楚,不然发不出去)。如果你是团队开发,这就要问底层单片机开发人员,他们对这方面基本上都有研究,能过直接告诉你想知道的结果,不需要自己慢慢花时间去做功课,但如果只有你一个人开发,那就要弄清上述的几个属性,接收可以不做深入了解,但是发送绝对要弄明白,它的报文data bite和你想发送的内容之间是如何转换的,有时候就是差之毫厘的事情,能让你卡住几天。这里就不详细赘述了,有关CAN的规范有空我会专门总结。

kvCanExample

闲话不多扯,转入正题。这个范例虽然是官方提供的,但也不用过分膜拜,并以此为标准,范例虽然用着顺手但也不是十全十美,而且我们的最终目标就是写出属于自己的源程序,所以我们看范例的主要目的是扣用法,其中函数控件的用法。
在这里插入图片描述
这里直接截屏了,这是kvCanExample的前面板主要分三块:配置、发送、接收和总线状态,这是英文字面意思,实际上不是这样,详细来看配置是配置接收:选择通道(如无特殊配置默认选零);接下来的几个布尔灯不要操作(我一直没有进行任何操作);波特率需要选,最快1M最慢50K,如超过值域,请与厂家联系;GoBusOn按钮控件按下,Kvaser开始工作,received messages区域开始不断刷新显示接收到的报文;值得注意的是Send message这部分,报文ID在前面提到过了,我举几个例子:0x1000(扩展)、0x287(标准),DLC填8,data bytes是要发送的内容,最后是发送标准的选择:个人建议如果不清楚的情况下standard和extended分别试一试,remote出现的少。前面板部分就先讲到这边。
在这里插入图片描述
这个程序框图我不是很喜欢,有点乱,给人感觉就是想到哪里编到哪里的样子,由于程序框图太大,上图只截取了主要部分。上图的下半部分很明显有字节的输入。下图的我while循环框对应的就是范例发送CAN报文的部分,这也是我们要重点分析的部分。在这里插入图片描述
在仔细观察后我们可以发现所有的配置信息和报文内容全都指向了kvCanWrite函数控件,见下图在这里插入图片描述
这是及时帮助里的笼统解释,都是一些英文解释,很字面意思,主要是看引脚用法,英文就算不好也没关系啊,网上有在线翻译,弄清大概意思就成,最容易出错的地方是数据类型,在范例里面是没有问题的,问题是后面自己编写时,messageID和message是两个大坑,切记,切记。message是数组输入,默认八位data bytes(无符号字节,八位整型,十六进制),用创建数组函数创建,最后DLC进行控制发送位数,由“数组子集”函数实现,经处理过的函数发送至kvCanWrite的Message端口。kvCanWrite的channel handle的接入端在kvCanBusOn的channel handle(output only)如下图所示。kvCanBusOn
下图对应的是前面板的配置功能程序部分,对于这部分不用细致探究,依葫芦画瓢就成,但在后边自己用的时候,要知道设置波特率就成。
配置程序
波特率在kvCanSetStdBusParams里设定,其中的Standard CAN Baud Rate可创建枚举类型的常量或输入控件。

在这里插入图片描述
在接收报文部分最核心的部分是由以下函数kvCanRead完成,我用的比较多的是MessageData引脚,输出一个有八元素数组。前面的初始配置完成后直接由ChannelHandle接入系统,即可实现收取CAN报文。
在这里插入图片描述

做自己的资源

官方提供的程序肯定考虑的功能比较多,如果直接用来作为引用势必会消耗不必要的资源,或者引起系统的不良反应,我们仔细观察上面的范例,它采用了双线程循环结构,系统控制比较乱。我们可以将上面各个功能的核心部分扣取出来重新组合,以达到更好地为我们所用的目的。初始化配置后接kvCanWrite就是报文发送;初始化后接kvCanRead就是接收报文,用法灵活多变,不拘泥于形式,配合上多线程消息控制,可完成基于Labview和CAN的通讯,采集。

  • 20
    点赞
  • 138
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值