← 所有文章

PLC Trace 用單掃描旗標與取樣條件重現瞬間事件

· 站長

用單掃描旗標、事件序號與取樣條件說明 Trace 看得見與看不見的差異。

Trace 要回答哪一個時間問題

Trace 適合回答變數隨時間如何變化,但它不是自動錄下所有 PLC 內部事件的黑盒子。先把問題寫成可驗收的句子:某個旗標是否只在一個掃描為 TRUE、它與命令及回饋的先後為何、以及取樣是否足以看見它。CODESYS 說明 Trace 需要安裝 Trace 套件,能像數位取樣示波器追蹤控制器變數曲線;目標平台是否支援仍須個別核對。

案例使用合成的 OneShot 旗標。按鈕上升緣發生時,程式讓 OneShot 保持 TRUE 一個掃描,下一掃描清回 FALSE。若 Trace 週期比 PLC 任務慢,曲線可能完全看不到這個短脈衝;看不到不等於程式沒有執行。這篇的重點是把觸發條件、取樣間隔、緩衝長度與任務週期一起記錄。

項目 本例設定 驗收問題
觀察變數 Button、OneShot、Count 三者是否同一來源
事件 Button 只高一掃描 Trace 能否捕捉
取樣 依平台可用週期 是否小於事件寬度
結果 旗標、計數、時間 是否能排序

不要用畫面上的狀態燈代替 Trace。畫面更新可能是另一個任務,還可能把短脈衝保持成較長的顯示狀態。最小測試應同時記錄事件序號與累計計數:即使波形少一點,也能由 Count 增量證明事件曾被程式處理。

先建立可重播的單掃描事件

  1. 建立合成輸入序列,讓 Button 在掃描 10 只為 TRUE,掃描 11 回 FALSE。

  2. 在相同任務中產生 OneShot 與 Count,避免先加入通訊或 HMI 延遲。

  3. 以事件序號記錄每次接受的上升緣,並保留前次 Button 值。

  4. 先離線列出掃描表,再用 Trace 驗證波形,兩者不一致時保留兩份證據。

  5. 重播第二次事件,確認 Trace 的觸發不是第一次啟動時的殘留狀態。

掃描表應寫出每一列的Button、呼叫前Previous、OneShot、Count;下表先列輸入與結果,前值依上一列輸入推算。而不是只畫一條曲線。若按鈕在連續兩掃描為 TRUE,上升緣只應在第一列出現;若在掃描 20 再次由 FALSE 轉 TRUE,Count 應再增加一次。這個表同時檢查邊緣記憶與 Trace 顯示,避免把工具問題誤判成程式問題。

掃描 Button OneShot Count 預期事件
9 0 0 0
10 1 1 1 一次
11 0 0 1
12 0 0 1
20 1 1 2 再次一次

如果 OneShot 是在不同任務產生,必須把兩個任務的週期、優先級與資料交換方式加入案例。CODESYS 任務文件指出週期任務有設定的 Interval,事件任務在布林事件由 0 變 1 時啟動;不同任務的順序不能靠名稱猜。教學中先採單一任務,以免將尚未確認的排程行為當成結論。

Trace 設定要和取樣能力對齊

開啟 Trace 設定時,至少確認變數清單、觸發來源、記錄前後時間、取樣間隔與記憶體容量。名稱相同但位於不同程式實例的變數可能不是同一個值;要從變數路徑或工程交叉參照確認。取樣間隔若是 5 ms,而 OneShot 只維持 2 ms,就算事件存在也可能落在兩次取樣之間。

觸發可以使用 Button 的上升緣,或使用事件序號變化。若以 OneShot 本身觸發,短脈衝可能仍只留下單點;若以較長的測試窗觸發,則能觀察事件前後狀態。每次改動設定都要增加版本註記,因為不同 Trace 設定產生的圖不能直接比較。

  1. 先用較長測試窗確認變數有在變化,再縮短到事件前後的時間範圍。

  2. 選取 Button、OneShot、Count 和事件序號,不要只選最後輸出。

  3. 確認取樣間隔、觸發條件與前置資料是否被目標平台接受。

  4. 讓事件在視窗中央發生,避免只留下起始或結尾的一半資料。

  5. 匯出原始資料,保留設定檔與控制器版本,不只保存圖片。

