Modbus 엔지니어링师必备神器!RTU/TCP/ASCII 프레임生成분석器,效率提升 10 倍
还在手动계산 Modbus 프레임?这个도구支持 RTU/TCP/ASCII 三种프로토콜,自动요청 생성/响应프레임,CRC/LRC 체크섬、프레임분석、历史记录一键搞定
前言:Modbus 디버깅的痛,엔지니어링师都懂
我做了 20 年산업 자동화,太懂 Modbus 디버깅的痛苦。
你是不是也经常遇到这些情况?
시나리오 1:手动계산프레임,容易错
要유지 레지스터 읽기 (FC03),슬레이브 주소 01,시작주소 40001,数量 10 个
你拿着계산器算:
- 슬레이브 주소:01
- 기능 코드:03
- 시작주소:00 00(40001-1=40000=0x9C40,等等,不对...)
- 数量:00 0A
- CRC 검증:???
算了一半,客户打电话来,回来忘了算到哪了
重新算,CRC 算出来不对
再算,还是不对...
시나리오 2:收到프레임,不会분석
设备返回:
01 03 14 00 0A 00 0B 00 0C 00 0D 00 0E xx xx
你盯着看:
- 这是기능 코드 03 的响应
- 14 是바이트数(20 바이트)
- 但每个레지스터 값是多少?
- 바이트序是 AB 还是 BA?
시나리오 3:三种프로토콜,搞混了
- RTU 用 CRC 검증
- ASCII 用 LRC 체크섬
- TCP 有 MBAP 头
一着急,用 RTU 的방식분석 TCP 프레임,怎么都对不上
시나리오 4:디버깅记录,找不到
昨天调好的프레임,今天找不到了
问同事要,同事说"我也忘了"
重新算,又花 1 小时
这些痛点,我都知道。
所以,我개발了这个 Modbus 프레임生成분석器。
它支持 RTU/TCP/ASCII 三种프로토콜,自动요청 생성/响应프레임。
不用手动계산,不用记公式,点几下就生成。
一、核心功能:为什么엔지니어링师都说好?
1.1 三种프로토콜全覆盖
支持 Modbus 三种传输모드:
| 프로토콜 | 체크섬 방식 | 帧형식 | 适用시나리오 |
|---|---|---|---|
| Modbus RTU | CRC16 | 2진수 | 시리얼 포트통신(RS485/RS232) |
| Modbus ASCII | LRC | ASCII 文本 | 老旧设备/调制解调器 |
| Modbus TCP | 패리티 없음(TCP 保证) | MBAP 头 +ADU | 以太网통신 |
一个도구,搞定所有 Modbus 디버깅시나리오。
1.2 요청 프레임 생성기
功能설명:
① 支持 12 种기능 코드
| 기능 코드 | 名称 | 用途 |
|---|---|---|
| 01 | 读코일 상태 | 읽기开关量출력 |
| 02 | 读이산 입력 | 읽기开关量입력 |
| 03 | 读유지 레지스터 | 最常用(模拟量출력) |
| 04 | 读입력 레지스터 | 只读(模拟量입력) |
| 05 | 写单个코일 | 开关控制 |
| 06 | 写单个레지스터 | 매개변수设置 |
| 0F | 写多个코일 | 批量开关控制 |
| 10 | 写多个레지스터 | 批量매개변수设置 |
| 17 | 读/写多个레지스터 | 同时读写 |
| 2B | 읽기设备标识 | 设备信息查询 |
② 매개변수설정
以기능 코드 03(读유지 레지스터)为例:
슬레이브 주소:01(0-247) 기능 코드:03 시작주소:0000(16진수或10진수) 数量:0010(읽기 10 个레지스터)
③ 自动生成프레임
입력매개변수后,自动生成:
RTU 모드:
01 03 00 00 00 0A C4 0B │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └─ CRC 低바이트 │ │ │ │ │ │ └──── CRC 高바이트 │ │ │ │ │ └─────── 数量低바이트 │ │ │ │ └────────── 数量高바이트 │ │ │ └───────────── 시작주소低바이트 │ │ └──────────────── 시작주소高바이트 │ └─────────────────── 기능 코드 └────────────────────── 슬레이브 주소
ASCII 모드:
:01030000000AFB │ │ │ │ │ └── LRC 체크섬(FB) │ └───── 데이터部分(ASCII 编码) └────────────────── 시작符(:)
TCP 모드:
00 01 00 00 00 06 01 03 00 00 00 0A │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └─ 数量低바이트 │ │ │ │ │ │ │ │ │ └─────── 数量高바이트 │ │ │ │ │ │ │ │ └────────── 시작주소低바이트 │ │ │ │ │ │ │ └───────────── 시작주소高바이트 │ │ │ │ │ │ └──────────────── 기능 코드 │ │ │ │ │ │ └──────────────── 유닛 식별자(슬레이브 주소) │ │ │ │ │ └─────────────────── 길이(后续바이트数) │ │ │ │ └────────────────────── 프로토콜 식별자(0=Modbus) │ │ │ └───────────────────────── 트랜잭션 식별자低바이트 │ │ └──────────────────────────── 트랜잭션 식별자高바이트 └─────────────────────────────────── MBAP 头(7 바이트)
④ 特殊기능 코드支持
기능 코드 05(写单个코일):
- 开关选择:열기 (ON) / 닫기 (OFF)
- 自动转换为 FF00/0000
기능 코드 0F(写多个코일):
- 코일 수량입력
- 可视化코일 선택(圆点버튼)
- 클릭전환状态(灰=OFF,蓝=ON)
- 自动계산바이트数
기능 코드 10(写多个레지스터):
- 레지스터列表(可추가多个)
- 每个레지스터设置:
- 주소(自动계산)
- 데이터유형(UINT16/INT16/UINT32/INT32/FLOAT)
- 바이트序(AB/BA)
- 数值(10진수입력)
- 自动转换为레지스터 값
1.3 응답 프레임 생성기
功能설명:
① 模拟设备响应
用于测试上位机软件(如구성(SCADA)王、WinCC)或 PLC 程序。
② 支持正常响应和异常响应
正常响应(기능 코드 03):
슬레이브 주소:01 기능 코드:03 바이트数:20(10 个레지스터×2) 레지스터 값: - Reg 0: 10(0x000A) - Reg 1: 20(0x0014) - Reg 2: 30(0x001E) - ...
异常响应:
슬레이브 주소:01 기능 코드:83(03+80) 异常码: - 01:非法功能 - 02:非法데이터주소 - 03:非法데이터值 - 04:슬레이브设备故障 - 05:认可 - 06:从属设备忙
③ 데이터유형支持
支持多种데이터유형,自动转换:
| 유형 | 바이트数 | 范围 | 바이트序 |
|---|---|---|---|
| UINT16 | 2 | 0-65535 | 固定 |
| INT16 | 2 | -32768~32767 | 固定 |
| UINT32 | 4 | 0-4294967295 | AB/BA |
| INT32 | 4 | -2147483648~2147483647 | AB/BA |
| FLOAT | 4 | IEEE 754 单精度 | AB/BA/CDAB/BADC |
예제:
입력10진수值:25.5(FLOAT 유형)
自动转换为레지스터 값:
- Reg 0: 0x41CC(高 16 位)
- Reg 1: 0x0000(低 16 位)
1.4 프레임 파서
功能설명:
① 粘贴프레임,自动분석
收到设备返回的프레임,粘贴进去,自动분석:
입력(RTU 모드):
01 03 14 00 0A 00 0B 00 0C 00 0D 00 0E 7A 3B
自动분석:
┌─────────────────────────────────────┐ │ 슬레이브 주소:01 │ │ 기능 코드:03(读유지 레지스터) │ │ 바이트数:20(0x14) │ │ 데이터콘텐츠: │ │ Reg 0: 0x000A = 10 │ │ Reg 1: 0x000B = 11 │ │ Reg 2: 0x000C = 12 │ │ Reg 3: 0x000D = 13 │ │ Reg 4: 0x000E = 14 │ │ CRC 검증:7A3B ✓(正确) │ └─────────────────────────────────────┘
② 支持三种프로토콜분석
- RTU:CRC16 체크섬
- ASCII:LRC 체크섬
- TCP:MBAP 头분석
③ 错误检测
- CRC/LRC 체크섬错误提示
- 프레임길이异常提醒
- 非法기능 코드警告
1.5 历史记录
功能설명:
① 自动저장
每次生成的프레임自动저장,包含:
- 프레임콘텐츠
- 生成时间
- 프레임유형(请求/响应)
② 快捷操作
- 복사:一键복사프레임
- 微信공유:보내기给同事
- 지우기:清除历史记录
③ 分类管理
- 요청 프레임历史
- 响应프레임历史
- 分别管理,清晰明了
1.6 프레임结构可视化
功能설명:
生成的每个프레임,都附带结构분석:
예제(RTU 请求):
┌─────────────────────────────────────┐ │ 프레임结构분석 │ ├─────────────────────────────────────┤ │ 슬레이브 주소 (Slave 주소): 01 │ │ 기능 코드 (기능 코드): 03 │ │ 시작주소 (Start 주소): 0000 │ │ 数量 (Quantity): 000A │ │ CRC 검증 (CRC Check): C40B │ └─────────────────────────────────────┘
예제(TCP 请求):
┌─────────────────────────────────────┐ │ 프레임结构분석 │ ├─────────────────────────────────────┤ │ 트랜잭션 식별자 (Transaction ID): 0001 │ │ 프로토콜 식별자 (Protocol ID): 0000 │ │ 길이 (Length): 0006 │ │ 유닛 식별자 (Unit ID): 01 │ │ 기능 코드 (기능 코드): 03 │ │ 시작주소 (Start 주소): 0000 │ │ 数量 (Quantity): 000A │ └─────────────────────────────────────┘
二、实战案例:엔지니어링师的真实使用시나리오
案例 1:읽기온도 센서데이터
시나리오:
- 设备:某品牌온도变送器
- 통신:RS485(Modbus RTU)
- 需求:읽기 10 个通道的온도值
传统방식:
- 查手册:유지 레지스터주소 40001-40010
- 手动계산프레임:
- 슬레이브 주소:01
- 기능 코드:03
- 시작주소:40001-1=40000=0x9C40
- 数量:10=0x000A
- CRC 검증:手动算或用온라인 도구
- 用시리얼 포트디버깅 도우미보내기
- 收到响应,手动분석
耗时:15-20 分钟
使用도구后:
- 도구 열기,选择 Modbus RTU
- 입력매개변수:
- 슬레이브 주소:01
- 기능 코드:03
- 시작주소:9C40
- 数量:10
- 클릭"生成요청 프레임"
- 복사프레임,보내기
- 收到响应,粘贴到분석器
- 自动분석出 10 个온도值
耗时:2-3 分钟
效率提升:6-10 倍
案例 2:批量设置变频器매개변수
시나리오:
- 设备:某品牌变频器
- 통신:Modbus RTU
- 需求:批量设置 20 个매개변수
传统방식:
- 逐个매개변수写单个레지스터(기능 코드 06)
- 写 20 次,每次계산프레임
- 容易出错,重复劳动
使用도구后:
- 选择기능 코드 10(写多个레지스터)
- 추가 20 个레지스터:
- 주소:自动계산
- 데이터유형:选择
- 数值:입력
- 一次生成프레임
- 보내기,完成
耗时:从 1 小时 → 5 分钟
案例 3:디버깅上位机软件
시나리오:
- 개발구성(SCADA)王/WinCC 项目
- 需要模拟 Modbus 슬레이브设备
- 测试上位机程序逻辑
使用도구:
- 用응답 프레임 생성기
- 设置模拟데이터
- 응답 생성프레임
- 보내기给上位机
- 验证程序逻辑
好处:
- 无需真实设备
- 可模拟各种异常
- 提高개발效率
三、기술细节:엔지니어링师关心的
3.1 CRC16 체크섬算法
Modbus RTU 使用 CRC16(循环冗余체크섬):
// CRC16 계산(低바이트在前)
function calcCRC16(bytes) {
let crc = 0xFFFF;
for (let i = 0; i < bytes.length; i++) {
crc ^= bytes[i];
for (let j = 0; j < 8; j++) {
if (crc & 0x0001) {
crc = (crc >> 1) ^ 0xA001;
} else {
crc >>= 1;
}
}
}
return crc; // 低바이트在前
}
예제:
프레임:01 03 00 00 00 0A CRC:C4 0B(低바이트在前) 完整:01 03 00 00 00 0A C4 0B
3.2 LRC 체크섬算法
Modbus ASCII 使用 LRC(LRC 체크섬):
// LRC 계산
function calcLRC(bytes) {
let sum = 0;
for (let i = 0; i < bytes.length; i++) {
sum += bytes[i];
}
const lrc = ((~sum) + 1) & 0xFF;
return lrc;
}
예제:
프레임:01 03 00 00 00 0A LRC:FB 完整::01030000000AFB
3.3 바이트序문제
32 位데이터(UINT32/INT32/FLOAT)的바이트序:
| 바이트序 | 名称 | 예제(0x12345678) |
|---|---|---|
| AB | Big Endian | 12 34 56 78 |
| BA | Little Endian | 34 12 78 56 |
| CDAB | Mixed | 56 78 12 34 |
| BADC | Mixed | 78 56 34 12 |
도구支持自动转换:
- 选择바이트序
- 입력10진수值
- 自动转换为레지스터 값
3.4 Modbus TCP 的 MBAP 头
Modbus TCP 프레임结构:
┌─────────────────────────────────────┐ │ MBAP 头(7 바이트) │ ├─────────────────────────────────────┤ │ 트랜잭션 식별자(2 바이트) │ │ 프로토콜 식별자(2 바이트)=0 │ │ 길이(2 바이트) │ │ 유닛 식별자(1 바이트)=슬레이브 주소 │ ├─────────────────────────────────────┤ │ PDU(기능 코드 + 데이터) │ └─────────────────────────────────────┘
예제:
00 01 00 00 00 06 01 03 00 00 00 0A │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └─ 数量低바이트 │ │ │ │ │ │ │ │ │ └─────── 数量高바이트 │ │ │ │ │ │ │ │ └────────── 시작주소低바이트 │ │ │ │ │ │ │ └───────────── 시작주소高바이트 │ │ │ │ │ │ └──────────────── 기능 코드 │ │ │ │ │ │ └──────────────── 유닛 식별자 │ │ │ │ │ └─────────────────── 길이(6 바이트) │ │ │ │ └────────────────────── 프로토콜 식별자(0=Modbus) │ │ │ └───────────────────────── 트랜잭션 식별자低바이트 │ │ └──────────────────────────── 트랜잭션 식별자高바이트 └─────────────────────────────────── MBAP 头
四、用户反馈:엔지니어링师怎么说
反馈 1:自动化엔지니어링师(5 年经验)
"以前手动算 Modbus 프레임,经常算错。现在用这个도구,点几下就生成,CRC 自动계산,太方便了!效率至少提升 5 倍。"
反馈 2:电气엔지니어링师(10 年经验)
"支持三种프로토콜,不用전환도구了。特别是 TCP 的 MBAP 头,以前老是搞混,现在自动生成,不会错。"
反馈 3:PLC 엔지니어링师(8 年经验)
"응답 프레임 생성기很好用,模拟슬레이브设备测试 PLC 程序,无需真实设备,개발效率提高很多。"
反馈 4:디버깅엔지니어링师(3 年经验)
"历史记录功能很实用,昨天调好的프레임,今天直接복사,不用重新算。微信공유也很方便,发给同事一起디버깅。"
五、写在最后
我做这个도구,不是为了取代엔지니어링师。
而是为了解放人力。
让엔지니어링师不再手动계산프레임,不再记复杂的公式,不再为 CRC 검증发愁。
让大家把时间花在更有价值的事情上:
- 系统架构设计
- 控制逻辑优化
- 现场문제解决
도구不是敌人,而是帮手。
善用도구的엔지니어링师,会淘汰不用도구的엔지니어링师。
希望这个도구能帮到更多同行。
附录:使用방식
使用방식 1:위챗으로 QR 스캔

使用방식 2:위챗 검색
검색"Modbus 디버깅 도우미"
关于作者
20 年산업 자동화经验,待过设备厂商、통합商、甲方。
现专注于工业物联网、边缘계산、智能控制。
欢迎交流:
- 📧 이메일:laitecn@gmail.com
- 💬 微信群:扫码추가助手入群
如果觉得有用,欢迎 点좋아요 + 在看 + 转发 支持一下!
转发给更多电气엔지니어링师,一起用도구提效!
답글 작성