Modbus--字节,位,寄存器之间的关系

在 Modbus 协议中,字节寄存器 之间有着紧密的关系。为了更好地理解它们之间的联系,我们需要详细解释每个概念及其相互关系。

1. 位(Bit)

  •  是数据的最小单位,通常表示一个二进制数字(0 或 1)。
  • 在 Modbus 协议中,常常用于表示单独的 开关状态 或 布尔值,例如某个设备的开/关状态、传感器的启用状态等。
  • Modbus 协议中的一些数据结构(如 离散输入 和 线圈输出)是基于位来组织的,每个位代表一个独立的状态。

2. 字节(Byte)

  • 字节 由 8 位 组成。
  • 每个字节可以表示一个 8 位的数字,范围从 0x00(0)到 0xFF(255)。字节是处理和传输数据的基本单位。
  • 在 Modbus 中,每个字节包含 8 个连续的位,这些位可能代表开关的状态或多个数字的组合。

3. 寄存器(Register)

  • 在 Modbus 协议中,寄存器 是数据的基本单位,通常由 16 位(即 2 字节)组成。
  • 16 位寄存器可以存储较大的数值或多个数据位。它常常用来表示 整数浮点数的一部分 或 多个开关的状态

4. Modbus 寄存器、字节和位之间的关系

在 Modbus 中,不同类型的寄存器和数据通常通过字节和位来组织:

4.1 离散输入与线圈输出(Bit-based)
  • 离散输入(Discrete Input)和线圈输出(Coil)是基于 的数据结构,每个位代表一个单独的开关状态(0 或 1)。

  • 离散输入和线圈输出并不以 字节寄存器 传输,而是以 为单位。Modbus 设备在传输这些数据时,通常按 1 位为单位进行请求和响应。

    地址范围类型描述
    0-9999线圈(Coils)1 位(0 或 1)表示开/关
    10000-19999离散输入(Discrete Inputs)1 位(0 或 1)表示开/关
4.2 输入寄存器与保持寄存器(16-bit Register-based)
  • 输入寄存器(Input Register)和保持寄存器(Holding Register)是 Modbus 中的 16 位寄存器,即每个寄存器包含 2 字节(16 位) 数据。

  • 每个寄存器由 16 位(2 字节)组成,常常表示一个 整数值多个开关的状态(每个位表示开关的状态)。

    地址范围类型描述
    30001-39999输入寄存器(Input Registers)16 位,通常用于表示传感器数据等
    40001-49999保持寄存器(Holding Registers)16 位,用于存储设备的配置信息等

例如,一个 16 位的寄存器 0x1234

  • 高字节:0x12
  • 低字节:0x34

这个 16 位寄存器可以存储一个整数值 0x1234,也可以表示多个开关状态。如果寄存器表示多个开关,低位(0x34)和高位(0x12)中的每一位可以表示一个开关状态。

4.3 字节和寄存器的传输
  • 在 Modbus 协议中,每个寄存器由 2 字节(16 位) 组成,传输时它会被拆分为两个字节,在 大端模式 下传输,即 高字节 先发送,低字节 后发送。
  • 一个 16 位的寄存器,比如 0x1234,在传输时会被拆分成两个字节:高字节 0x12 和 低字节 0x34

5. 位、字节和寄存器的关系示例

让我们通过一个例子来解释位、字节和寄存器之间的关系:

假设一个 保持寄存器 的地址为 1,它的值为 0x1234

1514131211109876543210
寄存器值(16 位)0x120x34低字节 0x34高字节 0x12
  • 16 位的 寄存器 由 两个字节(8 位每个字节)组成。
  • 每个字节又由 8 位 组成,分别表示不同的开关或状态。
  • 0x1234(十进制的4660)
  • 0x12--00010010
  • 0x34--00110100
  • 00010010(0x12)和00110100(0x34)最终拼接起来就是4660
  • Modbus--大端模式下传输,即 高字节0x12 先发送,低字节0x34 后发送,接收者按照大端模式将其拼接起来就可以得到完整数据4660

6. 总结

  •  是 Modbus 中最小的数据单元,通常表示一个开关或布尔值(0 或 1)。
  • 字节 是由 8 位组成的单位,在 Modbus 中,字节用来传输离散输入和线圈输出等数据。
  • 寄存器 是由 16 位(2 字节)组成的数据单元,通常用于表示传感器数据、控制信息、配置信息等。
  • 16 位的 寄存器 内部的数据可以是多个  的组合,每个可以表示一个单独的开关状态。

通过这些关系,你可以理解 Modbus 协议如何通过不同的位、字节和寄存器来组织和传输数据。

7.补充(Byte=byte)

7.1M等于多少字节byte(1MB=1024(KB)*1024byte)--个byte--千K--兆M
1MB等于1048576字节。算法是: 1byte(字节)=8bit(位),1KB=1024byte(字节),1MB=1024KB,1GB=1024MB1TB=1024GB,一个汉字要占用2个字节,如果换算成中文汉字那么就是1M=524288个汉字
带宽的单位一般有两种表现形式;第一种是B/s、KB/s或MBs,表示单位时间(秒)内传输的数据量(字节、千字节、兆字节),第二种是bps (或称b/s) 、Kbps (或称Kb/s) 或Mbps (或称Mb/s) ,表示单位时间(秒)内传输的数据量(比特、千比特、兆比特)。这两种带宽的换算公式是: B/s=8bps (b/s) 、1KB/s=8Kbps (Kb/s)1MB/s=8Mbps (Mb/s)

7.2.关于C#中Byte和byte区别
通过查询Java API 发现,Byte是类,byte是基本数据类型,准确来说Byte是byte的封装类。

因此Byte[ ]本身就不存在。而byte[ ]是字符类型的数组,可以用来存放数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值