基于MODBUS协议的质量流量计与PLC的通信实现
摘 要:阐述了MODBUS协议RTU模式的通讯机制,并详细介绍了CRC16校验码的生成步骤。利用三菱Q系列PLC丰富的编程功能和串行通信智能模块,通过RS485总线与MT-51流量显示仪进行通讯,实现对多路质量流量计可靠控制。
关键字:
1 Modbus协议简介
Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络和其它设备之间可以通信。它已经成为一通用工业标准,有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
在Modbus网络上,当控制器设为以RTU(远程终端单元)模式通信,在消息中的每8位的字节包含两个4位的十六进制字符。这种方式的主要优点是:在同样的波特率下,可比ASCII方式传送更多的数据。
在RTU模式下每个字节的格式:
·8位二进制,以十六进制数0...9,A...F来表示。
每个字节的位
·1个起始位
·8个数据位,最低的有效位先发送
·1个奇偶校验位,无校验则无
·1个停止位(有校验时),2个Bit(无校验时)
·CRC(循环冗长校验)
使用RTU模式,消息发送至少要以3.5个字符时间的停顿间隔开始。传输的第一个域是设备地址。网络设备不断侦测网络总线,包括停顿间隔时间内。当第一个域(地址域)接收到,每个设备都进行解码以判断是否发往自己的。在最后一个传输字符之后,一个至少3.5个字符时间的停顿标定了消息的结束。一个新的消息可在此停顿后开始。
一典型的消息帧如下所示:
2 质量流量计
本项目应用中,采用的是汇博隆公司MT-51流量显示仪,通过RS485接口与PLC通讯。实现对5台AE公司的质量流量计的监控。通讯设定如表1所示。
RS-485是面向网络的一种接口标准,一对传输线上可以接多至32个接收器。在此网络上,PLC作为主控制器,发送查询命令,而MT-51流量显示仪作为从控制器,当从控制器接收到主控制器的查询消息,它将建立一从控制器回应格式并返回给发送的主控制器,以回应PLC的查询。例如:
PLC读取设备号为1的质量流量计瞬时流量值,PLC发送查询命令01030010000185CF(16进制数据流)。01-设备号;03-功能代码(读命令);0010-寄存器起始地址;0001-字长;85CF-CRC16校验码。
MT-51流量显示仪将回应查询,返回0103020064B9AF(16进制数据流)。01-设备号;03-功能代码(读命令);02-字节数;0064-是用0000~0FFF(十六进制)表示的瞬时值,0000表示关闭,0FFF表示满度流量;B9AF-CRC16校验码。
3 CRC16校验[1]
使用Modbus协议RTU模式,消息包括了一基于CRC16算法的错误检测域。CRC16域检测了整个消息的内容。CRC16域是两个字节,包含一16位的二进制值。它由发送控制器计算后加入到消息中。接收控制器重新计算收到消息的CRC16校验码,并与接收到的CRC16域中的值比较,如果两值不同,则有误。
计算CRC16校验码的步骤为:
1)预置16位的寄存器为16进制的FFFF(即全为1),称此寄存器为CRC16寄存器;
2)将第一个8位数据与16位CRC16寄存器的低位相异或,把结果存放在CRC16寄存器;
3)并把寄存器的内容右移一位(朝低位),用0填补最高位,检查移出的最低位的值;
4)如果值为1,将CRC16寄存器的内容与16进制常量A0001相异或,并把结果存放在CRC16寄存器;
5)重复步骤3和4,直至右移8次,整个8位数据全部处理完;
6)重复步骤2到步骤5,进行下一个8位数据的处理;
7)当所有数据处理完成后,最终得到的CRC16寄存器的值就是CRC16校验码。
4 PLC参数设置与软件实现
在本项目应用中,利用三菱Q系列高性能PLC[2][3]的QJ71C24-R4串行通信智能模块通过RS485总线与MT-51流量显示仪进行通讯,实现对AE公司质量流量计数据的采集和控制量输出。
4.1 开关设置[4][5]
如图1开关设置所示:开关1和开关2是QJ71C24-R4串行通信智能模块的通道1的参数设定;开关3和开关4是通道2的参数设置。两个通道参数设置相同,任意一个都可以进行通讯,可在监控PC上通过更改端口号来切换。
图1 开关设置
开关1/开关3的高8位(05)表示通讯波特率为9600;低8位(C2)表示传输设置-8个数据位,无奇偶校验,1个停止位;开关2/开关4(0006)表示采用无顺序协议通讯。
图2 程序流程图
4.2 软件实现
在GXDeveloper[6]编程中,编写SEND子程序来完成16进制查询命令的生成和数据的发送;RECV子程序完成接收到的数据的处理;CRC子程序完成发送数据和接收数据的校验码生成。整个顺控程序流程图如图2所示。
SEND子程序调用指令格式为-[ECALLP“SEND”P700W30W35W3A]。ECALLP是子程序调用指令;“SEND”是子程序名称;P700是公用指针号;链接寄存器W30、W35和W3A是子程序的传递参数,分别表示设备号、功能代码和数据。例如:链接寄存器W30、W35和W3A的值分别为1、5和64(16进制),则表示设定设备号为1的质量流量计的流量输出值为100sccm,QJ71C24-R4将发送16进制查询命令010600110064D824。
由于MT-51流量显示仪返回的数据长度根据接收到的查询指令不同而不同,所以在SEND子程序里发送查询指令时,要根据查询命令的内容更改QJ71C24-R4接受数据的长度。为防止QJ71C24-R4的OS缓存区溢出错误,在每次调用SEND子程序之前,使用ZP.CSET指令来清除OS缓存区。
查询命令发送完成后,PLC将延时等待QJ71C24-R4的回应信号。如果等待延时时间到,回应信号一直为OFF,则表明无回应,对应该设备号的通讯错误计数器将累加,PLC将返回执行下一条查询命令;如果在等待时间内,回应信号变为ON,则表示接收到MT-51流量显示仪的回应。PLC将通过G.INPUT指令将接收到的数据从QJ71C24-R4的OS缓存区读取到PLC内存,并调用RECV(调用指令格式为-[ECALLP“RECV”P800])子程序进行接收数据的校验。如果校验正确,将更新PLC相应的数据存储区,并复位对应该设备号的通讯错误计数器;如果校验错误,对应该设备号的出错计数器将累加,计数器累积到阀值后,系统将报警输出该设备号的质量流量计通讯错误。
5 应用效果
在本项目应用中,PLC可可靠的实现对5台质量流量计的数据采集和输出控制,很好的满足了系统要求。但由于受MT-51流量显示仪通讯波特率的限制,存在一定的时间延迟,延迟时间在1s以内。
参考文献
[1]ModiconModbusProtocolReferenceGuide.MODICON,Inc.,IndustrialAutomationSystems,June1996
[2]QCPU(功能解说)用户手册.三菱电机,2007.10
[3]QCPU(Q模式)/QnACPU编程手册(公共指令篇).三菱电机,2007.11
[4]Q系列串行口通信模块用户参考册(基础篇).三菱电机,2001.11
[5]Q系列串行口通信模块用户参考手册(应用篇).三菱电机,2001.6
[6]GXDeveloperVersion8操作手册.三菱电机,2005.8
- 上一篇:质量流量计在气体计量上的应用 2015/12/2
- 下一篇:ABB质量流量计FCM2000的数据采集 2015/12/1