Title: ขอถามเรื่องการส่งข้อมูลแบบ PRTOCOL ช่วยหน่อย& Post by: ANTY87 on September 04, 2009, 03:26:08 PM ขอรบกวนผู้รู้ด้วยนะค่ะ
ตอนนี้ นู๋ได้เขียนส่งข้อมูลแล้ว ไม่รู้ว่าจะตรวจสอบความถูกต้องของข้อมูลยังไง พอดี ทราบมาว่า มีการตรวจสอบข้อมูลแบบ PROTOCOL ได้ โดยการเขียน CODE ใน PIC ไม่ทราบว่า พอมีใครมีตัวอย่างโค้ด หรือ แนวคิด เกี่ยวกับการตรวจสอบข้อมูลแบบนี้บ้าง ช่วยกรุณาด้วยนะค่ะ ขอแค่เป็นแนวคิด ก็ยังดี ขอบคุณล่วงหน้าค่ะ ;D Title: Re: ขอถามเรื่องการส่งข้อมูลแบบ PRTOCOL ช่วยหน่อ$ Post by: smitdh 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 Title: Re: ขอถามเรื่องการส่งข้อมูลแบบ PRTOCOL ช่วยหน่อ$ Post by: ANTY87 on September 08, 2009, 06:47:35 AM ;D ขอบคุณ คุณ smitdh มากเลยค่ะ
ได้แนวคิด อิกเยอะเลยค่ะ จะเอาไปลองใช้ดูนะค่ะ ^^" |