我用 3 个月,把 20 年的工业デバッグ经验做成了WeChat小程序
从 Modbus デバッグ到 PID 整定,从シリアル通信到センサーは标定,这款工具集成了エンジニア最もよく使われる 20+ 专业計算器
前言:一个エンジニア的"执念"
我是一名工业自動化エンジニア,从业 20 year,待过デバイス厂商、集成商,也做过甲方。
这些年,我见过太多エンジニア在现场的"狼狈":
- 背着十几斤重的电脑跑现场,就为了デバッグ一个 Modbus device
- 忘带 USB 转シリアルポート线,整个项目停工半天
- 电脑上的软件要收费,破解版还怕有病毒
- PID 参数不会整,打电话问厂家,等半天回复
- センサーは标定靠手算,計算器按错一次,すべて重来
最痛苦的一次,是某次深夜抢修。客户的 PLC 通信故障,我赶到时已经是晚上 10 点。结果发现忘带电脑,只能打电话让同事送,折腾到凌晨 3 点才Got it.
那一刻我就想:なぜか。不能只带手机就去现场?
于是,我花了整整 3 个月,利用业余时间开发了这款 Modbus Debugging Assistant WeChat Mini Program。
它不仅仅是一个デバッグツール,更是我 20 年经验的结晶。
一、核心功能:20+ 专业工具,装进手机
1.1 Modbus デバッグ全家桶
小程序最核心的功能,就是 完全的 Modbus protocol栈サポート。
(1)Modbus Poll - メインステーションのポーリング工具
这是使用频率最高的功能,ない之一。
サポート的機能コード:
| function code | Name | 用途 |
|---|---|---|
| FC01 | Read Coils | Read coil status(开关量出力) |
| FC02 | Read Discrete Inputs | Read discrete inputs(开关量入力) |
| FC03 | Read Holding Registers | Read and hold register(most common) |
| FC04 | Read Input Registers | Read input register(読み取り専用) |
| FC05 | Write Single Coil | Write into a single coil |
| FC06 | Write Single Register | Write to a single register |
| FC15 | Write Multiple Coils | Write multiple coils |
| FC16 | Write Multiple Registers | Write multiple registers |
| FC17 | Report Slave ID | 通报クライアント側は ID |
| FC22 | Mask Write Register | 掩码写レジスタ(改单个 bit) |
| FC23 | Read/Write Multiple | 同时读/write multiple registers |
| FC43/14 | Read Device ID | 読み取りデバイス标识 |
连接方式:
- Modbus TCP:サポート任意 IP ポートと港。,自动保存连接历史
- 蓝牙连接:サポート普通蓝牙转 485 モジュール和 PACO 蓝牙适配器
- ポートフォワーディング:サポートルータの設置ポートマッピング(如外部 1502 → 内部 502)
データ表示格式:
同一1つのレジスタ的生データ,サポート 7 种表示格式 一键切换:
Signed(記号付き。) → -32768 ~ 32767 Unsigned(符号なし。) → 0 ~ 65535 Hex(hexadecimal) → 0x0000 ~ 0xFFFF Long(长整型) → 32 ビット整数型 Float(浮点型) → IEEE 754 单精度 Float Swapped → バイト反转浮点 Binary(binary) → 0000 0000 0000 0001
💡 实际案例:某温度センサー戻る 0x4248 0x0000,もし按 16 ビット整数型看是 17480 和 0,完全正しくない。切换到 Float format,表示 50.0,这才是实际温度值。
エキスパート工具:
- 通讯监视面板:实时记录すべての Tx/Rx Original message,サポート暂停/继续,一键シェア
- TC 测试中心:manual input Hex ストリング·ストリング送信,表示元のレスポンス,デバッグ自定义协议
- 实时图表:入力要モニタリング的レジスター·アドレス,柱状图实時に表示数值变化
- リクエスト报文预览:在設定界面实時に表示即将送信的 RTU/ASCII フレーム構造(含 CRC/LRC check)
(2)Modbus Slave - ステーションからのシミュレーション器
这个功能很多人忽略,但其实非常实用。
使用シーン:
- 测试トップマシン软件(如キング·ビュー、WinCC)
- 验证 PLC 程序逻辑
- 培训新员工(无需真实デバイス)
- 开发阶段模拟スレーブレスポンス
サポート功能:
- 模拟コイル、ショップ型入力、レジスタを保持する。、入力レジスタ。
- 自定义初期値は
- サポート批量設定アドレス範囲
- 实時に表示マスターリクエスト报文
(3)Modbus RTU/TCP/ASCII - 契約の詳細
小程序对3つの伝送モード都有详细説明和実践サンプル。
RTU vs ASCII 对比:
| characteristic | RTU | ASCII |
|---|---|---|
| 编码方式 | binary | ASCII Text |
| チェック方式 | 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
- 全参数設定:Baud rate(9600/19200/38400/57600/115200)、data bit、stop bit、check digit
- 收发区独立設定:
- 受信区:ASCII/HEX Switch、时间戳、自动换行、表示行号、auto-scroll
- Sending Area:ASCII/HEX Switch、自动解析转义符(\r\n \t)、loop sending
- 四种チェック方式:CRC-16、累加和、LRC、XOR check
- 实时统计:RX/TX byte count、一键复位
実践案例 1:蓝牙デバッグ PACO device
PACO 是一款常用的蓝牙 485 适配器,小程序对其做了深度优化。
// 构建 PACO Command (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 'readName':
cmd = 'PACO-Setting-Code- -R-PartNumber.';
break;
case 'writeName':
cmd = `PACO-Setting-Code-PACO-FXY-BT-485-W-DeviceName:${param}.`;
break;
}
// 补齐到 76 characters,末尾加 PACO
const paddedCmd = cmd.padEnd(76, ' ') + 'PACO';
return paddedCmd;
}
可以読み書き PACO デバイス的:
- 485 parameter(Baud rate/data bit/stop bit/check digit)
- Device Name(最大 7 characters)
実践案例 2:TCP port限制問題
WeChat小程序对ポート有严格限制,这是一个大坑。
// WeChat小程序ポート限制チェック
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: 'WeChat小程序禁止连接 1024 以下ポート,请使用 APP 版本或更换ポート',
showCancel: false
});
return;
}
if (portNum >= 8000 && portNum <= 8100) {
// 禁止连接 8000-8100 ポート
uni.showModal({
title: 'ポート受限',
content: 'WeChat小程序禁止连接 8000-8100 ポート,请更换ポート',
showCancel: false
});
return;
}
ソリューション:
在ルータの設置做ポートフォワーディング,比如外部 1502 → 内部 502。
1.3 专业計算器系列
这部分是我花心思最多的,也是最能体现"经验价值"的地方。
(1)PID 自整定計算器
PID 参数整定是自動制御システム系统的核心,也是很多エンジニア的痛点。
サポート的整定方法:
| 方法 | 適用可能なシーン | 特点 |
|---|---|---|
| 齐格勒 - 尼科尔斯第一法 | 阶跃レスポンス实验 | 经典方法,适用面广 |
| 齐格勒 - 尼科尔斯第二法 | 临界振荡法 | 需要找到临界增益 |
| Cohen-Coon | 大滞后系统 | 对滞后系统效果好 |
| IMC(内模控制) | 高いパフォーマンスを要求 | 参数可调,灵活性高 |
| 极点設定 | 特定动态レスポンス | 需要系统模型 |
入力参数:
- 延迟时间 L(秒)
- 时间常数 T(秒)
- 过程增益 K
- λ parameter(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 Controller,系统レスポンス快速且超调小。
(2)センサーは标定計算器
センサーは标定是オンサイトデバッグ的常规工作,但手算容易出错。
サポート四种モード:
① 线性标定(most common)
適用される 4-20mA、0-10V 等线性センサーは。
标定公式:Y = kX + b among them: 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 型热电偶
④ 误差分析
result:
- 绝对误差
- 相对误差
- 满量程误差
- 线性度
実践案例:
某压力变送器,量程 0-10bar,出力 4-20mA。
标定点設定:
- 低点:4mA → 0bar
- 高点:20mA → 10bar
Computation result:
- 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 Protocol |
| MODBUS ASCII LRC | 纵向冗余チェック | Modbus ASCII Protocol |
| checksum(16 位) | 累加和取低 16 位 | 简单协议 |
| XOR check(8 位) | すべてのバイト异或 | Custom Protocol |
| シーメンス S7 checksum | S7 通信プロトコル专用 | シーメンス PLC |
| 三菱 FX 求和チェック | 三菱通信プロトコル | 三菱 PLC |
| BCC check | 块チェック文字 | Serial port communication |
| IP/TCP checksum | 网络协议チェック | TCP/IP 栈 |
| オムロン FINS FCS | FINS 协议チェック | オムロン PLC |
| CAN CRC | CAN バスチェック | 汽车電子 |
使用方法:
- 選択チェックタイプ
- 入力元の HEX data
- 自动計算チェックコード
- (可选)附加チェックコード后送信
実践案例:Modbus RTU Command
raw data:01 03 00 00 00 01
result CRC-16:
- 入力 6 byte
- 計算得 CRC = 0x840A
- 低バイト数前に:
84 0A
Complete message:01 03 00 00 00 01 84 0A
1.4 其他专业工具
小程序还有 15+ 专业工具,这里简单列举:
(1)PLC Debug Tools
- Q06 开关デバッグアシスタント:专门针对 Q06 系列开关的デバッグツール
- X160 Debug Tools:X160 デバイス专用デバッグ
- ZLAN デバイスマネージャ(device manager):有人IoT ZLAN 系列デバイス管理
(2)アクチュエーターデバッグ
- 调光デバッグアシスタント:0-10V/PWM 调光器デバッグ
- 8 路继电器控制:多路继电器バッチ制御
- サーボ脉冲計算:サーボ电机脉冲当量計算
(3)周波数変換器デバッグ
- 周波数変換器デバッグツール:サポートメインストリーム周波数コンバータ参数設定
(4)其他計算器
- 压力变送器デバッグ:差压/压力变送器計算
- 远程协助工具:实时共享デバッグ画面
二、技术架构:小程序也能做专业工具
2.1 技术选型
前端框架: uni-app
選択理由:
- 一套代码编译到WeChat小程序、H5、APP
- 丰富的组件库
- 良好的蓝牙/TCP/UDP API サポート
UI 框架: colorUI + 自定义组件
データストア:
- 本地存储:uni.setStorageSync
- 连接履歴
- 项目設定保存
2.2 核心技术难点
(1)蓝牙 BLE connect
WeChat小程序的蓝牙 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 device 80 バイト单包送信
PACO デバイス需要一次送信 80 byte,但 BLE デフォルト MTU 只有 20 byte。
ソリューション:
// 設定 BLE MTU(最大传输ユニット)
setBLEMTU(deviceId, callback) {
if (wx.setBLEMTU) {
wx.setBLEMTU({
deviceId: deviceId,
mtu: 512, // 設定为 512 bytes
success: (res) => {
console.log('MTU 設定成功');
callback && callback();
},
fail: (err) => {
console.error('MTU 設定失敗', err);
callback && callback();
}
});
} else {
callback && callback();
}
}
(2)TCP Socket Communication
WeChat小程序的 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(hexData) {
const hex = hexData.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 characters
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.data) {
this.totalMessageChars -= removed.data.length;
}
}
}
// 超长メッセージ自动截断,サポート展开/收起
isMessageTruncated(msg) {
return !!(msg && msg.data &&
msg.data.length > this.maxVisibleMessageChars);
}
getDisplayMessage(msg) {
if (!msg || !msg.data) return '';
if (msg.expanded || !this.isMessageTruncated(msg)) {
return msg.data;
}
return msg.data.slice(0, this.maxVisibleMessageChars) + '…';
}
三、设计理念:エンジニア懂エンジニア
3.1 Win7 风格界面
很多人问なぜか。用 Win7 风格?
因为 熟悉。
大多数工业エンジニア天天对着电脑,Win7 的界面是最熟悉的。看到这种风格,就有"专业工具"的感觉。
设计细节:
- 渐变蓝色标题栏
- 立体边框(外浅内深)
- 灰色背景 + 白色内容区
- 等宽字体表示データ(Courier New)
3.2 远程协助功能
这个功能是我在オンサイトデバッグ时想到的。
Scenarios:
现场機器の故障,我搞不定,需要同事远程协助。但传统方式只能电话説明,效率极低。
ソリューション:
// 生成协助会话码
startRemoteAssist() {
const sessionId = generateRandomSessionId();
this.remoteAssistSessionId = sessionId;
this.remoteAssistShowPanel = true;
// 实时转发通信データ
this.remoteAssistForward('tx', 'Tx', data);
this.remoteAssistForward('rx', 'Rx', data);
// 受信远程命令
this._executeRemoteCommand(cmd);
}
使用流程:
- Click"远程协助"
- 生成 6 位会话码
- シェア给WeChat好友
- 对方打开后,实时表示通信データ
- 对方可以远程送信命令
价值:
- 无需截图/录屏
- 实时双向通信
- サポート多人协作
3.3 データ导出シェア
オンサイトデバッグ完,经常需要把データ发给同事或存档。
导出格式:
【Serial Port Debugging - search function code, register type】 导出时间:2026-04-05 11:00:00 共 50 件のレコード send:1200 byte,receive:800 byte ======================================== [11:00:00.123] send:01 03 00 00 00 01 84 0A [11:00:00.456] receive:01 03 02 00 0A B9 C8 [11:00:01.123] send:01 03 00 00 00 0A C5 CD ... ======================================== 来自:Modbus Debugging Assistant WeChat Mini Program
実装方式:
buildExportLogContent(options = {}) {
let content = `${options.title || '【Serial Port Debugging - search function code, register type】'}\n`;
content += `导出时间:${new Date().toLocaleString()}\n`;
content += `共 ${this.messages.length} 件のレコード\n`;
content += `send:${this.sentCount} byte,receive:${this.receivedCount} byte\n`;
content += `${'='.repeat(40)}\n\n`;
this.messages.forEach((msg) => {
const direction = msg.type === 'sent' ? 'send' : 'receive';
content += `[${msg.time}] ${direction}: ${msg.data}\n`;
});
content += `\n${'='.repeat(40)}\n`;
content += `来自:Modbus Debugging Assistant WeChat Mini Program`;
return content;
}
四、用户反馈:真实的声音
上线 2 个月,已经有 5000+ エンジニア在使用。
反馈 1:
"太方便了!以后出差只带手机就够了。昨天去现场,客户都惊讶我怎么只带个手机就搞定了。"
—— 江苏,自動化エンジニア,王工
反馈 2:
"PID 整定計算器帮了大忙。以前整定参数要试半天,现在入力 L/T/K,直接出结果。"
—— 广东,控制エンジニア,李工
反馈 3:
"远程协助功能太强了。现场問題が発生する,直接シェア给同事,5 分搞定,以前至少要半小时电话沟通。"
—— 浙江,Technical Support,張さん
反馈 4:
"センサーは标定計算器很实用。我们厂有几百个センサーは,以前标定要手算,现在入力2つ点,自动出公式。"
—— 山东,仪表エンジニア,劉さん
五、未来规划
5.1 短期计划(1-3 个月)
- 增加 OPC UA クライアント側は
- サポート MQTT 协议デバッグ
- 增加 BACnet 协议サポート
- 云端项目同步(VIP Function)
5.2 中期计划(3-6 个月)
- APP 版本(突破WeChat小程序ポート限制)
- サポート脚本功能(Lua/JavaScript)
- 增加图表分析功能(トレンドグラフ、频谱分析)
- 設備のデータベースの種類(共通装備。参数模板)
5.3 长期愿景
做一个工业エンジニア的"百宝箱"。
只要是オンサイトデバッグ能用到的工具,都集成到这个小程序里。
让エンジニア:
- 少背点东西,轻装上阵
- 少加点班,早点回家
- 少一些烦恼,多一些效率
六、写在最后
做这个小程序的初衷,ではない为了赚钱。
只是想解決自己的痛点,顺便帮到もっと見る同行。
20 年的经验告诉我:工具的价值,不在于功能多花哨,而在于真正解決問題。
每一个功能,都是我オンサイトデバッグ时真实遇到过的痛点。
每一行代码,都凝聚着我对这个業界的热爱。
もし你也是工业エンジニア,希望这个小程序能帮到你。
もし你有任何建议,欢迎反馈。
让我们一起,让工业デバッグ变得更简单。
附录:使用方式
方式 1:WeChat扫码

方式 2:WeChat Search
Search"Modbus Debugging Assistant"
方式 3:朋友シェア
Click朋友シェア的卡片直接进入
について著者
20 年工业自動化经验,待过デバイス厂商、集成商、甲方。
现专注于産業用IoT、边缘計算、スマートコントロール。
欢迎交流:
- 📧 Email:support@modbus.cn
- 💬 WeChat群:扫码追加アシスタント入群
参照资料
[1] Modbus Application Protocol Specification V1.1b3
[2] 齐格勒 - 尼科尔斯 PID 整定方法
[3] WeChat小程序蓝牙开发ドキュメント
[4] IEEE 754 浮動小数点数標準
[5] CRC16 算法原理与実装
Leave a Reply