โปรโตคอลที่ใช้ RS232 ที่ดีสำหรับการสื่อสารแบบฝังตัวกับคอมพิวเตอร์


10

ฉันกำลังทำงานในโครงการที่เกี่ยวข้องกับการสื่อสารข้อมูลที่ดีระหว่าง Arduino ระยะไกลและคอมพิวเตอร์ การเชื่อมต่อไร้สายนั้นผ่าน XBees ดังนั้นเราจึงมีการเชื่อมต่อ RS232 ระหว่าง Arduino กับคอมพิวเตอร์ สำหรับข้อมูลจำนวนเล็กน้อยมันง่ายพอที่จะรวมโปรโตคอลการสื่อสารแบบง่าย ๆ เข้าด้วยกัน สำหรับโครงการขนาดใหญ่แล้วโปรโตคอลการสื่อสารแบบง่าย ๆ ที่ดีมีอะไรบ้าง

ฉันดู MODBUS ซึ่งดูเหมือนว่าเป็นตัวเลือกที่ทำงานได้ แต่ฉันต้องการดูว่ามีตัวเลือกอื่นที่ดีกว่านี้หรือไม่


2
ข้อกำหนดอะไรบ้าง?

มองหาคำแนะนำทั่วไป ความเรียบง่ายและค่าใช้จ่ายต่ำจะเป็นเป้าหมายหลักของโครงการ
Computerish

1
ขออภัยฉันยังหมายถึง: ข้อมูลเท่าไหร่ความรวดเร็ว

ฉันไม่มีมาตรการเชิงปริมาณสำหรับเรื่องนั้น แต่ไม่มากและเร็วไม่ใช่เรื่องใหญ่
คอมพิวเตอร์

7
ไม่มากและความเร็วไม่เป็นปัญหาสำหรับคนที่อ่านง่ายเพราะมันทำให้การพัฒนาและการดีบักง่ายขึ้นมาก มันยอดเยี่ยมเมื่อคุณสามารถเชื่อมต่อเทอร์มินัลและแทนที่ตัวเองด้วยปลายทั้งสองด้านของลิงค์
Chris Stratton

คำตอบ:


4

OP ขอโปรโตคอลแบบอนุกรมสำหรับสถานการณ์ที่ " ไม่มาก [ของข้อมูล] และความเร็วไม่ใช่ปัญหาใหญ่ " MODBUS ถูกกล่าวถึงใน OP MODBUS ผ่าน RS-485 ไม่ใช่โปรโตคอลที่รวดเร็ว แม้ว่านี่จะไม่ใช่สเป็ค แต่ก็ให้แนวคิดเกี่ยวกับช่อง

ฉันนึกถึงโปรโตคอลมาตรฐานทั่วไปเพียงสองข้อเท่านั้นสำหรับช่องนี้:

  • NEMA 0183 ข้อความ ASCII ธรรมดา มนุษย์อ่านได้ จุดต่อจุดเท่านั้น ไม่รองรับบัสหลายบัส
  • MODBUS ซึ่งถูกกล่าวถึงใน OP แล้ว

บ่อยครั้งเมื่อโปรแกรมเมอร์ฝังตัวอยู่ในสถานการณ์เช่น OP พวกเขาออกแบบโปรโตคอลการสื่อสารแบบอนุกรมของตนเองตั้งแต่เริ่มต้น


10

โปรโตคอลระบบสมองกลฝังตัวบางตัวนั้นง่ายมากมีการระบุไว้ใน ระบบสมองกลฝังตัว: โปรโตคอลทั่วไปรวมถึง:

  • Tiny Embedded Network (TEN)
  • Microcontroller Interpreter สำหรับระบบสมองกลฝังตัวเครือข่าย(MINES)
  • อีกโปรโตคอลที่ปรับขนาดได้(YASP)
  • เครือข่ายเชื่อมต่อระหว่างท้องถิ่น(LIN)
  • Serial Servo Controller (SSC)
  • ระบบปฏิบัติการหุ่นยนต์แบบอนุกรม(rosserial)
  • netstring
  • รถเมล์ภาคสนามต่างๆ
  • Modbus
  • เครือข่ายพื้นที่ควบคุม(CAN)
  • Firmata (ขอขอบคุณคุณ jippie!)

บางทีหนึ่งในโปรโตคอลเหล่านี้อาจเพียงพอสำหรับการสมัครของคุณตามที่เป็นอยู่หรือมีเพียงการปรับเปลี่ยนเล็กน้อย


6

ฉันจะลงคะแนนของคุณเองและทำให้มันง่ายที่สุด

ฉันได้จัดการกับโปรโตคอลซีเรียลมากมายสำหรับแอปพลิเคชั่นการควบคุมที่หลากหลายและบางสิ่งที่ฉันสามารถแนะนำให้คุณ ได้แก่

  • อักขระเริ่มต้นและหยุดที่ไม่ได้ใช้งานที่อื่น
  • การตรวจสอบการตรวจสอบ / ข้อผิดพลาดบางประเภท
  • วิธีการควบคุมการไหล / การส่งสัญญาณบางอย่างโดยเฉพาะอย่างยิ่งถ้าคุณต้องการ comms แบบสองทิศทาง

