Modbus协议解析和通讯参数配置说明 点击:16183 | 回复:12



工业物联网

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:8帖 | 9回
  • 年度积分:1
  • 历史总积分:94
  • 注册:2007年12月04日
发表于:2012-12-21 15:20:50
楼主

Modbus

协议概述

Modbus作为在工业设备通讯上使用最多,应用最广的国际标准协议,在应用层的协议定义上我们对其进行简单的介绍:

类型

描述

设备地址

对应通讯设备设定的1-255的任意一个数字地址号。

功能码

对应读取模拟量一般采用03\04号功能码,对于读取开关量一般采用01\02号功能码。

起始地址

数据在通讯设备中的寄存器定义,一般由厂家提供点表。

数据格式

数据在寄存器中的格式,较多的为16位无符号,因为一个寄存器就是一个16位的长度。

CRC校验

经过CRC校验算法后,添加CRC计算的值在协议传输帧的最后面,主要是防止串口误码导致数据错误。

举一个最简单的例子,我们在SymLink中查看报文的时候可以看到:

SymLink发送:01 03 00 01 00 02 95 CB

01代表设备地址1

03代表读取保持寄存器的值

00 01代表采集点对应的寄存器号

00 02代表读取2个连续寄存器的值

95 CB01 03 00 01 00 02计算所得的CRC

SymLink接收:01 03 04 00 00 00 00 FA 33

01代表设备地址1

03代表读取保持寄存器的值

04代表设备返回的数据个数,字节为单位

00 00 00 00为数据返回的连续2个寄存器的值

FA 3301 03 04 00 00 00 00计算所得的CRC值

SymLink在判断010304这些反馈信息都合法,并且CRC校验无误的情况下,就可以对00 00 00 00 所在的数据值进行规定数据格式的解析。

目前支持Modbus协议的设备越来越多,包括PLC、智能仪表、通讯模块等等,如果厂家设备支持的通讯协议为标准格式的Modbus协议,那么在选择厂家的时候就直接选择国际标准的Modbus

准备工作

序号

名称

数量

备注

1

厂家设备

任意

支持标准的Modbus协议

2

连接电缆

实际长度

串口通讯为0.5\0.75规格的屏蔽双绞线,长度建议不要超过100米。以太网通讯为带隔离保护的标准网线,长度建议不要超过50米。

3

Symlink工业智能机

1

任意型号

4

设备说明书和点表

1

说明书指导设置设备地址、波特率等通讯参数。点表用来配置采集点信息。

设备连接

?  RS485通讯,设备的A端子对应连接SymLinkA端子、设备的B端子对应连接SymLinkB端子,需要注意的是一根线上接多个IED的情况,一个是设备地址要唯一、波特率和其他串口参数要一致,另外接线的时候需要从一台IEDAB端子跳接到下一台IEDAB端子,防止并联分散传输信号。

?  RS232通讯,设备的发送针对应连接SymLinkRX、设备的接收针对应连接SymLinkTX、设备的接地针对应SymLinkGND

?  以太网通讯,设备的网口对应连接到同一网段的SymLink LAN口,如果含多台以太网设备通讯,需要加交换机。

设备配置

参考实际的设备说明书:

1)  选择协议,如果设备支持多种协议,需要在配置里面选择为ModbusRTU或者ModbusAscii协议。

2)  定义通讯接口参数。串口定义传输波特率,数据位,停止位,奇偶检验。以太网通讯定义IP地址,TCP端口号。

3)  定义设备地址。

4)  用厂家提供的设备点表和设备面板显示的数据进行简单的对应。

5)  用厂家提供的测试软件,或者第三方测试软件(modscanModbusPoll等)对设备进行通讯测试。

通讯配置

选中工程下的“采集服务”,点右键后在菜单中选择“新建通道”。

在弹出的界面在定义通道名称,点击规约旁边的浏览按钮选择Modbus RTU驱动。

在左侧的分类中选择国标下的Modbus RTU,点确定按钮完成。

