วันจันทร์ที่ 20 กันยายน พ.ศ. 2564

OP320 vs Arduino

มันมีรูปแบบการสื่อสารกันเป็นชุดคำสั่ง 01 02 03 04 05 06 07 08
1st คือเลขประจำตัว 3rd - 4th byte คือ เลขรีจิสเตอร์
7-8th byte คือ CRC
    อุปกรณ์แต่ละตัวจะเก็บค่าอะไรไว้ เราต้องการรู้ค่านั้น ก็ถามมัน เราต้องรู้นะว่าต้องถามใคร หมายเลขอะไรเก็บข้อมูลนั้นไว้ ในคู่มือจะบอกไว้ เขาเรียก Register Address
Modbus protocol มันมีรีจิสเตอร์ประมาณนี้

 OP320 ModbusRTU --Master mode:

    ยังวนเวียนอยู่กับหน้าจอนี้และวันนี้ได้เอา Arduino มาเล่นเป็นบททาสดูบ้าง
เป็นเจ้านายก็มาหลายงานละ

    นายกับทาสจะสื่อสารกันโดยใช้คำถาม-คำตอบ คนเป็นนายมีหน้าที่ถาม
ถามหากับใคร คนนั้นก็ต้องตอบ ใครไม่ถูกถามก็นิ่งเงียบไว้

อุปกรณ์ที่สื่อสารกันบน Modbus protocol มันจะมี register ทั้งนั้น ดูรายละเอียดในคู่มือของอุปกรณ์นั้นเด้อ register มันเลขอะไร มันมีความหมายอยู่นะ ตามตารางนี้ เวลาจะเอาไปเขียนโค้ดก็ใช้ให้ตรง

register table
    OP320 เมื่อเปิดเครื่องมันจะส่งคำถามออกมา ทุกวินาที ที่ Rx buffer มากกว่า 8 byte ถ้าอยากให้เร็วก็ลด Timeout ที่ โปรแกรมของ Arduino อย่างเช่น 50 - 100ms กำลังดี (Rx buffer = 8 มันจะส่งข้อมูลกันเร็วจี๋ Arduino มันมี timeout ตั้งต้น 1 วินาที )
เวลาทำกราฟฟิก reg 4x มันจะส่ง FC03 ออกมาเพื่ออ่านค่า AO และคำถามที่มี Arduino มันต้องคอยตอบ
ที่ทดลองทำไว้คือการวัดค่า Temperature Humidity จาก DHT11

[OP320]  <==serial==> [Arduino]  <==I2C==> [DHT11]

    ได้ลองทำแบบที่ไม่ได้ใช้ Library ส่วนอะไรที่ไม่มีเราก็ต้องสร้างมันขึ้นมา
ในโค้ดก็ดูว่ามีข้อมูลใน buffer ไหม อย่างแรกก็ดูเลข Slave ID ถ้าไม่ใช่ ก็เฉยไว้ เมื่อทุกอย่างต้องตรงกัน ก็ตอบกับออกไปพร้อม CRC



เอาไปใช้งานแนวๆ รับข้อมูลจากเซนเซอร์ I2C bus, Analog input และควบคุมเครื่อง

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

MAPs

วันก่อนได้ลองเขียนแบบ แบบตัวนั้นมันต้องแนบแผนที่สังเขปของโครงการ ลองๆ แล้วก็ใช้ snazzymaps แล้วก็เอามาทำต่อใน inkscape มันก็ออกมาดูได้ระดับห...