บทที่ O04 · Modbus RTU · Inverter

Omron CP1L → Modbus → Inverter

บทนี้พา CP1L ทำหน้าที่เป็น Modbus RTU Master สั่งงาน Omron Inverter รุ่น 3G3JX หรือ 3G3MX (และ MX2 รุ่นใหม่กว่า) — Set ความเร็วมอเตอร์, สั่ง Start/Stop, อ่านกระแสที่กิน, กลับทิศ ฯลฯ

Modbus คืออะไร — ทบทวนจาก M07 ถ้ายังไม่คุ้น Protocol นี้ → ดูที่ M07 — Modbus + PM2230 ก่อน (Concept Modbus เป็นมาตรฐานเดียวกัน เปลี่ยนแค่ Brand ของ PLC ที่เป็น Master)
CP1L + CP1W-CIF11 + E5CC RS-485 system
ระบบครบ — PC (CX-Programmer) + CP1L + CP1W-CIF11 RS-422A/485 Option Board (พร้อม DIP switch 6 ตัว) + E5CC controllers หลายตัวต่อแบบ daisy-chain ผ่าน RS-485

อุปกรณ์ที่ใช้

อุปกรณ์หน้าที่สถานะ 2026
Omron CP1L-EM30DT-DMasterปัจจุบัน
Omron 3G3JX-A4007Inverter 0.75kW 380VLegacy — มี MX2 มาแทน
Omron 3G3MX2-A2007Inverter 0.75kW 220Vปัจจุบัน
CP1W-CIF11RS-485 Option Board สำหรับ CP1Lปัจจุบัน
3-phase motorโหลด

หน้าตา Inverter Omron

Omron 3G3MX Inverter front panel
Omron SYSDRIVE 3G3MX Inverter — หน้าจอแสดง d001 (Output frequency monitor), LED Power/Alarm, Run/Stop-Reset/PRG mode, Run/Stop indicators, ปุ่ม Up/Down/Enter + Volume knob (MIN-MAX) สำหรับตั้งค่าด้วยมือ

ฮาร์ดแวร์: RS-485 Wiring

CP1L ไม่มี RS-485 ในตัว ต้องใส่ Option Board CP1W-CIF11 ก่อน:

  1. ติดตั้ง CIF11 ปิดไฟ → ถอดฝาด้านซ้ายของ CP1L ออก → เสียบ CIF11 ลง slot → ปิดฝา → CIF11 จะมีขั้ว A+/B-/SG ออกมาให้
  2. Wire RS-485 ต่อสาย 3 เส้นระหว่าง CP1L (CIF11) → 3G3MX2:
    • A+ (CIF11) ↔ SP+ หรือ 485+ (Inverter)
    • B- (CIF11) ↔ SN- หรือ 485- (Inverter)
    • SG (CIF11) ↔ L หรือ SG (Inverter common)
  3. Terminating Resistor ปลายสาย daisy-chain ใส่ตัวต้านทาน 120 Ω คร่อม A กับ B (Omron CIF11 มี jumper เลือก On/Off ในตัว)
Modbus 3G3JX daisy-chain wiring diagram
การต่อ Inverter หลายตัวแบบ daisy-chain — Master (PLC) มี SP+ / SN− → ต่อขนานเข้า Inverter ทุกตัว → ปลายสายทั้ง 2 ฝั่งใส่ Termination resistor (3G3JX ไม่มีในตัว ต้องใส่ภายนอก)

ตั้งค่า Inverter เป็น Modbus Slave

ที่หน้าจอ Inverter (เช่น 3G3MX2):

Functionตั้งเป็นความหมาย
A00103Frequency source = Modbus
A00203Run command source = Modbus
C07105Baud rate = 9600 bps
C0721Slave Station = 1
C0740Parity = None
C0751Stop bit = 1
C0762Communication error mode = Trip
C0781Comm wait time = 10 ms

กดปุ่ม FUNC → เลื่อนหา function → กด SET → ใส่ค่า → STR เพื่อ Save

