zoukankan      html  css  js  c++  java
  • Modbus TCP协议说明

    协议帧

    事物处理标识|  协议标识|       长度|  从机地址| 功能码| 数据     
        0x00 00|  0x00 00|    0x00 08|     0x01|   0x0F|    0x00 14 0x00 01 0x01 0x01
    
    • 事物处理标识(占2字节)
      区分不同报文,请求和应答的一组报文有相同的事物处理标识。每次通信之后应当自增。

    • 协议标识(占2字节)
      0x0000 表示ModBus TCP

    • 长度(占1个字节)
      表示之后还有多少字节

    • 从机地址(占1个字节)
      表示设备地址(多个设备接一个总线)

    • 功能码(占1个字节)
      功能码部分定义如下:

    功能码 描述 访问类型 PLC地址 数据类型 操作数量
    0x01 线圈 00001-09999 单/多
    0x02 离散输入 10001-19999 单/多
    0x03 保持寄存器 40001-49999 单/多
    0x04 输入寄存器 30001-39999 单/多
    0x05 线圈 00001-09999
    0x06 保持寄存器 40001-49999
    0x0F 线圈 00001-09999
    0x10 保持寄存器 40001-49999
    • 寄存器起始地址
      表示寄存器地址

    • 数据部分

    写请求数据帧

    寄存器首地址|写个数|长度|值  
         0x0014|0x0001| 0x01|0x01
    
    1. 寄存器首地址(占两个字节),表示此次操作从哪个寄存器开始
    2. 写个数占(两个字节),表示批量操作多少个寄存器。例如首地址为0x0014,写个数为0x0002,则表示同时写0x0014和0x0015两个寄存器。
    3. 长度(占一个字节),表示该字节后还有多少字节。
    4. 值表示要写入的值。如果功能码是位操作,则值需要被拆成位赋值。例如写首地址为0x0014,写个数为0x0002。写字节为0x01,值为0x02。由于0x02用位表示为00000010,赋值后寄存器的结果为0x0014为0,0x0015为1。

    写响应数据帧:

    寄存器首地址|写个数
         0x0014|0x0001
    
    1. 寄存器首地址(占两个字节),表示此次操作从哪个寄存器开始
    2. 写个数(占两个字节),表示此次操作了多少个寄存器。

    读请求数据帧

    寄存器首地址|读个数
         0x0014|0x0001
    
    1. 寄存器首地址(占两个字节),表示此次操作从哪个寄存器开始读
    2. 读个数(占两个字节),表示要求读多少个寄存器。

    读响应数据帧

    读状态|读取值
      0x01|0x01
    
    1. 读状态表示读操作是否成功。0x01表示成功,0x02表示失败。
    2. 读取值表示读操作获取的值。如果功能码是位操作,那么读取的值也需要按位解析。例如从0x0014开始读取两个寄存器值。假设读到的值为0x03,那么表示0x0014和0x0015的值均为1。
  • 相关阅读:
    反Secure Boot垄断:兼谈如何在Windows 8电脑上安装Linux
    火车售票系统(数据结构课设)
    货物管理系统(数据结构链式表)
    货物管理系统(数据结构顺序表)
    进制转换器(十进制转n进制)
    大学生成绩管理系统(C语言)
    如何对Linux的grub进行加密
    戴文的Linux内核专题:07内核配置(3)
    戴文的Linux内核专题:06配置内核(2)
    戴文的Linux内核专题:05配置内核(1)
  • 原文地址:https://www.cnblogs.com/insaneXs/p/11167679.html
Copyright © 2011-2022 走看看