ตารางคำสั่งเฉพาะ (รุ่น 401 · YP461)

หน้านี้สำหรับรุ่นที่ใช้ คำสั่งเฉพาะของผู้ผลิต ไม่ใช่ ModbusAMR-THS401 และ AMR-YP461

Note

รุ่น AMR-THS501 และ AMR-YP561 ใช้ Modbus ดูตารางคำสั่ง Modbusแทน

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

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

โครงเฟรม

ที่เราส่งไป

02 │ ที่อยู่ │ ความยาว │ คำสั่ง │ ข้อมูล… │ XOR │ 03

ที่หัวอ่านตอบกลับ

AA │ ที่อยู่ │ ความยาว │ คำสั่ง │ ข้อมูล… │ XOR │ BB

ช่อง

ความหมาย

ไบต์แรก

02 เมื่อเราส่ง · AA เมื่อหัวอ่านตอบ

ความยาว

จำนวนไบต์ของ คำสั่ง + ข้อมูล (ไม่นับหัวท้ายและ XOR)

XOR

เอาทุกไบต์ตั้งแต่ ที่อยู่ ถึงก่อนช่อง XOR มา XOR กัน

ไบต์ท้าย

03 เมื่อเราส่ง · BB เมื่อหัวอ่านตอบ

Important

ตรวจความถูกต้องด้วย XOR ไบต์เดียว ไม่ใช่ CRC16

ต่างจาก Modbus สิ้นเชิง — เขียนโค้ดสำหรับรุ่นหนึ่งแล้วเอาไปใช้กับอีกรุ่นไม่ได้เลย

คำสั่งที่ใช้บ่อย

ระบบ

รหัส

ใช้ทำ

0x3B

รีเซ็ตหัวอ่าน

0x80

ตั้งที่อยู่

0x81

ตั้ง baud rate

0x83

อ่านหมายเลขเครื่อง

0x41

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

ไฟและเสียง

รหัส

ใช้ทำ

0x34 / 0x38

ไฟแดง ติด / ดับ

0x36 / 0x3A

ไฟเหลือง ติด / ดับ

0x90

ไฟเขียว กะพริบ

0x87 / 0x88

ไฟแดง / เหลือง กะพริบ

0x37 / 0x30

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

0x89

เสียงเป็นจังหวะ

Warning

🔴 ไม่มีคำสั่งเปิดไฟเขียวค้าง มีแต่กะพริบ

ต่างจากไฟแดงและเหลืองที่มีทั้งติดและดับ ถ้าออกแบบระบบให้ไฟเขียวติดค้าง เพื่อบอกสถานะ "พร้อมทำงาน" จะทำไม่ได้บนรุ่นนี้

ป้าย ISO15693 (ชนิดที่ใช้กับ AGV)

รหัส

ใช้ทำ

0x10

อ่าน UID ของป้าย

0x11

อ่านข้อมูลในบล็อก

0x12

เขียนข้อมูลลงบล็อก

0x13

ล็อกบล็อกไม่ให้เขียนซ้ำ

0x1B

อ่านข้อมูลของป้าย

Warning

🔴 บล็อกละ 4 ไบต์เสมอ และเฟรมมีช่อง "จำนวนบล็อก"

อยากเขียน 8 ไบต์ = เขียน 2 บล็อกติดกัน ไม่ใช่บล็อกเดียวที่ยาว 8 ไบต์ ใส่จำนวนบล็อกผิดแล้วหัวอ่านจะไม่ยอมรับเฟรม

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

อ่าน UID ของป้าย (ที่อยู่ 0 = ส่งหาทุกตัว)

02 00 05 10 06 00 00 00 13 03
│  │  │  │  └──┬──┘  │  │  └ ไบต์ท้าย
│  │  │  │     │     │  └──── XOR
│  │  │  │     │     └─────── ข้อมูล (ค่าคงที่ตามคู่มือ)
│  │  │  └───────────────── คำสั่ง 0x10
│  │  └──────────────────── ความยาว = 5 (คำสั่ง 1 + ข้อมูล 4)
│  └─────────────────────── ที่อยู่
└────────────────────────── ไบต์แรก

รีเซ็ตหัวอ่าน

ส่ง   02 00 01 3B 3A 03
ตอบ   AA 00 02 3B 00 39 BB

เขียน 8 ไบต์ลงบล็อก 5 (= 2 บล็อก)

02 01 0C 12 02 05 02 11 22 33 44 55 66 77 88 92 03
         │  │  │  │  └────── 8 ไบต์ ──────┘
         │  │  │  └ จำนวนบล็อก = 2
         │  │  └─── บล็อกเริ่ม = 5
         │  └────── Flag 0x02 (บล็อกธรรมดา)
         └───────── คำสั่ง 0x12 เขียน

ตรวจโค้ดก่อนต่อของจริง

เอาเฟรมตัวอย่างข้างบนไปป้อนตัวคำนวณ XOR ของคุณ ถ้าได้ค่าตรงกันแปลว่าโค้ดถูก เหลือแค่เรื่องสายกับค่าตั้ง

02 00 01 3B 3A 03   ->  XOR ของ 00 ^ 01 ^ 3B = 3A  ✅
AA 00 02 3B 00 39 BB ->  XOR ของ 00 ^ 02 ^ 3B ^ 00 = 39  ✅

หรือใช้เครื่องมือทดสอบ ซึ่งเติม XOR ให้อัตโนมัติเมื่อส่งเฟรมเอง