Skip to main content

Search: #modbus

有的没的
  1. 一个modbus-tcp的配置例子(mb_client\mb_server)

    图1为tia portal块配置 图2为通信流程图

    1. 客户端发起请求 - 读取从地址 40001 开始的 3 个保持寄存器(每个16位,即一个word或者一个int)

    2. 服务器查找数据 - 从 DB1.DBX0.0 开始的数据区读取对应值。
    从图上可见mb_server准备的寄存器区域可以比查询长度的长。

    数据映射关系:

    40001 (地址0) ↔️ DB1.DBW0
    40002 (地址1) ↔️ DB1.DBW2
    40003 (地址2) ↔️ DB1.DBW4

    3. 服务器响应 - 返回 6 个字节的数据(3个寄存器×2字节/寄存器)
    客户端接收 - 数据存储到 MB_DATA_PTR 指向的位置

    #modbus #plc
  2. #plc #modbus

    modbus中,client向server发起请求。中文行话中,client是主站,server是从站,因为client发起请求。

    modbus的寄存器都是word长度的,所以只要绑定的db中都是存储的word类型变量。那么modbus的寄存器编号和db就能对起来。但是,modbus寄存器编号从1开始,dbx地址是从0开始。所以,40001,就代表的p#db1.dbx0.0 word 1

    4xxxx代表的是寄存器类型,不是功能码为4。功能码可以不了解,tia portal的块会帮忙handle

    ### Modbus寄存器类型
    
    1. **保持寄存器(Holding Registers, 4xxxx)**:
       - 读写寄存器。
       - 通常用于存储设备的配置参数、输出值等。
       - 通过功能码03(读取)和06/16(写入)访问。
    
    2. **输入寄存器[DI](Input Registers, 3xxxx)**:
       - 只读寄存器。
       - 存储设备的输入数据或传感器数据。
       - 通过功能码04访问。
    
    3. **线圈[DO](Coils, 0xxxx)**:
       - 读写位。
       - 表示数字输出的状态(开/关)。
       - 通过功能码01(读取)和05/15(写入)访问。
    
    4. **离散输入(Discrete Inputs, 1xxxx)**:
       - 只读位。
       - 表示数字输入的状态。
       - 通过功能码02访问。