บทที่ O02 · CX-Programmer

CX-Programmer Ladder & คำสั่งพื้นฐาน

CX-Programmer เป็น IDE หลักของ Omron ตั้งแต่ปี 2000 — ใช้ได้กับ CP1E/CP1L/CP1H/CP2E และซีรีส์ CJ/CS/CV ทั้งหมด. บทนี้พาเขียน Ladder ตั้งแต่ Contact-Coil พื้นฐาน, KEEP, TIM, CNTR, DIFU/DIFD ครบเซต

CX-Programmer vs Sysmac Studio Omron มี IDE 2 ตัวที่ทำหน้าที่คนละแบบ:
· CX-Programmer (ในชุด CX-One) → CP1/CP2 และซีรีส์ Legacy
· Sysmac Studio → NJ/NX series เท่านั้น (Machine Automation Controller)

CP1L ห้อง Lab ของเราใช้ CX-Programmer

Device Memory — สัญลักษณ์ของ Omron

Areaตัวอย่างหน้าที่ขนาด
CIO (I/O)0.00, 0.01Input bits (จากหน้าตู้)Word.Bit
CIO (I/O)100.00, 100.01Output bits (ไปหน้าตู้)Word.Bit
W (Work)W0.00 ถึง W511.15"Internal Relay" — bit ภายในใช้ได้อิสระBit
H (Holding)H0.00 ถึง H511.15Internal bit ที่ ค้างค่าเมื่อปิดเปิดBit (Retentive)
D (Data)D0 ถึง D32767Data register 16-bitWord
TT0 ถึง T4095Timer (bit + word ของค่านับเหลือ)Both
CC0 ถึง C4095CounterBoth
A (Auxiliary)A640.00, P_1sSystem flags (เช่น 1.0s clock pulse)Special
กับดักของ Omron — Word.Bit address! Mitsubishi เขียน X0, Y10, M5 ตรง ๆ
Omron ทุก bit เป็น Word.Bit — เช่น 0.00 (Word 0, bit 0), 0.05, 0.06... ขึ้น 0.15 แล้วต่อด้วย 1.00
Output เริ่มที่ Word 100 เป็นต้นไป (PLC จะกำหนดช่วง CIO Word ของ Input/Output ตามรุ่น)

หน้าตา CX-Programmer

CX-Programmer full IDE screenshot with Traffic Lights tutorial
หน้าตา CX-Programmer แบบครบ — ซ้าย: Project Tree (Symbols, IO Table, Settings, Memory, Programs) · กลาง: Symbol table + Ladder editor · ล่าง: Output / Symbol watch / Compile result · ตัวอย่างคือ Traffic Light Controller
CX-Programmer keyboard shortcut reference
แถบ CX-Programmer Information — Shortcuts ที่ใช้บ่อย: Diff-Up/Down (Shift+Up/Down), Force On/Off (Ctrl+J/K), Run (Ctrl+4), Work Online (Ctrl+W), Monitor (Ctrl+1)
ประวัติยาวของ CX-Programmer CX-Programmer มีตั้งแต่ปี 1999 (ทำงานบน Windows 98 ได้) ปัจจุบันรุ่น 9.x สำหรับ Windows 10/11 — UI หลักไม่ค่อยเปลี่ยน เพราะฉะนั้นตำราเรียนเก่า ๆ ที่ใช้ Screenshots ของ CX-Programmer v3.2 ก็ยังศึกษาได้

เริ่มเขียน Project ใน CX-Programmer

  1. สร้าง Project ใหม่ File → New → CX-Programmer Project → ตั้งชื่อ → Device Type: CP1LSettings: เลือก CPU sub-type (เช่น CP1L-EM30D...)
  2. วาด Rung แรก คลิกที่ตำแหน่งใน Section ladder → กดคีย์ลัด:
    • C = New Contact NO (—| |—)
    • / = New Contact NC (—|/|—)
    • O = New Coil (—( )—)
    • I = Instruction (MOV, KEEP, TIM, ฯลฯ)
  3. ใส่ Address พิมพ์ address ในรูปแบบ Word.Bit หรือ Word — เช่น 0.00, 100.01, D10 → Enter
  4. Compile (F7) ทุกครั้งที่แก้ Ladder → กด F7 หรือเมนู Program → Compile All PLC Programs
  5. เชื่อมต่อ PLC PLC → Work Online (Ctrl+W) → เลือก Network Type (USB / Ethernet / Serial)
  6. Transfer to PLC PLC → Transfer → To PLC → เลือก Program + Settings + I/O Table → กด Yes
