- หน้าแรก
- คลังความรู้
- PLC
- ภาษา IEC 61131-3
// บทที่ 22.5 · PLC · IEC 61131-3 Languages
ภาษาโปรแกรม PLC ตาม IEC 61131-3: LD FBD ST SFC และ IL — โปรแกรมเดียวกันในหลายภาษา ชนิดข้อมูล และการเลือกใช้
IEC 61131-3 กำหนดห้าภาษาให้ PLC ทุกยี่ห้อ เพื่อให้คนที่เรียนจากยี่ห้อหนึ่งอ่านอีกยี่ห้อได้ หน้านี้เขียนงานเดียวกัน — มอเตอร์ล็อกตัวเองพร้อมแตรเตือน 5 วินาที — ในทุกภาษา ให้เห็นว่าแต่ละภาษาถนัดอะไร
- LD: ตรรกะบิต อ่านเหมือนวงจรรีเลย์ · FBD: บล็อกต่อสาย เหมาะงานกระบวนการ
- ST: ภาษาข้อความแบบ Pascal เหมาะคำนวณ ลูป ข้อมูล สเตตแมชชีน
- SFC: ขั้นและเงื่อนไข เหมาะงานลำดับ · IL: ถูกยกเลิกในฉบับ 2013
- FUNCTION ไม่มีหน่วยความจำ · FUNCTION_BLOCK มีหน่วยความจำ (ไทเมอร์ PID)
โจทย์เดียว ห้าภาษา พื้นฐาน
อินพุต: STOP (NC) START · เอาต์พุต: แตร (Horn) สายพาน (Conveyor) · กด START แล้วแตรดัง 5 s จากนั้นสายพานเดิน กด STOP หยุดทั้งหมด
Ladder Diagram (LD)
I0.0(STOP) I0.1(START) M0.0 ──┤ ├────────┬──┤ ├──────┬───────────────────────( )── สั่งเดิน (ล็อกตัวเอง) │ M0.0 │ └──┤ ├──────┘ M0.0 ┌─TON T1──┐ ──┤ ├────────────────────────┤IN Q├─────────── นับ 5 s T#5s ──┤PT ET├ M0.0 T1 Q0.1 ──┤ ├────────┤/├────────────────────────────────( )── แตร T1 Q0.0 ──┤ ├───────────────────────────────────────────( )── สายพาน
Function Block Diagram (FBD)
┌──────┐
START ───┤ ≥1 │ ┌──────┐
Run ─────┤ ├──────┤ & ├──── Run
└──────┘ STOP─┤ │
└──────┘
┌─TON───┐ ┌──────┐
Run ─────┤IN Q├──── T1.Q ───────┤ & │
T#5s ───┤PT ET├ Run ─────────┤ ├──── Horn
└───────┘ T1.Q ──o─────┤ │ (o = กลับค่า)
└──────┘
T1.Q ───────────────────────────────────────── Conveyor
Structured Text (ST)
VAR Run : BOOL; T1 : TON; END_VAR Run := (PB_Start OR Run) AND PB_Stop_NC; // ล็อกตัวเอง T1(IN := Run, PT := T#5S); // เรียกอินสแตนซ์ไทเมอร์ทุกสแกน Horn := Run AND NOT T1.Q; Conveyor := T1.Q;
Sequential Function Chart (SFC)
╔══════╗
║ 0 รอ ║
╚══╤═══╝
──┼── START
┌──┴───┐ ┌────────────┐
│1 เตือน├───┤ N Horn │
└──┬───┘ └────────────┘
──┼── Step1.T >= T#5s
┌──┴───┐ ┌────────────┐
│2 เดิน ├───┤ N Conveyor │
└──┬───┘ └────────────┘
──┼── NOT PB_Stop_NC
└──────► กลับขั้น 0
Instruction List (IL) — ภาษาที่ถูกยกเลิก
LD PB_Start OR Run AND PB_Stop_NC ST Run
IL คล้ายภาษาแอสเซมบลี ถูกตัดออกจาก IEC 61131-3 ฉบับที่ 3 (2013) แต่ยังพบในโปรแกรมเก่า (Siemens STL, Mitsubishi List)
ชนิดข้อมูลและค่าคงที่ กลาง
| ชนิด | ขนาด | ช่วงค่า | ใช้กับ |
|---|---|---|---|
| BOOL | 1 บิต | FALSE / TRUE | I/O ดิจิทัล สถานะ |
| INT | 16 บิต | −32 768 … 32 767 | ค่าดิบแอนะล็อก ตัวนับ |
| DINT | 32 บิต | −2 147 483 648 … 2 147 483 647 | ตัวนับใหญ่ ตำแหน่งเอนโค้ดเดอร์ |
| REAL | 32 บิต IEEE 754 | ~7 หลักนัยสำคัญ | ค่าทางวิศวกรรม PID |
| TIME | 32 บิต (ms) | T#0ms … T#24d20h… | ค่าตั้งไทเมอร์ |
| WORD / DWORD | 16 / 32 บิต | บิตแพทเทิร์น | สถานะหลายบิต รีจิสเตอร์ Modbus |
L1 Signed integer range ช่วงค่าจำนวนเต็มแบบมีเครื่องหมาย
L2 Integer pitfalls in scaling กับดักการคำนวณจำนวนเต็ม
วิธีหลีกเลี่ยง: แปลงเป็น REAL ก่อนคำนวณ (INT_TO_REAL) หรือใช้ DINT และคูณก่อนหาร — ตัวอย่างการสเกลอยู่ใน อนาล็อก · PID
สร้างฟังก์ชันบล็อกมอเตอร์ใช้ซ้ำ ขั้นสูง
โรงงานที่มีมอเตอร์ 50 ตัว ไม่ควรเขียนวงจรล็อกตัวเอง ตรวจป้อนกลับ และนับชั่วโมงซ้ำ 50 ครั้ง สร้าง FB หนึ่งตัวแล้วเรียก 50 อินสแตนซ์
FUNCTION_BLOCK FB_Motor VAR_INPUT Start, Stop_NC, OL_NC, Feedback : BOOL; FbTime : TIME := T#2S; END_VAR VAR_OUTPUT Run, Fault : BOOL; Hours : REAL; END_VAR VAR Cmd : BOOL; TFb : TON; THr : TON; END_VAR Cmd := (Start OR Cmd) AND Stop_NC AND OL_NC AND NOT Fault; TFb(IN := Cmd XOR Feedback, PT := FbTime); // สั่งแล้วไม่มีป้อนกลับ หรือไม่สั่งแต่มีป้อนกลับ IF TFb.Q THEN Fault := TRUE; END_IF // รีเซ็ต Fault จาก HMI Run := Cmd; THr(IN := Feedback AND NOT THr.Q, PT := T#36S); // พัลส์ทุก 0.01 ชม. IF THr.Q THEN Hours := Hours + 0.01; END_IF END_FUNCTION_BLOCK
เลือกภาษาให้เหมาะกับงาน
| งาน | ภาษาที่เหมาะ | เหตุผล |
|---|---|---|
| อินเตอร์ล็อก ล็อกตัวเอง ตรรกะความปลอดภัย | LD | ช่างหน้างานดูออนไลน์และวิเคราะห์ได้ทันที |
| ลูปควบคุมกระบวนการ บล็อก PID | FBD | เห็นทางไหลของสัญญาณ |
| คำนวณ สูตรผลิต อาร์เรย์ ข้อความ การสื่อสาร | ST | กระชับ ใช้ลูปและเงื่อนไขได้ |
| เครื่องจักรทำงานเป็นขั้น แบตช์ | SFC (หรือ ST แบบ CASE) | เห็นขั้นปัจจุบัน วินิจฉัยว่าค้างขั้นไหนได้ทันที |
คำถามที่พบบ่อย
ควรเขียน PLC ด้วยแลดเดอร์หรือ Structured Text?
ใช้ตามงาน: ตรรกะเปิด-ปิดและอินเตอร์ล็อกที่ช่างต้องอ่านวิเคราะห์หน้างาน แลดเดอร์เหมาะที่สุด การคำนวณ การจัดการข้อมูล สูตรผลิต ลูป สเตตแมชชีนที่ซับซ้อน ST สั้นและชัดกว่า ลำดับขั้นใช้ SFC โปรเจกต์จริงมักผสมหลายภาษา โดยห่อส่วนที่ซับซ้อนเป็นฟังก์ชันบล็อกแล้วเรียกจากแลดเดอร์
ฟังก์ชัน (FUNCTION) ต่างจากฟังก์ชันบล็อก (FUNCTION_BLOCK) อย่างไร?
ฟังก์ชันไม่มีหน่วยความจำ ให้ผลเดียวกันทุกครั้งเมื่ออินพุตเดียวกัน เช่น การสเกลค่า ฟังก์ชันบล็อกมีตัวแปรภายในที่คงค่าข้ามสแกน ต้องสร้างอินสแตนซ์ เช่น ไทเมอร์ เคาน์เตอร์ PID หรือบล็อกควบคุมมอเตอร์