Modbus TCP Master — อ่าน Sensor ผ่าน Ethernet (LAN)
PLC อ่านค่า sensor จาก Modbus TCP slave (เช่น PowerMeter, Smart RTU) ผ่าน Ethernet — DESTIP ตั้ง IP, MBUSTCP polls
หลักการ
Modbus TCP เป็นรุ่น TCP/IP ของ Modbus protocol — ส่งผ่าน Ethernet แทน RS485 ข้อดี:
- เร็วกว่า — 100 Mbps vs 115 kbps RTU (1000× เร็ว)
- สาย LAN ใช้กับ switch ได้ — ไม่ต้องเดินสายแบบ daisy-chain
- ระยะไกลกว่า — 100m ต่อ segment, ผ่าน switch ได้ไม่จำกัด
- Multi-master ได้ — TCP เป็น session-based ไม่ขัดแย้งเหมือน RS485
ข้อเสีย:
- ราคาแพงกว่า (RJ45, switch, cable)
- Setup ยุ่งกว่า (IP, subnet, gateway)
- Latency แปรปรวน (Ethernet best-effort)
คำสั่ง MBUSTCP + DESTIP
DESTIP D500 K0 K3 D510
│ │ │ │
│ │ │ └─ Return code D-register
│ │ └──── Retry count
│ └─────── Client ID (0-3 ปกติ)
└──────────── Source IP D-register (4 word: 192.168.1.10)
MBUSTCP K0 PowerMeter D100 D101
│ │ │ │
│ │ │ └─ Index D-register
│ │ └────── Error code D-register
│ └────────────────── Modbus Table name (defined in IDE)
└───────────────────── Client ID (must match DESTIP)
IP ตั้งใน D Register
IP 192.168.1.10 แยกเป็น 4 word:
- D500 = 192
- D501 = 168
- D502 = 1
- D503 = 10
ลำดับการทำงาน
First scan
↓
ตั้ง IP ของ slave: D500-D503 = 192.168.1.10
↓
M0 (Connection ON) ติดเสมอ (M8151 always-on)
↓
DESTIP — สร้าง TCP socket ไป slave
↓
ถ้า D510 (return) = OK → flag connected
↓
MBUSTCP — poll Modbus Table 'PowerMeter' ตาม cadence ใน table
↓
ค่าที่อ่านได้แสดงใน:
D700 = Voltage (×0.1V)
D701 = Current (×0.01A)
D702 = Power Factor (×0.001)
D703 = kWh accumulator
↓
HMI โชว์ค่าจาก D700-D703 ทุก ~50-200ms
Modbus Table Setup (IDE)
ใน SamSoar2022 → Project → Modbus Table → Add ตาราง 'PowerMeter':
| Slave | FC | Slave Reg | PLC Reg | Length | Mode |
|---|---|---|---|---|---|
| 1 | 03 (Read) | H0000 | D700 | 4 | Loop |
(H0000 = 0x0000 หาก PowerMeter map values ที่ฝั่งล่าง)
Connection: เลือก Ethernet (ไม่ใช่ COM1) → Trigger Mode = Loop
ความปลอดภัย / Error Handling
- D100 (error code) — 0 = OK, อื่นๆ = error code (timeout, illegal FC, etc.)
- D510 (DESTIP return) — 0 = connected, อื่นๆ = connection failed
- Cable lock — ตรวจ D100 != 0 → SET fault flag
- Auto retry — DESTIP K3 (3 retries) ก่อน fail
- Watchdog — ตั้ง timeout 5s, ถ้าไม่มีค่าใหม่ → degrade
ขยายเพิ่ม
- Multiple slaves — DESTIP client 0, 1, 2 (สูงสุด 4 connection)
- Bidirectional — เพิ่ม table เขียนค่ากลับไป (FC06 / FC16)
- Modbus TCP server — PLC เป็น slave ให้ SCADA อ่าน (no DESTIP, just enable in IDE)
- OPC UA — อนาคต ใช้ Samkoon F-Net หรือ external gateway
โปรแกรม PLC
I/O Assignment
| Address | Role | Note |
|---|---|---|
| Y3 | ไฟ Connection OK (สีเขียว) | |
| Y4 | ไฟ Modbus Error (สีแดง) |
Parameters ที่ปรับได้
D500-D503default: 192.168.1.10IP ของ slave — แก้ค่าให้ตรงกับอุปกรณ์จริง
D510default: —ค่าที่ DESTIP return: 0=connected, อื่นๆ=error code
D100default: —Error code ของ MBUSTCP: 0=OK, 1=timeout, 2=CRC, ฯลฯ
D101default: —Index ที่กำลัง poll ของ MBUSTCP (วนตาม entry ใน table)
D700-D703default: —ค่าจาก register ของ slave (กำหนดใน Modbus Table 'PowerMeter')
อุปกรณ์ที่แนะนำ
คำถามที่พบบ่อย
PLC ของฉันมี Ethernet ไหม?
ดูตัวเลขในชื่อรุ่น Samkoon: รุ่นที่มี '-E' หรือ 'F-' ตามท้ายเช่น FAs-32MT-AC-E มี LAN port (Ethernet) รุ่น MR-AC ไม่มี ต้องเช็คคู่มือ — ถ้าไม่มี Ethernet ใช้ Modbus RTU (RS485) แทน
ทำไมต้องใช้ DESTIP ก่อน MBUSTCP?
Modbus TCP ต้อง 'connect' ก่อน 'send' — ต่างจาก RTU ที่เป็น stateless DESTIP สร้าง TCP socket ไปยัง slave หลังจากนั้น MBUSTCP จึงส่งคำขอผ่าน socket นั้น (ระบุด้วย client ID K0) ถ้าไม่ DESTIP ก่อน → MBUSTCP fail ทุกครั้ง
Client ID K0 คืออะไร?
PLC รองรับ TCP socket หลาย session พร้อมกัน (ปกติ 0-3) ใช้คุยกับ slave หลายตัวพร้อมกัน K0 = session แรก ถ้าต้องการคุย 2 slave: DESTIP D500 K0 + MBUSTCP K0 'PowerMeter' (slave 1) DESTIP D510 K1 + MBUSTCP K1 'TempSensor' (slave 2)
Performance เทียบกับ RTU?
TCP loop poll ~10-50ms, RTU loop poll ~100-300ms (ขึ้นกับ baud rate, register count) TCP เหมาะกับงาน 'real-time monitor' ที่ต้องการ refresh เร็ว เช่น power monitoring 100ms cycle RTU เหมาะกับงานทั่วไป — ติดตั้งง่าย, ราคาถูก, ทนสัญญาณรบกวนมากกว่า
เอกสารที่เกี่ยวข้อง
วิธีนำเข้าไฟล์ใน SamSoar2022
- ดาวน์โหลดไฟล์
modbus-tcp-master.csvจากแท็บ CSV ด้านบน - เปิด SamSoar2022 → สร้างโปรเจกต์ใหม่ (หรือเปิดโปรเจกต์ที่มีอยู่)
- เมนู File → Import → เลือกไฟล์
.csvที่เพิ่งดาวน์โหลด - กด F4 เพื่อ Compile — ตรวจสอบว่าไม่มี error
- ตรวจการต่อสายตามตาราง I/O ด้านบน แล้ว Download โปรแกรมเข้า PLC