現象 可能原因 下一個檢查
看不到 OneShot 取樣太慢或觸發錯 取樣間隔與 Count
波形有但 Count 不變 觀察到別的實例 變數路徑
時間軸跳動 任務週期有抖動 任務監看值
每次圖不同 輸入序列未固定 事件腳本與版本

用單掃描旗標檢查取樣盲點

在隔離診斷版本中,假設每掃描固定2毫秒、實際最大取樣間隔5毫秒且連續記錄無缺口,再把觀察用旗標從一掃描延長到三掃描。2毫秒旗標可能漏取;6毫秒旗標在上述理想條件下應被取到。若仍看不到,檢查記錄條件、觸發窗及變數路徑。再把事件改在不同相位發生,觀察是否有固定的盲點。這種測試比只看一次成功圖更能說明 Trace 的限制。

以 Count 作為離散證據,以 Trace 作為時間證據。若 Count 增加三次而 Trace 只看到兩次,保存事件序號與取樣設定,檢查是否有一個事件落在取樣間隙。若 Count 也不增加,才回到輸入邊緣、程式呼叫順序或初始化狀態。不要為了讓圖好看而把 OneShot 強行拉長到不符合實際需求。

一次掃描的定義依目標控制器任務而定。CODESYS 文件說明 Trace 類似取樣示波器,但沒有替所有目標系統保證同一取樣精度。本文不把 Trace 設定名稱轉譯成任何 Q 系列特殊功能;若使用 GX Works 或其他工具,須以該工具的記錄週期、緩衝和觸發說明重新設計測試。

測試 事件寬度 Count 預期 波形驗收
A 1 掃描 +1 可見或標註可能漏取
B 3 掃描 +1 應至少出現一段高值
C 移動相位 +1 比較每相位結果
D 無輸入 +0 不應有虛假觸發

把波形轉成可交接的診斷證據

一份可交接的 Trace 證據要包含控制器、應用版本、任務設定、Trace 設定、變數路徑、觸發時間、輸入腳本與原始匯出檔。截圖只適合快速溝通,不能取代原始資料。若資料在重啟後消失,先依平台功能匯出,再關閉測試,不要直接覆蓋下一次結果。

  1. 替 Trace 設定與輸入腳本各給一個版本號。

  2. 用固定事件序列執行至少三次,記錄每次事件序號。

  3. 把波形時間軸與離線掃描表對照,標出取樣間隙。

  4. 把未測項目、平台限制和推論分開寫在報告中。

  5. 在另一個工程環境重新載入設定或以同一腳本驗證。

排查報告不要寫『Trace 顯示正常』這種無法驗收的句子。改寫成『在5毫秒取樣間隔與2毫秒測試事件寬度的示例中,五次事件的Count均增加,四次波形可見,一次未被取到;漏取原因仍需由原始時間戳及事件相位確認』。這是報告寫法範例,並非本文已執行的測試。下一位工程師因此知道哪些結論來自波形,哪些來自程式計數。

若 Trace 造成任務負載增加,也要比較開啟前後的執行時間與抖動。不要在高負載正式運轉中無限制增加通道與記錄長度;先在離線或維護窗口測試,並依目標平台的診斷建議設定。

驗收表與常見問題

項目 通過條件 證據
邊緣 長按只計一次 掃描表與 Count
取樣 事件寬度與間隔有明確關係 Trace 設定
觸發 能重播同一事件 原始匯出資料
負載 監看不造成未說明的超時 任務監看
限制 漏取時仍不誤判為無事件 報告註記

問:Trace 沒看到短旗標是不是程式沒跑?不是,先用事件序號或 Count 驗證。問:能不能把旗標延長來方便觀察?只能在明確標為診斷版本且不改變正式語意時使用,不能把教學改動當正式修正。問:不同任務可直接比較時間嗎?要先核對任務週期、時間基準和抖動。問:可以只交截圖嗎?不建議,應保留設定與原始資料。

適用型號與限制:本文以 CODESYS Trace 概念示範,未聲稱 GX Works、Q 系列 CPU 或其他平台有相同 Trace 介面、取樣解析度或觸發語意。正式診斷須核對目標工具、CPU 負載、任務配置與資料匯出能力;案例程式僅為教學邏輯。

參考:CODESYS Trace 官方文件

參考:CODESYS Trace 官方文件

延伸閱讀


使用 PLC 工具箱 →