พิมพ์คำที่ต้องการค้นหา ทั้งภาษาไทยและอังกฤษ

  1. หน้าแรก
  2. คลังความรู้
  3. PLC
  4. ไทเมอร์ · เคาน์เตอร์

// บทที่ 22.4 · PLC · Timers & Counters

ไทเมอร์และเคาน์เตอร์ตาม IEC 61131-3: TON TOF TP CTU CTD CTUD พร้อมไดอะแกรมเวลาและตัวอย่างงานจริง

ไทเมอร์และเคาน์เตอร์คือเหตุผลหลักที่ PLC แทนตู้รีเลย์ได้คุ้ม ไทเมอร์หนึ่งตัวในโปรแกรมแทนไทเมอร์จริงราคาหลายร้อยบาท และตั้งเวลาได้แม่นยำจาก HMI หน้านี้ใช้ชื่อตามมาตรฐาน IEC 61131-3 ซึ่งเป็นแม่แบบของคำสั่งในทุกยี่ห้อ

เขียนโดย อาจารย์มดอัปเดต
สรุปใน 30 วินาที
  • TON: IN ต้องค้างครบ PT จึง Q = 1 · TOF: Q ค้างอีก PT หลัง IN ดับ · TP: พัลส์ยาว PT ต่อหนึ่งขอบขาขึ้น
  • CTU นับขอบขาขึ้นของ CU · Q = 1 เมื่อ CV ≥ PV · R ล้างค่า
  • ความแม่นยำ ≈ ± หนึ่งเวลาสแกน
  • เวลานานมาก: ใช้ไทเมอร์นาทีป้อนเคาน์เตอร์

ไทเมอร์สามแบบ พื้นฐาน

INTON.QTOF.QTP.Q024681012141618เวลา (s)PTพัลส์สั้นกว่า PT → TON ไม่ออกค้าง 3 s หลัง IN ดับIN ซ้ำระหว่างพัลส์ไม่มีผลET (elapsed time) นับขึ้นเฉพาะช่วงที่ไทเมอร์กำลังจับเวลา
รูป 1 · อินพุตเดียวกัน (แถวบน) ป้อนไทเมอร์สามแบบที่ PT = 3 s

T1 TON — on-delay หน่วงเวลาเปิด

