匠心研智造-上位机硬件通讯之Modbus 服务器

WPF上位机硬件通讯之Modbus 服务器

520快乐!

Let me share my code with you

主界面

英文主界面

Modbus服务器联合ModbusPoll调试实战

马思克的第一性原理之背诵知识点

适用:PLC / 仪表 / 变频器 / 上位机开发 / 现场调试

包含:功能码、地址分区、数据类型、字符串、大小端、异常码、通讯原理、踩坑大全

一、Modbus 核心功能码(FC1~FC7 + 常用扩展)

一、Modbus 核心功能码(FC1~FC7 + 常用扩展)

1. 基础七大功能码(必背)

功能码 名称 读写 对应区域 场景
FC01 读线圈 读 0xxxx 读取开关输出状态、继电器状态
FC02 读离散输入 读 1xxxx 读取外部传感器开关输入
FC03 读保持寄存器 读 4xxxx 最常用读参数、温度、压力、频率
FC04 读输入寄存器 读 3xxxx 只读实时采集数据
FC05 写单个线圈 写 0xxxx 单点启停、开关控制
FC06 写单个寄存器 写 4xxxx 调试最常用写参数、阈值、设定值
FC07 读异常状态 读 设备状态 极少用,简易故障诊断

2. 工程高频扩展功能码

  • FC08:通讯诊断、线路测试

  • FC15:批量写线圈

  • FC16:批量写保持寄存器(项目刚需)

  • FC17:读取从站设备信息

二、Modbus 四大地址分区(核心中的核心)

  • 0区 线圈 00001~09999:位数据、可读写、开关量,FC01/05/15

  • 1区 离散输入 10001~19999:位数据、只读、外部输入,FC02

  • 3区 输入寄存器 30001~39999:字数据、只读、仪表采集值,FC04

  • 4区 保持寄存器 40001~49999:字数据、可读写、设备参数,FC03/06/16

备注:程序内偏移地址通常从0开始 ,图纸地址从1开始,调试最容易踩坑。

三、Modbus 完整数据类型(含字符串)

基础规则:1寄存器 = 16位 = 2字节

数据类型 占用寄存器 取值范围 用途
Bool 位 1bit 0 / 1 开关、报警、状态
UInt16 1 0 ~ 65535 频率、转速、电压整数
Int16 1 -32768 ~ 32767 温差、偏移量、正负值
UInt32 2 0 ~ 4294967295 累计电量、累计流量
Int32 2 -2147483648 ~ 2147483647 大额正负计量值
Float 单精度浮点 2 ±3.4E38 温度、压力、液位、模拟量
Double 双精度 4 极大 高精度设备(极少用)
BCD码 1 0~9999 时间、日期、设备编号
ASCII 字符串 按需 可见字符 设备名、序列号、地址

字符串存储规则(重点)

  • 1寄存器 = 2个ASCII字符

  • 高字节在前、低字节在后

  • 末尾 0x00 为空终止符,读取后需截断

  • 字符数奇数时,最后寄存器低位补0

四、Modbus 四大大小端字节序(ABCD 完整版)

假设有32位数据原始4字节顺序:A(最高) B C D(最低)

排序格式 字节顺序 名称 说明 场景
标准大端 AB CD 字大端+字节大端 协议默认,无需转换 绝大多数标准PLC/仪表
字反转 CD AB 字序反转 两个寄存器整体颠倒 大量国产非标设备
字节反转 BA DC 字节序反转 单个寄存器内部倒序 上位机乱码高发
全小端 DC BA 全反转 字+字节全部颠倒 部分单片机设备

口诀:先试ABCD,数据不对立刻换CDAB(90%情况解决)

五、数据缩放换算(工程固定公式)

  • 温度、湿度:原值 ÷ 10

  • 电压、电流:原值 ÷100

  • 百分比:原值 ÷ 10

  • 累计量:原值 × 倍率

六、通讯参数硬性规则

1. 设备类型

固定:一主多从,一个主站轮询多个从站

从站地址:1~247,0为广播地址

1.1 设备组合

Modbus+网络=ModbusTCP

Modbus+串口=ModbusRtu

2. RTU串口参数(必须全部一致)

  • 波特率:9600 / 19200 / 38400 / 115200。。。
  • 数据位:8
  • 停止位:1 / 2
  • 校验位:无校验、奇校验、偶校验

2.1TCP参数

IP/端口号

3. 读写数量限制(高频报错点)

  • 单次读线圈最大:2000点

  • 单次读寄存器最大:125个

  • 超出必须分包轮询

七、异常码排查大全(调试神器)

  • 01:非法功能码(设备不支持该指令)

  • 02:非法地址(寄存器地址不存在)

  • 03:非法数据值(参数超出设备范围)

  • 04:从站设备故障(设备内部报错)

  • 05:应答确认

  • 06:从站忙(重试即可)

八、RTU / TCP 报文核心区别

  • Modbus-RTU :从站ID + 功能码 + 数据 + CRC16校验

  • Modbus-TCP :事务头 + 长度 + 从站ID + 功能码 + 数据(无CRC)

九、现场90%故障速查

  1. 不通讯:AB线接反、波特率/校验位不一致、从站地址错

  2. 数据乱码:大小端顺序不对

  3. 只能读不能写:寄存器只读、设备锁定、权限未开

  4. 偶尔丢包:485无终端电阻、线路干扰、波特率过高

  5. 浮点数值离谱:高低字颠倒

十、极简工程口诀

  • 读数值用03,写参数用06
  • 采传感器用04,控开关用01/05
  • 浮点不对先换CDAB
  • 所有32位数据必须连续寄存器
  • 串口看参数,网口看IP和端口

漂亮饭,安排!


*****************Y*******X******G***K******

相关推荐
星恒随风2 小时前
MySQL 从零入门(三):表的约束详解
linux·服务器·数据库·笔记·mysql
Alluxio3 小时前
Alluxio + OCI:为 AI 工作负载实现亚毫秒访问延迟与可扩展吞吐
运维·数据库·人工智能·分布式·缓存·ai·语言模型
坤坤子吖7 小时前
Linux网络编程:自定义应用层协议与 JSON 序列化
linux·服务器·网络·c++·笔记·json
Sayai7 小时前
Neo4j 图数据质量检查实战:环路检测、孤立节点与连通分量,两条 Cypher 引出的数据体检清单(含变长路径性能陷阱)
运维·neo4j·图数据库·数据质量·cypher
青瓦梦滋7 小时前
Redis主从复制
服务器·数据库·redis·缓存·bootstrap
Elastic 中国社区官方博客8 小时前
更少的位数,相同的召回率:DiskBBQ 更保守的自动校准扫描
大数据·运维·开发语言·人工智能·elasticsearch·搜索引擎
方便面不加香菜8 小时前
Docker Volume -- 管理卷Volume详解
运维·docker·容器
沫璃染墨8 小时前
从零入门计算机网络系列(十八):TCP连接管理详解——从三次握手与四次挥手到TIME_WAIT机制
运维·服务器·网络·c++·网络协议·tcp/ip·tcp
Felven9 小时前
华为鲲鹏920s芯片serdestool工具使用说明
linux·运维·服务器·华为·鲲鹏920·serdestool
江湖有缘9 小时前
Docker实战 | 使用Docker部署lemonitor镜像站点列表程序
运维·docker·容器