หน้าแรกคู่มือPLCModbus Protocolสอนใช้ Modbus RS485 Master-Slave

บทที่ 1 จาก 9 ใน Modbus Protocol

PLCปานกลาง · Intermediate20 นาที

สอนใช้ 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

ชุดอุปกรณ์สำหรับบทความนี้

ราคาชุดอุปกรณ์

฿3,690

ระบบในคลิป

  • 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

  1. ดาวน์โหลดและเปิดโปรแกรม SamSoar2022 (ค่าเริ่มต้นเป็นภาษาจีน เปลี่ยนเป็น English ได้ที่แถบด้านบน)
  2. กด Create Project → PLC Project ตั้งชื่อ Project (ในคลิปใช้ master-demo) ถ้าจะเก็บไฟล์ที่อื่นให้กด Browse เลือกโฟลเดอร์
  3. เลือก 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 ได้สะดวก

  1. ใน Project Setting ไปที่แท็บ Net ในคลิปเลือก Protocol เป็น TCP/IP master และ Station number 0
  2. ตั้ง Local IP = 169.254.1.100 ส่วน Subnet mask กับ Gateway ปล่อยเป็น Default
  3. เช็กว่าวง Network ของคอมพิวเตอร์ตรงกันไหม: เปิด Command Prompt พิมพ์ ipconfig แล้วดูที่ Ethernet ในคลิปคอมพิวเตอร์ต่อสาย LAN เข้า Hub เดียวกับ PLC และได้วง 169.254.1.x ถ้าไม่ตรงให้เปลี่ยนที่ Control Panel → Network Setting ของคอมพิวเตอร์
  4. ครั้งแรกต้องเสียบสาย USB-C ที่ PLC แล้วดาวน์โหลดผ่าน USB ก่อน (แท็บ Tool → Download) IP จึงจะเข้าไปใน PLC ครั้งต่อไปเลือกดาวน์โหลดแบบ Network ได้เลย
  5. ทดสอบด้วย ping 169.254.1.100 ถ้ามี Reply กลับมาแปลว่าตั้ง IP สำเร็จ

3. ตั้งค่า Slave

ทำแบบเดียวกันกับ PLC อีก 2 ตัว แต่ในแท็บ COM 1(485):

PLCProtocolStation numberIP (ในคลิป)
Slave ตัวที่ 1Modbus slave1169.254.1.101
Slave ตัวที่ 2Modbus slave2169.254.1.102

โปรแกรมฝั่ง Slave ไม่ต้องเขียน Ladder อะไรเลย มีแค่ Project Setting ที่ตั้งเป็น Modbus slave และ IP ถ้าไม่สะดวกใช้สาย LAN ก็ไม่ต้องตั้ง IP ได้ แต่แนะนำให้ใช้เพราะทำงานสะดวกกว่า

4. สร้าง Modbus Table ที่ Master

Modbus Table คือรายการคำสั่งที่ Master จะส่งไปหา Slave

  1. ใน Project Tree ทางซ้าย คลิกขวาที่ Modbus table → Add → Add modbus table
  2. ตั้งชื่อ 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)PortHandle codeSlave registerSlave countMaster registerComment
010x01 (Read coil)1000010M1000Read Y0~
110x01 (Read coil)3000010M1100Read M0~
210x02 (Read disperse input)010M1200Read X0~
310x03 (Read holding register)4000010D1000Read D0~

ถ้าต้องการอ่านค่า D ใช้ Function code 03 หรือ 04 ก็ได้ ในคลิปใช้ 03

Table อ่านข้อมูล: slave2

เหมือน slave1 ทุกแถว แต่ Port = 2 และเก็บที่ Master register M2000, M2100, M2200 และ D2000

Table เขียนข้อมูล: slave1w

แถวPortHandle codeSlave registerSlave countMaster register
010x05 (Write single coil)100001M1500
110x06 (Write single register)400001D1500

แถวแรกคือให้ 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 ในคลิป

MBUS อ่าน/เขียน Slave 2 ตัวผ่าน COM 1(485)
M0 สั่งอ่าน (Information Code ที่ D0/D2, Command ID ที่ D1/D3) ส่วน M1 สั่งเขียน (D4/D5, D6/D7)
N0MODBUS RS485
M0 สั่งอ่าน: MBUS COM1 ใช้ Table slave1 และ slave2
M0MBUSK1, slave1, D0, D1MBUSK1, slave2, D2, D3
M1 สั่งเขียน: MBUS COM1 ใช้ Table slave1w และ slave2w
M1MBUSK1, slave1w, D4, D5MBUSK1, slave2w, D6, D7
M2 เปิด M1500 ค่าที่จะเขียนไป Y0 ของ Slave 1
M2M1500
M3 เปิด M2500 สำหรับ Slave 2
M3M2500
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

6. ทดสอบการอ่าน

  1. ดาวน์โหลดโปรแกรมลง Master ผ่าน Network แล้วกด Monitor
  2. เปิด SamSoar2022 ของ Slave ทั้ง 2 ตัว กด Monitor แล้วแก้ค่าที่ Slave
  3. ที่ Master เตรียม Monitor Address ไว้ตาม Master register ใน Table (M1000, M1100, M1200, D1000, M2000, M2100, D2000 …) แล้วสั่ง M0 ให้ ON
  4. Command ID ใน WR_ID จะวิ่งวนตามคำสั่งใน Table และค่าจาก Slave จะมาอยู่ที่ Master

ผลในคลิป:

ค่าที่ Slaveค่าที่ Master
Slave 1: Y0 = ON, Y1 = ONM1000 = ON, M1001 = ON
Slave 1: M0 = ONM1100 = ON
Slave 1: D0 = 123, D1 = 456D1000 = 123, D1001 = 456
Slave 2: Y2 = ONM2002 = ON
Slave 2: M2 = ONM2102 = ON
Slave 2: D0 = 789D2000 = 789

7. ทดสอบการเขียน

  1. ในคลิปสั่งปิด Coil ทั้งหมดของ Slave 1 ก่อน
  2. เปิด M1500 ที่ Master (ผ่าน M2) แล้วสั่ง MBUS ด้วย M1 ใช้ Table slave1w → Y0 ของ Slave 1 ติด
  3. ปิด M1500 แล้วสั่ง MBUS ใหม่ → Y0 ของ Slave 1 ดับ
  4. ใส่ 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

15 นาทีปานกลาง · Intermediate

คำถามที่พบบ่อย

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