讲完串口,这边再讲一个labveiw工控程序中比较常用的CAN通讯吧。很久没有写过CAN通讯的程序了,网上一搜就是什么现场总线,控制器局域网总线,然后一堆复杂的协议。在这里还是一样的,具体的底层协议不多说,大家自行百度哦(别问,问就是忘记了)。主要还是跟大家讲一下在labview应用端如何用代码实现通讯,一般是针对汽车产品,才会用到(做汽车仪表,音响导航类的公司就会经常用到)。大厂用的CAN盒,CAN卡大多是NI的,小小的一块东西就要几千上万,小公司一般是买国内的,比如周立功这些相对便宜的CAN工具,甚至有自己拿单片机开发CAN通讯工具的,这种稳定性可能不太好,会有丢包的现象,汽车产品如果用这些CAN工具做的测试,是很难让客户认可的,希望国产的CAN工具越做越好吧。下面搬一个高速CAN 500K的一个写入和读取的例程,然后再给个读写一体的范例吧。

1、写入例程

​编辑

这里不具体描述上面的函数是怎么点开的,一般装了NI的CAN驱动包后,在函数 测量I/O那里会有CAN的Frame API函数接口,在上面看一下就可以了。先配置500K的波特率,选择CAN0打开,打开一般加个延时会稳定一些。写入的数据格式如图所示,Timestamp这个时间戳这里用不上,一般用的时候是读取数据,或者在编辑DBC文件(可以理解为一个包含了产品所有通讯指令的CAN数据库)的时候可能会用到。ArbitrationId是发送指令的地址,这个一般产品端会告诉你,往哪个地址发CAN数据。IsRemote没用过,有知道的可以跟我说一下,哈哈。DataLength数据长度,一般高速500K和低速125K的大多用8位长度数据,当然也有其他更多位的,看产品端的需求吧。最后那个Data就是数据了。

2、读取例程

​编辑

大致跟写入相同,就是读取函数前面要加一个读取的设置,从之前使用的经验来看,加了read entries pending 的读取配置后,能有效避免因大量数据快速导入而引起的输出异常,数据慢或少的话看不出效果。

3,读写一体

​编辑

从应用上来说,labview的操作还是特别简单的,至少比C#上写winform简单多了,不过从编程的角度上来看,labview会弱化编写文本代码的能力,所以适用对象我认为还是偏硬件的技术或测试人员,当然也包括单片机开发(带操作系统的同仁就不大需要labview了,可以往QT这些方向)。这里可以尝试使用之前讲的状态机来写,我直接用了多线程的方式了。在labview里面,拉几个while循环,就是多线程了。这个从写法上来说,跟其他语言的不太一样,labview很粗暴地直接拉while循环就可以实现多线程了(labview通过跑副本的方式,也可以实现多线程,这里不扩展)。传统的CAN最高是1M波特率,后面出了超过1M的FDCAN,还有单线通讯的LIN。可以说都是CAN的升级版了,最终的方向还是更快更简单(使用上的简单)。对某个部分有兴趣或有疑问的小伙伴,留言探讨哦!

原创不易,一键三连啦!

