ตารางคำสั่ง Modbus (รุ่น 501 · YP561)

หน้านี้สำหรับรุ่นที่ใช้ Modbus RTU / TCPAMR-THS501 และ AMR-YP561

Note

รุ่น AMR-THS401 และ AMR-YP461 ใช้คำสั่งคนละแบบสิ้นเชิง ดูตารางคำสั่งของรุ่นนั้นแทน

ตั้งค่าพอร์ต

โปรโตคอล   Modbus RTU
ที่อยู่      1–127  (0 = ส่งหาทุกตัวบนสาย)
baud rate  115200 (ค่าจากโรงงาน)
รูปแบบ     8 บิต · ไม่มีพาริตี้ · หยุด 1 บิต

ฟังก์ชันที่ใช้

รหัส

ใช้ทำ

0x03

อ่านค่า

0x06

เขียน 1 รีจิสเตอร์ (16 บิต)

0x10

เขียนหลายรีจิสเตอร์ติดกัน

ทุกเฟรมปิดท้ายด้วย CRC16 — พหุนาม 0xA001 · ค่าเริ่ม 0xFFFF

Warning

🔴 CRC ส่งไบต์ต่ำก่อนไบต์สูง ซึ่งสลับกับตัวเลขอื่นในเฟรมที่ส่งไบต์สูงก่อน

สลับผิดแล้วหัวอ่านจะทิ้งเฟรมเงียบ ๆ ไม่ตอบอะไรเลย — หน้าตาเหมือนสายขาดทุกประการ

ถ้าเขียนผิดพลาด หัวอ่านตอบด้วยฟังก์ชันที่บวก 0x80 เช่นส่ง 0x06 แล้วได้ 0x86 แปลว่าที่อยู่ไม่มีจริง เกินช่วง หรือเป็นค่าอ่านอย่างเดียว

รีจิสเตอร์ที่ใช้บ่อย

ที่อยู่

เลข 4xxxx

ใช้ทำ

ค่า

0x0001

40002

ตั้งที่อยู่อุปกรณ์

0–255

0x0002

40003

ตั้ง baud rate

ดูตารางด้านล่าง

0x0008

40009

เปิด/ปิดไฟแดง

ไบต์ล่าง 00 ปิด · 01 เปิด

0x0009

40010

เปิด/ปิดไฟเขียว

เหมือนกัน

0x000A

40011

เปิด/ปิดไฟเหลือง

เหมือนกัน

0x000B

40012

รีเซ็ตระบบ

0x000C

40013

เปิด/ปิดเสียง

00 ปิด · 01 เปิด

0x000D

40014

เปิด/ปิดการส่งเองเมื่อเจอป้าย

0x00540x0057

40085–40088

UID ของป้าย

อ่านอย่างเดียว · 8 ไบต์

0x00100x004F

40017–40080

ข้อมูลในป้าย บล็อก 0–31

บล็อกละ 2 รีจิสเตอร์

0x00510x0053

40082–40084

ตั้งการอ่านและส่งเองอัตโนมัติ

ไฟกะพริบ ใช้คนละที่อยู่กับเปิด/ปิดค้าง — 0x0004 เสียง · 0x0005 แดง · 0x0006 เขียว · 0x0007 เหลือง โดยไบต์บนคือจังหวะ ไบต์ล่างคือจำนวนครั้ง

🔴 ตาราง baud rate — สองรุ่นไม่เหมือนกัน

รหัสที่เขียนลง 0x0002

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 ชุดไม่ตรงกัน

คู่มือของผู้ผลิตมีทั้งตารางรีจิสเตอร์และเฟรมตัวอย่าง แต่สองส่วนนี้บอกที่อยู่ไม่ตรงกัน

หน้าที่

ในตาราง

ในเฟรมตัวอย่าง

เปิด/ปิดไฟแดง

0x0008

0x0017

รีเซ็ต

0x000B

0x0039

เปิด/ปิดเสียง

0x000C

0x003A

ส่วนต่างไม่คงที่ และตัวอย่างของไฟเขียวกับไฟเหลืองซ้ำกับของ "กะพริบ" เป๊ะ ซึ่งเป็นลักษณะของการคัดลอกผิด

หน้านี้ใช้ชุดในตาราง เพราะสอดคล้องกับเลข 4xxxx ของตัวเอง (40001 = รีจิสเตอร์ 0) ถ้าสั่งแล้วไม่ตอบ ลองส่งเฟรมเองด้วยเครื่องมือ โดยใช้ที่อยู่จากตัวอย่างในคู่มือดู