浅谈Modbus协议在智能仪表中的实现路径

2019-10-17 11:50:16王新王凤翔王燕郭学亮
中国设备工程 2019年19期
关键词:智能仪表波特率字节

王新,王凤翔,王燕,郭学亮

(中煤科工集团唐山研究院有限公司,河北 唐山 063012)

工业自动化程度越来越高,Modbus 串行通信协议以其先进性、开放性、成熟性的特点得到了广泛应用,当前PLC(可编程逻辑控制器)及组态软件都支持此协议。智能仪表作为自动化控制的源头,支持此协议,将大大降低自动化工程设计人员的开发难度。

1 Modbus 协议简介

Modbus 协议是定义在OSI 网络模型第7 层(应用层)的报文发送协议,它可以在不同类型的总线或网络上连接的设备之间进行“客户端/服务器”式的通信,它是主从式的串行通信协议。Modbus 协议利用RS485 或RS232 总线进行数据传输,同一条总线上只允许1 台主机,从机数量从1 台最多至247 台,并且从机的地址是唯一的。Modbus 协议由主机发送命令及从机返回数据组成,有两种传输模式:Modbus-RTU模式及Modbus-ASCII 模式。

1.1 Modbus-RTU 模式

数据以数值型式传输,其帧格式如下:

主机发送命令(表1)。

表1

从机返回数据(表2)。

1.2 Modbus-ASCII 模式

数据以16 进制数值再转换为ASCII 码型式传输,传输为字符‘0’~‘9’及字符‘A’~‘F’(即实际数据为16进制0x30~0x39 及0x41~0x46),其帧格式如下:

表2

表3

表4

主机发送命令(表3)。

从机返回数据(表4)。

Modbus 数据帧通过RS485 或RS232 总线进行串行通信,数据以字节型式传输,传输时低位在前,高位在后,串行通信采用固定波特率进行数据传输,常用波特率为2400bps、4800bps、9600bps、19200bps 等,本例中波特率采用最常用的9600bps(即每秒传输9600 位,每位传输时间约为104.167μs),8 位数据位,无校验位,1 位停止位,则每个字节数据为10 位,每秒传输960 个字节。

2 单片机选用及编程注意事项

本例所用的智能仪表主芯片为TI 公司生产的MSP430F5438 超低功耗Flash 型单片机,拥有4 路USCI_A 型模块可进行UART 串行通信,本例为了同时实现RTU 通信及ASCII 通信,使用USCI_A1 模块进行RTU 模式编程,USCI_A3 模块进行ASCII 模式编程,系统主时钟采用12MHz晶振,其优点是通信波特率在(600~19200)bps 范围内,时钟分频为整数,不需要做步进调整,不会产生误码。数据接收采用中断方式,接收完毕后,单片机对接收数据进行处理,判断是否为本机命令(由从机地址码区分),进行校验验证数据准确性,数据正确则根据命令返回相应数据,否则丢弃准备下一次接收。

在编程中应当注意以下几点:

(1)Modbus 的寄存器地址为1~9999,但实际发送数据为起始地址减1,例如从起始地址1 开始返回数据,则发送数据为0x00、0x00(ASCII 为0x30、0x30、0x30、0x30)。

(2)Modbus 协议规定16 位数据采用高字节优先传输,以本文的仪表通信为例,主机向地址为1的从机发送命令读取起始地址为1 开始连续2 个寄存器数据,则发送命令为:

RTU 模 式:0x01 0x03 0x00 0x00 0x00 0x02 0xC4 0x0B(8 字节)

返回数据:0x01 0x03 0x04 0x81 0x0A 0x43 0x34 0xC2 0xEA(9 字节)

返回的四字节数据为float 型,由于Modbus 协议高字节先传输,所以数据实际为0x4334810A,即为浮点数180.504059。

ASCII 模 式:0x3A 0x30 0x31 0x30 0x33 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x32 0x46 0x41 0x0D 0x0A(17 字节)

返回数据:0x3A 0x30 0x31 0x30 0x33 0x30 0x38 0x38 0x31 0x30 0x41 0x34 0x33 0x33 0x34 0x46 0x32 0x0D 0x0A(19 字节)

返回的8 个字节数据代表一个float 型数据,数据需先进行16 进制处理为0x81 0x0A 0x43 0x34,再进行高低字节调换为0x4334810A,即浮点数180.504059。

(3)以上为正常的4 字节数据处理方式,还有一种数据传输方式称为互换模式,即将存储器中存储的4 字节数据完全按照从最高字节到最低字节输出,例如,内存中的数据为0x0A(最低位)0x81 0x34 0x43(最高位),则输出为0x43 0x34 0x81 0x0A。某些智能仪表采用此种方式传输数据。

(4)Modbus 协议规定帧与帧之间的时间间隔应>3.5个位周期,数据传输位间隔应<1.5 个位周期,以9600bps通信速率为例,则帧间隔应>364.585μs,位间隔<165.25μs。编程时应充分考虑数据处理所占时间,必要时增加延时。

3 与上位机通信

本例中以PC 机为主机,采用Modscan32 这款成熟的Modbus 通信测试软件进行数据收发,智能仪表作为从机接收PC 机命令,根据命令返回相应数据,PC 机和智能仪表之间通过RS485 总线连接。部分调试界面,见图1、图2。

图2 Modbus-ASCII 通信界面

通过以上调试界面,实现了PC 机和智能仪表之间的modbus 通信,说明单片机嵌入式程序编写是正确的。

4 结语

Modbus 协议是工业控制领域中最通用、最开放的通信协议之一,得到了众多厂商的支持。通过Modbus 协议,不同厂商的设备可以方便地连成工业网络,进行相互通信。Modbus 的两种传输模式相比,ASCII 方式更直观,但传输相同数据需要的字节数更多,效率低;RTU 模式传输字节数少,效率更高,更适用于测控系统中数据的实时传输。

猜你喜欢
智能仪表波特率字节
No.8 字节跳动将推出独立出口电商APP
智能仪表的抗干扰和故障诊断研究
CAN 总线波特率自适应程序设计
智能制造(2020年5期)2020-07-03 06:24:00
No.10 “字节跳动手机”要来了?
智能仪表技术及工业自动化应用发展分析
数码世界(2018年6期)2018-12-25 10:43:02
基于FPGA的异步串行通信波特率容错设计
电子测试(2018年7期)2018-05-16 06:27:18
智能仪表在动态称重系统中的应用
智能仪表在工业自动化控制中的运用研究
电子制作(2017年14期)2017-12-18 07:08:00
简谈MC7字节码
C*Core芯片SCI串口波特率容限优化