|
马上注册并关注水世界微信号,获得更多资料
您需要 登录 才可以下载或查看,没有帐号?注册
扫一扫,用微信登录
x
基于MODBUS 协议通信的设计与实现
一、前 言
MODBUS 协议是MODICON 公司推出的一个
开放式现场总线的通信协议,由于得到众多仪表厂
家的支持,正在成为仪表及智能终端的工业标准,目
前,多数智能仪表已利用该协议向用户提供通信接
口,随着仪表和通信技术的发展,MODBUS 协议由
Standard MODBUS(标准型) 发展到MODBUS Plus
(增强型) 。
二、MODBUS 协议
MODBUS 协议采用主从工作方式:主机为智能
终端或上位机,从机为1 台或多台遵守MODBUS
协议的智能仪表或变送器。每台从机由用户设定地
址以实现访问操作,地址范围为0~255 。读取或写
入信息除设备地址外,还要了解数据寄存器的起始
地址。标准的MODBUS 协议使用两种模式进行通
信:ASCII 和RTU ,这两种模式在报文结构、功能命
令上是相同的,仅帧信息的表示方法不同。
11RTU (Remote Terminal Unit) 模式
以RTU 模式建立通信时,信息是以8 位二进
制方式传送的,如:63 (十六进制) 在RTU 模式下是
用8 位二进制01100011 表示的,这种方式的最大好
处是在同等传输速率下,可以比ASCII 模式传输较
多的信息,该模式在智能仪表上被普遍采用。
21ASCII 模式
·35 ·
测量与设备
计量技术2002 No 4
以ASCII 模式建立通信时,信息帧的每一字节
是用两个字符表示的,如十六进制数63 ,在ASCII
模式下占用2 字节,用以表示字符’6’和’3’,其代码
是:0110110 0110011 。显然,ASCII 模式通信要比
RTU 模式花两倍的时间和空间,但优点是表示方
便,容易读取。
三、通信帧格式
MODBUS 帧格式由地址、功能码、数据段、校验
码组成,数据段内容根据主—从或从—主关系可包
括寄存器起始地址、寄存器数数据位等(以下均以
RTU 模式为例) 。
Modbus 通信格式:
1 2 3 4
Addr (地址) Func (功能码) Data (数据段)
LRC 或CRC
(校验码)
主机向从机发送的请求帧格式(主—从) :
1 2 3 4
地址命令寄存器起始地址寄存器数CRC 校验码
1 字节1 字节2 字节2 字节2 字节
从机得到请求后向主机发送的响应帧格式(从
—主) :
1 2 3 4
地址命令数据长度响应数据CRC 校验码
1 字节1 字节1 字节N 字节2 字节
其中“数据长度”就是“响应数据”的实际字节数。
11 地址
帧首的Addr 地址为智能仪表的轮询地址,范
围为0~247 ,这个字节表明拥有Addr 地址的从机
将接收主机发送来的信息,并且每个从机都具有唯
一的地址,响应的信息均以各自的地址码开始。
21 功能码
信息帧的功能码可用两个字符(ASCII) 或一个字
节(RTU) 表示,范围为1~255 ,功能码表示主机要求
从机执行何种操作,如03 读寄存器数据,06 修改从
机地址等,值得注意的是不同厂家的产品在功能码定
义上与标准协议有很大差别。此外,从机响应主机
时,还用功能码指示设备的工作状态,用以表示响应
是否正常,若出现错误,功能码最高位被置为1。
31 数据段
数据段是请求和响应的主要内容,主机向从机
请求读取寄存器内容时,数据段包括寄存器的起始
地址及读取的寄存器个数。寄存器是从机存放数据
的地方,一个寄存器存储2 字节数据,地址为16 位
按高位在前低位在后排列,有关寄存器地址可查阅
仪表通信手册。从机回送响应的数据段包括数据长
度、实际采集的数据,另外,从机出现异常,数据段则
以错误代码表示。
41 校验码
为避免误码保证通信的可靠性,标准的Modbus
协议有两种数据校验方法 RC(纵向冗余校验) 和
CRC(循环冗余校验) 。LRC 用于ASCII 模式的传
输校验,校验码为两个ASCII 字符,生成方法是将
帧首到帧尾的字符连续异或。CRC 用于RTU 模式
的传输校验,采用的是通信领域常用的CRC - 16 校
验法,CRC 为16 位(2 字节) ,其中低位在前,高位在
后,CRC 生成多项式是x15 + x13 + 1 (用16 进制表示
为A001) 。
四、实现方法
我们在VB6. 0 下利用通信控件MScomm 实现
了与智能仪表进行通信,操作方法是:新建一窗体,
在“工程”菜单下选择“部件”命令,选中对话框的
“Microsoft Comm Cont rol 6. 0”项,将“工具箱”中出
现的“电话图标”拖入窗体,再添加一命令按钮,双击
按钮用如下方法建立程序。
11 对串行口初始化,按协议建立包含地址、功
能码、寄存器起始地址和寄存器数的请求数组,调用
CRC - 16 函数对以上数据生成两字节CRC 校验码
并附加在尾部,建立待发送的请求帧。
21 利用MScomm 的Output 方法,将上述请求
帧送入串行口。
31 按照查询方式,检查输入缓冲区字节数以及
帧首部的两个字节,确认响应数据的正确性。为节
约通信时间,接收方可不进行CRC 校验。
41 用Input 方法读取响应数据,依据第3 个字
节,计算出采集数据的字节长度,并将后续的采集数
据读入数组进行处理和转换,即可得到实际测量值。
五、结束语
了解Modbus 协议是我们掌握智能仪表、PLC
等通信机制的重要内容,由于Modbus 协议使用的
广泛性,本文对过程监控、数据采集等系统的开发不
失为普遍意义。 |
|