Learning Objectives
- 說明 TON 與 TOF 的差別,畫出它們的時序圖
- 用計時器寫出「延遲啟動」與「延遲停止」
- 說明計數器為什麼只在上升緣加 1,並用 CTU 與 RST 數箱子
加入時間與次數
上一課的階梯圖只看「現在」:按鈕按著就亮,放開就暗,加上自保持也只是記住一個狀態。真實的機器還需要:
- 時間:馬達啟動 2 秒、轉速穩定後才開始進料;馬達停下後,散熱風扇再吹 3 秒。
- 次數:裝滿 3 箱就停下輸送帶,等人換棧板。
PLC 用計時器與計數器處理這兩件事。IEC 61131-3 把它們定義成標準的功能區塊: 計時器有 TON、TOF、TP,計數器有 CTU、CTD、CTUD。本課程的模擬 PLC 支援 TON、TOF、CTU。
TON:通電延遲
TON 的條件(IN)導通後開始累加時間,累加到設定值(PT)時,完成位元變成 1;條件一斷開,時間馬上歸零、完成位元變成 0。
IN ___|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|________|‾‾‾|______
ET 0 → → → PT ─────┘0 0→┘0
Q ___________|‾‾‾‾‾‾‾|______________________
←PT→ ↑ 條件太短,沒有到 PT,Q 不會亮
在本課程的階梯圖裡,計時器寫成輸出 TON T0 2000(T0 號、2000 毫秒);接點 T0 檢查完成位元,字組 T0.ACC 是目前累加的毫秒數。
各廠牌的寫法不同(例如用 0.1 秒為單位、或另外有保持型計時器 TONR/RTO),以手冊為準。
逐步看:TON 是怎麼累加的
PLC 每輪掃描執行到 TON 時,看條件是否導通:導通就把這一輪經過的時間加上去,斷開就歸零。為了看得清楚,把掃描週期放大成 100 毫秒。注意第 6 輪條件斷開時,ACC 直接歸零。
TOF:斷電延遲
TOF 正好相反:條件導通時完成位元立刻是 1;條件斷開後,完成位元再維持設定的時間才變成 0。
IN ___|‾‾‾‾‾‾‾‾‾‾|_______________________
Q ___|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|____________
←── PT ──→
典型用法:馬達停下後散熱風扇繼續吹一段時間;人離開後走廊燈再亮 30 秒。
TP(脈衝)則是條件一導通,就輸出一段固定長度的脈衝,不管條件之後怎麼變。本課程的模擬 PLC 沒有 TP,用 TON 也能組出類似的效果。
下面的練習延續上一課的馬達自保持電路,加上一個 TON 與一個 TOF。
計數器:數上升緣
CTU(上數計數器)在條件從 0 變成 1 的那一輪(上升緣)把目前值 CV 加 1,CV 到達設定值 PV 時,完成位元是 1。
為什麼一定要看上升緣?一個箱子經過感測器要 0.2 秒,掃描週期 10 毫秒,感測器在 20 輪掃描裡都是 1。 如果每一輪都加 1,一個箱子就會被算成 20 個。
計數器不會自己歸零:要用 RST C0 把目前值清成 0、完成位元清成 0。CTD 是下數計數器(從設定值往下數),CTUD 兩個方向都能數。
本課程的寫法:輸出 CTU C0 3(C0 號、數到 3);接點 C0 檢查完成位元,字組 C0.CV 是目前值。
逐步看:上升緣計數
感測器在 9 輪掃描裡讀到的值,有 3 段連續的 1,也就是 3 個箱子。注意 prev 怎麼記住上一輪的值,讓「連續的 1」只算一次。
小測驗:計時器
「人離開後走廊燈再亮 30 秒」最適合用哪一種計時器?
用 Python 模擬 TON(每輪 100 毫秒、設定 200 毫秒),會印出什麼?
acc, out = 0, []
for x in [1, 1, 0, 1, 1, 1]:
acc = min(200, acc + 100) if x else 0
out.append(int(acc >= 200))
print(out)
小測驗:計數器
計數器數到設定值以後,目前值會怎樣?
感測器每一輪讀到的值是 0 1 1 1 0 0 1 0 1 1,用上升緣計數,CV 最後是多少?
「裝滿 3 箱時停下輸送帶」,在輸送帶的 rung 裡要怎麼放計數器 C0 的接點?
重點整理
- TON:條件要連續導通到設定時間,完成位元才是 1;條件斷開立刻歸零。用在延遲啟動、防誤觸。
- TOF:條件導通時完成位元立刻是 1;斷開後再維持設定時間才變 0。用在延遲停止。
- 計時器靠每輪掃描累加時間;目前值 T0.ACC、完成位元 T0(寫法依廠牌而異)。
- CTU 只在條件的上升緣加 1;目前值 C0.CV、完成位元 C0。不會自己歸零,要用 RST。
- 常見組合:計數完成的接點用常閉串進設備的 rung 讓它停下;重置按鈕接 RST。
下一課看 IEC 61131-3 的五種語言,用結構化文字(ST)寫同樣的邏輯。