用 ADAM-6052 学习 ModBus TCP 协议 (5) – 读寄存器

目录 Content
[hide]

ADAM-6052 的输入端子可以配置成检测计数和频率的功能,并且提供了寄存器可以读取此数值。

一、寄存器地址

按照此系列第一篇文章里提供的 Modbus 地址表:

计数和频率寄存器的起始地址为 1,长度为16,也即每个 INPUT 占用两个长度。每个长度是2个字节。

二、读取寄存器

为了方便测试,配置 DI0 和 DI2 为计数功能,并通过端子输入,使 DI0 为 13 DI2 为 73。

使用功能码 16#03 Read Holding Registers

请求读取地址 1开始 16个寄存器的数值。

1. 请求报文

1A 7F 00 00 00 06 05 03 00 00 00 10

开始6个字节为命令头:

  • byte 0 :  事务标识符,本例为 1A
  • byte 1 :  事务标识符,本例为 7F
  • byte 2 :  协议标识符,通常为 00
  • byte 3 :  协议标识符,通常为 00
  • byte 4 :  后面的字节数,高字节。通常为 00,因为所有报文都小于 256 个字节
  • byte 5 :  后面的字节数,低字节。本例为 06,即 05 03 00 00 00 10 共 6 个字节

第7个字节开始为命令体:

  • byte 6 :  从站标识符,本例为 05
  • byte 7 :  功能码,本例为 03,即 Read Holding Registers
  • byte 8 :  读取地址,高字节。本例为 00
  • byte 9 :  读取地址,低字节。本例为 00,即地址01。(1-1,原因是是从0开始)
  • byte 10: 读取数量,高字节。本例为 00
  • byte 11: 读取数量,低字节。本例为 10,即16个寄存器

2. 返回报文

1A 7F 00 00 00 23 05 03 20 00 0D 00 00 00 00 00 00 00 49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

开始6个字节为命令头:

  • byte 0 :  事务标识符,本例为 1A
  • byte 1 :  事务标识符,本例为 7F
  • byte 2 :  协议标识符,通常为 00
  • byte 3 :  协议标识符,通常为 00
  • byte 4 :  后面的字节数,高字节。通常为 00,因为所有报文都小于256个字节
  • byte 5 :  后面的字节数,低字节。本例为 23,即 35个字节

第7个字节开始为命令体:

  • byte 6 :  从站标识符,本例为 05
  • byte 7 :  功能码,本例为 03,即 Read Holding Registers
  • byte 8 :  数据数量,本例为 20,即 32 个字节
  • byte 9 :  读取数值,本例为 00 0D 00 00 00 00 00 00 00 49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

特别的

00 0D 00 00 为 DI0 的数值:13

00 49 00 00 为 DI2 的数值 :73

 

扩展阅读

 

Leave a Reply

Your email address will not be published. Required fields are marked *