เริ่มต้นเนื้อหา
ตัวอย่างโค้ด Arduino IDE สำหรับ Master เพื่อใช้เชื่อมต่อกับ X-Bar
Relay Control
ใช้ฟังก์ชั่น Write Single Coil (Function Code=05)
เขียนรีจิสเตอร์ 0-3
1. เลือกบอร์ด (ยกเลิกคอมเมนต์เฉพาะอันที่ต้องการ)
2. การเลือกบอร์ดคอลโทรลบนโปรแกรม
– i-Mation Pico Dev Board เลือกเป็น ESP32-S3
– Micromation Dev Board V3 & V3 Lite เลือกเป็น ESP32 Dev Module
– X-Bar | Smart Relay เลือกเป็น ESP32-C3
3.หากพัฒนาเสร็จแล้ว ตั้งค่า #define ENABLE_USB_DEBUG เป็น 0
Read Relay Status and Input
ใช้ฟังก์ชั่น Read Holding Registers (Function Code=03)
ในโค้ดตัวอย่างนี้เป็นการอ่านรีจิสเตอร์ 11 ซึ่งเป็น digital input 1 [DI1]
ต่อ Digital input ด้วย Digital Sensor แบบ ON/OFF (Binary Output)
การต่อ Digital input ที่ทำงาน Active Low
DI1(GPIO5), DI2(GPIO7) และ DI3(GPIO8) ถูก Pull-Up เป็นค่าเริ่มต้น สามารถเปลี่ยนสถานะด้วยการ ดึงลง GND
ตัวอย่างการต่อ Digital input ด้วย สวิตซ์ switch
ตัวอย่างการต่อ Digital input ด้วย Active IR
วิธีปรับระยะตรวจจับ (ในกรณีที่ HW-201 มี Potentiometer)
– ลองหมุนทวนเข็มนาฬิกา → ลดระยะตรวจจับ
– ลองหมุนตามเข็มนาฬิกา → เพิ่มระยะตรวจจับ
ตัวอย่างการต่อ Digital input ด้วย Magnetic Switch
การต่อ Digital input ที่ทำงาน Active HIGH
DI1(GPIO5), DI2(GPIO7) และ DI3(GPIO8) ถูก Pull-Up จะต้องคลิก Toggle เป็น ↓ เพื่อ Pull-Down ดึงสถานะเป็น LOW สามารถเปลี่ยนสถานะด้วยการ ดึงขึ้น 3.3V
ตัวอย่างการต่อ Digital input ด้วย Passive IR
วิธีการปรับระยะตรวจจับบนโมดูล PIR
สังเกต Potentiometer บนบอร์ดโดยทั่วไปโมดูล PIR จะมี 2 ตัวปรับ (Potentiometer)
– ตัวหนึ่งใช้ปรับ Sensitivity (ระยะตรวจจับ)
– อีกตัวใช้ปรับ Time Delay (เวลาหน่วงการปิดสัญญาณ)
การปรับระยะตรวจจับ (Sensitivity)
– หมุนทวนเข็มนาฬิกา (Counter-Clockwise) → ลดระยะตรวจจับ → ตรวจจับได้ใกล้ลง
– หมุนตามเข็มนาฬิกา (Clockwise) → เพิ่มระยะตรวจจับ → ตรวจจับได้ไกลขึ้น
วิธีอ่านรีจิสเตอร์ตำแหน่งอื่นๆ เปลี่ยนเพียงคำสั่ง Modbus ที่ใช้การร้องขอ
สามารทดสอบเพื่อรับเฟรมคำสั่งที่สามารถใช้ได้จริงบนเครื่องมือ
HyperSync Modbus-RTU Discover
1.เลือก Preset เป็น Custom
2.ไอดีที่จะอ่าน
3.ใช้ฟังก์ชั่นโค้ด FC03
4.ตำแหน่งรีจิสเตอร์บล๊อกที่จะอ่าน
5.จำนวนบล๊อกที่จะอ่าน (ตัวอย่างนี้ให้อ่าน 1 บล๊อก)
6.คัดลอกรหัสคำสั่งนี้ไปกำหนด byte command ใน void loop บนโปรแกรม Arduino IDE
Read All Register
ใช้ฟังก์ชั่น Read Holding Registers (Function Code=03)
ในโค้ดตัวอย่างนี้เป็นการอ่านแบบหลายรีจิสเตอร์ 0-17 พร้อมกัน
Serial Monitor: ตัวอย่างค่าอ่านได้จากโค้ดนี้
Sent: 0x1 0x3 0x0 0x0 0x0 0x12 0xC5 0xC7
Data: R1:OFF, R2:OFF, R3:OFF, R4:OFF, R5:OFF, R6:OFF, R7:OFF, R8:OFF, R9:OFF, BOARD:4, MODE:0, DI1:OFF, DI2:OFF, DI3:OFF, RC1:0, RC2:0, RC3:0, RC4:0
ความหมายตำแหน่งของรีจิสเตอร์ 0-17
- Registers 0-8 (9 relays): R1 to R9 สถานะรีเลย์ (CH1–CH9)
- Register 9: BOARD คือ ประเภทบอร์ด (Read-only)
- Register 10: MODE คือ พฤติกรรมเริ่มต้น (Reset Mode)
- Registers 11-13: DI1 to DI3 คือ อินพุตดิจิทัล
- Registers 14-17: RC1 to RC4 คือ การตั้งค่าการตอบสนอง (Relay Conditions)
X-Bar Modbus Register
รีจิสเตอร์ | คำอธิบาย | ฟังก์ชันโค้ด | Operator | ชนิดข้อมูล |
---|---|---|---|---|
0–3 | สถานะรีเลย์ (CH1–CH4) | FC03, FC05 | Read, Write (0xFF00/0x0000) | Boolean (16-bit) |
9 | ประเภทบอร์ด (Read-only) | FC03 | Read (ค่า 4) | 16-bit Integer |
10 | พฤติกรรมเริ่มต้น (Reset Mode) | FC03, FC06 | Read, Write (0x0000/0x0001) | 16-bit Integer |
11–13 | อินพุตดิจิทัล (DI1–DI3) | FC03 | Read (0/1) | Boolean (16-bit) |
14–17 | การตั้งค่าการตอบสนอง (Relay Conditions) | FC03, FC06 | Read, Write (0–3) | 16-bit Integer |
256 | Slave ID (Default: 1) | FC03, FC06 | Write (1–255) | 16-bit Integer |
257 | Baud Rate Multiplier (Default: 9600) | FC03, FC06 | Write (0x01–0x18) | 16-bit Integer |
-
Baud Rate Default: 9600
Supported: 4800 (0x01), 9600 (0x02), 19200 (0x04), 38400 (0x08), 57600 (0x0C), 115200 (0x18)