了解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 发送数据。
相关推荐
三佛科技-134163842123 小时前
主控FT32F031便携式吸尘器方案,迷你手持吸尘器MCU控制方案开发
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
Hui_AI7203 小时前
基于RAG的农产品GEO溯源智能问答系统实现
开发语言·网络·人工智能·python·算法·创业创新
愚昧之山绝望之谷开悟之坡3 小时前
什么agentskill.io大白话说清楚
笔记
charlie1145141913 小时前
通用GUI编程技术——图形渲染实战(三十八)——顶点缓冲与输入布局:GPU的第一个三角形
开发语言·c++·学习·图形渲染·win32
程序员JerrySUN3 小时前
Jetson边缘嵌入式实战课程第二讲:JetPack 和 SDK Manager 是什么
c语言·开发语言·网络·udp·音视频
忡黑梨3 小时前
eNSP_从直连到BGP全网互通
c语言·网络·数据结构·python·算法·网络安全
我想我不够好。3 小时前
监控学习 4.29 1.5hour
学习
晓晓hh3 小时前
JavaWeb学习——JUnit和日志
学习·junit·单元测试
pengyi8710153 小时前
共享 IP 池多人使用 分层权限与配额管理方案
运维·服务器·网络