当前位置: 首页 > news >正文

Modbus底层原理分析

文章目录

    • 概要
    • 基础知识介绍
    • 底层原理分析
    • 为什么ModbusRTU使用十六进制通信
    • 小结

概要

1979年,由美国莫迪康公司发明了Modbus通信协议,主要是用来实现控制器之间的通信。本次我将给大家分享一些自己的学习心得。我将会从以下三个方面来分享

1. 基础知识介绍

2. 底层原理分析

3. ModbusRTU为什么要使用十六进制通信

基础知识介绍

首先,我们在实际工作中,我们调试ModbusRTU通信协议时,有四大要素:从站地址、功能码、数据、校验信息。其次我们在深入学习中也需要了解存储区,功能码,协议分类、以及报文(Tx,Rx)。

底层原理分析

现在我们来介绍一下底层的存储区、功能码。

一. 存储区

存储区可以理解成我们电脑中的内存,我们都知道计算机中的内存用途主要是通过CPU读取内存进行程序执行以及数据存储。那么Modbus中的存储区是专用于工业通信的数据交换地。计算机内存中使用过指针、变量名直接访问,Modbus中是通过功能码+地址读写。其中,最与众不同的地方在于存储区是有结构的,通常为四类,而且四类有专属编号:

  1. 0区 输出线圈
  2. 1区 输入线圈
  3. 4区 输出寄存器
  4. 3区 输入寄存器

除此之外,每类还有自己存储范围,在介绍存储范围之前,有个概念先帮助大家理解清楚。在线圈中有65536位(bit/线圈),在其存储中相当于有65536个开关,所以你可以叫他存储布尔值类型。在寄存器中有65536个寄存单元。每个单元有16位,存储的是字节,不存(0/1),两者看似相同,实则不同。在存储范围中,又有两种存储地址

第一种:长地址模型(理想存储地范围【0 ~ 65535】)

  1. 0区:000001 - 065536
  2. 1区:100001 - 165536
  3. 3区:300001 - 365536
  4. 4区:400001 - 465536

第二种:短地址模型(理想存储地范围【0 ~ 9998】)

  1. 0区:00001 - 09999
  2. 1区:10001 - 19999
  3. 3区:30001 - 39999
  4. 4区:40001 - 49999

我知道大家看到这里对于这个就蒙圈了,别着急,是因为这些地址都是人为赋予的,只是为了区分他们的编号,假设我们使用的是长模型,000001就是属于0区,100001就是属于1区,如此划分目的就是为了人类能分得清。地址=【x区】0000 + 1(位的索引号)+ 偏移量,这就是底层规则。那么短地址模型原理和长地址模型一致。

二. 功能码

功能码在存储区的概念种又进行了细分,有专属于自己的十六进制编号

读取:

  1. 读取输出线圈 0X01
  2. 读取输入线圈 0X02
  3. 读取输入寄存器 0X04
  4. 读取输出寄存器 0X03

写入:

  1. 写入输出线圈
    1. 写入单个线圈 0X05
    2. 写入多个线圈 0X0F
  2. 写入输出寄存器
    1. 写入单个寄存器 0X06
    2. 写入多个寄存器 0X10

为了方便记忆,我画了一个盒模型(外层是读取,里层是写入),写入只能写输出类线圈,输入里线圈是无法写入的,以下盒模型的里层,应该是放在右边的,作者由于太懒就不重画了,大家理解一下

为什么ModbusRTU使用十六进制通信

假设我们有个值是55,需要主站到从站读取,我们来看看如果是二进制,十进制会发生什么

  1. 二进制,55的二进制=110111,虽然机器可以读取,但人为调试中,数字多,需换算,且一旦数错一位,整个数据都会乱。对于需要快速检查数据的工程师来说是灾难。
  2. 十进制,RTU通信的时候,是怎么翻译数据的,当又一个55的数据过来,此时会先把55分成两个字符串的5,计算机去查 ASCII 码表,在翻译组装成55,占了两个字节,如果是三位数就更占用空间,效率低下。
  3. 十六进制完美解决这个问题,虽然底层跑的是00110111,但是记作37(Hex) ,3对应0011,7对应0111,这样不仅人为不繁琐,且通信时也无需中转,十进制和二进制的弊端都可解决。

小结

本期主要给大家介绍了ModBus的基础知识,以及底层原理分析,下一期会给大家介绍ModbusTcp的一些相关知识,以及可能会结合实战分享,谢谢大家。

http://www.jsqmd.com/news/1181377/

相关文章:

  • 04-05-YooAsset源码-Unity清单生成与构建报告
  • Blender终极UV工具:TexTools完整指南与10个实用技巧
  • BilibiliDown完整指南:三步轻松下载B站高清视频的终极教程
  • Unity性能优化篇(八) 模型导入设置:从美术源文件到运行时网格的优化全流程
  • C++ 标准容器 STL
  • 7个颠覆性技巧:如何用AI情绪分析重塑股票预测新范式
  • 从零到一:用HTML+CSS打造你的专属个人主页
  • # 2026福州正规24小时黄金回收,同城应急服务商户盘点 - 奢品小当家
  • Spark Streaming 作业 10 大关键指标监控与告警规则设计
  • Unity热更新实战:PuerTS集成TypeScript三大核心技巧与避坑指南
  • 2026年呼和浩特iPhone租赁怎么选不踩雷?5家平台深度测评与租机方案对比 - 中国华商产业观察网
  • 04-06-YooAsset源码-Unity调试与扫描工具
  • Claude支持多少种语言?官方未公布的18种冷门语种实测清单(含濒危语言翻译可行性报告)
  • 从“记忆”到“探索”:OpenEQA如何为AI Agent构建物理世界认知基准?
  • 终极免费方案:Wand-Enhancer完整指南解锁专业版功能
  • 3分钟解锁WeMod Pro完整功能:终极免费增强指南
  • 基于TPA3128D2与STM32F429的高效数字音频放大系统设计
  • TB67H480FNG与PIC18F46K40组合的嵌入式电机控制方案
  • 终极对比:Llama-3.2-3B-Instruct_rai_1.7.1_npu_4K如何实现NPU性能突破?
  • 【Java零基础连载23】Java 泛型全集|泛型原理、通配符、上下限、类型擦除、面试易错点详解
  • HarmonyOS7 ArkUI 图片九宫格切割 - 正方形裁剪预览与发布效果实战:从状态到页面反馈
  • lvgl_v9之表格控件去除边框
  • gemma-4-e4b-it-OptiQ-4bit混合精度策略详解:155层8位 + 224层4位的智能分配
  • Wand-Enhancer:如何免费解锁Wand专业版功能与远程控制
  • 前端工程师必看:从焦虑到转型AI工程师的实战路径,收藏这份指南!
  • 快速上手AMD gpt-oss-20b量化模型:vLLM部署完整指南(含代码示例)
  • 【2024Q3 AI Office插件黑榜】:曝光7款窃取宏权限、伪造数字签名的高危插件,附微软官方检测工具链
  • Realtek RTL8821CU无线网卡驱动终极指南:Linux系统完整兼容解决方案
  • MTKClient终极指南:3步快速恢复变砖的联发科设备
  • HTML5语义化标签与表单优化实践指南