最后更新:2022-03-30 15:54:29 手机定位技术交流文章
写在前面:
该条的目的是描述备份,并便于提出进一步的问题,因为备份是个人摘要,欢迎更正;此外,大部分材料来自网络、书籍和大量手册,如果被违反,将立即予以删除。
嘿,想想我的兄弟RTU最近的介绍之后, Modbus获得了一些信息,然后跟着我的脚步走,学习新的知识。
Modbus在序列装置中完成了主模型结构。在建立Modbus协议时,电子设备之间的数据传输问题得到解决。它有两个主要传输模式:Modbus RTU和Modbus ASCII。先前在Modbus RTU的一篇文章中也报道了此事。因此,在这本书中,请看ASCII。
| Name | Length (bytes) | Description |
|---|---|---|
| Start | 1 | Starts with colon : (ASCII hex value is 3A) (以冒号 :第一个 ASCII 十六进制值为 3A) |
| Address | 2 | Node address in hex (十六进制、字符表达式中的节点地址) |
| Function | 2 | Function code in hex (哈拉克表达式,十六进制功能代码) |
| Data | n x 2 | n is the number of data bytes, it depends on function (取决于功能代码, n 是数据字节。 ) |
| LRC | 2 | Longitudinal redundancy check (LRC校验码) |
| End | 2 | CR / LF |
请注意,地址、功能、数据和 LRC 均为可读字符,代表8位数(0-255)六进制大写对;也就是说,在 Modbus ASCII 中,每个数据字节被分隔成两个字节,在十六进制值中代表两个 ASCII 字符。
信息以ASCII形式被殖民化。:要重新进入线条,请输入字符启动类型( ASCII 是 0x3A )。rn结尾处( ASCII 显示 0x0D 和 0x0A) ; 所有其他字段都接受十六进制字符进行数据传输 。0-9、A-F。
| START | ADDRESS | FUNCTION | DATA | LRC CHECK | END |
|---|---|---|---|---|---|
| 1 CHAR : |
2 CHARS | 2 CHARS | n CHARS | 2 CHARS | 2 CHARS CRLF |

ASCII最常用的功能代码与 RTU 的功能代码规格相同。 这里没有什么可说的, 但我们可以查看 Modbus 家族关于 RTU 的章节的功能代码部分, 它的结构不同。
下一条则与这两条原始传输方式形成对比。因此,让我们直接进入这个章节, 比较RTU和ASCII, 不要忘了记住 RTU的协议。
| 无法启动 Evolution 的邮件组件 。 | 映射地址 | 描述 | 功能 | R/W |
|---|---|---|---|---|
| 1 ~ 10000 | address-1 | Coils | 01/05/15 | R/W |
| 10001 ~ 20000 | address-10001 | Discrete Inputs | 02 | R |
| 30001 ~ 40000 | address-30001 | Input Registers | 04 | R |
| 40001 ~ 50000 | address-40001 | Holding Registers | 03/06/16 | R/W |
以下是ASCII传输的直截了当的例子:
要读 VAR1, 例如, 您必须读取地址 0x20C1 上的两个传输器, 因此发送下列 ASCII 电文 :
:010420C1000218<CRLF>
请求:
| Name | Description |
|---|---|
| ‘:’ | Start of message - 0x3A |
| ‘0’ ‘1’ | Node address – 0x01 |
| ‘0’ ‘4’ | Function code (Read Input Registers) – 0x04 |
| ‘2’ ‘0’ ‘C’ ‘1’ | Register address for reading VAR1 – 0x20C1 |
| ‘0’ ‘0’ ‘0’ ‘2’ | Length of registers to be read (must be 2) – 0x0002 |
| ‘1’ ‘8’ | LRC |
| <CRLF> | End of message, carriage return and line feed – 0x0D0A |
此消息的响应如下:
:01040400001234B1<CRLF>
响应:
| Name | Description |
|---|---|
| ‘:’ | Start of message - 0x3A |
| ‘0’ ‘1’ | Node address – 0x01 |
| ‘0’ ‘4’ | Function code (Read Input Registers) – 0x04 |
| ‘0’ ‘4’ | Read data length (4 bytes) – 0x04 |
| ‘0’ ‘0’ ‘0’ ‘0’ ‘1’ ‘2’ ‘3’ ‘4’ | Value read from VAR1 – 0x00001234 |
| ‘B’ ‘1’ | LRC |
| <CRLF> | End of message, carriage return and line feed – 0x0D0A |
那么,让我们直截了当地说,下面是标准功能代码部分:
请求
读取内部线圈的 ON/ OFF 状态。 无线电不支持。 请求信件指定要开始和读取的线圈数量 。
以下是一个读 Coil 请求的例子: 19- 55 (Coil 20至56), 37 个来自设备节点 3 (注意初始地址是 19 或 0x13, 20 减 1) :

