ใช้งาน Modbus RS485 และ TCP/IP พร้อมกันใน PLC ครบถ้วน
ใช้ Modbus RS485 และ Modbus TCP/IP พร้อมกันใน PLC Samkoon FAs-32MT-AC-E ตัวเดียว ตั้งค่า COM 1 เป็น Modbus Master ตั้งแท็บ Net เป็น TCP/IP Master สร้าง Modbus Table สองตาราง แล้วเขียน Ladder ด้วย MBUS, DESTIP และ MBUSTCP ให้ PLC สองตัวสั่งงานกันข้ามโปรโตคอล
PLC Samkoon FAs-32MT-AC-E ใช้ Modbus RS485 และ Modbus TCP/IP พร้อมกันได้ ในคลิป PLC ตัวหลักเป็น Master ฝั่ง RS485 (COM 1 คำสั่ง MBUS) และเป็น Client ฝั่ง TCP/IP (DESTIP + MBUSTCP) แล้วส่งต่อ Input ของ PLC ตัวหนึ่งไปสั่ง Output ของอีกตัวข้ามโปรโตคอล
อัพเดทล่าสุด: 26 ตุลาคม 2569
RS485 กับ TCP/IP ในเครือข่ายเดียวกันได้ไหม
ปกติเวลาทำเครือข่าย Modbus เรามักคุ้นว่าถ้าใช้ RS485 ก็ต้องเป็น RS485 ทั้งเครือข่าย หรือถ้าใช้ TCP/IP ผ่านสาย LAN ก็เป็นสาย LAN ทั้งเครือข่าย คำตอบคือ PLC Samkoon ใช้ทั้งสองแบบพร้อมกันได้
ประโยชน์คือ เซ็นเซอร์หรืออุปกรณ์ไฟฟ้าบางตัวรองรับแค่ Modbus RS485 แต่ PLC ของเราอาจต้องสื่อสารกับอุปกรณ์อื่นผ่านสาย LAN แบบ Modbus TCP/IP การใช้สองแบบพร้อมกันจึงช่วยให้สร้างเครื่องหรือระบบได้หลาย Use Case
คลิปนี้ต่อยอดจากคลิปพื้นฐาน Modbus RS485 และ Modbus TCP/IP ของ PLC Samkoon ถ้ายังไม่เคยใช้ ควรดูคลิปพื้นฐานก่อน
ระบบตัวอย่างในคลิป
บนโต๊ะมี PLC 3 ตัว
| ตัว | บทบาท | การต่อ |
|---|---|---|
| Device 1 | PLC ตัวหลัก เป็นทั้ง Master (RS485) และ Client (TCP/IP) | – |
| Device 2 | Modbus Slave | ต่อกับ Device 1 ด้วยสาย RS485 สองเส้น |
| Device 3 | Modbus TCP/IP Server | ต่อกับ Device 1 ด้วยสาย LAN |
Device 2 และ Device 3 มีปุ่ม Input และหลอด Output ต่อไว้ โปรแกรมใน Device 1 ทำให้
- กด Input ของ Device 2 → Output ของ Device 3 ติด
- กด Input ของ Device 3 → Output ของ Device 2 ติด
แปลว่า Device 1 ทั้งอ่านและเขียนข้อมูลผ่านทั้ง RS485 และ TCP/IP
อุปกรณ์ที่ใช้
PLC ตัวหลักคือ Samkoon FAs-32MT-AC-E
- ไฟเลี้ยง 220V AC, 32 I/O (16 In, 16 Out) แบบ Transistor Output
- RS485 2 พอร์ต: COM 0 คือพอร์ตกลม และ COM 1 คือขั้ว Terminal (485A/485B)
- Ethernet Port รองรับ Modbus TCP/IP
ในคลิปใช้ COM 1 เพราะต่อสาย RS485 เข้าขั้ว Terminal
ขั้นที่ 1 — ตั้งค่า RS485
เปิด SamSoar2022 ไปที่ Project Setting > Communication แท็บ COM 1(485)
| ค่า | Device 1 | Device 2 |
|---|---|---|
| Protocol | Modbus master | Modbus slave |
| Station number | 0 | 1 |
| Baudrate / Databits / Stopbits / Checkcode | 9600 / 8 / 1 / NONE | 9600 / 8 / 1 / NONE |
ขั้นที่ 2 — ตั้งค่า TCP/IP
ในหน้าเดียวกัน แท็บ Net
| ค่า | Device 1 | Device 3 |
|---|---|---|
| Protocol | TCP/IP master | TCP/IP slave |
| Network Config | TCP Client | TCP Server |
| Local IP | 169.254.1.100 | 169.254.1.102 |
| Subnet mask | 255.255.255.0 | 255.255.255.0 |
| Local port | 2000 (ค่า Default) | 2000 |
IP ของสองตัวต้องต่างกัน ส่วน Port ต้องตรงกัน
ขั้นที่ 3 — สร้าง Modbus Table สองตาราง
ใน Project Tree ทางซ้าย หัวข้อ Modbus table สร้างตารางแยกของแต่ละโปรโตคอล
ตาราง 485-slave (ใช้กับคำสั่ง MBUS คุยกับ Device 2)
| Port | Handle code | Slave register | Slave count | Master register | Comment |
|---|---|---|---|---|---|
| 1 | 0x01 Read coil | 10000 | 1 | M1000 | Read Y0 |
| 1 | 0x02 Read disperse input | 0 | 1 | M1100 | Read X0 |
| 1 | 0x05 Write single coil | 10000 | 1 | M11 | Write Y0 |
ตาราง tcp-server (ใช้กับคำสั่ง MBUSTCP คุยกับ Device 3) หน้าตาเหมือนกัน ต่างกันแค่ Master register
| Port | Handle code | Slave register | Slave count | Master register | Comment |
|---|---|---|---|---|---|
| 1 | 0x01 Read coil | 10000 | 1 | M2000 | Read Y0 |
| 1 | 0x02 Read disperse input | 0 | 1 | M2100 | Read X0 |
| 1 | 0x05 Write single coil | 10000 | 1 | M10 | Write Y0 |
สรุปคือ อ่าน Y0 ของปลายทางมาเก็บที่ M1000 / M2000 อ่าน X0 มาเก็บที่ M1100 / M2100 และเขียนค่าของ M11 / M10 ลงไปที่ Y0 ของปลายทาง ตำแหน่ง Slave register ดูได้จากตาราง Modbus Address ของ Samkoon (X0 = 0, Y0 = 10000)
หมายเหตุเรื่องการนับ Address
ส่วนนี้ไม่ได้พูดในคลิป แต่เป็นแนวทางทั่วไปของ PLC Samkoon
Address นับจาก 0 — Slave Register ใน Modbus Table ของ SamSoar2022 นับจาก 0 ใส่ตามตาราง Modbus Address ของ Samkoon ได้ตรงๆ (D0 = 40000) ถ้าโปรแกรม Master นับจาก 1 (Base 1) ให้บวก 1 เช่น D0 = 40001
ขั้นที่ 4 — เขียน Ladder
โปรแกรมในคลิปมี 3 ส่วน
- การสื่อสาร — M8151 (ON ตลอดเวลาที่ PLC รัน) แยกเป็นสองสาย
- M0 (RS485 Read) →
MBUSผ่าน COM 1 (K1) ใช้ตาราง485-slaveเก็บ Error Code ที่ D0 และ Index ที่ D1 - M1 (TCP/IP Read) →
DESTIPระบุปลายทางจาก IP ที่เริ่มต้นที่ D100 (Client IDK0, RetryK3, Return D106) และMBUSTCP(Client IDK0) ใช้ตารางtcp-serverเก็บ Error Code ที่ D2 และ Index ที่ D3 - M8151 อีกสายเขียน IP ปลายทาง 169.254.1.102 และ Port 2000 ลง D100–D104 ด้วย
MOV
- M0 (RS485 Read) →
- ส่งต่อข้อมูลข้ามโปรโตคอล — M1100 (X0 ของ Device 2) → M10 (Write Y0 ของ Device 3) และ M2100 (X0 ของ Device 3) → M11 (Write Y0 ของ Device 2)
- แสดงสถานะ — M1000 (Y0 ของ Device 2) → Y000 และ M2000 (Y0 ของ Device 3) → Y001 ของ Device 1
ในคลิป ส่วนการสื่อสารวาด M1 เป็นหน้าสัมผัสเดียวที่แตกไปทั้ง DESTIP และ MBUSTCP ส่วนตัวอย่างด้านบนเขียน M1 ซ้ำในสองสาย ซึ่งทำงานเหมือนกัน
ลำดับการทำงาน
- กด Input X0 ของ Device 2 → Device 1 อ่านผ่าน RS485 มาเก็บที่ M1100
- M1100 สั่ง M10 ติด → แถว Write single coil ในตาราง
tcp-serverเขียนค่าไปที่ Y0 ของ Device 3 ผ่าน TCP/IP - ทางกลับกัน X0 ของ Device 3 อ่านมาที่ M2100 → สั่ง M11 → เขียนไปที่ Y0 ของ Device 2 ผ่าน RS485
- สถานะ Y0 ของสองตัวที่อ่านกลับมา (M1000, M2000) แสดงที่ Y000 และ Y001 ของ Device 1
สรุป
PLC Samkoon FAs-32MT-AC-E ใช้ Modbus RS485 และ Modbus TCP/IP พร้อมกันได้ โดยตั้ง COM 1 เป็น Modbus Master ตั้งแท็บ Net เป็น TCP/IP Master สร้าง Modbus Table แยกของแต่ละฝั่งที่ใช้ M คนละชุด แล้วใช้ M เป็นตัวกลางส่งข้อมูลข้ามโปรโตคอล
บทถัดไป
แก้ปัญหาข้อมูล Modbus แสดงผลแปลกๆ
คำถามที่พบบ่อย
- ทำไมต้องใช้ RS485 กับ TCP/IP พร้อมกันใน PLC ตัวเดียว?
- เพราะเซ็นเซอร์หรืออุปกรณ์ไฟฟ้าบางตัวรองรับแค่ Modbus RS485 ขณะที่ PLC ของเราอาจต้องคุยกับอุปกรณ์อื่นผ่านสาย LAN แบบ TCP/IP การใช้ทั้งสองแบบพร้อมกันจึงทำให้ออกแบบระบบได้หลาย Use Case
- ต้องตั้งค่า Communication อย่างไร?
- ใน Project Setting > Communication ของ PLC ตัวหลัก แท็บ COM 1(485) เลือก Modbus master และแท็บ Net เลือก TCP/IP master + TCP Client ส่วน PLC ฝั่ง RS485 ตั้งเป็น Modbus slave (Station number 1) และ PLC ฝั่ง LAN ตั้งเป็น TCP/IP slave + TCP Server โดยใช้ Local port 2000 ตรงกันและ IP คนละเบอร์
- โครงสร้างโปรแกรมเป็นอย่างไร?
- M8151 (ON ตลอดเวลาที่ PLC รัน) แยกเป็นสองสาย M0 สั่ง MBUS ใช้ตาราง 485-slave ผ่าน COM 1 และ M1 สั่ง DESTIP กับ MBUSTCP ใช้ตาราง tcp-server ส่วน IP ปลายทาง 169.254.1.102 และ Port 2000 เขียนลง D100–D104 ด้วยคำสั่ง MOV
- เชื่อมข้อมูลระหว่างสองโปรโตคอลอย่างไร?
- ใช้ M เป็นตัวกลาง X0 ของ PLC ฝั่ง RS485 ที่อ่านมาเก็บใน M1100 ไปสั่ง M10 ซึ่งเป็นค่าที่ Write Single Coil ไป Y0 ของ PLC ฝั่ง TCP/IP และ X0 ของ PLC ฝั่ง TCP/IP ที่อ่านมาเก็บใน M2100 ไปสั่ง M11 ซึ่ง Write ไป Y0 ของ PLC ฝั่ง RS485
มีคำถาม? ติดต่อทีมงาน
