Modbus RTU

目录

 ​编辑

与Modbus TCP的区别

Modbus RTU特点

ModbusRTU协议格式:

报文详解:

模拟器的使用

虚拟串口的安装

虚拟机绑定端口

测试通信

将Modbus Slave模拟器作为RTU设备的从机


与Modbus TCP的区别

        在一般工业场景使用modbus RTU的场景还是更多一些,modbus RTU基于串行协议进行收发数据,包括RS232/485等工业总线协议。

        与modbus TCP不同的是RTU没有报文头MBAP字段,但是在尾部增加了两个CRC检验字节(CRC16),因为网络协议中自带校验,所以在TCP协议中不需要使用CRC校验码。

        RTU和TCP的总体使用方法基本一致,只是在创建modbus对象时有所不同,TCP需要传入网络socket信息;而RTU需要传入串口相关信息。

Modbus RTU特点

ModbusRTU也是主从问答协议,由主机发起,一问一答

设置串口参数:

设置串口参数时要求:

波特率为9600

8位数据位

1位停止位

无流控

ModbusRTU协议格式:

ModbusRTU协议数据帧包含四部分:地址码、功能码、数据、校验码

地址码:从机ID 1-247

功能码:同ModbusTCP协议

数据:起始地址、数量、数据

校验码:2字节,对地址码、功能码、数据部分进行校验,调用函数自动生成

报文详解:

03功能码:

主机->从机: 01 03 00 00 00 01 84 0A

        01:从机ID

        03:功能码

        00 00:起始地址

        00 01:数量

        84 0A:校验码

从机->主机:01 03 02 00 14 b8 44

        01:从机ID

        03:功能码

        02: 字节计数

        00 14:数据

        b8 44 :校验码

参考示例:

值得收藏 Modbus RTU 协议详解-优快云博客

模拟器的使用

        由于实际硬件产品成本较高,我们这里可以使用Modbus软件模拟器,进行数据模拟从而分析Modbus协议。

使用工具:

1. ModbusPoll(模拟主机)和ModbusSlave(模拟从机)

2. vspd虚拟串口

3. UartAssist串口调试工具

设置串口参数要求:波特率为9600 8位数据位 1位停止位 无流控 无校验

虚拟串口的使用:

虚拟串口的安装

  1. 将压缩包解压后,双击vspd.exe文件进行安装

  1. 安装完成后,找到安装目录,将Cracked下的文件复制到软件安装目录
  2. 打开软件,添加com1和com2端口(用完记得删除端口)
  3. 添加完端口后,打开设备管理器,这里出现如下图所示即可。

虚拟机绑定端口

  1.  将虚拟机在系统关机(必须是关机状态,挂起不行)状态下,点击虚拟机->设置->硬件->添加串行端口,添加COM1
  2. 添加完成后,第一次使用需要将电脑重启
  3. 重启之后,开启虚拟机,点击虚拟机->可移动设备->串行端口->连接
  4. 当连接上虚拟串口后,在终端输入dmesg | grep tty,可以查看到对应的设备文件,其中默认的会有ttyS0文件,剩下的就是虚拟串口对应的设备文件

测试通信

1.Windows打开串口调试工具,选择好串口COM2->COM1,设置对应的波特率

在虚拟机运行minicom

在虚拟机安装minicom软件

sudo apt-get install minicom

在终端执行sudo minicom -s

1)选择serial port setup,回车

2)设置设备文件,波特率,关闭流控,按如下图设置(文件改成自己的

3)修改完成后,回车,保存修改,选择save setup as dfl,敲回车,再次选择exit回车

4)退出后就可以和windows下的串口调试工具进行通信测试

5)也可以在这个界面输入字符,查看串口助手的显示情况。

6)退出:ctrl+A、Z,在弹出的界面里输入X 回车,即可退出。

将Modbus Slave模拟器作为RTU设备的从机

虚拟机绑定COM1端口,slave连接COM2端口,虚拟机通过编程测试串口通信

Modbus Slave端的配置如下:

### Modbus RTU 协议基础与实现 #### Modbus RTU 的定义与发展 Modbus 是一种开放标准的通信协议,最早于 1979 年由 Modicon(现施耐德电气)发布,用于支持可编程逻辑控制器 (PLC) 之间的通信。随着技术发展,Modbus 已成为工业自动化领域最广泛使用的通信协议之一,特别适合连接各种工业电子设备[^1]。 #### Modbus RTU 数据帧结构 Modbus RTUModbus 协议的一种变体,采用二进制编码方式传输数据。它的数据帧通常包括以下几个部分: - **地址字段**:指定目标从设备的地址。 - **功能码**:指示要执行的操作类型。 - **数据区**:包含实际的数据内容。 - **校验和**:CRC 校验值,确保数据完整性。 构建一个完整的 Modbus RTU 请求数据包时,需严格遵循上述结构并通过串行通信端口发送至网络中的从设备[^2]。 #### 功能码解析 Modbus 支持多种功能码,常见的有读取线圈状态 (`0x01`)、读取离散输入 (`0x02`)、读取保持寄存器 (`0x03`) 和写单个寄存器 (`0x06`) 等。这些功能码允许主设备向从设备发起不同的操作请求[^3]。 以下是使用 Python 构建并发送 Modbus RTU 请求的一个简单示例: ```python import minimalmodbus # 配置串口参数 instrument = minimalmodbus.Instrument('/dev/ttyUSB0', slaveaddress=1, mode=minimalmodbus.MODE_RTU) # 设置波特率和其他串口配置 instrument.serial.baudrate = 9600 instrument.serial.bytesize = 8 instrument.serial.parity = 'N' instrument.serial.stopbits = 1 # 读取保持寄存器 (功能码 0x03) register_value = instrument.read_register(registeraddr=40001, functioncode=3) print(f"Register Value: {register_value}") # 写入单个寄存器 (功能码 0x06) instrument.write_register(registeraddr=40001, value=123, functioncode=6) ``` 此代码片段展示了如何利用 `minimalmodbus` 库与支持 Modbus RTU 的设备交互。通过设置串口号、波特率及其他必要参数,可以轻松完成基本的读写操作。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值