目录
前言
一、ModBus TCP/RTU互转(从)及应用||
1.1 举栗子
二、ModBus TCP/RTU互转(主)
2.1 举栗子
三、ModBus 主动轮询
3.1 Modbus主动轮询原理
3.2 Modbus格式上传与下发
3.2.1.设置Modbus主动轮询指令
3.2.2 设置网络通道N1的参数
3.2.3 设置串口通道U1的参数
3.2.4 设置网络通道N2、N3的参数
3.2.5 打开两个Modbus Slave软件
3.2.6 打开一个网络调试助手
3.2.7.打开一个Modbus Poll
3.3 JSON格式上传与下发
3.3.1 数据上传
3.3.2 JSON格式的数据下发协议
前言
本文主要通过一款智能网关的串口服务器来进行工业modbus数据收发的应用
一、ModBus TCP/RTU互转(从)及应用||
1.用户的串口设备是Modbus RTU从站,网络端的设备或组态软件是Modbus TCP主站, 则可以使用ModBus TCP/RTU互转(从)模式。 设备内部具有智能的消息排队机制,因此在该模式下,支持多个Modbus TCP主站同时 轮询Modbus RTU 从站设备。
以设备的第一路串口PORT1(U1)为例,来说明ModBus TCP/RTU互转(从)模式的配 置步骤。设备支持自定义数据通道,本测试选择的数据通道为U1↔N1。
1.1 举栗子
打开一个modbus Slave 软件,模拟用户的的Modbus RTU从站设备;打开4个或更多的 Modbus Poll 软件(配置参数完全一样),模拟用户Modbus TCP主站。实现多个主站同时轮 询一个从站的目的。
配置完成之后,通信成功后的截图如所示。
二、ModBus TCP/RTU互转(主)
若用户的串口设备是Modbus RTU主站,网络端的设备或组态软件是Modbus TCP从站 站,则可以使用ModBus TCP/RTU互转(主)模式。
以设备的第一路串口PORT1(U1)为例,来说明ModBus TCP/RTU互转(主)模式的配 置步骤。设备支持自定义数据通道,本测试选择的数据通道为U1↔N1。
2.1 举栗子
打开一个modbus Poll 软件,模拟用户的的Modbus RTU主站设备;打开一个Modbus Slave 软件,模拟用户Modbus TCP从站。实现Modbus RTU主站查询Modbus TCP从站数据 的目的。
配置完成之后,通信成功后的截图如所示。
三、ModBus 主动轮询
3.1 Modbus主动轮询原理
启用Modbus主动轮询功能功能后,用户服务器只需要接收数据,不需要再下发查询指 令,可极大的缓解服务器的压力。 阿里云ALINK 启用该功能后,设备会按照用户事先设置的ModBus指令轮询串口设备,设备会将不同 指令返回的数据保存到缓存里。定时主动将缓存中的所有数据一次性上传到设置好的网络通道上。
轮询接口:轮询接口可以选择设备的8个串口通道PORT1~PORT2(U1~U8)、24 个网 络通道(N1~N24),每个轮询接口之间相互独立。可以轮询Modbus RTU 协议,也可以轮 询Modbus TCP 协议。
数据类型:支持BYTE、整型(16bit)、整形(32bit高在前)、整形(32bit高在后)、 浮点型(高在前)、浮点型(高在后)。用户根据实际情况选择合适的数据类型。
JSON名:JSON名支持自定义,最大支持32个字符。 kx+b:设备可对轮询的数据进行简单的线性计算。比如k设置为0.01,b设置为0,则 将数据缩小100倍后,上传到服务器。
紧急数据:对于非常重要且实时性要求比较高的寄存器数据,用户可将该数据设置为紧 急数据,并将变化上传条件设置为紧急数据变化上传,则该数据一旦变化,就会立即上传, 轮询间隔时间对此无效。设置0,则该数据为非紧急数据,设置1,则该数据为紧急数据。
轮询间隔:每个数据通道所有设置的指令,全部轮询完之后,等待该轮询间隔时间后, 才会进行下一轮的指令轮询。轮询间隔时间设置的越小,数据的实时性也就越高。 超时时间:当轮询指令发出后,从站设备没有应答,网关设备需要等待该超时时间后, 才会轮询下一条指令。
超时处理:当轮询指令发出后,没有收到从站设备的应答,此时上报的数据可以设置为 上一次轮询的数据(超时无变化)、设置为FF(超时清FF)、设置为00(超时清00)。
指令延时:同一个数据通道中,每条轮询指令之间的时间间隔。不同的数据通道之间是 独立的,可以并发轮询。 映射地址:将所有数据通道的轮询的从站地址,设置为该映射地址,默认128。当上传 格式选择Modbus RTU或Modbus TCP格式上传时,则会按映射地址上传。服务器下发设置 指令,也是按照映射地址下发。
缓存地址:缓存地址可以理解为用户串口设备的Modbus寄存器地址的映射地址。当上 传格式选择Modbus RTU或Modbus TCP格式上传时,该缓存地址即为上传的寄存器地址。 用户解析上传的数据时,可根据该缓存地址,来确定该数据来自那一条指令。
定时上传:数据上传服务器的时间间隔,单位毫秒,设置为0,则不上传。如设置5000ms, 则设备会每隔5秒将数据上传到指定的服务器。
变化上传:若某个轮询数据对用户比较重要,可将该数据设置为紧急数据,并启用变化 上传,这样网关设备会将本次轮询的数据与上一次的数据做比较,若有变化,则立即上传服 务器,不需等待定时上传设置的时间间隔。
上传格式:数据上传格式支持Modbus RTU、Modbus TCP、JSON带设备ID、JSON自定 义、阿里云ALINK等。
JSON 自定义格式说明: "id":%id:设备的唯一标识符,可在配置软件中的设备信息中查看,适用于基于设备识 别的应用。 "imei":%imei:设备内的4G 模块的唯一识别码。 "iccid":%iccid :SIM 卡的唯一识别码,适用于基于SIM卡识别的应用。 "time":%t:时间戳。 %d:轮询的数据。
如设置为:{"id":%id,"imei":%imei,"iccid":%iccid,"time":%t,%d} 则上报的数据为: {"id":e461211757372e32,"imei":,"iccid":,"time":2022-03-0317:13:15,"k0":0,"k1":0}
数据上传到:可将数据上传到多个网络通道或串口通道,通过配置软件勾选即可。
3.2 Modbus格式上传与下发
用modbus Slave 模拟从站设备,网络调试助手和Modbus Poll模拟主站或服务器。 本次实验实现效果:网关设备主动轮询modbus从站数据(U1通道和N1通道),并将数据 上传到主站或服务器(N2通道和N3通道)。同时主站或服务器也可向从站写数据。
轮询数据通道选择N1:向设备的网络通道N1发送Modbus TCP轮询指令; 映射地址:默认128,将U1、N1通道上的从站地址全部映射为128。 数据上传到:勾选N2、N3,将轮询应答数据上传到网络通道N2、N3。
3.2.1.设置Modbus主动轮询指令
轮询数据通道选择U1:向设备的第一路串口PORT1发送Modbus RTU轮询指令;
轮询数据通道选择N1:向设备的网络通道N1发送Modbus TCP轮询指令;
映射地址:默认128,将U1、N1通道上的从站地址全部映射为128。
数据上传到:勾选N2、N3,将轮询应答数据上传到网络通道N2、N3。
3.2.2 设置网络通道N1的参数
与网络通道N1相连接的设备作为Modbus TCP从站,因此网关设备的工作模式设置为 TCP CLIENT,目标 IP 及端口号即为从站设备的IP及本地端口号。
3.2.3 设置串口通道U1的参数
确定串口通道U1即为设备的第一路串口PORT1,通过USB转RS485或RS232线连接电脑。 U1 参数默认即可(9600,8,N,1)。
3.2.4 设置网络通道N2、N3的参数
网络通道N2、N3作为轮询数据的上传通道,本次举例采用设备默认参数: 网络通道N2:TCP SERVER模式,IP为192.168.1.253,端口号为1031 网络通道N3:TCP SERVER模式,IP为192.168.1.253,端口号为1032
3.2.5 打开两个Modbus Slave软件
打开两个Modbus Slave软件,分别模拟Modbus RTU从站(与串口通道U1通信)、Modbus TCP 从站(与网络通道N1通信)。
3.2.6 打开一个网络调试助手
模拟modbus TCP从站设备 打开一个网络调试助手,连接设备的网络通道N2,在网络调试助手中就可以接收到主 动轮询的数据。
3.2.7.打开一个Modbus Poll
打开一个Modbus Poll,模拟Modbus TCP 主站,连接设备的网络通道N3(192.168.1.253: 1032)。连接之后即可接收主动轮询的数据。
通过以上配置之后,Modbus主站设备就可以对从站进行读写操作了。
3.3 JSON格式上传与下发
3.3.1 数据上传
在3.2的基础上,将设备modbus主动轮询的上报格式设置为JSON格式上传。网络 调试助手不要16进制显示,这样U1、N1通道的Modbus从站数据就会转成JSON格式向网 络通道N2、N3上发送。
3.3.2 JSON格式的数据下发协议
若用户需要对用户的串口设备进行写操作,如写线圈、写寄存器等,用户的服务器可按 照网关设备的JSON格式的数据下发协议格式,向网关设备下发数据,网关设备收到服务器 的下发数据后,会将解析后的数据发送到串口上;串口设备的应答数据,网关设备会转换成 JSON 格式上传给服务器。
JSON 格式的数据下发协议如下: 服务器下发格式: {"mb":"010600000008","sn":1,"ack":0,"crc":0,"uart":0} 网关设备应答数据格式: {"retmb":"010600000008880c","sn":1,"status":"ok"}
说明:
mb: 010600000008,是十六进制ascii格式,比如ff 就是255。网关设备收到服务器的 下发数据后,会将此处的ascii格式的数据转换为对应的十六进制数据,然后转发到串口上。
sn: 数据包的顺序,整数。网关设备收到服务器的下发数据中的 sn 值是多少,网关设 备应答给服务器的数据包中的sn值就是多少。用户可用该参数来识别网关设备的应答数据 与服务器请求数据的对应关系。
ack: 是否需要网关设备应答数据,0:不将应答数据上传到服务器;1:将应答数据上 传到服务器。非必须,若没有则按ack 等于1 处理。
crc: “mb”字段中的数据是否包含crc校验。1:mb字段不包含crc校验值,网关设备 会自动计算crc值;0:mb字段包含crc校验值,网关设备则不再会计算crc值。非必须。若没有则按crc等于0 处理。
uart:指定往哪一路串口(PORT)上发,0~23分别代表第1~24路串口(PORT)。非必 须,若没有则按uart 等于0 处理,即向第一路串口上下发。
若想向网络通道上发数据,则 可以用net替代uart即可,如:{"mb":"010300000001","sn":1,"ack":0,"crc":0,"net":0}。 retmb: 010300000001,是十六进制ascii 格式,比如ff 就是255。网关设备收到串口设 备的应答数据后,会将串口设备应答的十六进制格式的数据转换为对应的ascii格式的数据, 然后转发到服务器上。 status: timeout:超时;ok:正常