อย่าลืม Reset Inverter หลังเปลี่ยน C071–C078 ต้องดับไฟ Inverter (รอ 30 วินาที) → เปิดใหม่ — ค่า Communication ใหม่ถึงจะมีผล

Register Map ของ Inverter Omron MX2

Register ที่ใช้บ่อย (Hex address):

Registerหน้าที่Function Codeหมายเหตุ
0001HRun / Stop Command06 Write1 = Run, 0 = Stop
0002HDirection06 Write0 = Forward, 1 = Reverse
0004HFrequency Setting06 Writeหน่วย × 100 (เช่น 5000 = 50.00 Hz)
1001HOutput Frequency Monitor03 Readหน่วย × 100
1002HOutput Current Monitor03 Readหน่วย × 10 (เช่น 25 = 2.5 A)
1003HOutput Direction03 Read0=Stop, 1=FWD, 2=REV
1004HOutput Voltage Monitor03 Readหน่วย × 10 (V)
1005HOutput Power Monitor03 Readหน่วย × 100 (kW)

📡 ลองสร้าง Modbus Frame เอง

ลองสร้าง frame ที่ CP1L จะส่งออกสาย RS-485 ดู — เลือก Slave, FC, Address, ค่า → ดู byte-by-byte พร้อม CRC-16:

Modbus Function Codes — Quick Reference

CX-Programmer with Modbus Function Code reference
ตำราอ้างอิงจาก CX-Programmer comment — D32300 = Slave (00–F7h), D32301 = FC: 01h=Read Coil, 03h=Read Holding, 05h=Write Coil, 06h=Write Holding, 08h=Loopback test, 0Fh=Write multi coils, 10h=Write multi registers · D32302 = data byte count · D32303–D32349 = communication data area (max 94 bytes)

CX-Programmer Code — Modbus Master บน CP1L

CP1L รองรับ Modbus RTU Master ผ่าน Easy Modbus-RTU Master — ไม่ต้องเขียน frame เอง เพียงตั้งค่าใน D-register แล้ว Set A640.00 (Port 2) เพื่อ trigger:

Omron Modbus D register memory map
ที่อยู่ D32300–D32306 เก็บ command frame — Slave Address, Function Code, Number of Comm Data Bytes, Modbus Register, Number of Registers

Read Frequency — อ่าน register 1001H

READ_TEMP ladder section
ตัวอย่าง section ที่เซ็ตค่าใน D32300–D32304 ก่อน trigger Modbus (ภาพจากใบงาน FBD + Temperature, syntax เดียวกัน)
; เซ็ต command frame ตอน Power-up
LD    P_On            ; Always ON flag
MOV   #0001  D32300   ; Slave 1
MOV   #0003  D32301   ; Function Code 03 (Read)
MOV   #0004  D32302   ; Number of bytes = 4
MOV   #1001  D32303   ; Modbus Register = 1001H (Output Freq)
MOV   #0001  D32304   ; Number of regs = 1

; Trigger ทุก 1 วินาที
LD    P_1s            ; 1.0s clock
OUT   W10.00          ; RUN_command bit

LD    W10.00
OUT   A640.00         ; Modbus-RTU Master Execution Bit (Port 2)

; เช็ค error
LD    A640.01
OUT   W1.00           ; Normal operation
LD    A640.02
OUT   W1.01           ; Error
Omron Modbus Master execution bits
Auxiliary bits ที่ใช้ — A640.00 = Execution (Port 2), A641.00 = Execution (Port 1) — turn ON เพื่อสั่งส่ง command, OFF เมื่อเสร็จ/error

Write Frequency — เขียน 30.00 Hz

; เปลี่ยน command เป็น Write Single Register
LD    W2.00           ; Trigger จาก HMI/Button
MOV   #0001  D32300   ; Slave 1
MOV   #0006  D32301   ; Function Code 06 (Write Single)
MOV   #0004  D32302   ; Number of bytes = 4
MOV   #0004  D32303   ; Register = 0004H (Frequency Set)
MOV   #3000  D32304   ; Value = 30.00 (× 100)