labview入门到出家10(进阶)——CAN通讯的更多相关文章

  1. labview从入门到出家6(进阶篇)--移位寄存器的使用

    前面介绍了如何熟悉和使用Labview自带的库函数以及调试方式,大家后期基本可以凭借这两个方式从入门到出家了,哈哈,后面就靠各位同仁99%的努力了.这篇为啥要讲移位寄存器呢,主要是之前做的项目和经验告 ...

  2. labview从入门到出家5(进阶篇)--程序调试以及labview函数库的运用

    跟了前面几章的操作流程,相信大家对labview有了一定的认识.其实只要了解了labview的编程思路,再熟悉地运用各个变量,函数以及属性,那么我们就可以打开labview的大门了.跟其他编程语言一样 ...

  3. labview从入门到出家9(进阶篇)--串口通讯

    ​ Labview在工控领域,如产线,实验室等环境用得较多,其中与仪器通讯控制的方式有串口(RS232,RS485,TTL),GPIB,网口,CAN等,其中串口在仪器还有单片机控制中用来调试居多.(很 ...

  4. labview从入门到出家8(进阶篇)--简单好用的状态机

    labview的状态机类似于一个软件框架的基本单元,好的软件框架和软件思路采用一个好的状态机,就如虎添翼了.这章给大家讲一个本人常用的一个状态机,基本上以前的项目都是建立在这个状态机上完成的,当然网上 ...

  5. labview从入门到出家7(进阶篇)--队列的使用

    本节简单讲解队列在Labview中的使用,队列你可以认为就是一组先进先出的数据列表,在Labview中常用来缓存和传递数据.用了这么久的队列,个人认为有个方便的地方在于数据传递的把控,不管是局部变量还 ...

  6. labview入门到出家11(补充)——基于单片机和labview开发的虚拟示波器

    ​ 之前有小伙伴提到需要虚拟示波器的资料,有些库还有文件丢失了,直接给的工程跑不起来,这里我把关键的地方讲解一下,大家可以自行开发.其实开发不难,只是有些点会耗点时间.虚拟示波器,顾名思义就是非实物的 ...

  7. FFmpeg从入门到出家(HEVC在RTMP中的扩展)

    由金山云视频云技术团队提供:FFmpeg从入门到出家第三季: 为推进HEVC视频编码格式在直播方案中的落地,经过CDN联盟讨论,并和主流云服务厂商达成一致,规范了HEVC在RTMP/FLV中的扩展,具 ...

  8. RabbitMQ 入门系列:10、扩展内容:延时队列:延时队列插件及其有限的适用场景(系列大结局)。

    系列目录 RabbitMQ 入门系列:1.MQ的应用场景的选择与RabbitMQ安装. RabbitMQ 入门系列:2.基础含义:链接.通道.队列.交换机. RabbitMQ 入门系列:3.基础含义: ...

  9. emacs最简单入门,只要10分钟

    macs最简单入门,只要10分钟  windwiny @2013    无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到10分钟就退出删除了. 这次硬着头皮,打开几篇文章都看完 ...

随机推荐

  1. Visual Studio 修改NuGet 包缓存路径

    Visual Studio 下载的NuGet包默认会缓存到 C:\Users{Windows用户名}.nuget\packages 下,时间一长就会导致 C盘空间严重不足. 那么怎样去设置,让包缓存文 ...

  2. Java 18 新特性:使用Java代码启动jwebserver

    前几天分享了Java 18 新特性:简单Web服务器的jwebserver命令行功能. 今天换一种方式,使用Java代码来实现一个静态资源服务器. 详细步骤我录了个视频放到B站了,感兴趣的小伙伴可以点 ...

  3. ucore lab5 用户进程管理 学习笔记

    近几日睡眠质量不佳,脑袋一困就没法干活,今天总算时补完了.LAB5难度比LAB4要高,想要理解所有细节时比较困难.但毕竟咱不是要真去写一个OS,所以一些个实现细节就当成黑箱略过了. 这节加上了用户进程 ...

  4. [笔记] 有向无环图 DAG

    最小链覆盖 (最长反链) 最小链覆盖 \(=n-\) 最大匹配. 考虑首先每个点自成一条链,此时恰好有 \(n\) 条链,最终答案一定是合并(首尾相接)若干条链形成的. 将两点匹配的含义其实就是将链合 ...

  5. Vulnhub-DC-4靶机实战

    前言 靶机下载地址:https://www.vulnhub.com/entry/dc-4,313/ KALI地址:192.168.75.108 靶机地址:192.168.75.207 一.信息发现 1 ...

  6. 154寻找旋转排序数组中的最小值II

    title: 寻找旋转排序数组中的最小值II 题目描述 题目链接:寻找旋转排序数组中的最小值II 解题思路 和上题同理:数组特点有 nums[mid] < nums[right],最小值肯定在m ...

  7. kNN-画图

    现在我们想要展示一些可视化内容 首先导包,如果是在jupyter notebook上,需要加入魔法函数:%matplotlib inline,这表示可以在jupyter上直接画图 import dat ...

  8. 关于linux多线程fork的理解和学习

    fork在英文中是"分叉"的意思.为什么取这个名字呢?因为一个进程在运行中,如果使用了fork函数,就产生了另一个进程,于是进程就"分叉"了,所以这个名字取得很 ...

  9. docker 1.2 之docker基本用法

    1.docker的基本用法 镜像相关操作:dockerhub查找镜像,例如查找centos的镜像 [root@elk ~]# docker search centos NAME DESCRIPTION ...

  10. JavaSE_关键字 接口 代码块 枚举

    1 Java中的关键字 1.1 static关键字 static特点 : 静态成员被所在类的所有对象共享 随着类的加载而加载 , 优先于对象存在 可以通过对象调用 , 也可以通过类名调用 , 建议使用 ...