首页 > 解决方案 > Modbus协议在实际应用中的一些格式变化

Modbus协议在实际应用中的一些格式变化

点击次数:735 更新时间:2023-04-21
 工控行业的朋友们都知道,Modbus协议是一种包含了串口、网口的通信协议,莫迪康公司自1979年发表到现在,已经成为工业领域的一种基本通信标准。简单到一个温度传感器的通讯,复杂到平台软件的通讯都在使用它。

 

Modbus作为一种迄今依然在广泛、灵活使用的通讯协议,行业内的专家对它的解读已经非常细致、专业了。协议格式、数据模型、功能码的含义等不再赘述。本文主要是总结了一下,基于我司Tnbuild数据服务系统,无论是作为南向采集设备的协议,或是作为北向转发到平台的协议,我司在实际项目中,做的一些Modbus协议的格式变化或者协议延伸。

行业很大,应用变化更是层出不穷,以下的总结,也只是管中窥豹。在此也欢迎与行业内朋友们进一步做交流与共享!

序号

自定义名

数据格式及场景描述

1

Modbus

RTU

3号命令:读保持寄存器

读取010300000001840A

接收0103020000B844

常规仪表、传感器;

网关做主站,问答方式读取数据

2

Modbus

TCP

3号命令:读保持寄存器

读取: 000000000006010300000001

接收0000000000050103020000

现场控制设备、plc;

网关做主站,问答方式读取数据

3

Modbus 

ASCII

3号命令:读保持寄存器

读取:30313033303030303030303138343041

接收3031303330323030303042383434

同等点位字符传输量大、传输效率较低,实际使用少;

网关做主站,问答方式读取数据

4

Modbus

RTU 代理

和标准Modbus RTU报文格式一样

网关在还原原有RTU通讯基础上,可以根据需要读取对应的数据

网关做转接,灵活解析需要的数据

5

Modbus 

RTU 

和标准Modbus RTU报文格式一样

读取现场设备主动推送的RTU数据,网关做从站

6

Modbus 

TCP 

和标准Modbus TCP报文格式一样

读取现场设备主动推送的TCP数据,网关做从站

7

Modbus 

SOE

标准的Modbus报文格式,在程序中增加了寄存器值的判断,以及寄存器值写入的条件

Modbus寄存器1作为SOE使能,读取到该寄存器值为1,将寄存器2的值(报警id)写到寄存器3中,

以便综保检测到正确的ID号,在寄存器1中的SOE使能清零。

8

Modbus

Control

标准的Modbus报文格式,在程序中增加了寄存器值的判断,以及寄存器值写入的条件,结合转发MQTT平台的下发,程序收到平台控制的阀门开关指令,将现场阀门使能开关打开,等待现场工人使用完关闭阀门后,再将使能开关关闭。

9

Modbus

104Control

在标准Modbus的05和06指令上做改动,给一些特定的地址下发不同的值,实现对保护装置的遥控合闸/分闸选择及执行。例:

05 05 05 00 FF 00 8D 72 遥控合闸

05 05 05 00 FF 00 8D 72遥控合闸选择返校

05 05 05 80 FF 00 8C 9A 遥控合闸执行

05 05 05 80 FF 00 8C 9A遥控合闸执行返校

10

Modbus

RTU/TCP

字符串采集/转发

字符串的采集和转发相当于把字符转换成ASCII码对应的十六进制,作为数据加在标准的Modbus报文里传输,采集支持将设备传过来的ASCII码解析为原字符,转发可以将取到的字符串再以Modbus协议传给Modbus主站

例如,带字符数值的Modbus转发报文:

01 03 07 31 32 33 40 61 62 63 79 56

其中标注蓝色的16进制转换为字符串为123@abc

一般会有一些工厂把生产数据存在数据库,就像生产数据里的时间,值班人等,都属于需要传输的字符串,网关可以从数据库取到这些数据,再以别的协议传给平台或主站;同样如果有工厂的生产数据存在一个服务器上,服务器对外通讯是Modbus协议,那就可以用网关将服务器中的数据采集到

11

Modbus

TCP转发断线缓存

 

Modbus基本的传输指令不变,增加和Modbus主站的连接判断;判断连接断开之后执行数据存储(用实时数据库的方式存储为一个DB文件);连接恢复之后读取DB文件,将数据按照实际需求的格式上送一些现场环境的网络信号不稳定,或者使用有线网络传输,为避免数据在断网或者网络波动的时候丢失,需要加上断线缓存的功能;网络断开时存储数据,网络恢复后将缓存的数据上送。