modbus-rtu、modbus-tcp、modbus-rtu-Over-tcp/ip 三种modbus通信有什么区别?

通常,modbus协议帧如下图:

图片

Modbus-TCP:由TCP头+地址+PDU组成,
Modbus-RTU:由地址+PDU+CRC校验组成

Modbus的PDU(Protocol Data Unit,协议数据单元)由功能码+寄存器地址+寄存器数量(可选)+寄存器值组成,PDU在TCP和RTU两种形式上是相同的。

图片

说明:
1:Modbus为一问一答协议,发送一个请求后要等待回复才能发送第二个请求。
2:Modbus-RTU的物理接口为串口。
3:Modbus-TCP的物理接口为以太网。


解释:
因此如果客户是提供的modbus-rtu协议,那么其实是需要一个串口转网络的一个转换模块(去买这么一个硬件,也就50多块钱)(串口转网络RJ45转ttl 网口转串口RS232/485),这个模块就可以把协议转为tcp,但是,但是,这个转换模块,有可能是硬件原因,其实是有坑的,它会把串口转为网口但是数据还是传的modbus-rtu的数据,可以这样理解,相当于外面包了一层modbus-tcp,但是本质还是rtu的数据,那我们可以用网络连接(socket,或者nio去建立tcp连接),但是数据传输还是用的rtu的数据(请求数据或者响应数据都是rtu格式的,需要进行解析)。

可能会有一个转换的硬件设备,可以纯粹的转为tcp,就是过滤了校验码这些,可能是我还不知道吧;

所以:这里就有了三个协议:
modbus-rtu:纯粹的串口通信
modbus-tcp:TCP网络通信
modbus rtu Over tcp/ip:是tcp网络通信,但是本质上还是rtu。
modbus 真软件就可以看到这三个协议:(ModbusSlaveSetup64Bit)

图片

其中Seria Port就是串口,那用这个通信的话就是modbus-rtu,

可以使用modbus-rtu连接,例如插入USB查看串口。

图片

或者自己测试的时候可以在自己的电脑虚拟两个串口,工具为(Launch Virtual Serial Port Driver Pro)

图片

然后modbus tcp/ip,这个可以用很多工具链接了,很多上位机软件(NetAssist)(Modbus Poll)都可以,程序的话java也提供了很多工具包,(com.digitalpetri.modbus   modbus-master-tcp)(或者可以建立socket或者nio链接,只不过这个需要解析格式(报文头啊,校验码,从机地址,功能码这些))

然后modbus rtu Over tcp/ip : 这个通信还是 tcp的,但是数据是rtu的数据,因此,不能用常规的modbus-tcp建立链接的代码建立链接,可以采用socket或者nio去建立链接,只不过还是要去解析对应的从机地址,功能码,校验位,数据等。那可以用什么工具去建立链接呢,其实跟modbus-tcp差不多,(NetAssist)(Modbus Poll)都可以的;

我这里简单列举几个例子:

就不用modbus-pull链接了,这个工具很好用,但是看不到具体发送的数据的细节;

1:modbus-rtu-Over-tcp/ip

比如我从机地址1,两个保持寄存器,40001是写入数据指令的,400002是读取设备信号的

图片

图片

这里注意选这个;

然后用上位机链接:

图片

图片

这里为什么要选择 CRC16/Modbus 自动发送校验位呢?

因为rtu数据是需要发送校验位的,而校验位是需要一个算法计算出来的,我就让这个软件自动帮我算,如果你自己知道你发数据的校验位,那也是可以不用勾选直接自己填也行。

如果用modbus-pull工具的话,更直观,

图片

发送数据:

图片

是不是,这里工具自动帮我做了校验码,功能码这些封装,

懂了rtu数据格式后,可以用这个,一开始还是建议先用上面的那个,方便加深学习;

modbus-tcp发送数据的格式

其实tcp除了没有校验位,跟rtu的区别就是前面多了这个报文头,

其实就是5个0和1个6;

而且是不需要勾选CRC校验的,因为tcp不需要校验,在报文头就会有校验了;

