zoukankan      html  css  js  c++  java
  • modbus协议数据格式

    ---

    说明:

    modbus协议一般适用于一个主设备访问多个从设备的硬件开发环境,类似于zigbee网络中的一个路由器多个协调器的一对多模型。

    modbus常用的寄存器类型为 3X 输入寄存器和 4X保持寄存器

    从机3X 输入寄存器对主机来说是可读不可写状态,从机4X 保持寄存器对主机来说是可读可写状态

    ---

    功能码含义

    04:读取输入寄存器(3x)

    03:读取保持寄存器(4x)

    06:写入单个保持寄存器(4x)

    16:写入多个保持寄存器(4x)

    ---

    常用的数据格式:

    主机读取从机输入寄存器数据格式:

    数据实例:03 04 05 61 00 01 61 3A
    
    分解:
    
    03         04      05          61
    modbus地址  功能码  寄存器地址高  寄存器地址低                   
    
    00          01          61            3A
    寄存器数量高  寄存器数量低  CRC校验码低位  CRC校验码高位

    解释:

    主机读取modbus地址为03的从机输入寄存器,从0x0561(十进制为1377)地址开始读取一个寄存器。

    读取读取从机输入寄存器返回数据格式:

    03         04    02   00 02   41   31
    modbus地址 功能码 字节数 数据... CRC低 CRC高

    -------

    主机读取从机保持寄存器数据格式:

    数据实例:03 03 15 1a 00 01 A0 23
    
    分解:
    
    03          03    15          1A                 
    modbus地址  功能码  寄存器地址高   寄存器地址低  
    
    00          01          A0    23
    寄存器数量高  寄存器数量低  CRC低 CRC高

    解释:

      主机读取modbus地址为03的从机保持寄存器,从0x151a(十进制为5402)地址开始读取一个寄存器。

    读取读取从机保持寄存器返回数据格式:

    03         03    02   00 02   40   45
    modbus地址 功能码 字节数 数据... CRC低 CRC高

    ---

    主机写入单个保持寄存器数据格式:

    数据实例:03 06 15 1a 00 32 2C 36
    
    分解:
    
    03          06    15          1A 
    modbus地址  功能码 寄存器地址高   寄存器地址低                   
    
    00       32     2C    36
    数据高    数据低  CRC低 CRC高

    解释:

      主机写入modbus地址为03从机一个保持寄存器数据,从0x151a(十进制为5402)地址开始写入一个寄存器,写入数据为0x0032。

    ---

    写入单个保持寄存器返回数据格式:

    如果写入成功,返回数据和写入数据相同

    主机写入多个保持寄存器数据格式:

    数据实例:03 10 14 56 00 02 04 00 00 00 50 82 3D
    
    分解:
    03 10 14 56 modbus地址 功能码 寄存器地址高 寄存器地址低 00 02 04 00 00 00 50 寄存器数量高 寄存器数量低 字节数 数据 (从高到低依次) 82 3D CRC低 CRC高

    解释:

      主机写入modbus地址为03从机两个保持寄存器数据,从0x1456(十进制为5206)地址开始写入两个寄存器,写入数据为0x0000、0x0050。

    写入多个保持寄存器返回数据格式:

    03         10   14         56 
    modbus地址 功能码 寄存器地址高 寄存器地址低 
    00 02 A5 CA 寄存器数据高 寄存器数量低 CRC低 CRC高

    常用功能码:

    数据类型 功能描述 功能码 功能码(Hex) 异常功能码(hex)
    输入寄存器 读寄存器 04 0x04 0x84
    保持寄存器 读寄存器     03 0x03 0x83
    写寄存器 06 0x06 0x86
    写寄存器 16 0x10 0x90

    这个是我自己使用c代码模拟的modbus数据协议打包格式

    链接:https://pan.baidu.com/s/1AAflWfiBEh6l6lTAiwwWEQ
    提取码:11os

    常用接口有:
    //读取输入寄存器
    int read_input_registers;
    //读取保持寄存器
    int read_hold_registers;
    //写单个保持寄存器
    int write_hold_register;
    //写多个保持寄存器
    int write_hold_registers;

    他只是向前航行,脚下是沉静碧蓝的大海,而头顶是金色的太阳。
  • 相关阅读:
    JAVA(五)反射机制/Annotation
    JAVA(四)类集/枚举
    JAVA(三)JAVA常用类库/JAVA IO
    JAVA(二)异常/包及访问权限/多线程/泛型
    JAVA(一)JAVA基础/面向对象基础/高级面向对象
    【Android】Android输入子系统
    【Linux】深入理解Linux中内存管理
    【XMPP】基于XMPP的即时通讯解决方案
    cf593d
    cf593c
  • 原文地址:https://www.cnblogs.com/bliss-/p/12523866.html
Copyright © 2011-2022 走看看