เป็นตัวอย่างพื้นฐานมากคุณอาจแปลงข้อมูลของคุณเป็นอักขระ ASCII และติดไว้ภายในอักขระเริ่ม / หยุดเช่นนี้

ในการส่งค่าไบต์ 0x7A ข้อมูลที่ส่งจะเป็น (7A) โดยที่ () เป็นตัวเริ่ม / หยุดที่เลือกและ 7 และ A เป็น ASCII สองตัว ตกลงมันเพิ่มค่าใช้จ่ายจำนวนมาก แต่หมายความว่าคุณสามารถดีบักด้วยซอฟต์แวร์เทอร์มินัลพื้นฐาน


5

หากข้อมูลของคุณผ่าน XBees คุณควรใส่โมดูลเข้าสู่โหมด API ด้วยอักขระยกเว้นแบ่งข้อมูลของคุณเป็นแพ็กเก็ตแบบลอจิคัลและใช้ประโยชน์จากความจริงที่ว่าในโหมด API แพ็กเก็ตที่มอบให้กับ XBee จะมาถึงอย่างสมบูรณ์หรือ ไม่ใช่เลย. ออกแบบโพรโทคอลของคุณรอบ ๆ การส่งชิ้นส่วนที่ 1-255 ไบต์และปล่อยให้โมดูล XBee กังวลเกี่ยวกับวิธีการส่งข้อมูลภายในแต่ละชิ้น ไม่ต้องกังวลเกี่ยวกับการรักษาความสมบูรณ์ของแต่ละแพ็กเก็ตหรือส่วนย่อยระหว่างพวกเขา โมดูล Digi จะทำหน้าที่ได้ดีในการดูแลสิ่งนั้น สิ่งที่ยิ่งใหญ่ที่สุดที่คุณต้องกังวลคือข้อเท็จจริงที่ว่าแม้ว่าโหนดที่ส่งแพ็คเก็ตเชื่อว่ามันไม่ได้ส่งมอบและส่งการแทนที่ผู้รับอาจจบลงด้วยการรับอย่างใดก็ตาม - อาจเป็นไปได้แม้หลังจากที่ได้รับการแทนที่ สิ่งที่อาจจะง่ายที่สุดถ้าคุณออกแบบโปรโตคอลของคุณเพื่อให้ด้านหนึ่งเป็น "ต้นแบบ"; ถ้าเจ้านายขอข้อมูลชิ้นส่วนทาสควรส่งเพียงครั้งเดียวและไม่ต้องกังวลว่านายจะรับมันหรือไม่ หากต้นแบบไม่ได้รับข้อมูลที่ต้องการมันสามารถร้องขอได้อีกครั้ง

Slave ควรกำหนดหมายเลขลำดับของข้อมูลให้กับข้อมูลและ Master ควรกำหนดหมายเลขลำดับให้กับการร้องขอที่สถานะการเปลี่ยนแปลงของ Slave หากคำขอของอาจารย์อยู่ในรูปแบบ "ส่งรายการแรกที่มีหมายเลขลำดับมากกว่า XXX" และรายการข้อมูลแต่ละชิ้นโดยทาสจะมีหมายเลขลำดับของตัวเองและของรายการก่อนหน้า (หากไม่ใช่หมายเลขติดต่อกัน ) แพ็คเก็ตที่มาถึงช้าอาจทำให้ทาสส่งข้อมูลซ้ำซ้อนไปยังต้นแบบ แต่ต้นแบบจะไม่มีปัญหาในการเพิกเฉยต่อการตอบสนองที่มาถึงล่าช้า หากทาสได้รับคำขอเปลี่ยนสถานะซึ่งหมายเลขลำดับต่ำกว่าคำขอก่อนหน้านี้ควรละเว้นคำขอดังกล่าวเนื่องจากถูกแทนที่ด้วย superced แม้กระทั่งก่อนที่จะได้รับ


3

วิธีการเกี่ยวกับFirmata ? มีการรองรับระบบปฏิบัติการและภาษาโปรแกรมต่าง ๆ สนับสนุนด้านคอนโทรลเลอร์ Arduino และ PICduino แต่ก็ไม่ควรที่จะพอร์ตไปยังไมโครคอนโทรลเลอร์ที่เปลือยเปล่า


3

ฉันมีคำถามที่คล้ายกันกับเรื่องนี้และไม่เคยพบอะไรที่ง่ายและเล็กพอสำหรับ AVRs เล็ก ๆ น้อย ๆ ดังนั้นฉันจึงรีดบางสิ่งที่ได้รับแรงบันดาลใจจาก CAN มันเรียกว่า MIN (Microcontroller Interconnect Network):

https://github.com/min-protocol/min

ฉัน blogged เกี่ยวกับที่นี่:

https://kentindell.wordpress.com/2015/02/18/micrcontroller-interconnect-network-min-version-1-0/

มีตะขอสำหรับข้อมูลบล็อก แต่ส่วนใหญ่จะมุ่งไปที่สัญญาณสำหรับเซ็นเซอร์ / แอคทูเอเตอร์ ฉันได้กำหนดรูปแบบ JSON สำหรับการอธิบายสัญญาณและการบรรจุภายในเฟรม MIN และหวังว่าจะได้ตัวแยก Wireshark ที่ใช้มัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.