CX-Programmer Transfer to PLC dialog
Dialog ยืนยันการ Download โปรแกรมเข้า PLC — กด Yes เพื่อ confirm

⚙️ PLC ทำงานยังไง — Scan Cycle

ก่อนเริ่มเขียน Ladder จริง — เข้าใจก่อนว่า CP1L (และ PLC ทุกตัว) ไม่ได้ ทำงานแบบ Event-driven แต่วน Scan Cycle ทีละเฟส · ลองกดสวิตช์ 0.00 ในจังหวะต่าง ๆ ดูว่าเมื่อไหร่ 100.00 ติด

คำสั่งกลุ่มที่ 1 — Logic พื้นฐาน

Start/Stop พร้อม Self-hold

CX-Programmer Start/Stop interlock ladder
ตัวอย่างจากใบงาน Workshop PLC: ปุ่ม Start1 (I:0.00) ปุ่ม Stop (I:0.01) → ขับ K1 (Q:100.00) · แถวล่าง: Start2 (I:0.02) → ขับ K2 (Q:100.01) — Interlock กับ Q:100.00 (K1) เพื่อกัน K1 และ K2 ติดพร้อมกัน

ในรูป — Rung 0:

LD    0.00           ; ปุ่ม Start1 (NO)
OR    100.00         ; Self-hold ของ K1
ANDNOT 0.01          ; ปุ่ม Stop (NC contact)
ANDNOT 100.01        ; Interlock — ห้าม K1 ON ถ้า K2 ON
OUT   100.00         ; K1 (Output)

SET / RSET — Latch / Unlatch

Omron ใช้ RSET (ไม่ใช่ RST เหมือน Mitsubishi):

LD    0.00           ; Start
SET   100.00         ; ON ค้าง

LD    0.01           ; Stop
RSET  100.00         ; OFF

KEEP(11) — เฉพาะ Omron

Omron มีคำสั่ง KEEP ที่รวม SET/RST ไว้ใน Block เดียว — เรียบร้อยกว่าและอ่านง่ายกว่า:

Omron KEEP(11) instruction example
คำสั่ง KEEP(11) — input ด้านบน = Set, ด้านล่าง = Reset, output = bit ที่ค้างค่า. ในตัวอย่าง: I:0.01 (START) + I:0.03 (START1) → Set, I:0.02 (STOP) → Reset, output Y:100.00 (LAMP1)
Set input    ──┤ ├──────┐
                          │   KEEP(11)
Reset input  ──┤ ├──────┤  Bit ที่ Latch
                          ─────────────

🧩 ลองสร้าง Rung — Self-Hold (Omron syntax, Drag & Drop)

ลองประกอบ Rung เองด้วย Address ของ Omron — ลากบล็อกจาก palette ใส่ในช่อง:

🎮 ลองเล่น — Self-Hold (Omron syntax)

แบบเดียวกับ Mitsubishi M02 — แต่ Address ใช้ 0.00 (Start) / 0.01 (Stop) / 100.00 (Output) ตามแบบ Omron:

คำสั่งกลุ่มที่ 2 — Timer (TIM)