定义端口信息,Modbus RTU多采用串口通讯,在下方的端口参数中定义串口号,波特率,数据位等通讯参数,定义完成后点击确定按钮完成。

通道的配置只是完成了协议选择及通讯的接口参数。还需要在通道下创建连接的设备及设备参数后才算完成与具体设备的通讯配置。

选中新建的通道,点击右键,在右键菜单在选择“新建设备”

在设备配置面板中定义设备名称,设备地址(Modbus协议主要依靠设备地址来识别一条总线上的多个设备)。

点击设备配置界面左下方的+号按钮,可以定义Modbus RTU协议的高级参数。

点击确定按钮就完成了通道及设备的通讯配置。

需要说明一下规约参数中的包最大长度,这里默认是32,代表组织协议的时候一次最大可读取连续32个寄存器数据,如果点数较多并且通讯条件较好的情况下,我们最大可以调整到128

1.1.6. 数据连接

完成Modbus设备和通道的通讯配置后,并未采集到设备中具体的数据。如要对设备的数据进行逐个的采集,需要在采集服务中的通道下的设备中创建一个一个的IO点,并配置正确的IO连接参数。

在左侧导航中选择采集服务中的通道下的设备后,右侧视图为IO点的列表视图。默认没有任何IO采集点。

在空白区域点击右键,在弹出的右键菜单在选择创建IO点。

弹出新建采集点对话框:

点击连接线右侧的浏览按钮,即可进入到具体的协议配置参数。

连接项说明

功能码

参考厂家协议说明,一般读取模拟量用03\04号命令,读取开关量用01\02号命令。区分是0402是只读区,0301类型的寄存器支持用0605的命令码回写操作。

数据地址

参考厂家点表,我们SymLink的数据地址从0开始,要注意厂家的点表是否是从1开始的,如果是可能需要减1,另外是否是16进制的描述,如果是16进制则需转换成10进制的进行填写,如010A的十进制是266

数据类型

数据格式选择,一个寄存器代表16位长度的数据,两个寄存器就能代表32位长度格式的数据。需要注意的是32位长度的数据格式,有可能需要选择对应的高低位,默认都是从高到低。

位偏移

如果用03\04号命令码读取一个寄存器的16位数据,并且需要取这16位数据中的每一个位,则选择数据类型位,然后偏移由低到高为0-15

读写属性

根据寄存器类型不同而自动设定。




工业物联网

  • 精华:0帖
  • 求助:0帖
  • 帖子:8帖 | 9回
  • 年度积分:1
  • 历史总积分:94
  • 注册:2007年12月04日
发表于:2012-12-21 17:02:47
1楼
SymLink智能通讯QQ交流群:110796992

kjaliqi

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 17回
  • 年度积分:0
  • 历史总积分:0
  • 注册:2011年1月21日
发表于:2016-03-10 08:54:02
2楼

xieixe liu zhu a a 

Zping123

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 270回
  • 年度积分:0
  • 历史总积分:121
  • 注册:2017年7月28日
发表于:2017-08-04 15:45:27
3楼

感谢分享感谢分享感谢分享感谢分享

无敌歪脑袋

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 20回
  • 年度积分:0
  • 历史总积分:22
  • 注册:2013年9月23日
发表于:2018-02-08 10:56:58
4楼

很好的资料,谢谢楼主分享!

Cheish

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 119回
  • 年度积分:4
  • 历史总积分:230
  • 注册:2009年3月08日
发表于:2018-02-22 10:59:20
5楼

很好的方案应用

急急急1

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:65
  • 注册:2019年5月17日
发表于:2019-05-17 22:13:37
6楼

好东西,谢谢楼主分享!

qiu4466

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 26回
  • 年度积分:0
  • 历史总积分:51
  • 注册:2016年10月13日
发表于:2020-07-20 08:18:55
7楼

工具不错,也来学习一下

奋进2013

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 47回
  • 年度积分:0
  • 历史总积分:51
  • 注册:2013年11月18日
发表于:2020-11-14 19:47:18
8楼

好东西谢谢分享


热门招聘
相关主题

官方公众号

智造工程师