了解Modbus

一. 了解 Modbus

1. 按键与灯的操作

  1. 按键是只读的,只能输入,不能输出。
  2. 灯则是可读可写,数据和灯一样只有一位。

扩展一下,就是这个意思。

2. 寄存器分类及操作

  1. Modbus 抽象为四类寄存器。
  2. 操作流程包括:
    1. 选择寄存器类别
    2. 指定寄存器地址
    3. 执行读取或写入操作
  3. 写入时需提供 value,读取时需获得返回值。

3. Modbus 结构与设备访问

  1. Modbus 是一主多从结构。
  2. 必须明确要访问的设备,因此数据中需包含设备地址。

4. 数据包结构总结

发送的数据包含:

  1. Dev(设备地址)
  2. 寄存器类别
  3. reg_addr(寄存器地址)
  4. r/w(读写标志)
  5. value(根据寄存器类别决定是1bit还是16bit)

5. Modbus 协议解析

  1. 设备地址用于识别目标设备。
  2. 功能代码决定操作类型(读/写,寄存器类别)。
  3. 数据包中包含寄存器地址 rdg_addr 和数据本身。
  4. 校验码用于数据完整性校验。
  5. 主机发送数据,从机解析并回应自身地址。

6. 数字域与寄存器状态

  1. 数字域字节数为5,表示有5字节。
  2. 示例:数据1是 0x53,二进制 0101 0011,最末尾的1表示起始寄存器的值。
  1. 假设要读取 0x13(十进制19)寄存器的值,即第19个寄存器。
  1. 返回字节中,第一个数据的 bit0 就是第19个寄存器的状态,后续依次为第20、21等。
  2. 读取多少个寄存器,就会返回多少位数据。

二. libmodbus

1. 源码与核心机制

  1. 这就是我们源码和其分析,也是 modbus 的核心机制。

2. RTU 与 TCP 实现

  1. RTU 使用串口实现 modbus。
  2. TCP 使用网络实现 modbus。

3. 底层程序与统一接口

  1. 有两个底层程序,希望通过统一接口选择串口或网络方式。
  2. data.c 为辅助函数,不在应用程序中,可用于设置数据。

4. modbus.c 函数解析

  1. 部分寄存器为只读。
  1. 写寄存器:bit 是写单个寄存器,bits 是写多个寄存器。
  2. 这些函数用于读单个位的寄存器。
  1. 还可读取多个位的寄存器。
  1. 写寄存器操作同样适用。

5. 消息发送与结构体 backend

  1. 发送消息时涉及一个重要结构体:backend。
  1. backend 是 modbus 的后端结构体。
  1. 发送消息前需做准备工作。
  1. 根据串口或网络方式分别发送消息。
  1. 读取串口或网络数据。
  1. 涉及硬件操作时,将其抽象为结构体,这是面向对象编程方法。
  1. 网络发送与接收操作。

6. 系统支持

  1. 支持 Windows 和 Linux。
  2. Linux 使用 write 函数发送数据,Windows 使用 write file 发送数据。
相关推荐
二哈赛车手5 小时前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
吃好睡好便好6 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
星寂樱易李6 小时前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
nashane6 小时前
HarmonyOS 6学习:CapsLock键失效诊断与长截图完整实现指南
学习·华为·harmonyos
于小猿Sup7 小时前
VMware在Ubuntu22.04驱动Livox Mid360s
linux·c++·嵌入式硬件·自动驾驶
xian_wwq8 小时前
【学习笔记】AGC协调控制系统概述
笔记·学习
x_yeyue8 小时前
三角形数
笔记·算法·数论·组合数学
chao1898449 小时前
STM32 HAL库驱动AT24C02 EEPROM例程
stm32·单片机·嵌入式硬件
憧憬成为java架构高手的小白9 小时前
docker学习笔记(基于b站多个视频学习)【未完结】
笔记·学习
随身数智备忘录9 小时前
什么是设备管理体系?设备管理体系包含哪些核心模块?
网络·数据库·人工智能