ET={min⁡(ET+Δt, PT)IN=10IN=0Q=IN∧(ET≥PT)ET = \begin{cases} \min(ET + \Delta t,\ PT) & IN = 1 \\ 0 & IN = 0 \end{cases} \qquad Q = IN \wedge (ET \ge PT)

T2 TOF — off-delay หน่วงเวลาปิด

Q=IN∨(ET<PT)โดย ET เริ่มนับเมื่อ IN:1→0, ET=0 ขณะ IN=1Q = IN \vee (ET < PT) \quad \text{โดย } ET \text{ เริ่มนับเมื่อ } IN: 1 \to 0,\ ET = 0 \text{ ขณะ } IN = 1

T3 TP — pulse พัลส์ความยาวคงที่

Q=1 ช่วง [t0, t0+PT) หลังขอบขาขึ้นของ IN ที่ t0 (ไม่เริ่มใหม่ระหว่างพัลส์)Q = 1 \ \text{ช่วง } [t_0,\ t_0 + PT) \text{ หลังขอบขาขึ้นของ } IN \text{ ที่ } t_0 \ (\text{ไม่เริ่มใหม่ระหว่างพัลส์})

T4 Timer accuracy ความแม่นยำของไทเมอร์ซอฟต์แวร์

PT≤tactual≤PT+tscan+tbasePT \le t_{actual} \le PT + t_{scan} + t_{base}
ตัวอย่าง T-1

สายพานเตือนด้วยแตร 5 s ก่อนเดิน และพัดลมระบายความร้อนเดินต่อ 2 นาทีหลังหยุด

  1. สั่งเดิน M0.0 (ล็อกตัวเองจาก START/STOP) · T1 = TON(M0.0, 5s)

  2. แตร: Q0.1 = M0.0 & !T1 · สายพาน: Q0.0 = T1 (เดินเมื่อครบ 5 s)

  3. พัดลม: T2 = TOF(Q0.0, 120s) · Q0.2 = T2 — เดินพร้อมสายพานและค้างอีก 2 นาทีหลังสายพานหยุด

T5 Flasher from two timers ไฟกะพริบด้วยไทเมอร์สองตัว

T1=TON(EN∧T2‾, ton)T2=TON(T1, toff)Q=EN∧T1‾(Tperiod=ton+toff)T1 = \text{TON}(EN \wedge \overline{T2},\ t_{on}) \quad T2 = \text{TON}(T1,\ t_{off}) \quad Q = EN \wedge \overline{T1} \quad (T_{period} = t_{on} + t_{off})

เคาน์เตอร์ พื้นฐาน

CURCV123456QCV ≥ PV = 4CV นับต่อเกิน PV ได้ (จนถึงค่าสูงสุดของชนิดข้อมูล) · RESET ทำให้ CV = 0 และ Q = 0
รูป 2 · CTU นับเฉพาะขอบขาขึ้นของ CU ถ้าชิ้นงานหยุดค้างหน้าเซนเซอร์ก็นับเพียงครั้งเดียว

T6 CTU — up counter เคาน์เตอร์นับขึ้น

CVk+1={0R=1CVk+1P(CU)CVkotherwiseQ=(CV≥PV)CV_{k+1} = \begin{cases} 0 & R = 1 \\ CV_k + 1 & P(CU) \\ CV_k & \text{otherwise} \end{cases} \qquad Q = (CV \ge PV)

T7 CTD — down counter เคาน์เตอร์นับลง

CV=PV เมื่อ LDCVk+1=CVk−1 ที่ P(CD)Q=(CV≤0)CV = PV \text{ เมื่อ LD} \qquad CV_{k+1} = CV_k - 1 \text{ ที่ } P(CD) \qquad Q = (CV \le 0)

CTUD รวมทั้งสองในตัวเดียว (QU และ QD) ใช้นับจำนวนชิ้นงานที่อยู่ในพื้นที่ เช่น รถเข้า-ออกลานจอด หรือชิ้นงานบนบัฟเฟอร์ระหว่างสองเครื่อง

ตัวอย่าง T-2

รอบเปลี่ยนไส้กรองทุก 500 ชั่วโมงทำงาน แต่ไทเมอร์ PT สูงสุด 24 ชม.

  1. สร้างพัลส์ทุก 1 ชั่วโมงขณะปั๊มเดิน: T1 = TON(Q0.0 & !T1, 3600s) (รีเซ็ตตัวเองเมื่อครบ)

  2. นับพัลส์: C1 = CTU(T1, I0.5, 500) · I0.5 = ปุ่มรีเซ็ตหลังเปลี่ยนไส้กรอง

  3. เตือน: Q0.3 = C1 · ทำ C1 เป็นแบบ retentive เพื่อไม่ให้ค่าหายเมื่อไฟดับ

ชื่อในแต่ละยี่ห้อ

IEC 61131-3Siemens S7-1200/1500Mitsubishi FX5/iQOmron CP/NX
TONTON (IEC_TIMER)OUT T0 K50 (100 ms) / TON FBTIM / TON
TOFTOFTOF FB (หรือวงจร)TOF
TPTPTP FBTP
CTUCTUOUT C0 K10 / CTU FBCNT / CTU

ไทเมอร์แบบเก่าของบางยี่ห้อกำหนดเป็นจำนวน “ฐานเวลา” เช่น K50 ที่ฐาน 100 ms = 5 s ตรวจฐานเวลาทุกครั้งเมื่อย้ายโปรแกรมข้ามรุ่น

เคาน์เตอร์ความเร็วสูง กลาง

CTU ในโปรแกรมนับได้ไม่เกินครึ่งหนึ่งของอัตราสแกนโดยประมาณ (ต้องเห็น 0 หนึ่งสแกนและ 1 หนึ่งสแกน) เช่น สแกน 10 ms นับได้ไม่เกิน ~50 Hz และต้องหักตัวกรองอินพุต เอนโค้ดเดอร์และเซนเซอร์ความเร็วสูงต้องต่อเข้าอินพุตความเร็วสูง (HSC) ของ CPU ซึ่งนับด้วยฮาร์ดแวร์ได้ถึงหลายสิบหรือหลายร้อย kHz และรองรับสัญญาณ A/B สองเฟส

T8 Software counter limit ความถี่สูงสุดของเคาน์เตอร์ในโปรแกรม

fmax≈12 (tscan+tin)f_{max} \approx \frac{1}{2\,(t_{scan} + t_{in})}

คำถามที่พบบ่อย

ไทเมอร์ PLC แม่นยำแค่ไหน?

ไทเมอร์อัปเดตเมื่อถูกประมวลผลในแต่ละสแกน ความคลาดเคลื่อนจึงประมาณหนึ่งเวลาสแกน (บวกความละเอียดของฐานเวลา เช่น 1 ms 10 ms 100 ms) งานทั่วไปไม่มีปัญหา แต่ถ้าต้องการความแม่นยำระดับมิลลิวินาทีให้ใช้ไทเมอร์ฮาร์ดแวร์ งานที่เรียกเป็นรอบ (cyclic interrupt) หรือเอาต์พุตพัลส์ของ CPU

ไทเมอร์ไม่นับเมื่ออยู่ในส่วนโปรแกรมที่ไม่ถูกเรียก เกิดอะไรขึ้น?

ไทเมอร์แบบซอฟต์แวร์นับเฉพาะตอนคำสั่งถูกประมวลผล ถ้าอยู่ในฟังก์ชันหรือการกระโดดข้าม (jump) ที่ไม่ได้ทำงาน มันจะหยุดนับหรือค้างค่า ควรเรียกไทเมอร์ทุกสแกนแล้วควบคุมด้วยอินพุต IN แทน

อาจารย์มด · ธีรวุฒิ แสวงบุญ
อาจารย์สาขาวิชาวิศวกรรมไฟฟ้า มหาวิทยาลัยราชภัฏธนบุรี สมุทรปราการ · ดูโปรไฟล์