labview串口通信实例_Labview的Modbus通讯

                                     作者 / 南山

aec0b8f34b6d0b2033b8615f3be76bbd.png我们在做labview的modbus通讯的时候通常使用的是,NI自带的DSC块或者是免费的自定义库。好处就是简单快捷稳定。当然任何事物是有两面性的,保证通用性和快捷性的同时带来的弊端是安装麻烦且不可灵活使用,如果遇到非标中的非标设备把你搞到头大。今天我介绍一下我平常使用的Modbus编程方式,并非标榜这种方法有多好,旨在分享和交流。aec0b8f34b6d0b2033b8615f3be76bbd.png

划重点

我通常使用VISA通过底层去编写Modbus通讯,今天我就来介绍一下如何用VISA实现Modbus通讯。

1什么是Modbus通讯协议?

ModBus是Modicon公司为其PLC通讯而开发的一种通讯协议。如今Modicon公司已经被施耐德收购成为了施耐德旗下品牌。从1979年问世至今,已经成为工业通讯领域的业界标准,最初的ModBus仅支持串口,分为RTU和ACSII两种信号传输模式(一般基于RS485串口通信媒介)。而随着时代的变迁,ModBus新增了TCP版本,可以通过以太网进行通讯,此外ModBus还有一个Modicon专用的ModBus Plus版本

以上是从百度复制的但是我要让大家注意一点:RTU采用CRC校验,而ASCII采用LRC校验(关于这两种校验后续的文章中会介绍)

2如何通过VISA编写Modbus呢?

关于VISA串口通讯我们之前的章节有介绍,这里就不过多讲解,今天我们以西门子200PLC为例,讲解。

本案例用到的软件:Labview 2018

                               VISA2018驱动      

本案例用到的硬件:台达温控器

3分析

0ece14fcb19958330325918bbe29df50.png

8e6a01398031d67745f79aed22ab8f12.png

从以上的手册中我们可知道其读取和输入寄存器地址,假定我们现在设定波特率是:9600  ,RTU ,CRC校验 站地址1读取通道1的值。

即发送:01 03 1000 0002 C0 CB

解释:H01即 :机器地址:1#  16进制

          H03即 :读取功能吗

          H1000:读取数据开始地址

          H0002:读取数据长度 我们现在是读取2位

          C0 CB :校验码

0895d814d7abc27c1ad913fd1d9efa81.png到这里不明白?没关系我给你看张图

af372ff5e6dbf02c39f93cb093f83d95.png

看懂这个数据格式就可以了

4 Labview程序编写

08951c3aab913638eeac2a3ee92cdbd9.png

d23ce23767d585bc93325e346d8f65bb.png

注意:读取和写入都是16进制 。在这里我们要做个50毫秒的延时,目的是给硬件反应时间。打开串口要及时关闭。串口也不可重复打开,这样会造成系统报错。

现在ok了?不不不!!!我们不要忽略CRC校验(这个后续文章会将这里就不多做介绍)。

586fe1ccd7edf55827cb1228a91b462b.png

 CRC校验程序

becc8ad40a6d6c38e6f1441edc6dafa6.png

                              这样就完美了

5

写在结尾的话

关于VIAS 实现 Modbus串口通信我们今天就介绍到这里。这个方法不一定是最快捷的方法,但是一定是最灵活的。大家可以自己试试哦。

24e24dcb93f64592bafb797c3a159492.pngEND扫码关注更多精彩ebf2b6d432052877cd8ef2a20e54ec9d.png8f88703efd895316d9119e9853d35709.png27af6300a156cb76c2c473588b53c2c4.png