我用 3 个月,把 20 年的工业디버깅经验做成了위챗 미니프로그램
从 Modbus 디버깅到 PID 整定,从시리얼 포트통신到센서标定,这款도구통합了엔지니어링师最常用的 20+ 专业계산器
前言:一个엔지니어링师的"执念"
我是一名산업 자동화엔지니어링师,从业 20 年,待过设备厂商、통합商,也做过甲方。
这些年,我见过太多엔지니어링师在现场的"狼狈":
- 背着十几斤重的电脑跑现场,就为了디버깅一个 Modbus 设备
- 忘带 USB 转시리얼 포트线,整个项目停工半天
- 电脑上的软件要收费,破解版还怕有病毒
- PID 매개변수不会整,打电话问厂家,等半天回复
- 센서标定靠手算,계산器按错一次,전체重来
最痛苦的一次,是某次深夜抢修。客户的 PLC 통신故障,我赶到时已经是晚上 10 点。结果发现忘带电脑,只能打电话让同事送,折腾到凌晨 3 点才搞定。
那一刻我就想:为什么不能只带手机就去现场?
于是,我花了整整 3 个月,利用业余时间개발了这款 Modbus 디버깅 도우미 위챗 미니프로그램。
它不仅仅是一个디버깅 도구,更是我 20 年经验的结晶。
一、核心功能:20+ 专业도구,装进手机
1.1 Modbus 디버깅全家桶
小程序最核心的功能,就是 完整的 Modbus 프로토콜栈支持。
(1)Modbus Poll - 마스터轮询도구
这是使用频率最高的功能,没有之一。
支持的기능 코드:
| 기능 코드 | 名称 | 用途 |
|---|---|---|
| FC01 | Read Coils | 코일 읽기 (FC01)(开关量출력) |
| FC02 | Read Discrete Inputs | 이산 입력 읽기 (FC02)(开关量입력) |
| FC03 | Read Holding 회원가입s | 유지 레지스터 읽기 (FC03)(最常用) |
| FC04 | Read Input 회원가입s | 입력 레지스터 읽기 (FC04)(只读) |
| FC05 | Write Single Coil | 단일 코일 쓰기 (FC05) |
| FC06 | Write Single 회원가입 | 단일 레지스터 쓰기 (FC06) |
| FC15 | Write Multiple Coils | 다중 코일 쓰기 (FC15) |
| FC16 | Write Multiple 회원가입s | 다중 레지스터 쓰기 (FC16) |
| FC17 | Report Slave ID | 通报클라이언트 ID |
| FC22 | Mask Write 회원가입 | 掩码写레지스터(改单个 bit) |
| FC23 | Read/Write Multiple | 同时读/写多个레지스터 |
| FC43/14 | Read Device ID | 읽기设备标识 |
연결방식:
- Modbus TCP:支持任意 IP 和포트,自动저장연결历史
- 蓝牙연결:支持普通蓝牙转 485 模块和 PACO 蓝牙适配器
- 포트转发:支持路由器포트映射(如外部 1502 → 内部 502)
데이터표시 형식:
同一个레지스터的原始데이터,支持 7 种표시 형식 一键전환:
Signed(有符号) → -32768 ~ 32767 Unsigned(无符号) → 0 ~ 65535 Hex(16진수) → 0x0000 ~ 0xFFFF Long(长整型) → 32 位整数 Float(浮点型) → IEEE 754 单精度 Float Swapped → 바이트反转浮点 Binary(2진수) → 0000 0000 0000 0001
💡 实际案例:某온도 센서返回 0x4248 0x0000,如果按 16 位整数看是 17480 和 0,完全不对。전환到 Float 형식,显示 50.0,这才是实际온도值。
高级도구:
- 通讯监视面板:实时记录所有 Tx/Rx 원본 프레임,支持暂停/继续,一键공유
- TC 测试中心:직접 입력 Hex 문자串보내기,보기原始响应,디버깅사용자 정의 프로토콜
- 实时图表:입력要监控的레지스터주소,柱状图实时显示数值变化
- 请求프레임预览:在设置界面实时显示即将보내기的 RTU/ASCII 帧结构(含 CRC/LRC 체크섬)
(2)Modbus Slave - 슬레이브模拟器
这个功能很多人忽略,但其实非常实用。
使用시나리오:
- 测试上位机软件(如구성(SCADA)王、WinCC)
- 验证 PLC 程序逻辑
- 교육新员工(无需真实设备)
- 개발阶段模拟슬레이브响应
支持功能:
- 模拟코일、이산 입력、유지 레지스터、입력 레지스터
- 自定义初始值
- 支持批量设置주소范围
- 实时显示마스터请求프레임
(3)Modbus RTU/TCP/ASCII - 프로토콜详解
小程序对三种传输모드都有详细설명和实战예제。
RTU vs ASCII 对比:
| 特性 | RTU | ASCII |
|---|---|---|
| 编码방식 | 2진수 | ASCII 文本 |
| 체크섬 방식 | CRC16 | LRC |
| 帧길이 | 较短(高效) | 约为 RTU 2 倍 |
| 帧标识 | 3.5 문자静默间隔 | ":" 开头 + CR LF 结尾 |
| 适用시나리오 | 大多数工业设备 | 老旧设备/调制解调器 |
CRC16 算法实现(核心代码):
// MODBUS CRC-16 (低바이트在前)
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;
}
}
}
const lo = crc & 0xFF;
const hi = (crc >> 8) & 0xFF;
return lo.toString(16).toUpperCase().padStart(2, '0') + ' ' +
hi.toString(16).toUpperCase().padStart(2, '0');
}
LRC 算法实现:
// MODBUS ASCII LRC
calcLRC(bytes) {
let sum = 0;
for (let i = 0; i < bytes.length; i++) {
sum += bytes[i];
}
const lrc = ((~sum) + 1) & 0xFF;
return lrc.toString(16).toUpperCase().padStart(2, '0');
}
1.2 시리얼 포트디버깅 도우미
这是第二个高频使用的功能。
核心特性:
- 三种연결방식:蓝牙 / TCP / UDP
- 全매개변수설정:통신 속도(9600/19200/38400/57600/115200)、데이터 비트、정지 비트、패리티
- 收发区独立设置:
- 수신区:ASCII/HEX 전환、时间戳、自动换行、显示行号、자동 스크롤
- 보내기区:ASCII/HEX 전환、自动분석转义符(\r\n \t)、반복 전송
- 四种체크섬 방식:CRC-16、累加和、LRC、XOR 체크섬
- 实时통계:RX/TX 바이트数、一键复位
实战案例 1:蓝牙디버깅 PACO 设备
PACO 은(는)常用的蓝牙 485 适配器,小程序对其做了深度优化。
// 构建 PACO 命令 (80 바이트固定길이)
buildPacoCommand(cmdType, param = '') {
let cmd = '';
switch(cmdType) {
case 'read485':
cmd = 'PACO-Setting-Code-PACO-FXY-BT-485-R-485Setting.';
break;
case 'write485':
cmd = `PACO-Setting-Code-PACO-FXY-BT-485-W-485Setting:${param}.`;
break;
case 'read이름':
cmd = 'PACO-Setting-Code- -R-PartNumber.';
break;
case 'write이름':
cmd = `PACO-Setting-Code-PACO-FXY-BT-485-W-Device이름:${param}.`;
break;
}
// 补齐到 76 문자,末尾加 PACO
const paddedCmd = cmd.padEnd(76, ' ') + 'PACO';
return paddedCmd;
}
可以读写 PACO 设备的:
- 485 매개변수(통신 속도/데이터 비트/정지 비트/패리티)
- 设备名称(最大 7 문자)
实战案例 2:TCP 포트限制문제
위챗 미니프로그램对포트有严格限制,这是一个大坑。
// 위챗 미니프로그램포트限制检查
const forbiddenPorts = [1099, 1433, 1521, 1719, 1720, 1723,
2049, 2375, 3128, 3306, 3389, 3659, 4045, 5060, 5061,
5432, 5984, 6379, 6000, 6566, 7001, 7002, 8443, 8888,
9200, 9300, 10051, 10080, 11211, 27017, 27018, 27019];
if (portNum < 1024) {
// 禁止연결 1024 以下포트(如 502)
uni.showModal({
title: '포트受限',
content: '위챗 미니프로그램禁止연결 1024 以下포트,请使用 APP 버전或更换포트',
showCancel: false
});
return;
}
if (portNum >= 8000 && portNum <= 8100) {
// 禁止연결 8000-8100 포트
uni.showModal({
title: '포트受限',
content: '위챗 미니프로그램禁止연결 8000-8100 포트,请更换포트',
showCancel: false
});
return;
}
솔루션:
在路由器做포트转发,比如外部 1502 → 内部 502。
1.3 专业계산器시리즈
这部分是我花心思最多的,也是最能体现"经验价值"的地方。
(1)PID 自整定계산器
PID 매개변수整定是自动控制系统的核心,也是很多엔지니어링师的痛点。
支持的整定方法:
| 方法 | 适用시나리오 | 特点 |
|---|---|---|
| 齐格勒 - 尼科尔斯第一法 | 阶跃响应实验 | 经典方法,适用面广 |
| 齐格勒 - 尼科尔斯第二法 | 临界振荡法 | 需要找到临界增益 |
| Cohen-Coon | 大滞后系统 | 对滞后系统效果好 |
| IMC(内模控制) | 高性能要求 | 매개변수可调,灵活性高 |
| 极点설정 | 特定动态响应 | 需要系统模型 |
입력매개변수:
- 지연时间 L(秒)
- 时间상수 T(秒)
- 过程增益 K
- λ 매개변수(IMC 专用)
출력结果:
- 比例增益 Kp
- 积分时间 Ti
- 微分时间 Td
- 推荐설정(如제어기유형、控制변수选择)
核心算法(齐格勒 - 尼科尔斯第一法):
// Ziegler-Nichols 第一法(阶跃响应法)
zieglerNichols1st(L, T, K) {
// Kp = 1.2 * T / (K * L)
// Ti = 2 * L
// Td = 0.5 * L
const kp = 1.2 * T / (K * L);
const ti = 2 * L;
const td = 0.5 * L;
return { kp, ti, td };
}
实战案例:
某온도控制系统,通过阶跃响应实验得到:
- 지연时间 L = 2.5s
- 时间상수 T = 8.0s
- 过程增益 K = 1.0
代入公式계산:
- Kp = 1.2 × 8.0 / (1.0 × 2.5) = 3.84
- Ti = 2 × 2.5 = 5.0s
- Td = 0.5 × 2.5 = 1.25s
将这三个매개변수입력 PID 제어기,系统响应快速且超调小。
(2)센서标定계산器
센서标定是现场디버깅的常规工作,但手算容易出错。
支持四种모드:
① 线性标定(最常用)
适用于 4-20mA、0-10V 等线性센서。
标定公式:Y = kX + b 其中: k = (Y2 - Y1) / (X2 - X1) // 斜率 b = Y1 - k * X1 // 截距
快速换算表:
| 百分比 | 信号值 (mA) | 엔지니어링值 (℃) |
|---|---|---|
| 0% | 4.00 | 0.00 |
| 25% | 8.00 | 25.00 |
| 50% | 12.00 | 50.00 |
| 75% | 16.00 | 75.00 |
| 100% | 20.00 | 100.00 |
② 多点拟合
适用于非线性센서(如热电偶、热电阻)。
支持:
- 二次曲线拟合
- 三次曲线拟合
- 最小二乘法
③ 온도专用모드
内置常用온도 센서分度表:
- PT100 热电阻
- K 型热电偶
- J 型热电偶
- E 型热电偶
- T 型热电偶
④ 误差分析
계산:
- 绝对误差
- 相对误差
- 满量程误差
- 线性度
实战案例:
某压力变送器,量程 0-10bar,출력 4-20mA。
标定点设置:
- 低点:4mA → 0bar
- 高点:20mA → 10bar
계산 결과:
- k = (10 - 0) / (20 - 4) = 0.625
- b = 0 - 0.625 × 4 = -2.5
标定公式:Y = 0.625X - 2.5
验证:
- 입력 12mA → Y = 0.625 × 12 - 2.5 = 5.0bar ✓
- 입력 20mA → Y = 0.625 × 20 - 2.5 = 10.0bar ✓
(3)체크섬 계산도구
这个도구통합了 10+ 种工业통신 프로토콜常用的체크섬算法。
支持功能:
| 체크섬유형 | 설명 | 适用시나리오 |
|---|---|---|
| MODBUS RTU CRC-16 | 16 位循环冗余체크섬 | Modbus RTU 프로토콜 |
| MODBUS ASCII LRC | LRC 체크섬 | Modbus ASCII 프로토콜 |
| 체크섬(16 位) | 累加和取低 16 位 | 简单프로토콜 |
| XOR 체크섬(8 位) | 所有바이트异或 | 사용자 정의 프로토콜 |
| 西门子 S7 체크섬 | S7 통신 프로토콜专用 | 西门子 PLC |
| 三菱 FX 求和체크섬 | 三菱통신 프로토콜 | 三菱 PLC |
| BCC 체크섬 | 块체크섬문자 | 시리얼 포트통신 |
| IP/TCP 체크섬 | 네트워크프로토콜체크섬 | TCP/IP 栈 |
| 欧姆龙 FINS FCS | FINS 프로토콜체크섬 | 欧姆龙 PLC |
| CAN CRC | CAN 总线체크섬 | 汽车电子 |
使用方法:
- 选择체크섬유형
- 입력原始 HEX 데이터
- 自动계산체크섬
- (可选)附加체크섬后보내기
实战案例:Modbus RTU 命令
原始데이터:01 03 00 00 00 01
계산 CRC-16:
- 입력 6 바이트
- 계산得 CRC = 0x840A
- 低바이트在前:
84 0A
完整프레임:01 03 00 00 00 01 84 0A
1.4 其他专业도구
小程序还有 15+ 专业도구,这里简单列举:
(1)PLC 디버깅 도구
- Q06 开关디버깅 도우미:专门针对 Q06 시리즈开关的디버깅 도구
- X160 디버깅 도구:X160 设备专用디버깅
- ZLAN 设备管理器:有人物联网 ZLAN 시리즈设备管理
(2)액추에이터디버깅
- 调光디버깅 도우미:0-10V/PWM 调光器디버깅
- 8 路릴레이控制:多路릴레이批量控制
- 伺服脉冲계산:伺服모터脉冲当量계산
(3)变频器디버깅
- 变频器디버깅 도구:支持主流变频器매개변수设置
(4)其他계산器
- 压力变送器디버깅:差压/压力变送器계산
- 远程协助도구:实时共享디버깅화면
二、기술架构:小程序也能做专业도구
2.1 기술选型
前端框架: uni-app
选择理由:
- 一套代码编译到위챗 미니프로그램、H5、APP
- 丰富的组件库
- 良好的蓝牙/TCP/UDP API 支持
UI 框架: colorUI + 自定义组件
데이터存储:
- 本地存储:uni.setStorageSync
- 연결历史记录
- 项目설정저장
2.2 核心기술难点
(1)蓝牙 BLE 연결
위챗 미니프로그램的蓝牙 API 有一些限制,需要特殊处理。
难点 1:服务特征值查找
不同蓝牙模块的 Service UUID 和 Characteristic UUID 不同,需要智能查找。
// 遍历所有服务查找可写特征
findWritableCharacteristic() {
if (this.currentServiceIndex >= this.allServices.length) {
// 所有服务都遍历完了
if (this.foundWriteChar) {
this.finishBluetoothConnection();
} else {
uni.showToast({ title: '未找到可写特征', icon: 'none' });
}
return;
}
const service = this.allServices[this.currentServiceIndex];
uni.getBLEDeviceCharacteristics({
deviceId: this.connectedDeviceId,
serviceId: service.uuid,
success: (res) => {
const characteristics = res.characteristics;
// 查找策略:
// 1. 优先找同时支持 write 和 notify 的特征(双向통신)
// 2. 其次找只支持 write 的特征
// 3. 最后找支持 writeNoResponse 的特征
let writeChar = characteristics.find(c =>
c.properties.write === true &&
(c.properties.notify === true || c.properties.indicate === true)
);
if (!writeChar) {
writeChar = characteristics.find(c => c.properties.write === true);
}
if (!writeChar) {
writeChar = characteristics.find(c => c.properties.writeNoResponse === true);
}
if (writeChar) {
this.writeCharacteristicId = writeChar.uuid;
this.foundWriteChar = true;
this.finishBluetoothConnection();
return;
}
// 当前服务未找到,继续下一个
this.currentServiceIndex++;
this.findWritableCharacteristic();
}
});
}
难点 2:PACO 设备 80 바이트单包보내기
PACO 设备需要一次보내기 80 바이트,但 BLE 默认 MTU 只有 20 바이트。
솔루션:
// 设置 BLE MTU(最大传输单元)
setBLEMTU(deviceId, callback) {
if (wx.setBLEMTU) {
wx.setBLEMTU({
deviceId: deviceId,
mtu: 512, // 设置为 512 바이트
success: (res) => {
console.log('MTU 设置成功');
callback && callback();
},
fail: (err) => {
console.error('MTU 设置失败', err);
callback && callback();
}
});
} else {
callback && callback();
}
}
(2)TCP Socket 통신
위챗 미니프로그램的 TCP Socket API 是异步的,需要处理연결超时、데이터分包、粘包等문제。
연결超时处理:
const connTimeout = setTimeout(() => {
if (!self.isConnected) {
uni.hideLoading();
uni.showToast({ title: '연결超时', icon: 'none' });
try { tcp.close(); } catch(e) {}
self.tcpSocket = null;
}
}, 8000); // 8 秒超时
tcp.onConnect(function(res) {
clearTimeout(connTimeout);
self.isConnected = true;
// ...
});
데이터分包处理:
handleTcpResponse(hex데이터) {
const hex = hex데이터.replace(/\s+/g, '');
// 将수신到的데이터추가到缓冲区
for (let i = 0; i < hex.length; i += 2) {
this.receiveBuffer.push(parseInt(hex.substr(i, 2), 16));
}
// 使用 MBAP 头的 Length 필드判断帧完整性
while (this.receiveBuffer.length >= 7) {
const mbapLength = (this.receiveBuffer[4] << 8) | this.receiveBuffer[5];
const totalFrameLength = 6 + mbapLength;
if (this.receiveBuffer.length >= totalFrameLength) {
// 提取完整的一帧
const frame = this.receiveBuffer.splice(0, totalFrameLength);
this.parseModbusTcpResponse(frame);
} else {
// 데이터不完整,대기更多데이터
break;
}
}
}
(3)大데이터处理
시리얼 통신 디버깅时,如果长时间运行,会产生大量데이터。
优化策略:
// 消息缓冲区管理
maxMessageCount: 800, // 最多저장 800 条
maxVisibleMessageChars: 240, // 每条最多显示 240 문자
trimMessageBuffer() {
const maxTotalChars = this.maxMessageCount * this.maxVisibleMessageChars * 2;
while (this.messages.length > this.maxMessageCount ||
this.totalMessageChars > maxTotalChars) {
const removed = this.messages.shift();
if (removed && removed.데이터) {
this.totalMessageChars -= removed.데이터.length;
}
}
}
// 超长消息自动截断,支持展开/收起
isMessageTruncated(msg) {
return !!(msg && msg.데이터 &&
msg.데이터.length > this.maxVisibleMessageChars);
}
getDisplayMessage(msg) {
if (!msg || !msg.데이터) return '';
if (msg.expanded || !this.isMessageTruncated(msg)) {
return msg.데이터;
}
return msg.데이터.slice(0, this.maxVisibleMessageChars) + '…';
}
三、设计理念:엔지니어링师懂엔지니어링师
3.1 Win7 风格界面
很多人问为什么用 Win7 风格?
因为 熟悉。
大多数工业엔지니어링师天天对着电脑,Win7 的界面是最熟悉的。看到这种风格,就有"专业도구"的感觉。
设计细节:
- 渐变蓝色标题栏
- 立体边框(外浅内深)
- 灰色背景 + 白色콘텐츠区
- 等宽字体显示데이터(Courier New)
3.2 远程协助功能
这个功能是我在现场디버깅时想到的。
시나리오:
现场设备故障,我搞不定,需要同事远程协助。但传统방식只能电话설명,效率极低。
솔루션:
// 生成协助会话码
시작RemoteAssist() {
const sessionId = generateRandomSessionId();
this.remoteAssistSessionId = sessionId;
this.remoteAssistShowPanel = true;
// 实时转发통신데이터
this.remoteAssistForward('tx', 'Tx', 데이터);
this.remoteAssistForward('rx', 'Rx', 데이터);
// 수신远程命令
this._executeRemoteCommand(cmd);
}
使用流程:
- 클릭"远程协助"
- 生成 6 位会话码
- 공유给微信好友
- 对方열기后,实时보기통신데이터
- 对方可以远程명령 보내기
价值:
- 无需截图/录屏
- 实时双向통신
- 支持多人协作
3.3 데이터导出공유
现场디버깅完,经常需要把데이터发给同事或存档。
导出형식:
【시리얼 통신 디버깅 - 통신记录】 导出时间:2026-04-05 11:00:00 共 50 条记录 보내기:1200 바이트,수신:800 바이트 ======================================== [11:00:00.123] 보내기:01 03 00 00 00 01 84 0A [11:00:00.456] 수신:01 03 02 00 0A B9 C8 [11:00:01.123] 보내기:01 03 00 00 00 0A C5 CD ... ======================================== 来自:Modbus 디버깅 도우미 위챗 미니프로그램
实现방식:
buildExportLogContent(options = {}) {
let content = `${options.title || '【시리얼 통신 디버깅 - 통신记录】'}\n`;
content += `导出时间:${new Date().toLocaleString()}\n`;
content += `共 ${this.messages.length} 条记录\n`;
content += `보내기:${this.sentCount} 바이트,수신:${this.receivedCount} 바이트\n`;
content += `${'='.repeat(40)}\n\n`;
this.messages.forEach((msg) => {
const direction = msg.type === 'sent' ? '보내기' : '수신';
content += `[${msg.time}] ${direction}: ${msg.데이터}\n`;
});
content += `\n${'='.repeat(40)}\n`;
content += `来自:Modbus 디버깅 도우미 위챗 미니프로그램`;
return content;
}
四、用户反馈:真实的声音
上线 2 个月,已经有 5000+ 엔지니어링师在使用。
反馈 1:
"太方便了!以后出差只带手机就够了。昨天去现场,客户都惊讶我怎么只带个手机就搞定了。"
—— 江苏,自动化엔지니어링师,王工
反馈 2:
"PID 整定계산器帮了大忙。以前整定매개변수要试半天,现在입력 L/T/K,直接出结果。"
—— 广东,控制엔지니어링师,李工
反馈 3:
"远程协助功能太强了。现场遇到문제,直接공유给同事,5 分钟搞定,以前至少要半小时电话沟通。"
—— 浙江,기술支持,장 엔지니어
反馈 4:
"센서标定계산器很实用。我们厂有几百个센서,以前标定要手算,现在입력两个点,自动出公式。"
—— 山东,仪表엔지니어링师,류 엔지니어
五、未来规划
5.1 短期计划(1-3 个月)
- 추가 OPC UA 클라이언트
- 支持 MQTT 프로토콜디버깅
- 추가 BACnet 프로토콜支持
- 云端项目同步(VIP 功能)
5.2 中期计划(3-6 个月)
- APP 버전(突破위챗 미니프로그램포트限制)
- 支持스크립트功能(Lua/JavaScript)
- 추가图表分析功能(趋势图、频谱分析)
- 设备데이터库(常见设备매개변수模板)
5.3 长期愿景
做一个工业엔지니어링师的"百宝箱"。
只要是现场디버깅能用到的도구,都통합到这个小程序里。
让엔지니어링师:
- 少背点东西,轻装上阵
- 少加点班,早点回家
- 少一些烦恼,多一些效率
六、写在最后
做这个小程序的初衷,不是为了赚钱。
只是想解决自己的痛点,顺便帮到更多同行。
20 年的经验告诉我:도구的价值,不在于功能多花哨,而在于真正解决문제。
每一个功能,都是我现场디버깅时真实遇到过的痛点。
每一行代码,都凝聚着我对这个行业的热爱。
如果你也是工业엔지니어링师,希望这个小程序能帮到你。
如果你有任何建议,欢迎反馈。
让我们一起,让工业디버깅变得更简单。
附录:使用방식
방식 1:위챗으로 QR 스캔

방식 2:위챗 검색
검색"Modbus 디버깅 도우미"
방식 3:朋友공유
클릭朋友공유的卡片直接进入
关于作者
20 年산업 자동화经验,待过设备厂商、통합商、甲方。
现专注于工业物联网、边缘계산、智能控制。
欢迎交流:
- 📧 이메일:laitecn@gmail.com
- 💬 微信群:扫码추가助手入群
参考자료
[1] Modbus Application Protocol Specification V1.1b3
[2] 齐格勒 - 尼科尔斯 PID 整定方法
[3] 위챗 미니프로그램蓝牙개발문서
[4] IEEE 754 浮点数표준
[5] CRC16 算法원리与实现
답글 작성