สอนใช้ Modbus RS485 Master-Slave
สอนใช้ Modbus RS485 กับ Samkoon PLC 3 ตัวแบบ Master-Slave ต่อสาย 485A/485B แบบ Multi-Drop ตั้งค่า COM1(485) ใน Project Setting สร้าง Modbus Table อ่าน/เขียน และเรียกด้วยคำสั่ง MBUS ใน SamSoar2022
ต่อ Samkoon PLC หลายตัวด้วยสาย 2 เส้น (485A ชน 485A, 485B ชน 485B) ตั้ง COM 1(485) ของ Master เป็น Modbus master Station 0 และ Slave เป็น Modbus slave Station 1, 2 จากนั้นสร้าง Modbus Table ต่อ Slave แล้วเรียกด้วย MBUS K1 ใน Ladder — Master จะอ่าน Y/M/X/D ของ Slave มาเก็บใน M/D ของตัวเอง และเขียนกลับได้ผ่านสายชุดเดียวกัน
อัพเดทล่าสุด: 26 ตุลาคม 2569
ระบบในคลิป
- PLC Samkoon 3 ตัว ตัวแรกเป็น Modbus Master (ผู้ออกคำสั่งอ่านและเขียนข้อมูล) รุ่น FAs-32MT-AC-E
- อีก 2 ตัวเป็น Modbus Slave (รับคำสั่งแล้วส่งข้อมูลกลับให้ Master) เป็น PLC ที่มีจำนวน I/O ไม่เท่ากันก็ได้
- สายสัญญาณ RS485 แค่ 2 เส้น ส่วนสาย LAN ที่ต่อเข้า Hub ในคลิปใช้แค่สำหรับเขียนโปรแกรมและ Monitor จากคอมพิวเตอร์ ไม่เกี่ยวกับการสื่อสาร RS485
ขั้นตอนมี 4 ขั้น: ต่อสาย, ตั้งค่า Communication ของ Master และ Slave, สร้าง Modbus Table, เรียกใช้ด้วยคำสั่ง MBUS
1. ต่อสาย RS485 แบบ Multi-Drop
- ที่ Terminal 485 ของ PLC แต่ละตัวมีขา 485A และ 485B
- ต่อ A ชน A ชน A ของทุกตัว และ B ชน B ชน B ของทุกตัว ใช้สายเพียง 2 เส้นทั้งระบบ
2. ตั้งค่า Master
สร้าง Project
- ดาวน์โหลดและเปิดโปรแกรม SamSoar2022 (ค่าเริ่มต้นเป็นภาษาจีน เปลี่ยนเป็น English ได้ที่แถบด้านบน)
- กด Create Project → PLC Project ตั้งชื่อ Project (ในคลิปใช้
master-demo) ถ้าจะเก็บไฟล์ที่อื่นให้กด Browse เลือกโฟลเดอร์ - เลือก PLC Core เป็น FAs_32MT_AC และเลือก Program เป็น Ladder แล้วกด OK
ตั้งค่า COM 1(485)
ไปที่ Config → Project Setting → Communication จะมีแท็บ COM 0(485) และ COM 1(485) PLC รุ่นนี้มีพอร์ต RS485 2 พอร์ต:
- COM 0(485) คือพอร์ตหัวกลม
- COM 1(485) คือพอร์ตที่ต่อผ่าน Terminal ซึ่งเป็นพอร์ตที่เราต่อสายไว้
ในแท็บ COM 1(485) ของ Master:
- Protocol เปลี่ยนจาก Modbus slave เป็น Modbus master
- Station number = 0
- Baudrate, Databits, Stopbits, Checkcode ปล่อยเป็น Default (9600, 8, 1, NONE) เพราะในระบบไม่มีอุปกรณ์อื่นที่ต้องการค่าเฉพาะ ถ้าต่อกับอุปกรณ์ที่กำหนด Baud rate ไว้ก็มาปรับตรงนี้ได้
(แนะนำ) ตั้ง IP ไว้เขียนโปรแกรมผ่านสาย LAN
ขั้นนี้ไม่ได้ใช้กับการสื่อสาร RS485 แต่ช่วยให้เขียนโปรแกรมและ Debug ผ่านสาย LAN ได้สะดวก
- ใน Project Setting ไปที่แท็บ Net ในคลิปเลือก Protocol เป็น TCP/IP master และ Station number 0
- ตั้ง Local IP = 169.254.1.100 ส่วน Subnet mask กับ Gateway ปล่อยเป็น Default
- เช็กว่าวง Network ของคอมพิวเตอร์ตรงกันไหม: เปิด Command Prompt พิมพ์
ipconfigแล้วดูที่ Ethernet ในคลิปคอมพิวเตอร์ต่อสาย LAN เข้า Hub เดียวกับ PLC และได้วง169.254.1.xถ้าไม่ตรงให้เปลี่ยนที่ Control Panel → Network Setting ของคอมพิวเตอร์ - ครั้งแรกต้องเสียบสาย USB-C ที่ PLC แล้วดาวน์โหลดผ่าน USB ก่อน (แท็บ Tool → Download) IP จึงจะเข้าไปใน PLC ครั้งต่อไปเลือกดาวน์โหลดแบบ Network ได้เลย
- ทดสอบด้วย
ping 169.254.1.100ถ้ามี Reply กลับมาแปลว่าตั้ง IP สำเร็จ
3. ตั้งค่า Slave
ทำแบบเดียวกันกับ PLC อีก 2 ตัว แต่ในแท็บ COM 1(485):
| PLC | Protocol | Station number | IP (ในคลิป) |
|---|---|---|---|
| Slave ตัวที่ 1 | Modbus slave | 1 | 169.254.1.101 |
| Slave ตัวที่ 2 | Modbus slave | 2 | 169.254.1.102 |
โปรแกรมฝั่ง Slave ไม่ต้องเขียน Ladder อะไรเลย มีแค่ Project Setting ที่ตั้งเป็น Modbus slave และ IP ถ้าไม่สะดวกใช้สาย LAN ก็ไม่ต้องตั้ง IP ได้ แต่แนะนำให้ใช้เพราะทำงานสะดวกกว่า
4. สร้าง Modbus Table ที่ Master
Modbus Table คือรายการคำสั่งที่ Master จะส่งไปหา Slave
- ใน Project Tree ทางซ้าย คลิกขวาที่ Modbus table → Add → Add modbus table
- ตั้งชื่อ Table ในคลิปสร้าง 1 Table ต่อ 1 Slave (
slave1,slave2) และจะแยก Table อ่านกับ Table เขียนก็ได้
แต่ละแถวมี 6 คอลัมน์:
- Port คือ Slave ID เช่น Table ของ Slave ตัวที่ 1 ใส่ 1
- Handle code คือ Function code ที่ใช้
- Slave register คือตำแหน่งข้อมูลใน Slave ดูจากตาราง Modbus Address ใน Manual ของ Samkoon PLC (Y เริ่มที่ 10000, M เริ่มที่ 30000, X เริ่มที่ 0, D เริ่มที่ 40000)
- Slave count คือจำนวนที่อ่าน
- Master register คือตำแหน่งใน Master ที่จะเก็บข้อมูลที่อ่านมา
- Comment เขียนกำกับไว้กันลืม
หมายเหตุเรื่องการนับ Address
ส่วนนี้ไม่ได้อยู่ในคลิป แต่ช่วยกันสับสนเวลาเทียบกับโปรแกรมหรือคู่มืออื่น
Address นับจาก 0 — Slave Register ใน Modbus Table ของ SamSoar2022 นับจาก 0 ใส่ตามตาราง Modbus Address ของ Samkoon ได้ตรงๆ (X0 = 0, Y0 = 10000, M0 = 30000, D0 = 40000 ไม่ต้องบวก 1) ตารางครบทุกประเภทอยู่ในรูปตาราง Modbus Address ของหน้าสินค้า PLC เช่น FAs-32MR-AC-E
Table อ่านข้อมูล: slave1
| แถว (Command ID) | Port | Handle code | Slave register | Slave count | Master register | Comment |
|---|---|---|---|---|---|---|
| 0 | 1 | 0x01 (Read coil) | 10000 | 10 | M1000 | Read Y0~ |
| 1 | 1 | 0x01 (Read coil) | 30000 | 10 | M1100 | Read M0~ |
| 2 | 1 | 0x02 (Read disperse input) | 0 | 10 | M1200 | Read X0~ |
| 3 | 1 | 0x03 (Read holding register) | 40000 | 10 | D1000 | Read D0~ |
ถ้าต้องการอ่านค่า D ใช้ Function code 03 หรือ 04 ก็ได้ ในคลิปใช้ 03
Table อ่านข้อมูล: slave2
เหมือน slave1 ทุกแถว แต่ Port = 2 และเก็บที่ Master register M2000, M2100, M2200 และ D2000
Table เขียนข้อมูล: slave1w
| แถว | Port | Handle code | Slave register | Slave count | Master register |
|---|---|---|---|---|---|
| 0 | 1 | 0x05 (Write single coil) | 10000 | 1 | M1500 |
| 1 | 1 | 0x06 (Write single register) | 40000 | 1 | D1500 |
แถวแรกคือให้ Y0 ของ Slave 1 เอาค่ามาจาก M1500 ของ Master แถวที่สองคือให้ D0 ของ Slave 1 เอาค่ามาจาก D1500 ของ Master ในคลิปสร้าง slave2w ไว้สำหรับ Slave ตัวที่ 2 ด้วย
5. เรียกใช้ Table ด้วยคำสั่ง MBUS
MBUS COM TBL WR WR_ID
- COM คือ Serial Port ที่ใช้ (มี COM 0 กับ COM 1) ในคลิปใช้ K1 เพราะต่อสายที่ COM 1(485)
- TBL คือชื่อ Modbus Table
- WR คือ Data Register ที่เก็บ Information Code ของการสื่อสาร ถ้าเกิด Error จะอ่าน Code ได้ที่ตำแหน่งนี้
- WR_ID คือ Data Register ที่เก็บ Current Command ID เช่น Table ที่มี 4 คำสั่งจะมี ID 0, 1, 2, 3 (ดูที่คอลัมน์ซ้ายสุดของ Modbus Table นับจาก 0) เมื่อ MBUS ทำงาน ID จะวิ่งจาก 0 ถึง 3 แล้ววนไปเรื่อยๆ เอาเลขนี้ไปเป็นเงื่อนไขใน Ladder ได้ถ้าต้องการทำอะไรบางอย่างที่คำสั่งนั้นๆ
Information Code บางตัวจากสไลด์ในคลิป (ดูครบใน Manual): 0x01 Illegal function code, 0x02 Illegal address, 0x10 Communication timeout, 0x12 Master/Slave station setting error, 0x13 Slave number is same as master number, 0x18 Received information frame error (length error, CRC check error) ระหว่างสื่อสารปกติในคลิป D0 เป็น 0
Ladder ฝั่ง Master ในคลิป
6. ทดสอบการอ่าน
- ดาวน์โหลดโปรแกรมลง Master ผ่าน Network แล้วกด Monitor
- เปิด SamSoar2022 ของ Slave ทั้ง 2 ตัว กด Monitor แล้วแก้ค่าที่ Slave
- ที่ Master เตรียม Monitor Address ไว้ตาม Master register ใน Table (M1000, M1100, M1200, D1000, M2000, M2100, D2000 …) แล้วสั่ง M0 ให้ ON
- Command ID ใน WR_ID จะวิ่งวนตามคำสั่งใน Table และค่าจาก Slave จะมาอยู่ที่ Master
ผลในคลิป:
| ค่าที่ Slave | ค่าที่ Master |
|---|---|
| Slave 1: Y0 = ON, Y1 = ON | M1000 = ON, M1001 = ON |
| Slave 1: M0 = ON | M1100 = ON |
| Slave 1: D0 = 123, D1 = 456 | D1000 = 123, D1001 = 456 |
| Slave 2: Y2 = ON | M2002 = ON |
| Slave 2: M2 = ON | M2102 = ON |
| Slave 2: D0 = 789 | D2000 = 789 |
7. ทดสอบการเขียน
- ในคลิปสั่งปิด Coil ทั้งหมดของ Slave 1 ก่อน
- เปิด M1500 ที่ Master (ผ่าน M2) แล้วสั่ง MBUS ด้วย M1 ใช้ Table slave1w → Y0 ของ Slave 1 ติด
- ปิด M1500 แล้วสั่ง MBUS ใหม่ → Y0 ของ Slave 1 ดับ
- ใส่ D1500 = 555 ที่ Master แล้วสั่ง MBUS → D0 ของ Slave 1 เป็น 555
สรุป
Modbus RS485 กับ Samkoon PLC มี 4 ขั้นตอน คือ ต่อสาย 485A/485B แบบ Multi-Drop, ตั้ง COM 1(485) ของ Master เป็น Modbus master Station 0 และ Slave เป็น Modbus slave Station 1, 2, สร้าง Modbus Table ระบุ Port, Handle code, Slave register และ Master register แล้วเรียกด้วย MBUS ใน Ladder Master ก็อ่านและเขียนข้อมูลของ PLC หลายตัวได้ผ่านสายเพียง 2 เส้น
บทถัดไป
สอน Modbus TCP/IP กับ Samkoon PLC ผ่านสาย LAN
คำถามที่พบบ่อย
- Modbus RS485 ต่อสายอย่างไรเมื่อมี PLC หลายตัว?
- ต่อแบบ Multi-Drop คือเชื่อม 485A ของทุกตัวเข้าด้วยกัน และ 485B ของทุกตัวเข้าด้วยกัน ใช้สายเพียง 2 เส้นทั้งระบบ ในคลิปต่อ PLC 3 ตัว (Master 1 ตัว Slave 2 ตัว) ที่ Terminal 485 ซึ่งตรงกับ COM 1(485) ในโปรแกรม
- ตั้งค่า Communication Port ของ Master กับ Slave ต่างกันอย่างไร?
- ใน Project Setting → Communication แท็บ COM 1(485) ของ Master เลือก Protocol เป็น Modbus master และตั้ง Station number = 0 ส่วน Slave เลือก Modbus slave และตั้ง Station number เป็น 1, 2 ตามลำดับ ค่า Baudrate, Databits, Stopbits, Checkcode ในคลิปปล่อยเป็น Default (9600, 8, 1, NONE) ทุกตัว
- Modbus Table ควรสร้างอย่างไร?
- ในคลิปสร้าง 1 Table ต่อ 1 Slave (slave1, slave2) และจะแยก Table อ่านกับเขียนก็ได้ (slave1w, slave2w) แต่ละแถวมีคอลัมน์ Port (Slave ID), Handle code, Slave register, Slave count, Master register และ Comment ควรเขียน Comment กำกับทุกแถวกันลืม
- คำสั่ง MBUS มีพารามิเตอร์อะไรบ้าง?
- MBUS COM TBL WR WR_ID — COM คือ Serial Port ที่ใช้ (ในคลิปใช้ K1 = COM 1), TBL คือชื่อ Modbus Table, WR คือ Data Register ที่เก็บ Information Code ของการสื่อสาร และ WR_ID คือ Data Register ที่เก็บลำดับคำสั่งที่กำลังทำงาน (นับจาก 0 คำสั่งแรกใน Table = 0) เช่น MBUS K1 slave1 D0 D1
มีคำถาม? ติดต่อทีมงาน