图片

注意:

图片

1:几个寄存器的区别

离散输入寄存器  只读         简单的开关量状态,如是否处于急停
输入寄存器      只读        数值类型的状态,如系统状态,电量
线圈寄存器        可读可写     简单的开关量控制,如暂停运动
保持寄存器      可读可写     数值类型的控制指令,如移动到站点/位姿

2:常用的功能码

0x01: 读线圈寄存器
0x02: 读离散输入寄存器
0x03: 读保持寄存器
0x04: 读输入寄存器

0x05: 写单个线圈寄存器
0x06: 写单个保持寄存器
0x0f: 写多个线圈寄存器
0x10: 写多个保持寄存器

这其中有涉及到线圈、离散输入、保持、输入四种寄存器。

 引用:9、modbus-rtu、modbus-tcp、modbus-rtu-Over-tcp/ip 三种modbus通信有什么区别?

支持Modbus TCP转Modubus RTURTU可以为RS232或者RS485。 支持RTU做主站或者Modubs TCP做主站。 支持多主机访问支持,最多连接100个TCP客户端。 支持所有的Modubus功能码和寄存器范围。 同时也可以做普通串口服务器使用。 ZLAN5142 概述 ZLAN5142 Modbus网关是上海卓岚信息科技有限公司开发的一款在Modbus TCPModbus RTU之间进行协议转化的转换器,其中Modbus RTU可以是RS485也可以是RS232接口。 ZLAN5142具备了强大的多主机访问支持功能和RS485总线冲突控制功能。所谓多主机功能是指,ZLAN5142作为Modbus TCP服务器时可以支持多达100个TCP客户端同时连接,多个TCP连接可以随机性的访问,ZLAN5142能够分别对不同的连接给出正确应答,保证数据稳定不丢包。相对于RS485总线只能够有一个主机进行访问,ZLAN5142实现了“多主机”功能。ZLAN5142实现了RS485总线的冲突控制,防止了多主机时的串口总线抢占问题。 另外,将ZLAN5142的“转化协议”选择为“无”,也可以当作普通的透明传输的串口服务器使用。但是不同于普通的串口服务器例如ZLAN5102,ZLAN5142即使作为普通串口服务器模式下也可以支持“多主机”功能,可解决多个计算机或主站如何同时监控一个串口设备的难题。 特点 支持Modbus TCP转Modubus RTURTU可以为RS232或者RS485。 支持RTU做主站或者TCP做主站。 支持多主机访问支持,最多连接100个TCP客户端。 支持1200~460800波特率。 支持RS485总线冲突调度机制,防止总线冲突。 支持所有的Modubus功能码和寄存器范围。 可作为普通的透传串口服务器使用,具备ZLAN5102相同功能。 小于1W的低功耗设计。 内嵌485防雷保护功能,适合室外485通信。 支持DNS,满足通过域名实现通信的要求。支持DHCP。 2KV网络浪涌保护。 外壳采用抗辐射的SECC板,保证在高电磁辐射区也能够正常工作。 规格 网络界面 以太网 10/100 Mbps, RJ45 保护 内建2KV电磁隔离 串口界面 界面 RS-232/485 串口数 1 校验位 None, Even, Odd, Space, Mark 数据位 5~9 停止位 1,2 流控 RTS/CTS,DTR/DCR, XON/XOFF 速率 1200bps~460800bps 软件特性 协议 TCP,HTTP,UDP,ICMP,ARP,IP,DNS,DHCP 虚拟串口平台 Windows 95/98/ME/NT/2000/XP/WIN7/WIN8 配置方式 Web浏览器、卓岚ZLVirCom、串口类AT命令 电器特性 电压输入 DC9~24V,100mA 机械特性 外壳材料 抗电磁材料SECC钢板 尺寸 长×宽×高=9.4cm×6.5cm×2.5cm 工作环境 工作温度,湿度 -45~85℃,5~95% RH 储存温度,湿度 -45~165℃,5~95% RH W
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值