Omron TIM instruction example
คำสั่ง TIM ใน CX-Programmer — Timer 0 หน่วงเวลา 10 วินาที (Set value = #100, หน่วยคือ 100ms × 100 = 10s)
คำสั่งหน่วยเวลาตัวอย่าง
TIM100 ms (0.1 s)TIM 0 #50 = T0 ครบใน 5.0s
TIMH(15)10 msTIMH(15) 0 #50 = 0.5s
TMHH(540)1 msTMHH(540) 0 #500 = 0.5s
TIML(542)100 ms (long, 32-bit count)สำหรับเวลานานกว่า 99 นาที

หลังจาก TIM ทำงานครบ — bit T0 (เลขเดียวกับ Timer number) จะเป็น ON ใช้ในรังถัดไปได้:

; รอ 5 วินาทีหลังกดปุ่ม → เปิด Lamp
LD    0.00           ; ปุ่ม
TIM   0 #50          ; T0 = 5.0s

LD    T0
OUT   100.00         ; LAMP ON

🧩 Build the Rungs — Timer ON-Delay (Omron)

ลองประกอบ 2 Rung สำหรับ Timer — แต่ใช้ Address Omron:

🎮 ลองเล่น — Timer ON-Delay (Omron)

กด 0.00 ค้างไว้ 3 วินาที → T0 ครบ → 100.00 ติด:

คำสั่งกลุ่มที่ 3 — Counter (CNT / CNTR)

Omron CNTR + DIFU instruction example
การประยุกต์ Counter: DIFU(013) สร้าง Pulse 1 scan ตอนที่ Sensor เปลี่ยน OFF→ON → CNTR(012) #10 นับครบ 10 ครั้ง → C0 ON → ปลุก Lamp1
คำสั่งประเภทหมายเหตุ
CNTDown counterนับลงจาก preset
CNTR(12)Reversible (Up/Down)นับขึ้น-ลง — ใช้กับ Encoder, ระดับวัสดุ
DIFU(13)Differentiate Upสร้าง pulse 1 scan ตอน rising edge (OFF→ON)
DIFD(14)Differentiate Downสร้าง pulse 1 scan ตอน falling edge (ON→OFF)
; Sensor In + Sensor Out → CNTR up/down
LD    0.01           ; Sensor In
DIFU(13) W2.00       ; pulse บน W2.00

LD    0.03           ; Sensor Out
DIFU(13) W2.01       ; pulse บน W2.01

LD    W2.00          ; up trigger
LD    W2.01          ; down trigger
LD    0.00           ; reset
CNTR(12) 0 #10       ; C0 — reversible counter, preset 10

LD    C0
OUT   100.00         ; LAMP

🧩 Build the Rungs — Counter (Omron)

ลองประกอบ 2 Rung สำหรับ Counter ด้วย Address Omron:

🎮 ลองเล่น — Counter (Omron)

กด 0.00 นับ Pulse 5 ครั้ง → 100.00 ติด · กด 0.01 = Reset:

ตัวอย่างใช้งานจริง — Star–Delta Motor Starter ใน Omron

Sequence เหมือนกับฝั่ง Mitsubishi (ดู M02) แต่ Syntax ต่าง:

  1. กำหนด I/O Mapping
    • 0.00 = Start · 0.01 = Stop · 0.02 = Overload (NC)
    • 100.00 = K1 Main · 100.01 = K2 Star · 100.02 = K3 Delta
  2. Rung 1 — Main + Self-hold
    LD     0.00           ; Start
    OR     100.00         ; Self-hold
    ANDNOT 0.01           ; Stop
    AND    0.02           ; Overload OK
    OUT    100.00         ; K1
  3. Rung 2 — Star ON ระหว่าง T0 ยังไม่ครบ
    LD     100.00         ; K1 ON
    ANDNOT T0             ; T0 ยังไม่ครบ
    OUT    100.01         ; K2 Star
    
    LD     100.00
    TIM    0 #50          ; 5.0s
  4. Rung 3 — Delta หลัง T0 + Interlock
    LD     T0             ; T0 ครบแล้ว
    ANDNOT 100.01         ; Interlock — กัน Star/Delta ซ้อน
    AND    100.00         ; K1 ยัง ON
    OUT    100.02         ; K3 Delta

🧩 The Big One — Build Star–Delta (Omron)

โจทย์ใหญ่ที่สุดของบทนี้ — ประกอบ 4 Rung ของ Star–Delta ทั้งหมด ด้วย 13 บล็อก ใน syntax Omron:

🎮 ลองเล่น — Star–Delta (Omron syntax)

เหมือน M02 — แต่ Address Omron: 0.00 Start · 0.01 Stop · 0.02 OL OK · Outputs 100.00 (Main) / 100.01 (Star) / 100.02 (Delta):

การ Simulate ใน CX-Simulator

CX-One มี CX-Simulator ในตัว — เปิดผ่าน Simulation → Work Online Simulator ในเมนู CX-Programmer → ตัว PLC เสมือนจะรันโปรแกรมที่เพิ่ง Compile

  1. Force I/O — คลิกขวาที่ Contact → Force/Cancel Force → เลือก ON/OFF
  2. ดู Animation — Contact ที่ ON จะมี สีเขียว, ดู Coil เปลี่ยนตาม
  3. Watch ค่า — สร้าง Watch Window: View → Windows → Watch เพิ่ม device ที่ต้องการ Monitor

สรุปสำหรับบทนี้

เคล็ดลับเขียน Ladder Omron ให้สวย ใช้ Symbols (View → Symbols) ตั้งชื่อ I/O ที่อ่านง่าย เช่น START_BTN แทน 0.00 — โปรแกรมจะเป็นมิตรกับคนที่มาดูทีหลัง

เอกสารอ้างอิงสำหรับบทนี้