水世界-水处理技术社区(论坛)

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信登录

扫一扫,用微信登录

搜索
查看: 2289|回复: 2
打印 上一主题 下一主题

基于MODBUS 协议通信的设计与实现

[复制链接]

3846

积分

106

金钱

431

帖子

黄金水师

跳转到指定楼层
楼主
发表于 2007-7-3 10:08:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式



马上注册并关注水世界微信号,获得更多资料

您需要 登录 才可以下载或查看,没有帐号?注册   扫一扫,用微信登录

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 协议使用的 广泛性,本文对过程监控、数据采集等系统的开发不 失为普遍意义。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
清啦

1万

积分

-1032

金钱

4798

帖子

铂金水师

沙发
发表于 2007-7-4 17:06:07 | 只看该作者
仔细看看 了解掌握是有必要的啊
发贴总希望有人回复,哪怕你在回复里啥也不说;
只是,一个字一个笑脸也会让我深深感到被关注的幸福;
只要帖不太差  请顶一下 谢谢你的回应!

42

积分

15

金钱

24

帖子

初级水师

板凳
发表于 2007-12-21 12:57:08 | 只看该作者
参考,简单了解,顶一下。
您需要登录后才可以回帖 登录 | 注册   扫一扫,用微信登录

本版积分规则

联系管理员|手机版|小黑屋|水世界-水处理技术社区(论坛) ( 京ICP备12048982号-4

GMT+8, 2025-6-13 21:19 , Processed in 0.139008 second(s), 36 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表