Modbus家族之 ASCII

      最后更新:2022-03-30 15:54:29 手机定位技术交流文章

      写在前面:

      该条的目的是描述备份,并便于提出进一步的问题,因为备份是个人摘要,欢迎更正;此外,大部分材料来自网络、书籍和大量手册,如果被违反,将立即予以删除。


      目录

      • 描述
      • 通讯方式
        • 帧格式
        • 功能码
          • 01(01H) 循环函数
          • 读取独立输入函数 02(02H)
          • 读以保持注册功能03(03H)
          • 函数 04H 读取输入登记册 。
          • 写入单线线函数 05(05H)
          • 职能06(06H)写信给登记册,独立维持登记册。
          • 函数 15 (0FH) 用于写入许多卷圈 。
          • 在函数 16 (10H) 中写入多个以保持注册 。
        • LRC校验

      嘿,想想我的兄弟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-9A-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

      那么,让我们直截了当地说,下面是标准功能代码部分:

      01(01H) 循环函数

      • 请求

        读取内部线圈的 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:

        在这里插入图片描述

      读取独立输入函数 02(02H)

      • 请求

        请求信息包含您想要开始和阅读的投入数量,以及独立于机器输入的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:

        在这里插入图片描述

      读以保持注册功能03(03H)

      • 请求

        请求电文指定启动次数,并读取登记册和读取计算机保留登记册的二进制内容。 不支持电台 。

        以下是要求从7 40201 - 40203设备节点读取持有登记册三次(注意起始地址为200或0xC8,小于40201 - 4001)的一个实例:

        在这里插入图片描述

      • 响应

        将回答信件的登记册数据捆绑到每个登记册中的两个字节,其二进制内容与每个字节中的右边对齐;对于每个字节,第一个字节包含上字节和第二字节。

        Figure 10 shows an example of a response to the query shown in Figure 9:

        在这里插入图片描述

      函数 04H 读取输入登记册 。

      • 请求

        请求电文指定启动次数,并读取登记册和读取计算机保留登记册的二进制内容。 不支持电台 。

        以下是要求从7 30301-30303-30303设备节点读取输入登记册三次(注意起始地址为300或0x12C,比登记册少3001):

        在这里插入图片描述

      • 响应

        读取响应信息以以与读取相同的配置输入内存数据,以保持登记(03H)活动持续进行。

        Figure 12 shows an example of a response to the query shown in Figure 11:

        在这里插入图片描述

      写入单线线函数 05(05H)

      • 请求

        当广播时, 此函数强制所有从机器到同一线圈的附加引用。 请求信息包含您想要写入的 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:

        在这里插入图片描述

      职能06(06H)写信给登记册,独立维持登记册。

      • 请求

        写入单个持有登记册的值。 当广播时, 函数在所有相关计算机上设置相同的注册参考值 。

        以下是设备节点3要求保留登记簿,价值40150至100(通知起始地址为149或0x95,低于发件人401504001)的一个实例:

        在这里插入图片描述

      • 响应

        标准回答是请求的镜像图像, 它在写入持有内存的内容后返回 。

        Figure 16 shows an example of a response to the query shown in Figure 15:

        在这里插入图片描述

      函数 15 (0FH) 用于写入许多卷圈 。

      • 请求

        当广播时, 此函数强制所有从机器到同一线圈的附加引用。 请求信息包含您想要写入的 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:

        在这里插入图片描述

      在函数 16 (10H) 中写入多个以保持注册 。

      • 请求

        当广播时,函数在所有相关计算机上设置相同的注册参考。请求电文包括您希望写入的注册参考(初始注册和价值) 。

        以下是请求从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校验

      通用检查算法( LRC 章) 展示了检查想法 。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/21150.html

          热门文章

          文章分类