IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> modbus-rtu和modbus-tcp和modbus-rtu-Over-tcp/ip -> 正文阅读

[网络协议]modbus-rtu和modbus-tcp和modbus-rtu-Over-tcp/ip

经典的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是读取设备信号的

?

?这里注意选这个;

然后用上位机链接:

?这里为什么要勾选【自动发送校验位】呢?

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

举例:读取40001地址的值:slaveId:01,功能码03

举例:写入40002地址数据,功能码06

?

?

解释下rtu协议发送和接受反馈的这个数据格式:

modbus-rtu发送数据的格式:

?

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: 写多个保持寄存器

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

Modbus通讯协议学习 - 认识篇_pooooong的博客-CSDN博客_modbus通讯协议学习

freemodbus modbus TCP 学习笔记_xukai871105的博客-CSDN博客_freemodbus tcp

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-27 11:39:57  更:2022-04-27 11:40:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:39:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码