บันทึกกันลืม วันนี้
เอาเจ้าบอร์ดน้อยมาทำ master ให้เล่นใหญ่เป็นเจ้านาย สั่งพี่ใหญ่อย่าง FX3U
สั่งนี่สั่งจริงๆ ทั้งขอข้อมูล(03) และส่งข้อมูลไปให้เก็บ (06)
มันเป็น Q&A ประมาณนี้
ARDUINO ------Q------> PLC
[MASTER] [SLAVE]
ARDUINO <------A------ PLC
[MASTER] [SLAVE]
อ่านค่า register (ค่า analog) function 03
ต้องกำหนดค่าให้พี่ใหญ่เป็นทาส (วิธีการทำให้ดูคู่มือเป็นหลัก) ให้พี่ใหญ่อ่านค่า analog เก็บไว้ จากนั้นให้เจ้านายน้อยไปล้วงข้อมูลมา โดยลองเอา 0-10v ใส่ช่อง 1 และ 0-20mA ใส่ช่อง 4
|----MOV H4081 D8120| PLC as SLAVE 9600 8N1 //refer to Chinese Manual
|------RD3A K0 K0 D0--| แล้วย้ายไป D10, D11 รอไว้อ่าน
|------RD3A K0 K3 D1--|
โค้ดต้องเขียนให้มันส่งข้อความออกไปให้ทาสก่อน (ที่ FX3U register 0x0000 คือ D0 เรียงไป)
พอมันตอบกลับ ก็ตัดท่อน เอา byte ที่ต้องการไปใช้งาน ต้องเปลี่ยนจาก byte ไปเป็น Hex String ควรทำ zero leading ด้วย ข้อมูลที่ต้องการอยู่ byte ที่ 3,4,5 และ 6
ที่ Master Tx: 01 03 00 0A 00 02 CR LF
Rx: 01 03 04 AA BB CC DD CR LF ทั้งหมด 9 bytes เพราะถามไป 2 แอดเดรส
ถ้าเป็นการส่งค่า 01 06 00 0A BB CC CR LF ข้อมูลอยู่ byte ที่ 5, 6 เอาค่าจากเซนเซอร์ไปให้ก็ได้ แต่ต้องแปลงเป็น byte ก่อน
ส่งค่า sensor I2C ไป PLC |
รับค่ามาแล้วก็เอาไปใส่ SD module (มันมี buffer 512byte) ซึ่งเราอ่านมาทีละไม่เกิน 12 byte
อ่านมาแล้วไม่บันทึกมันก็ล้น buffer ต้องบันทึกเรื่อยๆ เผื่อไฟดับ ไรงี้
การบันทึกก็ close() แล้วถ้าไม่จำเป็นก็ไม่ต้องเก็บถี่มาก ทุก 5 วินาที ก็ว่าเยอะแล้ว
ข้อสังเกตุ การบันทึกทีละ byte เหมือนกับว่ามันจะช้า
ควรทำการแปลงข้อมูลให้เสร็จแล้วเขียนทีเดียวน่าจะดีกว่า ระหว่างข้อมูลใส่ "," ให้มันด้วย
logged data from PLC |
เก็บมาเป็น hex ก็ไม่ลำบากไรมาก เอามาแปลงข้างนอกจะได้ไม่เป็นภาระบอร์ดน้อย แล้วใช้ตารางคำนวณเข้าช่วย
convert hex to dec by librecalc |
บอร์ดน้อยจอมบงการ |
เอาไว้เก็บข้อมูลก็ดีนะ
ชอบลืม
SD module LCD1602 module
CS ------PIN_D10 | DATA--PIN_A4
MOSI---PIN_D11 | SCK----PIN_A5
MISO---PIN_D12 |
SCK-----PIN_D13
LEVEL CONVERTER TTL - RS485
TX---TX PIN0
RX---RX PIN1
ไม่มีความคิดเห็น:
แสดงความคิดเห็น