1、Modbus协议概述Modbus 作为在工业设备通讯上使用最多,应用最广的国际标准协议,在应用层的协议定义上我们对其进行简单的介绍:类型 描述设备地址 对应通讯设备设定的 1-255 的任意一个数字地址号。功能码 对应读取模拟量一般采用 0304 号功能码,对于读取开关量一般采用 0102 号功能码。起始地址 数据在通讯设备中的寄存器定义,一般由厂家提供点表。数据格式 数据在寄存器中的格式,较多的为 16 位无符号,因为一个寄存器就是一个 16 位的长度。CRC 校验 经过 CRC 校验算法后,添加 CRC 计算的值在协议传输帧的最后面,主要是防止串口误码导致数据错误。举一个最简单的例子,我们
2、在 SymLink 中查看报文的时候可以看到:SymLink 发送:01 03 00 01 00 02 95 CB01 代表设备地址 103 代表读取保持寄存器的值00 01 代表采集点对应的寄存器号00 02 代表读取 2 个连续寄存器的值95 CB 为 01 03 00 01 00 02 计算所得的 CRC 值SymLink 接收:01 03 04 00 00 00 00 FA 3301 代表设备地址 103 代表读取保持寄存器的值04 代表设备返回的数据个数,字节为单位00 00 00 00 为数据返回的连续 2 个寄存器的值FA 33 为 01 03 04 00 00 00 00 计算
3、所得的 CRC 值SymLink 在判断 01、03、04 这些反馈信息都合法,并且 CRC 校验无误的情况下,就可以对 00 00 00 00 所在的数据值进行规定数据格式的解析。目前支持 Modbus 协议的设备越来越多,包括 PLC、智能仪表、通讯模块等等,如果厂家设备支持的通讯协议为标准格式的 Modbus 协议,那么在选择厂家的时候就直接选择国际标准的 Modbus。准备工作序号 名称 数量 备注1 厂家设备 任意 支持标准的 Modbus 协议2 连接电缆 实际长度 串口通讯为 0.50.75 规格的屏蔽双绞线,长度建议不要超过 100 米。以太网通讯为带隔离保护的标准网线,长度建
4、议不要超过 50 米。3 Symlink 工业智能机 1 任意型号4 设备说明书和点表 1 说明书指导设置设备地址、波特率等通讯参数。点表用来配置采集点信息。设备连接 RS485 通讯,设备的 A 端子对应连接 SymLink 的 A 端子、设备的 B 端子对应连接 SymLink 的 B 端子,需要注意的是一根线上接多个 IED 的情况,一个是设备地址要唯一、波特率和其他串口参数要一致,另外接线的时候需要从一台 IED 的 AB 端子跳接到下一台 IED 的 AB 端子,防止并联分散传输信号。 RS232 通讯,设备的发送针对应连接 SymLink 的 RX、设备的接收针对应连接SymLin
5、k 的 TX、设备的接地针对应 SymLink 的 GND。 以太网通讯,设备的网口对应连接到同一网段的 SymLink LAN 口,如果含多台以太网设备通讯,需要加交换机。设备配置参考实际的设备说明书:1) 选择协议,如果设备支持多种协议,需要在配置里面选择为 ModbusRTU或者 ModbusAscii 协议。2) 定义通讯接口参数。串口定义传输波特率,数据位,停止位,奇偶检验。以太网通讯定义 IP 地址, TCP 端口号。3) 定义设备地址。4) 用厂家提供的设备点表和设备面板显示的数据进行简单的对应。5) 用厂家提供的测试软件,或者第三方测试软件(modscan、ModbusPoll
6、 等)对设备进行通讯测试。通讯配置选中工程下的“采集服务”,点右键后在菜单中选择“新建通道”。在弹出的界面在定义通道名称,点击规约旁边的浏览按钮选择 Modbus RTU 驱动。在左侧的分类中选择国标下的 Modbus RTU,点确定按钮完成。定义端口信息,Modbus RTU 多采用串口通讯,在下方的端口参数中定义串口号,波特率,数据位等通讯参数,定义完成后点击确定按钮完成。通道的配置只是完成了协议选择及通讯的接口参数。还需要在通道下创建连接的设备及设备参数后才算完成与具体设备的通讯配置。选中新建的通道,点击右键,在右键菜单在选择“新建设备”在设备配置面板中定义设备名称,设备地址(Modbu
7、s 协议主要依靠设备地址来识别一条总线上的多个设备)。点击设备配置界面左下方的+号按钮,可以定义 Modbus RTU 协议的高级参数。点击确定按钮就完成了通道及设备的通讯配置。需要说明一下规约参数中的包最大长度,这里默认是 32,代表组织协议的时候一次最大可读取连续 32 个寄存器数据,如果点数较多并且通讯条件较好的情况下,我们最大可以调整到 128。1.1.6. 数据连接完成 Modbus 设备和通道的通讯配置后,并未采集到设备中具体的数据。如要对设备的数据进行逐个的采集,需要在采集服务中的通道下的设备中创建一个一个的 IO 点,并配置正确的 IO 连接参数。在左侧导航中选择采集服务中的通
8、道下的设备后,右侧视图为 IO 点的列表视图。默认没有任何 IO 采集点。在空白区域点击右键,在弹出的右键菜单在选择创建 IO 点。弹出新建采集点对话框:点击连接线右侧的浏览按钮,即可进入到具体的协议配置参数。连接项说明功能码 参考厂家协议说明,一般读取模拟量用 0304 号命令,读取开关量用 0102 号命令。区分是 04 和 02 是只读区,03 和 01 类型的寄存器支持用 06 和 05 的命令码回写操作。数据地址 参考厂家点表,我们 SymLink 的数据地址从 0 开始,要注意厂家的点表是否是从 1 开始的,如果是可能需要减1,另外是否是 16 进制的描述,如果是 16 进制则需转换成 10 进制的进行填写,如 010A 的十进制是 266。数据类型 数据格式选择,一个寄存器代表 16 位长度的数据,两个寄存器就能代表 32 位长度格式的数据。需要注意的是 32 位长度的数据格式,有可能需要选择对应的高低位,默认都是从高到低。位偏移 如果用 0304 号命令码读取一个寄存器的 16 位数据,并且需要取这 16 位数据中的每一个位,则选择数据类型位,然后偏移由低到高为 0-15。读写属性 根据寄存器类型不同而自动设定。