วันอังคารที่ 21 กันยายน พ.ศ. 2564

LOG NOT A ROCK

บันทึกกันลืม วันนี้
    เอาเจ้าบอร์ดน้อยมาทำ 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
ที่ PLC ตรงส่วนค่า analog มันจะมี span 0 - 4095 จากที่ลองป้อน simulate ไปสูงสุด 20mA/10V มันก็ได้แค่ 39xx อยากให้แม่นก็ต้องปรับเทียบเอา

บอร์ดน้อยจอมบงการ

เอาไว้เก็บข้อมูลก็ดีนะ

 ชอบลืม
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
  
                                        


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

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

MAPs

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