响应
数据字段用于捆绑有线圈状态响应信息,每个位元代表圆圈。情况以1=OO=OF=OF=OF=OF=OF=OF=OF=FF。0 = OFF。请求书中地址的折圈列在第一份数据字节的LSB中。在等级制度底部,其他圈子也跟着这个字节。以下面的字节,从低到高。
例如,考虑20-27圈的状况。ON - ON - OFF - OFF - ON - OFF - ON - OFF - ON - OFF时,以字节值二进制0101 0011 (0x53)一个字节包含 8 个线圈的状态。 如果返回的线圈数不是 8 个数的倍数, 最后数据字节中的剩余空格将填充 0 个( 到 字节 结尾处的阶梯); 字节计数整个数据字节 。
Figure 6 shows an example of a response to the query shown in Figure 5:

请求
请求信息包含您想要开始和阅读的投入数量,以及独立于机器输入的UN/OFF 状态。 电台不支持 。
以下是从设备节点3读取的分解输入 10101 - 10120的一个例子,共20个输入案例(注意起始地址为100或0x64,低于输入10101 1001):

响应
分离输入状态响应信息与连接状态( 01H) 操作的构建方式相同。
Figure 8 shows an example of a response to the query shown in Figure 7:

请求
请求电文指定启动次数,并读取登记册和读取计算机保留登记册的二进制内容。 不支持电台 。
以下是要求从7 40201 - 40203设备节点读取持有登记册三次(注意起始地址为200或0xC8,小于40201 - 4001)的一个实例:

响应
将回答信件的登记册数据捆绑到每个登记册中的两个字节,其二进制内容与每个字节中的右边对齐;对于每个字节,第一个字节包含上字节和第二字节。
Figure 10 shows an example of a response to the query shown in Figure 9:

请求
请求电文指定启动次数,并读取登记册和读取计算机保留登记册的二进制内容。 不支持电台 。
以下是要求从7 30301-30303-30303设备节点读取输入登记册三次(注意起始地址为300或0x12C,比登记册少3001):

响应
读取响应信息以以与读取相同的配置输入内存数据,以保持登记(03H)活动持续进行。
Figure 12 shows an example of a response to the query shown in Figure 11:

请求
当广播时, 此函数强制所有从机器到同一线圈的附加引用。 请求信息包含您想要写入的 coil 引用( 初始线圈和状态) 。
FF 00此值需要打开花圈, 而值是00 00这项请求已经结案,任何其他价值都是非法的,对卷圈没有影响。
以下是设备节点3请求打开线圈150(通知初始地址为149或0x95,低于线圈150)的一个实例:

响应
标准回答是请求的镜像图像, 它在写入 coil 状态后返回 。
Figure 14 shows an example of a response to the query shown in Figure 13:

请求
写入单个持有登记册的值。 当广播时, 函数在所有相关计算机上设置相同的注册参考值 。
以下是设备节点3要求保留登记簿,价值40150至100(通知起始地址为149或0x95,低于发件人401504001)的一个实例:

响应
标准回答是请求的镜像图像, 它在写入持有内存的内容后返回 。
Figure 16 shows an example of a response to the query shown in Figure 15:

请求
当广播时, 此函数强制所有从机器到同一线圈的附加引用。 请求信息包含您想要写入的 coil 引用( 启动圆圈和状态) 。
以下示例描述了要求写入10个线圈状态的顺序,从装置节点5中的20个线圈开始,与线圈相关的二进制位置如下(注意起始地址为19或0x13,比线圈少20个):
| Bit | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Coil | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | … | … | … | … | … | 30 | 29 | 28 |

响应
标准回答给出了地址、 函数代码、 起始地址、 书写( 排除字节) 所形成的圆圈数, 以及匹配的书写状态 。
Figure 24 shows an example of a response to the query shown in Figure 23:

请求
当广播时,函数在所有相关计算机上设置相同的注册参考。请求电文包括您希望写入的注册参考(初始注册和价值) 。
以下是请求从5号装置节点从40020到40022的持有登记簿中写下以下数据的例子(注意起始地址是19或0x13, 低于发件人的40020) :
| address | data |
|---|---|
| 40020 | 0x0164 |
| 40021 | 0x0165 |
| 40022 | 0x0166 |

响应
标准回答根据地址、功能代码、起始地址和写作提供储存库的数量,但不提供字节或同等数据。
Figure 26 shows an example of a response to the query shown in Figure 25:

通用检查算法( LRC 章) 展示了检查想法 。
本文由 在线网速测试 整理编辑,转载请注明出处。