Modbus协议在实际应用中的一些格式变化
时间:2023-04-21 阅读:915
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文件,将数据按照实际需求的格式上送一些现场环境的网络信号不稳定,或者使用有线网络传输,为避免数据在断网或者网络波动的时候丢失,需要加上断线缓存的功能;网络断开时存储数据,网络恢复后将缓存的数据上送。 |