• modbus tcp数据报文结构


    modbus tcp数据报文结构

    请求:00 00 00 00 00 06 09 03 00 00 00 01

    响应:00 00 00 00 00 05 09 03 02 12 34

      一次modbus tcp读取保持寄存器的通信分析(省略了ip/tcp头):从左向右分析该数据报文:

    请求:

    00 00为此次通信事务处理标识符,一般每次通信之后将被要求加1以区别不同的通信数据报文;

    00 00表示协议标识符,00 00为modbus协议;

    00 06为数据长度,用来指示接下来数据的长度,单位字节;

    09为设备地址,用以标识连接在串行线或者网络上的远程服务端的地址。以上七个字节也被称为modbus报文头;

    03为功能码,此时代码03为读取保持寄存器数据;

    00 00为起始地址; (word数量)。

    00 01为寄存器数量,(word数量)。

    //modscan32 里面的 (address-1)*2=点位里面设置的地址
    //modscan32 下面显示 的地址 是以字为单位,不是字节

    响应:

    00 00为此次通信事务处理标识符,应答报文要求与先前对应的请求保持一致;

    00 00为协议标识符,与先前对应的请求保持一致;

    00 05为数据长度,用来指示接下来数据的长度,单位字节;

    09为设备地址,应答报文要求与先前对应的请求保持一致;

    03为功能码,正常情况下应答报文要求与先前对应的请求保持一致,如果出错则返回80h+先前的功能码;

    02指示接下来数据的字节长度;

    12 34为被读取的保持寄存器中的数据值,即要求被读取的地址为00 00的保持寄存器中的数值为1234h。

    >>4c 00 00 00 00 06 01 03 0000 0006

    4c 请求回应 计数,
    00 00 00 00 固定头
    06 包长度 6个字节内容
    01 03 00 00 00 0a
    01 device id 01
    03 功能码
    0000 addreess:0001
    0006 length 6


    <<4c 00 00 00 00 0f 01 03 0c 3f 80 00 00 40 00 00 00 40 40 00 00

    4c 请求回应 计数,
    00 00 00 00 固定头
    0f 包长度 15个字节内容
    01 deviceid 01
    03 功能码
    0c 长度 3*4=12==0x0c


    3d000000000608030015000a
    >>3d 00000000 06 08 03 0015 000a

    3d 自增加索引
    00000000 固定
    06 长度
    08 deviceid
    03 功能码
    0015 addreess
    000a 长度 10

    7a0000000017080314405333334053333340533333
    <<3d 00000000 17 08 03 14 3f 8c cc cd 40 0c cc cd 40 53 33 33 40 8c cc cd 40 b0 00 00

    3d 自增加索引
    00000000 固定
    17 长度 5个点的数据*4=20==0x14 5个点的数据*4+3个字节标识=23==0x17
    08 deviceid
    03 功能码
    14 后面的长度

    全发float
    40533333 -> 3.30
    408ccccd -> 4.40

  • 相关阅读:
    Ubuntu Server 18.04上安装fail2ban
    Spring Security实现用户名密码登录
    Spring Boot集成H2数据库
    2019年过去了,我很怀念它
    基于Spring Boot的统一异常处理设计
    Git推送到多个远程仓库
    广州商学院16级软工一班&二班-助教总结
    记一次返工之后记
    广州商学院16级软工一班&二班-第四次作业成绩
    广州商学院16级软工一班&二班-第三次作业成绩
  • 原文地址:https://www.cnblogs.com/bleachli/p/9327558.html
Copyright © 2020-2023  润新知