秤重校正精靈
📅 最後更新:2026-05-26 | 🛠 對應韌體:v5.9.130+ | 📌 負責人:KC
本手冊說明 TDA08B 秤重模組的引導式校正流程(4 步驟 + 燈號提示),以及背後的 MQTT 命令、設定建構方式。校正以 MQTT-Chain 工作流引擎 實作,全部設定、無專屬韌體。
#1. 為什麼是「引導精靈」而不是單一命令
TDA08B 的有砝碼校正(依原廠手冊 §5.4.1)是缺一不可的 4 步驟:
| 步驟 | 暫存器寫入 | 使用者動作 | 燈號提示 |
|---|---|---|---|
| 1 選通道 | reg107 = 1 | (自動) | — |
| 2 標零點(tare) | reg113 = 1 | 放空籃上秤 | 🔵 第一顆燈 |
| 3 寫砝碼值 | reg108 = 砝碼值 | 籃內放砝碼 | 🟡 第二顆燈 |
| 4 確認增益 | reg113 = 2 | (自動) | 🟢 完成 |
籃子(basket-as-tare)流程:放空籃標零點(扣掉籃重)→ 籃內放砝碼標增益 → 之後秤籃裡的東西就是淨重。 砝碼值換算:TDA08B A1 dot=2(小數兩位),5kg →
reg108 = 500(顯示值 ×100)。
每一步需要使用者在環(放空籃/放砝碼)+ 燈號回饋,否則操作員不知道現在該做什麼。這是有狀態的精靈,不是 fire-and-forget 命令。
#2. 狀態機設計
以 MQTT topic …/cmd/signal/0 當「目前步驟狀態」(state),由 gateway 發佈;操作員以「推進按鍵」逐步前進。
state=0 (待機/放空籃) ──[adv1]──► state=1 (放砝碼) ──[adv2]──► state=2 (完成)
▲ │
└──────────────────────[adv3 重置]────────────────────────────┘
燈號: 全滅 第一顆燈亮 第二顆燈亮| 推進按鍵 | MQTT topic | 條件(AND) | 動作 |
|---|---|---|---|
| adv1 標零 | …/cmd/signal/1 |
state==0 ∧ adv1≥0.5 | reg107=1, reg113=1, state→1, 第一顆燈亮 |
| adv2 標增益 | …/cmd/signal/2 |
state==1 ∧ adv2≥0.5 | reg107=1, reg108=500, reg113=2, state→2, 第二顆燈亮 |
| adv3 重置 | …/cmd/signal/3 |
state==2 ∧ adv3≥0.5 | state→0, 全滅 |
順序強制:每步用 2-source AND(state==N ∧ advN),只有在前一步 state 正確時才會觸發 → 缺一不可。
#3. 操作流程(現場操作員)
前提:磅秤已接 TDA08B(slave 3, bus0, 9600/8N1),MQTT 已連線。推進按鍵以瞬時方式送(發
1後立即發0,模擬實體按鈕)。
#用 MQTTX / mosquitto_pub 操作
PRE="mes/gateway/<UID>" # UID 見 /api/poll 或設備標籤
# 步驟 1:放空籃在秤上 → 推進標零
mosquitto_pub -h <broker> -p 1883 -u smms -P <pw> -t "$PRE/cmd/signal/1" -m 1
mosquitto_pub -h <broker> -p 1883 -u smms -P <pw> -t "$PRE/cmd/signal/1" -m 0
# → 第一顆燈亮,state=1(觀察 $PRE/cmd/signal/0 = 1)
# 步驟 2:籃內放 5kg 砝碼 → 推進標增益
mosquitto_pub ... -t "$PRE/cmd/signal/2" -m 1
mosquitto_pub ... -t "$PRE/cmd/signal/2" -m 0
# → 第二顆燈亮,state=2,weight 應校到 5.00
# 完成。要重新校正:
mosquitto_pub ... -t "$PRE/cmd/signal/3" -m 1
mosquitto_pub ... -t "$PRE/cmd/signal/3" -m 0
# → 全滅,state=0,回到待機#觀察校正結果
# 訂閱即時重量(若有設 Converter 遙測通道)
mosquitto_sub -h <broker> -p 1883 -u smms -P <pw> -t "$PRE/scale/weight" -v
# {"weight":5.00,"stable":1,...} ← 校正成功後放 5kg 砝碼應顯示 5.00七色燈用三色燈模擬:本機 DO1/DO2 = 第一顆燈,擴充模組 0 ch2/ch3 = 第二顆燈。實際只有「整顆亮/滅」,用第一顆=進行中、第二顆=完成。
#4. 燈號對照
| state | 意義 | 第一顆燈(本機 DO1+DO2) | 第二顆燈(擴充 ch2+ch3) |
|---|---|---|---|
| 0 | 待機 / 放空籃 | 滅 | 滅 |
| 1 | 放砝碼 | 亮 | 滅 |
| 2 | 完成 | 滅 | 亮 |
#5. 設定建構(工程/部署)
整套 wizard 以 API 建構(compact JSON,序列化送)。完整 schema 見 spec-mqtt-chain-workflow.md。建構順序:
- 寫暫存器(
POST /api/configmodbusRegisters,連同既有讀暫存器一起送):- reg107(cal_ch)、reg108(cal_wt)、reg113(cal_trig),全部
mode=1(Write)、functionCode=6。
- reg107(cal_ch)、reg108(cal_wt)、reg113(cal_trig),全部
- TCP IO 狀態通道(
POST /api/tcpio,CONVERTER/OUTPUT):wz-st1payload1、wz-st2payload2、wz-st0payload0,topic 都指…/cmd/signal/0。
- Signals(
POST /api/signals,2-source AND,trigger=CHANGE):校正標零 / 標增益 / 重置。 - Actions(
POST /api/actions):標零 / 標增益 / 重置,含 CH_MODBUS 寫 + CH_TCP 發 state + CH_DO 燈號。 - Rules(
POST /api/rules):3 條 signal→action。
⚠️ 每個 POST 後 GET 驗證(特別是 signal 的
sourceCount要等於 2)。JSON 必須 compact、Content-Length 用 byte 數。詳見規格文件「已知雷區」。
#6. 驗證紀錄(2026-05-26, 72.77)
機制層已端到端驗證 PASS(磅秤暫拆,TDA08B 控制器在線):
adv1 → rules/2/trigger 校正標零 → cmd/signal/0=1 → 第一顆燈 ON
adv2 → rules/3/trigger 校正標增益 → cmd/signal/0=2 → 第二顆燈 ON
adv3 → rules/4/trigger 校正重置 → cmd/signal/0=0 → 全滅底層每環節確認:MQTT 輸入、2-source AND 順序強制、CHANGE 邊緣、rule fire、CH_MODBUS 寫命令、CH_DO 燈號切換、CH_TCP state loopback。
待驗:接回磅秤後跑完整校正,確認 reg108 增益生效、weight 校到 5.00(需實體 load cell)。
#7. 相關文件
- 工作流引擎規格 / API:
../specs/spec-mqtt-chain-workflow.md - MQTTX 連線設定:
../guides/guide-web-login.md、mqttx-tlsSOP