Pages: [1]   Go Down
Print
Author Topic: ขอถามเรื่องการส่งข้อมูลแบบ PRTOCOL ช่วยหน่อย&  (Read 8537 times)
0 Members and 1 Guest are viewing this topic.
ANTY87
Guest
« on: September 04, 2009, 03:26:08 PM »

ขอรบกวนผู้รู้ด้วยนะค่ะ
ตอนนี้ นู๋ได้เขียนส่งข้อมูลแล้ว ไม่รู้ว่าจะตรวจสอบความถูกต้องของข้อมูลยังไง
พอดี ทราบมาว่า มีการตรวจสอบข้อมูลแบบ PROTOCOL ได้ โดยการเขียน CODE  ใน PIC
ไม่ทราบว่า พอมีใครมีตัวอย่างโค้ด หรือ แนวคิด เกี่ยวกับการตรวจสอบข้อมูลแบบนี้บ้าง
ช่วยกรุณาด้วยนะค่ะ
ขอแค่เป็นแนวคิด ก็ยังดี

ขอบคุณล่วงหน้าค่ะ  Grin
Logged
smitdh
Administrator
Hero Member
*****
Offline Offline

Gender: Male
Posts: 381


อาจารย์ที่ปรึกษา


« Reply #1 on: September 05, 2009, 01:11:09 PM »

- รูปแบบการจัดข้อมูลในการรับส่งเราเรีบกว่า format
- ข้อตกลงในการรับส่งข้อมูลเราเรียกว่าโปรโตคอล (Protocol)
ทั้งภาครับและภาคส่ง จะต้องมีรูปแบบ และโปรโตคอลเดียวกันจึงจะสื่อสารกันได้

ตัวอย๋างรูปแบบ (format) ในการรับ-ส่งข้อมูล แบบต่างๆ ลองพิจารณาดูให้เหมาะสมกับงานครับ
รูปแบบของการส่งข้อมูล ใน 1 Package หรือบางทีเรียกว่า Block จะประกอบด้วย
- ตัวเริ่มต้น เพื่อให้ภาครับตรวจสอบจุดเริ่มต้นของ Package
- ส่วนข้อมูล หรือค่ำสั่ง
- จุดสิ้นสุดข้อมูล
- ข้อมูลตรวจสอบความผิดพลาด การตรวจสอบความผิดพลาดมีหลายแบบด้วยกันเช่น
  check sum นำข้อมูลทั้งหมดมาบวกกัน เช่นใน HEX ไฟล์ ของ Intel ที่เราใช้ในการโปรแกรมชิพ
  LRC (Logic redundancy check) นำข้อมูลมากระทำทางตรรก ส่วนใหญ่จะใช้ XOR เช่นการส่งของมูลข้อง Pager
  CRC(Clic redundancy check) เป็น Algorithm ในการตรวจสอบเช่น การตรวจสอบข้อมูลใน Hardisk

(อาจใช้ keyword ในการ search หาข้อมูลเพิ่มเติม จาก google)
ในการใช้งานจริงสำหรับไมโครฯ ก็มักจะใช้ Check sum, กับ LRC มากกว่า เพราะสามารถ คำนวนได้เร็ว ส่วน CRC ต้องใช้หน่วยความจำจำนวนมาก

//*************************************
format แบบ Control เป็น ไบนารี ข้อมูลเป็น ASCII

ตัวอย่างบางส่วน
#define SOH 0x01   // Start of Head
#define STX 0x02   //Start of Text
#define ETX 0x03   //End of Text
#define EOT 0x04  //End of Transmit
#define ENQ 0x05  //Enquiry
#define ACK 0x06  //Acknowledge
#define NAK 0x15  //Negative Acknowledge

รูปแบบ <SOH>Header<STX>Data<ETX><CHK>
เช่น     <SOH>Temp<STX>28.5C<ETX><E9>

ตัวอย่างโปรโตคอล
ตัวส่งจะต้องตรวจสอบว่าตัวรับพร้อมหรือไม่ก่อนที่จะทำการส่งข้อมุล

ตัวส่ง  ->  <ENQ>    พร้อมไหม
ตัวรับ  <-  <ACK>      พร้อม  (ตอบ <NAK> หากไม่พร้อม หรือต้องการให้ส่งใหม่)
ตัวส่ง  ->  <SOH>Temp<STX>28.5C<ETX><E9>
ตัวรับ  <-  <ACK>      ข้อมูลถูกต้อง (ตอบ <NAK> หากคำนวนแล้วไม่ถูก ให้ส่งใหม่)


//*************************************
format แบบ Text ไฟล์
ข้อดีของแบบนี่ก็คือ สามารถตรวจสอบได้ด้วย Hyperterminal และสามารถบันทึกแล้วนำกลับมาดูด้วย Text editor อย่างเช่น notepad ได้
แบบ Package ขนาดคงที่
#HHNNCCAADDXX<0x0D>

แบบ Package ขนาดตามข้อมูล
#HHNNCCAADD.......XX<0x0D>


โดยที่
HH              Host Address หมายถึง address ของผู้ส่ง 00-FFh
NN              Node Address หมายถึง address ของผู้ที่ต้องการจะติดต่อด้วย 00-FFh
CC              เป็นคำสัง 2 Byte
AA              Address ของ I/O ใน node นั้น
DD...          เป็น Data (Parameter)เป็น ASCII ทั้งหมด หากไม่มี Parameter กำหนดเป็น 00
XX              XOR ตั้งแต่ * จนถึง data ตัวสุดท้าย
<0x0D>     คือค่า 0x0D,"\r', หรือ CR - cariage Return

ตัวอย่าง
Host = PC; Node = A0; CC = WB write bit; AA = 01; DD = 08; XX = 5D
ตัวส่ง  ->  #PCA0WB01085D<OD>
ตัวรับ  <-  #A0PCY0000028<OD>  Y0  เป็น การตอบรับข้อมูลถูกต้อง (XC เป็นการปฏิเสธ ให้ส่งมาใหม่)

อีกตัวอย่างในการส่งข้อมูล 8 byte  02290F801E054F80
ตัวส่ง  -> #PCA0WW0002290F801E054F803D
ตัวรับ  <-  #A0PCY0000028<OD>     Y0  เป็น การตอบรับข้อมูลถูกต้อง (XC เป็นการปฏิเสธ ให้ส่งมาใหม่)

จากตัวอย่างให้ดูเป็นแนวทาง ลองสร้าง ค่ำสั่งขึ้นมาเอง ตามการใช้งาน  และตัดส่วน ที่ไม่ได้ใช้ทิ้งไปครับ
ดูตัวอย่าง โครงงานที่ใช้ format และโปรโตคอลนี้
http://www.thaimicrotron.com/Project/BIG7SEG1/BIG7SEG.htm

//*************************************

INTEL HEX File ก็เป็น ตัวอย่างการส่งข้อมูลจำนวนมาก ที่น่าสนใจนะครับ ดูเพิ่ม
http://www.thaimicrotron.com/Referrence/HEXFILE/IntelHEXFile.htm
Logged
ANTY87
Guest
« Reply #2 on: September 08, 2009, 06:47:35 AM »

 Grin  ขอบคุณ คุณ smitdh มากเลยค่ะ
ได้แนวคิด อิกเยอะเลยค่ะ จะเอาไปลองใช้ดูนะค่ะ   ^^"
Logged
Pages: [1]   Go Up
Print
 
Jump to: