先把測試與產量分開
同一產品第一次測試失敗、第二次測試成功時,測試次數應是二,但完成產品數只能增加一。要做到這點,你必須把 product_id、test_count、last_result、first_fail_code 與 counted 分開保存。測試紀錄描述每次嘗試;產量統計描述產品是否已完成,兩者不能共用一個 done 計數器。
| 欄位 | 案例值 | 用途 |
|---|---|---|
| product_id | P07 | 辨認同一產品 |
| test_count | 2 | 累計測試次數 |
| last_result | PASS | 目前最後結果 |
| first_fail_code | LEAK | 保留首次失敗原因 |
| counted | TRUE | 完成統計已計入 |
產品入線只建立一筆產品資料。
每次真正開始測試才讓 test_count 加一。
只有從未 counted 且達到最終完成條件時,完成產品數加一並鎖定 counted。
定義重測狀態與覆寫規則
本例狀態為 NEW→TESTING→PASS 或 FAIL_HOLD。FAIL_HOLD 只有在重測許可、產品 ID 相同且未被判定報廢時才能進 RETEST。重測成功可把 last_result 改為 PASS,但 first_fail_code 永遠保留;若重測再次失敗,last_result=FAIL 並累計失敗原因。已 counted 的產品收到重複 PASS 事件,只記 duplicate,不增加完成數。
| 事件 | 狀態 | test_count | 完成數 | 說明 |
|---|---|---|---|---|
| P07 建立 | NEW | 0 | 0 | 尚未測試 |
| 第一次開始 | TESTING | 1 | 0 | 建立測試紀錄 |
| 第一次失敗 | FAIL_HOLD | 1 | 0 | first_fail=LEAK |
| 允許重測 | RETEST | 1 | 0 | 保留原失敗 |
| 第二次開始 | TESTING | 2 | 0 | 同一 ID |
| 第二次通過 | PASS | 2 | 1 | counted 由 F→T |
| 重送通過 | PASS | 2 | 1 | duplicate,忽略統計 |
這張表就是你的核算基準:P07 有兩次測試事件,卻只有一次完成產品。若畫面顯示完成數為二,先回頭查 counted 邊沿與重送去重。
偽碼 去重與資料保存
教學偽碼,非指定PLC語法:
若新start_test且狀態為NEW或RETEST:
test_count加一;建立新attempt_id;狀態:=TESTING
若result_event:
若event_id已處理:回覆已處理,不改任何產品資料
否則若產品ID、attempt_id不符,或state≠TESTING:隔離晚到結果
否則:保存不可變attempt紀錄;更新last_result
首次FAIL且first_fail_code空白才寫首次原因
PASS:state:=PASS;尚未counted才將completed加一並鎖counted
FAIL:state:=FAIL_HOLD,不增加completed
保存本次event_id為已處理
明確報廢決策另外使state:=REJECT,scrap只增加一次。
| 統計量 | 公式 | P07 結果 |
|---|---|---|
| 測試總次數 | 每次 start_test +1 | 2 |
| 完成產品數 | counted 從 F→T 次數 | 1 |
| 尚未結案 | NEW+RETEST+TESTING+FAIL_HOLD | 0(完成後) |
| 重測次數 | test_count−1(已測產品) | 1 |
| 投入守恆 | 完成+待處理+報廢=投入 | 1+0+0=1 |
建議把每次測試保存成一筆不可變的 attempt 紀錄,再由產品摘要欄位保存目前狀態。attempt_01 記錄 FAIL/LEAK,attempt_02 記錄 PASS,摘要才更新為 PASS;刪除第一筆紀錄會失去品質追溯。重測許可應包含操作者、原因與有效期限,期限過後收到結果要進人工複核。產品離開測試站前,先鎖定摘要和統計,再送出完成握手;握手失敗時可以重送同一 event_id,但不能重新建立 attempt。每天交班時列出 test_count 大於一的產品,逐筆和報廢、出貨紀錄核對,能及早發現統計被重算。
操作 故障與驗收
duplicate 判斷必須先於任何狀態、test_count 或統計修改,並同時校驗 product_id、attempt_id、event_id。final FAIL 只進報廢流程,不增加 completed;全文 completed 統一定義為良品完成數。十件案例明訂 P09 一次失敗即報廢,P07 第二次失敗時也進報廢,兩者各只計一件報廢。
把重測流程畫成兩條線:產品生命週期一條,測試嘗試紀錄一條。產品由 NEW 進 TESTING 時建立 attempt;FAIL 進 FAIL_HOLD,等待授權後再進 RETEST;PASS 或 REJECT 才能成為最終狀態。統計只接受最終狀態第一次提交的邊沿,並以 product_id 加 counted 作雙重判斷。若產品已 PASS 又收到 FAIL,不能直接改回失敗,除非規格允許複驗且建立新流程狀態;若已 REJECT 則所有晚到結果都應隔離。測試站重送時使用原 event_id,PLC 回覆已處理即可;若站點產生新 event_id,還要核對 attempt_no,避免把一次重送算成第三次測試。保存資料時可分成目前摘要與歷史紀錄,摘要供控制流程快速讀取,歷史供品質追溯。最後以投入、完成、報廢、待處理和測試總次數五項對帳,任何不守恆都先停用自動報表,查清楚後再恢復。
若重測必須換治具或換站點,請在 attempt 紀錄加入 station_id 與 fixture_id;同一產品換站後仍沿用 product_id,但不可沿用上一站的完成旗標。
在畫面上把「測試次數」與「完成數」分開顯示,並在 P07 的例子旁標出 2 與 1。操作員若按下重測取消,產品進 REJECT 或人工待判,不能停留在 TESTING 造成統計永遠等待。對帳時另列晚到結果、重送次數與未配對事件,這些數字不直接加入投入或完成。
當測試站回傳結果但產品已不在站上,先以 product_id 查詢歷史狀態,再決定接收或隔離;不要因為結果是 PASS 就直接增加完成數。
復歸完成後先核對摘要與歷史 attempt 的最後序號,再開放下一次測試;復歸前的晚到訊息不可直接寫入統計。
完成驗收後,把每件重測產品的 attempt 清單與產量守恆表保存,確認報表只以最終狀態計數。
這項紀錄也能協助你分辨測試站重送與統計重算錯誤。
所以排查時先看產品摘要,再看歷史紀錄,最後才調整統計公式。
操作 故障與驗收 續
建立 P07,確認 test_count=0、counted=FALSE。
送第一次 FAIL/LEAK,確認進 FAIL_HOLD 且原因不空白。
只允許同 ID 重測,送第二次 PASS,確認 test_count=2、完成數=1。
重送同 event_id 或同一完成脈衝,確認完成數不變。
重新啟動後檢查 P07 與 event_id 保存策略,禁止未核對就重算。
用守恆表做每日對帳最可靠。假設投入 10 件,其中 P07 重測一次,最後 8 件一次通過、P07 二次通過、P09 報廢,則實際產品數仍為 10,測試總次數為 11,完成數為 9,報廢數為 1,待處理為 0;完成加報廢加待處理等於投入 10。重測次數是 1,不能把它加到投入數。若 P07 第二次仍失敗,完成數改為 8、報廢數改為 2,但 test_count 仍為 2。
結果覆寫也要有條件。先由FAIL_HOLD取得重測許可,再進RETEST並建立新attempt;只有該次TESTING的匹配結果可更新last_result;已報廢或已出貨的產品收到 PASS,必須拒絕並報 LATE_RESULT。相同 event_id 重送時,檢查紀錄可以增加通訊重送次數,但測試次數與產量不能增加。若收到相同產品的新 event_id,先比對目前狀態與測試站序號;不符合就進人工複核。斷電恢復時先鎖住統計寫入,讀回產品表並與測試站對帳,完成後才解除鎖定。
完成後應看到什麼結果
P07 的測試次數為 2、最後結果為 PASS、首次失敗原因仍是 LEAK、完成產品數增加 1;重複結果不增加產量,投入守恆表可對上。
失敗時先查哪裡
先查 start_test 是否被電平重複觸發,再查 product_id 是否換筆,接著查 counted 是否在結果確認前清零,最後查斷電恢復與 event_id 去重資料是否遺失。
適用型號與限制
適用於 Q06UDVCPU 等以資料結構保存品質流程的控制器;實際保持範圍、檔案保存、HMI 重送及測試站握手需依設備規格驗證。
常見問題與來源
FAQ
問:重測成功能不能清掉失敗原因?答:不建議;保留 first_fail_code 才能追溯,另設目前結果欄位。
問:測試脈衝卡住怎麼辦?答:用上升沿加產品狀態互鎖,完成後鎖住同一事件。
問:斷電後怎麼避免重算?答:保存產品狀態、counted、統計與事件序號,並在復歸時先對帳。