สอบภสมการแบกข้อมูล rs485 ครับ

Started by 007pro, November 26, 2016, 09:43:21 AM

Previous topic - Next topic

007pro

สอบภสมการแบกข้อมูล rs485 ครับ
อย่าง arduion รับช้อมูลมา เป็น 0011005009250 เราจะแยกอย่างไร
ให้ ID = 3 ตัวแรก string
S = ตัวที่ 4 เป็น byte หรือ int
ข้อมูล 1 = ตัวที่ 5-7 เป็น byte
ข้อมูล 2 = ตัวที่ 8-10 เป็น byte
ข้อมูล 3 = ตัวที่ 11-13 เป็น byte
ใช้คำสั่งไรแยกครับ

wlasoi

1. ถ้าเป็น C ปกติจะใช้ libary ใน string.h
2. arduino ไม่มั่นใจว่ามีใหม  ถ้าไม่มีโยนข้อมูลทั้งหมด เจ้า array[] ซึ่งไม่น่ายาก
    เอาไปแยก adn/or  ตามเรื่องตามราว .. ผมก็ใช้วิธ๊นี้สำภาษา C ธรรมดา ไวกว่าใช้ Libary

หมูน้อย

ถ้าความยาวของข้อมูลเท่ากันใช้ฟังก์ชัน substring ได้เลยครับ
ตัวอย่างตามนี้ครับ https://www.arduino.cc/en/Tutorial/StringSubstring


nMaster

ผมใช้ structure, union ครับ เข้าใจง่ายดี ตัวอย่างเช่น

typedef struct  __attribute__((packed))
{
    char id[3];
    char s;
    char data1[3];
    char data2[3];
    char data3[3];
}RS485_PACKET;

เวลาเอาไปใช้งานก็สร้างตัวแปลมาแล้วก็ใช้ memcpy ก๊อปปี้ข้อมูลจาก uart buffer เข้าไปยังตัวแปล เช่น

RS485_PACKET packet;
memcpy(&packet.id[0], uart_buffer[0], length);
if(packet.id[0] == '0' && packet.id[1] == '0' && packet.id
  • == '1')
    {
        ............
    }

    ถ้าข้อมูลเป็นแบบบิทด้วย ก็ใช้ union เข้ามาช่วยครับ