ตารางคำสั่ง Modbus (รุ่น 501 · YP561)
หน้านี้สำหรับรุ่นที่ใช้ Modbus RTU / TCP — AMR-THS501 และ AMR-YP561
Note
รุ่น AMR-THS401 และ AMR-YP461 ใช้คำสั่งคนละแบบสิ้นเชิง
ดูตารางคำสั่งของรุ่นนั้นแทน
ตั้งค่าพอร์ต
โปรโตคอล Modbus RTU
ที่อยู่ 1–127 (0 = ส่งหาทุกตัวบนสาย)
baud rate 115200 (ค่าจากโรงงาน)
รูปแบบ 8 บิต · ไม่มีพาริตี้ · หยุด 1 บิต
ฟังก์ชันที่ใช้
รหัส |
ใช้ทำ |
|---|---|
|
อ่านค่า |
|
เขียน 1 รีจิสเตอร์ (16 บิต) |
|
เขียนหลายรีจิสเตอร์ติดกัน |
ทุกเฟรมปิดท้ายด้วย CRC16 — พหุนาม 0xA001 · ค่าเริ่ม 0xFFFF
Warning
🔴 CRC ส่งไบต์ต่ำก่อนไบต์สูง ซึ่งสลับกับตัวเลขอื่นในเฟรมที่ส่งไบต์สูงก่อน
สลับผิดแล้วหัวอ่านจะทิ้งเฟรมเงียบ ๆ ไม่ตอบอะไรเลย — หน้าตาเหมือนสายขาดทุกประการ
ถ้าเขียนผิดพลาด หัวอ่านตอบด้วยฟังก์ชันที่บวก 0x80 เช่นส่ง 0x06 แล้วได้ 0x86
แปลว่าที่อยู่ไม่มีจริง เกินช่วง หรือเป็นค่าอ่านอย่างเดียว
รีจิสเตอร์ที่ใช้บ่อย
ที่อยู่ |
เลข 4xxxx |
ใช้ทำ |
ค่า |
|---|---|---|---|
|
40002 |
ตั้งที่อยู่อุปกรณ์ |
0–255 |
|
40003 |
ตั้ง baud rate |
ดูตารางด้านล่าง |
|
40009 |
เปิด/ปิดไฟแดง |
ไบต์ล่าง |
|
40010 |
เปิด/ปิดไฟเขียว |
เหมือนกัน |
|
40011 |
เปิด/ปิดไฟเหลือง |
เหมือนกัน |
|
40012 |
รีเซ็ตระบบ |
|
|
40013 |
เปิด/ปิดเสียง |
|
|
40014 |
เปิด/ปิดการส่งเองเมื่อเจอป้าย |
|
|
40085–40088 |
UID ของป้าย |
อ่านอย่างเดียว · 8 ไบต์ |
|
40017–40080 |
ข้อมูลในป้าย บล็อก 0–31 |
บล็อกละ 2 รีจิสเตอร์ |
|
40082–40084 |
ตั้งการอ่านและส่งเองอัตโนมัติ |
ไฟกะพริบ ใช้คนละที่อยู่กับเปิด/ปิดค้าง — 0x0004 เสียง · 0x0005 แดง ·
0x0006 เขียว · 0x0007 เหลือง โดยไบต์บนคือจังหวะ ไบต์ล่างคือจำนวนครั้ง
🔴 ตาราง baud rate — สองรุ่นไม่เหมือนกัน
รหัสที่เขียนลง |
THS501 |
YP561 |
|---|---|---|
0 |
115200 (ตั้งต้น) |
115200 (ตั้งต้น) |
1 |
57600 |
19200 |
2 |
38400 |
38400 |
3 |
19200 |
57600 |
4 |
9600 |
9600 |
Danger
รหัส 1 กับ 3 สลับที่กันระหว่างสองรุ่น
อยากได้ 57600 บน YP561 แต่ใช้ตารางของ THS501 → ส่งรหัส 1 → ได้ 19200 แล้วคุยกับหัวอ่านไม่ได้ทันที ต้องไล่ลองทีละความเร็วจนเจอ
ตรวจรหัสรุ่นที่ป้ายบนตัวหัวอ่านก่อนเขียนค่านี้เสมอ
ตัวอย่างเฟรม
อ่าน UID ของป้าย (ที่อยู่ 1 · อ่าน 4 รีจิสเตอร์จาก 0x0054)
01 03 00 54 00 04 05 D9
│ │ └─┬─┘ └─┬─┘ └─┬─┘
│ │ │ │ └── CRC16 ไบต์ต่ำก่อน
│ │ │ └─────── จำนวนรีจิสเตอร์ = 4 (8 ไบต์)
│ │ └───────────── ที่อยู่ 0x0054
│ └────────────────── ฟังก์ชัน 03 อ่าน
└───────────────────── ที่อยู่อุปกรณ์
เปิดไฟแดง
01 06 00 08 00 01 C9 C8
└─┬─┘ └─┬─┘
│ └── ค่า = 1 (เปิด)
└──────── ที่อยู่ 0x0008
Tip
ทดสอบตัวคำนวณ CRC ก่อนต่อของจริง — เอาเฟรมตัวอย่างในคู่มือมาป้อนเข้าโค้ด ถ้า 2 ไบต์ท้ายตรงกัน แปลว่าตัวคำนวณถูก เหลือแค่เรื่องสายกับค่าตั้ง ตัดผู้ต้องสงสัยไปได้หนึ่งอย่างโดยยังไม่ต้องเสียบอะไรเลย
🔴 คู่มือระบุที่อยู่ไว้ 2 ชุดไม่ตรงกัน
คู่มือของผู้ผลิตมีทั้งตารางรีจิสเตอร์และเฟรมตัวอย่าง แต่สองส่วนนี้บอกที่อยู่ไม่ตรงกัน
หน้าที่ |
ในตาราง |
ในเฟรมตัวอย่าง |
|---|---|---|
เปิด/ปิดไฟแดง |
|
|
รีเซ็ต |
|
|
เปิด/ปิดเสียง |
|
|
ส่วนต่างไม่คงที่ และตัวอย่างของไฟเขียวกับไฟเหลืองซ้ำกับของ "กะพริบ" เป๊ะ ซึ่งเป็นลักษณะของการคัดลอกผิด
หน้านี้ใช้ชุดในตาราง เพราะสอดคล้องกับเลข 4xxxx ของตัวเอง (40001 = รีจิสเตอร์ 0)
ถ้าสั่งแล้วไม่ตอบ ลองส่งเฟรมเองด้วยเครื่องมือ
โดยใช้ที่อยู่จากตัวอย่างในคู่มือดู