Modbus的简单说明

Modbus是工业上的一种常见的通讯协议,其中包括有Modbus-RTU、Modbus-ASCII、Modbus-TCP。而Modbus-RTU相对另外两种更常见也更容易实现。
我们先从Modbus的报文中进行观察:01 03 02 00 01 79 84
依次来看:
其中01指的是从机地址、03指的是功能码、02指的是返回的数据个数,以字节为单位、0001指的是数据的值、79 84指的是CRC校验。
其意思大致可看成是:将数据0x0001写入01号从机中。

其中从机地址是指一个主站可以有多个从机,而每个从机都需要有一个地址、通过地址进行一对一的传输数据。

功能码则可以分成以下这数种:
01 Read Coils 读取线圈状态,读取一组逻辑线圈的当前状态(ON/OFF)
02 Read DiscreteInputs 读取输入状态,读取一组开关输入的当前状态(ON/OFF)
03 Read Holding Registers 读取保持寄存器,在一个或多个保持寄存器中取得当前二进制值
04 Read Input Registers 读取输入寄存器,在一个或多个输入寄存器中取得当前二进制值
05 Write Single Coil 强制(写)单线圈,强制(写)一个逻辑线圈的通断状态(ON/OFF)
06 Write Single Register 预置(写)单寄存器,把具体二进制值写入一个保持寄存器
0F Write Multiple Coils 强制(写)多线圈,强制(写)一串连续逻辑线圈的通断状态(ON/OFF)
10 Write Multiple Registers 预置(写)多寄存器,把具体二进制值写入一串连续的保持寄存器

CRC校验则是为了判断接收到的数据是否出错。

具体操作则如下所示:
用了两个虚拟串口进行测试,分别为COM5和COM6。在Modbus poll中选择其中一个端口作为主站,而Modbus Slave选择另一端口作为从机。如下图所示:
在这里插入图片描述

在这里插入图片描述
上面的是主站下面的是从机。需要特别注意的是:从机中的波特率数据位校验位和停止位都需要和主机设置的一致,本次设置为波特率19200,8位数据位,无校验位,1位停止位。
如此则成功连接,可将数据从主站中写入从机中。
具体的数据读写可从串口监听软件中获取相应信息,初始值如上可看到设置的数据为1,此处的1位十进制的1,即十六进制的 00 01,
则可以从软件中监听到如下信息:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020082814444745.png#pic_center
序号1是指主机在询问从机是否有数据改变。
而数据改变则是从第三行开始,由进程mbslave即Modbus slave对应的串口COM6中看到其写入了一串16进制数据:01 03 02 00 01 79 84
而从COM5中读入相同的数据。即从机数据的变化写入主机中并由主机读取。
将数据修改为100即十六进制的0064,则可获得如下:
在这里插入图片描述
所获得的十六进制数据为01 03 02 00 64 B9 AF。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部