MES I/O Gateway / 使用者
01使用者

秤重校正精靈

📅 最後更新: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==NadvN),只有在前一步 state 正確時才會觸發 → 缺一不可。


#3. 操作流程(現場操作員)

前提:磅秤已接 TDA08B(slave 3, bus0, 9600/8N1),MQTT 已連線。推進按鍵以瞬時方式送(發 1 後立即發 0,模擬實體按鈕)。

#用 MQTTX / mosquitto_pub 操作

bash
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,回到待機

#觀察校正結果

bash
# 訂閱即時重量(若有設 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。建構順序:

  1. 寫暫存器POST /api/config modbusRegisters,連同既有讀暫存器一起送):
    • reg107(cal_ch)、reg108(cal_wt)、reg113(cal_trig),全部 mode=1(Write)、functionCode=6
  2. TCP IO 狀態通道POST /api/tcpio,CONVERTER/OUTPUT):
    • wz-st1 payload 1wz-st2 payload 2wz-st0 payload 0,topic 都指 …/cmd/signal/0
  3. SignalsPOST /api/signals,2-source AND,trigger=CHANGE):校正標零 / 標增益 / 重置。
  4. ActionsPOST /api/actions):標零 / 標增益 / 重置,含 CH_MODBUS 寫 + CH_TCP 發 state + CH_DO 燈號。
  5. RulesPOST /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. 相關文件