系統總覽
「擎添耳溫槍探頭套檢測系統」是一套工業級自動化 HMI 軟體,用於檢測耳溫槍探頭套品質。系統透過 藍芽 連接最多 12 支耳溫槍、與 PLC 整合產線觸發信號,並以 Master-Slave 雙機架構 分散管理通道。
- 12 通道同時監測 — Master 負責 6 通道 (CH1/3/5/7/9/11),Slave 負責另外 6 通道 (CH2/4/6/8/10/12)
- 自動量測判定 — 空槍值 → 量測值 → 誤差計算 → PASS/FAIL 自動判定
- PLC 整合 — 接收產線觸發信號,回寫判定結果與異常狀態
- 異常即時警報 — 藍芽斷線、溫度異常、連續無耳溫套、PLC/網路異常
- CSV 完整記錄 — 每次量測自動記錄,含溫度、耳套狀態、OK/NG 計數
快速導覽
系統架構
硬體架構圖
軟體模組
| 模組 | 檔案 | 功能 |
|---|---|---|
| 主程式 / UI | main.py | NiceGUI 介面、事件處理、異常偵測 |
| 藍芽通訊 | bluetooth_comm.py | RFCOMM SPP 連線、封包解析、自動重連 |
| PLC 通訊 | plc_comm.py | 三菱 MC Protocol 3E、讀寫 D 暫存器 |
| 網路通訊 | network_comm.py | Master-Slave TCP 同步、指令與資料傳輸 |
| 量測邏輯 | measurement.py | PASS/FAIL 判定、CSV 批次記錄 |
| 設定管理 | config.py | JSON 設定檔讀寫、參數定義 |
Master vs Slave 差異
| 功能 | MASTER | SLAVE |
|---|---|---|
| 管理通道 | CH1, CH3, CH5, CH7, CH9, CH11 | CH2, CH4, CH6, CH8, CH10, CH12 |
| PLC 通訊 | 有 | 無 |
| 量測判定 | 完整 PASS/FAIL 判定 | 僅收集資料轉發 |
| CSV 記錄 | 有(批次檔) | 無 |
| 異常偵測 | 全面偵測 | 僅藍芽狀態 |
| 手動觸發 | 有按鈕 | 無 |
| OK/NG 計數 | 顯示 & 寫入 PLC | 不顯示 |
| Web UI Port | 8080 | 8081 |
啟動與關閉
啟動前準備
- 確認電腦的 藍芽 已開啟,且 12 支耳溫槍已開機
- 確認 PLC 已上電且網路線已連接(Master 端)
- 確認 Master 與 Slave 兩台電腦在同一網段,可互相 ping 通
- 確認
config.json中的 IP 位址、MAC 位址正確
啟動程式
-
先啟動 Slave(建議)
執行python main.py或雙擊捷徑
Slave 會在 Port 8081 等待 Master 連入 -
再啟動 Master
執行python main.py或雙擊捷徑
Master 會在 Port 8080 開啟 UI,並主動連線到 Slave -
確認連線狀態
等待畫面頂部的 PLC 與網路指示燈變成 綠色
各通道的 BT 圖示也應逐步變成 藍色 -
系統就緒
畫面右上方顯示「運行中」即表示系統已準備好接收 PLC 觸發
關閉程式
直接關閉視窗即可。系統會自動執行以下清理動作:
- 關閉所有藍芽 Socket 連線
- 停止 PLC 監控
- 斷開 Master-Slave 網路
關閉 Master 前,建議先確認目前無正在進行的量測流程(量測狀態為「待機中」)。若在量測過程中強制關閉,該筆資料可能不會寫入 CSV。
主畫面介紹
主畫面由上而下分為四大區域:
A. 頂部資訊列
| 元件 | 說明 |
|---|---|
| 系統標題 | 顯示「擎添耳溫槍探頭套檢測系統」與版本號 |
| 模式徽章 | MASTER 藍色 或 SLAVE 橘色 |
| 目前批次 | MASTER 顯示目前 CSV 批次檔名(如 20260312100000.csv) |
| 換批按鈕 | MASTER 點擊建立新 CSV 批次並歸零 PLC OK/NG 計數 |
| 測試週期 | MASTER 顯示 PLC D516 的測試計數值 |
| 系統狀態 | 運行中 或 已停止 |
| 判定模式 | MASTER 正常判定 / 強制OK / 強制NG |
| 暖槍狀態 | MASTER 讀取 PLC D542,顯示 暖槍中 或 OFF |
| PLC 指示燈 | 已連線 / 連線中 / 斷線 |
| 網路指示燈 | 同上,顯示 Master-Slave 網路連線狀態 |
| 異常復歸 | MASTER 按鈕,清除所有異常狀態與警報 |
| 設定齒輪 | 開啟右側進階設定面板 |
B. 警報橫幅
平時隱藏。當發生異常時會出現紅色閃爍橫幅,顯示警報訊息,右側有「確認」按鈕可關閉橫幅。警報內容會同時記錄到 D:\logs\Alarm\ 下的 CSV 檔。
C. 通道量測區
MASTER 畫面有兩張卡片:「本機通道」和「Slave 通道」。SLAVE 只有一張「本機通道」。
每一列(每一通道)的欄位說明:
| 欄位 | 說明 |
|---|---|
| CH 名稱 | 通道編號(如 CH11),停用通道會顯示紅色「停用」標籤 |
| BT 圖示 | 已連線 連線中 錯誤 未連線 |
| 耳套 | 有 = 有耳溫套 (1111) 無 = 無耳溫套 (0000) -- = 尚無資料 |
| 空槍值 | 青色數字,空槍量測時記錄的基準溫度 |
| 量測值 | 黃色數字,溫度量測時的實際溫度 |
| 誤差 | 白色數字,= 量測值 - 空槍值 |
| 狀態 | WAIT 等待 PASS 合格 FAIL 不合格 |
| OK | MASTER 累計合格次數(對應 PLC D517~D528) |
| NG | MASTER 累計不合格次數(對應 PLC D529~D540) |
| 無套 | MASTER 連續無耳溫套計數,超過門檻時變橘色 |
D. 下方面板
| 面板 | 說明 |
|---|---|
| 目前設定 | 顯示誤差上下限、空槍值上下限 |
| 量測流程 | 顯示目前量測狀態(待機中、等待空槍、空槍完成、等待量測、計算中、量測完成),附「清空 Log」按鈕 |
| 手動觸發 | MASTER「空槍量測」和「溫度量測」按鈕,可手動觸發量測流程 |
| PLC 監控 | MASTER 即時顯示所有 D 暫存器狀態值 |
| 系統 Log | 滾動式訊息記錄,最多顯示 100 行,顯示所有系統事件 |
量測流程
每次完整量測包含兩個階段:空槍量測(記錄基準值)→ 溫度量測(記錄實測值並判定)。
流程總覽
或手動按「空槍量測」
或手動按「溫度量測」
誤差下限 ≤ 誤差 ≤ 誤差上限?
D50x = 2
D50x = 1
更新 OK/NG 計數 → 記錄到 CSV → 清除 D500
判定公式
誤差 = 量測值 - 空槍值
判定條件:-|誤差下限| ≤ 誤差 ≤ +|誤差上限|
- 符合 → PASS(PLC 寫入 2)
- 不符合 → FAIL(PLC 寫入 1)
- 通道停用 → 不判定(PLC 寫入 0)
例:誤差上限 = 0.30,誤差下限 = 0.50 → 合格範圍 = -0.50 ~ +0.30
判定模式
| 模式 | 行為 | 用途 |
|---|---|---|
| 正常判定 | 依公式判定 PASS/FAIL | 正式生產使用 |
| 強制 OK | 不論誤差值,全部判定為 PASS | 系統測試 / 暖機用 |
| 強制 NG | 不論誤差值,全部判定為 FAIL | 系統測試用 |
手動觸發
MASTER 畫面下方有「手動觸發」面板,提供兩個按鈕:
- 空槍量測 — 等同 PLC D515=1 觸發(如果 PLC 已連線,會先寫入 D515 再由 PLC 回送觸發)
- 溫度量測 — 等同 PLC D500=1 觸發
注意:手動觸發主要用於調試和無 PLC 環境下測試,正式生產以 PLC 觸發為主。
批次與記錄
量測 CSV 批次檔
D:\logs\{時間戳}.csv
每個批次一個檔案,檔名為建立時的時間戳記(例:20260312143025.csv)
CSV 欄位結構(54 欄)
| 欄位範圍 | 內容 | 說明 |
|---|---|---|
| A 欄 | 種類 | empty = 空槍 / {D516值} = 量測 |
| B ~ M 欄 | scan1 ~ scan12 | 12 通道溫度值(對應 CH1~CH12) |
| N 欄 | Time | 量測時間 YYYY/MM/DD HH:MM:SS |
| O ~ P 欄 | 誤差上/下限 | 本次使用的判定設定 |
| Q ~ AB 欄 | scan1~12 cover | 耳套狀態 (1111/0000) |
| AC ~ AN 欄 | scan1~12 OK | 各通道 OK 累計次數 |
| AO ~ AZ 欄 | scan1~12 NG | 各通道 NG 累計次數 |
| BA ~ BB 欄 | TOTAL OK / NG | 全通道 OK/NG 加總 |
換批操作
- 確認目前量測狀態為「待機中」
- 點擊頂部的「換批」按鈕
- 系統會自動建立新 CSV 檔案,並將 PLC 的 OK/NG 計數(D517~D540)全部歸零
- 頂部批次檔名會更新為新檔名
異常記錄(Alarm CSV)
D:\logs\Alarm\alarm_{日期}.csv(每天一個檔案)
| 欄位 | 說明 |
|---|---|
| 日期時間 | YYYY-MM-DD HH:MM:SS |
| 異常類型 | 藍芽斷線 / 溫度異常 / 連續無套 / PLC異常 / 網路異常 / 通道不一致 / 空槍異常 |
| 詳細內容 | 具體的異常描述 |
如果檔案被 Excel 鎖定,系統會自動寫入備用檔案 alarm_{日期}_1.csv
Debug 記錄
系統 Log 同步寫入 logs/debug_{日期}_{時間}.txt,包含所有 console 輸出,用於後續排查問題。
異常警報處理
系統會自動偵測多種異常,並在畫面上方顯示紅色閃爍橫幅。所有異常都會記錄到 Alarm CSV。
異常類型一覽
| 觸發條件 | 任何啟用通道的藍芽狀態變為 DISCONNECTED 或 ERROR |
| 影響 | PLC D513 對應位元設為 1,該通道無法收集量測數據 |
| 處理方式 | 系統會自動重連(漸進式冷卻),正常情況下等待即可恢復。 若持續斷線,請檢查耳溫槍電源與藍芽配對 |
| 自動恢復 | 重新連線後自動清除警報與 D513 位元 |
| 觸發條件 | 量測溫度超出設定範圍(溫度異常上限 ~ 下限),需開啟「溫度異常」開關 |
| 影響 | PLC D513 bit12 設為 1,異常通道列變紅色高亮 |
| 處理方式 | 檢查耳溫槍感應器是否正常,或環境溫度是否影響量測 |
| 自動恢復 | 下次量測所有通道恢復正常範圍時自動解除 |
| 觸發條件 | 同一通道連續 N 次偵測到「無耳溫套」(0000),需開啟「連續無套」開關 |
| 影響 | PLC D513 bit13 設為 1,無套計數欄變橘色 |
| 處理方式 | 確認探頭套是否正確安裝 |
| 自動恢復 | 偵測到有耳溫套 (1111) 時,該通道計數歸零 |
| 觸發條件 | 空槍量測值超出空槍上限/下限範圍 |
| 影響 | PLC D513 bit14 設為 1;暖槍中(D542=1)時容忍前 2 次,第 3 次才發警報 |
| 處理方式 | 確認耳溫槍是否正常,可能需要繼續暖機 |
| 觸發條件 | PLC 連線中斷 或 Master-Slave 網路斷線 |
| 處理方式 | 檢查網路線、IP 設定、防火牆規則 |
| 自動恢復 | 重新連線後自動恢復 |
異常復歸操作
點擊畫面右上方的「異常復歸」按鈕(黃色),將執行以下動作:
- 清除 PLC D513 所有位元(異常掩碼歸零)
- 重置溫度異常與連續無套狀態
- 清除所有通道的無套計數
- 移除通道紅色高亮
- 隱藏警報橫幅
PLC D541 升沿也會觸發相同的復歸動作。
進階設定面板
點擊右上角的齒輪圖示 ⚙ 開啟右側設定面板。
密碼保護
部分設定需要管理密碼才能修改。輸入密碼後點擊「登入」即可解鎖。
登出後設定區域會重新隱藏,防止未授權修改。
設定項目一覽
系統設定(需登入)
| 設定項 | 說明 | 預設值 |
|---|---|---|
| 誤差上限 | PASS/FAIL 判定的正向容許誤差 | +0.50 °C |
| 誤差下限 | PASS/FAIL 判定的負向容許誤差 | -0.50 °C |
| 空槍上限 | 空槍值的合理上限,超出會發警報 | 40.0 °C |
| 空槍下限 | 空槍值的合理下限 | 20.0 °C |
| 判定模式 | 正常 / 強制OK / 強制NG | 正常 |
| 溫度異常開關 | 啟用後需設定溫度上下限 | 關閉 |
| 連續無套開關 | 啟用後需設定觸發次數 | 關閉 |
| 運行模式 | master 或 slave(修改後需重啟程式) | master |
網路設定(需登入)
| 設定項 | 說明 | 預設值 |
|---|---|---|
| Master IP | Slave 連入的 Master IP 位址 | 192.168.1.100 |
| Port | Master-Slave TCP 通訊埠 | 5001 |
時序設定(需登入,僅 Master)
| 設定項 | 說明 | 預設值 |
|---|---|---|
| 空槍收集延遲 | 發送量測指令後等待多久收集空槍資料 | 0.5 秒 |
| 量測收集延遲 | 發送量測指令後等待多久收集量測資料 | 0.5 秒 |
PLC 設定(需登入,僅 Master)
| 設定項 | 說明 | 預設值 |
|---|---|---|
| IP 位址 | PLC FX5U 的 IP | 192.168.1.10 |
| Port | PLC 通訊埠 | 5000 |
藍芽設定(不需登入)
| 設定項 | 說明 | 預設值 |
|---|---|---|
| CH MAC 位址 | 各通道對應耳溫槍的藍芽 MAC 位址 | (空白) |
| 重連間隔 | 每輪重連後的固定等待時間 | 5.0 秒 |
| 超時 | 單次 socket.connect() 的最長等待時間 | 10.0 秒 |
通道啟用(不需登入)
以開關方式控制每個通道的啟用/停用。停用的通道:
- 不參與量測與判定
- 不發送藍芽量測指令
- 不會觸發藍芽斷線警報
- PLC 寫入 0(不使用)
- UI 上會半透明顯示
儲存 vs 即時套用
| 按鈕 | 行為 |
|---|---|
| 儲存進階設定 | 將設定寫入 config.json,重啟後仍有效。部分參數需重啟才生效(如運行模式) |
| 更新資料(即時套用) | 儲存 + 立即套用到所有執行中的管理器。不需重啟程式,包括:誤差範圍、通道啟用、藍芽 MAC、PLC IP/Port、網路參數、時序參數 |
藍芽連線管理
系統使用 Windows 原生藍芽 RFCOMM 協定,透過 SPP (Serial Port Profile) 與耳溫槍通訊。
連線流程
每通道一條 Thread,最多等 connect_timeout 秒
每輪間隔 reconnect_interval 秒
min(失敗次數 × 5, 30) 秒三個關鍵時間參數
| 參數 | 預設值 | 作用 |
|---|---|---|
| connect_timeout | 10 秒 | 單次 socket.connect() 最長等待。超時即視為連線失敗 |
| reconnect_interval | 5 秒 | 每輪重連嘗試後的固定等待間隔 |
| cooldown(冷卻) | min(n×5, 30) 秒 | 連續失敗 ≥ 3 次後的額外等待,第 6 次以上固定 30 秒 |
冷卻時間對照
| 連續失敗 | 冷卻 | 單輪最長等待 |
|---|---|---|
| 第 1~2 次 | 0 秒(立即重試) | 10 + 5 = 15 秒 |
| 第 3 次 | 15 秒 | 10 + 5 + 15 = 30 秒 |
| 第 4 次 | 20 秒 | 10 + 5 + 20 = 35 秒 |
| 第 5 次 | 25 秒 | 10 + 5 + 25 = 40 秒 |
| 第 6 次以上 | 30 秒(上限) | 10 + 5 + 30 = 45 秒 |
BT 圖示顏色對照
| 藍色 | CONNECTED — 已連線,可正常收發資料 |
| 黃色 | CONNECTING — 正在嘗試連線 |
| 紅色 | ERROR — 連線失敗或異常斷開 |
| 灰色 | DISCONNECTED — 未連線 |
PLC 通訊
MASTER 透過 MC Protocol 3E (TCP) 與三菱 FX5U PLC 通訊。
PLC 監控面板
位於畫面左下方,即時顯示 D500~D542 暫存器的值:
| 暫存器 | 名稱 | 方向 | 說明 |
|---|---|---|---|
D500 | 量測觸發 | PLC→HMI | 升沿(0→1)觸發溫度量測 |
D501~D512 | 判定結果 | HMI→PLC | 0=不使用, 1=FAIL, 2=PASS |
D513 | 異常掩碼 | HMI→PLC | bit0~11:藍芽, bit12:溫度, bit13:無套, bit14:空槍 |
D514 | PC 心跳 | HMI→PLC | 0/1 每秒交替,PLC 可偵測 HMI 是否存活 |
D515 | 空槍觸發 | PLC→HMI | 升沿觸發空槍量測 |
D516 | 測試週期 | PLC→HMI | 累計測試次數 |
D517~D528 | OK 計數 | HMI→PLC | CH1~CH12 各通道合格次數 |
D529~D540 | NG 計數 | HMI→PLC | CH1~CH12 各通道不合格次數 |
D541 | 異常復歸 | PLC→HMI | 升沿觸發異常復歸 |
D542 | 暖槍訊號 | PLC→HMI | 0=正常, 1=暖槍中 |
D513 異常掩碼詳解
| 位元 | 內容 |
|---|---|
| bit 0 ~ 11 | CH1~CH12 藍芽連線異常(對應各通道) |
| bit 12 | 溫度異常(任一通道超出設定範圍) |
| bit 13 | 連續無套異常 |
| bit 14 | 空槍值超限異常 |
PLC 監控面板以十六進位顯示(如 0x0004 = bit2 = CH3 藍芽斷線)。
Master-Slave 網路
系統使用 TCP 在 Master 與 Slave 之間同步資料與指令。
角色分工
| 項目 | MASTER | SLAVE |
|---|---|---|
| TCP 角色 | Server(監聽 Port 5001) | Client(連線到 Master IP) |
| 啟動順序 | 建議後啟動 | 建議先啟動 |
| 發送指令 | request_empty / request_measure / sync_bt_status | 無 |
| 發送資料 | 無 | 各通道溫度 + 藍芽狀態 + 耳套狀態 |
資料流
連線建立後的同步
- Master 連線後會自動請求 Slave 重送所有通道的藍芽狀態
- Slave 收到
sync_bt_status指令後,補送所有通道狀態 + 通道啟用設定 - Master 收到 Slave 通道啟用設定後,會比對兩端是否一致,不一致時發出「通道不一致」警報
通道對應表
系統使用內部通道編號(1~12)與顯示名稱(CH1~CH12),兩者的映射關係如下:
Master 通道(內部 1~6)
| 內部編號 | 顯示名稱 | PLC 對應 | 藍芽 |
|---|---|---|---|
| 1 | CH11 | D512 / D528 / D540 | Master 第 1 組 MAC |
| 2 | CH9 | D510 / D526 / D538 | Master 第 2 組 MAC |
| 3 | CH7 | D508 / D524 / D536 | Master 第 3 組 MAC |
| 4 | CH5 | D506 / D522 / D534 | Master 第 4 組 MAC |
| 5 | CH3 | D504 / D520 / D532 | Master 第 5 組 MAC |
| 6 | CH1 | D502 / D518 / D530 | Master 第 6 組 MAC |
Slave 通道(內部 7~12)
| 內部編號 | 顯示名稱 | PLC 對應 | 藍芽 |
|---|---|---|---|
| 7 | CH12 | D513(結果) / D529 / D541 | Slave 第 1 組 MAC |
| 8 | CH10 | D511 / D527 / D539 | Slave 第 2 組 MAC |
| 9 | CH8 | D509 / D525 / D537 | Slave 第 3 組 MAC |
| 10 | CH6 | D507 / D523 / D535 | Slave 第 4 組 MAC |
| 11 | CH4 | D505 / D521 / D533 | Slave 第 5 組 MAC |
| 12 | CH2 | D503 / D519 / D531 | Slave 第 6 組 MAC |
CSV 中的 scan1~scan12 對應 CH1~CH12(按顯示名稱排序,非內部編號):
scan1=CH1, scan2=CH2, ... scan12=CH12
常見問題
A: 請依序檢查:
- 確認耳溫槍已開機且藍芽已啟用
- 確認 Windows 藍芽已開啟
- 確認進階設定中的 MAC 位址正確(格式:
XX:XX:XX:XX:XX:XX) - 確認該通道的啟用開關已打開
- 查看系統 Log 是否有「連線失敗」的錯誤訊息
- 嘗試在 Windows 藍芽設定中先手動配對該耳溫槍
A: 表示 Master-Slave 網路未連線。請確認:
- Slave 程式是否已啟動
- 兩端的 Master IP 與 Port 設定是否一致
- Windows 防火牆是否允許 Port 5001
- 查看網路指示燈是否為 綠色
A: 請確認:
- PLC 是否上電且網路線已連接
- 確認 PLC IP 位址與 Port 設定正確
- 可用
ping {PLC IP}測試網路連通性 - 確認
config.json中plc.enabled為true
A:
- 點擊右上角齒輪 ⚙ 開啟設定面板
- 輸入管理密碼登入
- 在「系統設定」中修改「誤差上限」和「誤差下限」
- 點擊「更新資料(即時套用)」立即生效
A: 在 config.json 中設定 "simulation_mode": true,系統會模擬藍芽連線與量測數據。模擬模式下可使用手動觸發按鈕測試完整流程。
A: 量測 CSV 使用 append 模式寫入,Excel 開啟時通常可正常寫入。異常記錄 CSV(Alarm)若被鎖定,系統會自動寫入備用檔案(_1.csv後綴),不會遺失資料。
A: 不需要。修改通道啟用狀態後點擊「更新資料(即時套用)」,系統會立即:
- 停止向停用通道發送量測指令
- 斷開停用通道的藍芽連線
- 清除 PLC 對應的錯誤位元
- UI 上以半透明方式顯示
A: 不會。暖槍中(PLC D542=1 時),系統會容忍前 2 次空槍超限,直到連續第 3 次才發出警報。暖槍結束(D542=0)後,超限計數自動歸零。
A: 按 F5 只會重新載入 UI 畫面,所有後端管理器(藍芽、PLC、網路、量測)仍在運行中。畫面會重新同步到最新狀態。已經寫入 CSV 的資料不受影響。