LD    W2.00
OUT   A640.00         ; Trigger Master

Run / Stop

; Run Forward — เขียน 1 ที่ register 0001H
LD    0.00            ; ปุ่ม Start
MOV   #0001  D32300
MOV   #0006  D32301
MOV   #0004  D32302
MOV   #0001  D32303   ; Reg 0001H
MOV   #0001  D32304   ; 1 = Run
OUT   A640.00

; Stop — เขียน 0 ที่ 0001H
LD    0.01            ; ปุ่ม Stop
MOV   #0000  D32304
OUT   A640.00

Sequence การทำงานจริง

  1. Power Up ทั้ง CP1L และ Inverter — รอ Inverter Boot ~5 วินาที (จอแสดง "0.00" หรือคำเตือน)
  2. เซ็ต Frequency เริ่มต้น ใช้ HMI/CX-Programmer Set D32303 = 0004H, D32304 = 2500 → 25 Hz
  3. กด Start CP1L ส่ง FC 06 เขียน 1 ที่ 0001H → Inverter เริ่มขับมอเตอร์ความถี่เพิ่มขึ้นช้า ๆ (Acceleration ramp)
  4. อ่านค่าจริง ทุก 1 วินาที PLC poll 1001H, 1002H, 1004H, 1005H → เก็บใน D-register → แสดงบน HMI หรือ SCADA
  5. เปลี่ยนความเร็ว เขียน register 0004H ค่าใหม่ → Inverter จะ ramp ความถี่ตาม
  6. หยุด เขียน 0 ที่ 0001H → Inverter ทำ Deceleration ramp → หยุดที่ 0 Hz

Trouble-Shooting

อาการสาเหตุที่พบบ่อย
A640.02 ON ตลอด (Error)Baud rate / Parity / Stop bit ไม่ตรง · สลับ A กับ B
กด Start แต่ Inverter ไม่ทำงานA002 ≠ 03 (Run command ยังเป็น Terminal/Keypad)
ตั้ง Freq แล้วไม่เปลี่ยนA001 ≠ 03 (Freq source ยังเป็น Keypad/Analog)
Comm สำเร็จแต่ค่าผิดลืมว่า value × 100 (ตั้ง 50.00 Hz = ค่า 5000)
กลับมาทำงานแล้ว Comm หายลืมใส่ Terminating Resistor 120Ω ที่ปลายสาย

Modbus TCP — ใช้ Ethernet แทน RS-485

CP1L-E (รุ่น มี E) มี Ethernet ในตัว — สื่อสาร Modbus TCP กับ Slave ที่รองรับได้ด้วย Function block SocSend / SocRcv หรือใช้ตัวช่วย FINS over UDP:

CP1L Modbus TCP network
สถาปัตยกรรม Modbus TCP กับ CP1L-E + HMI + PC + SMC Valve ผ่าน Switch Ethernet
เลือก RTU หรือ TCP ดี? RTU = ต่อสายง่าย / ยาวได้ 1 กม. / แต่ช้า (9600bps) / มีพอร์ตเดียว → เหมาะกับ Inverter, Temp Controller
TCP = เร็ว (100Mbps) / ใช้ Switch ขยายเป็น Star topology / แต่ต้องใช้ Cat-5e/6 → เหมาะกับ HMI, SCADA, ระบบใหญ่

ภาพรวม Sequence ทั้งระบบ

CP1L-EM30DT-D — Master

Modbus RTU (Port 2 / RS-485) · FC 03 / 06 · Daisy-chain

HMI / SCADA

Operator (Ethernet)

↓ ↓ ↓   3 Slaves   ↓ ↓ ↓

Slave 1 — MX2 Inverter #1

→ 3-phase Motor #1

Slave 2 — MX2 Inverter #2

→ 3-phase Motor #2

Slave 3 — E5CC

→ Heater + TC sensor

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