Bilgisayar İletişimine Yerleşik İyi RS232 tabanlı Protokoller


10

Uzak bir Arduino ve bilgisayar arasında iyi bir veri iletişimi içeren bir proje üzerinde çalışıyorum. Kablosuz bağlantı bir çift XBees üzerinden yapılır, bu yüzden Arduino ve bilgisayar arasında bir RS232 bağlantısı var. Az miktarda veri için, bazı basit iletişim protokollerini bir araya getirmek yeterince kolaydır. Daha büyük projeler için bazı iyi basit iletişim protokolleri nelerdir?

Geçerli bir seçenek gibi görünen MODBUS'a baktım, ancak daha iyi seçeneklerin olup olmadığını görmek istedim.


2
Gereksinimler tam olarak nelerdir?

Genel öneriler arıyorum. Sadelik ve düşük ek yük proje için temel hedefler olacaktır.
Bilgisayarlı

1
Üzgünüm, ayrıca şunu da kastediyorum: ne kadar veri, ne kadar hızlı

Bunun için kantitatif önlemlerim yok, ama çok fazla değil ve hız çok büyük bir sorun değil.
Bilgisayarlı

7
Çok fazla ve hızlı bir sorun olmamak, insan tarafından okunabilir bir şey için güçlü bir şekilde tartışır, çünkü geliştirme ve hata ayıklamayı çok daha kolay hale getirir. Bir terminal bağlayıp bağlantının her iki ucunun yerine geçebilmeniz harika.
Chris Stratton

Yanıtlar:


4

OP, " çok fazla veri ve hızın çok büyük bir sorun olmadığı " bir durum protokolü ister . MODBUS, RS-485 üzerinden OP MODBUS'ta belirtildiği gibi hızlı bir protokol değildir. Bu bir özellik olmasa da, niş hakkında bir fikir verir.

Bu niş için sadece iki ortak standart protokol düşünebilir:

  • NEMA 0183 . Düz metin ASCII protokolü. İnsan tarafından okunabilir. Yalnızca noktadan noktaya. Çoklu indirme veriyolunu desteklemez.
  • OP'de daha önce bahsedilen MODBUS

Sıklıkla, gömülü programcılar OP gibi bir durumda olduğunda, kendi seri iletişim protokollerini sıfırdan tasarlarlar.


10

Bazıları son derece basit olan bazı gömülü sistem protokolleri, Gömülü Sistemler: Ortak Protokoller'de listelenmiştir :

Belki de bu protokollerden biri uygulamanız için olduğu gibi veya sadece küçük ayarlamalar için yeterli olacaktır.


6

Oyunuzu kendiniz alırsınız ve mümkün olduğunca basit tutarım.

Ben o çeşitli kontrol uygulamaları için seri protokolleri sürü ve birkaç şeylerle uğraştığım olabilir sen şunlardır öneririz:

  • Başka yerde kullanılmayan karakterleri başlatma ve durdurma
  • Bir çeşit sağlama toplamı / hata kontrolü
  • Akış kontrolü / sinyalizasyonunun bazı yöntemleri, özellikle çift yönlü haberleşmelere ihtiyacınız varsa.

Çok temel bir örnek olarak, verilerinizi ASCII karakterlerine dönüştürebilir ve şöyle başlatma / durdurma karakterlerinin içine yapıştırabilirsiniz:

Bayt değerini 0x7A göndermek için, gönderilen veriler (7A) olacaktır; burada () seçilen başlangıç ​​/ bitiş karakterleri ve 7 ve A iki ascii karakterdir. Tamam, çok fazla ek yük ekler, ancak temel terminal yazılımıyla hata ayıklayabileceğiniz anlamına gelir.


5

Verileriniz XBees üzerinden geçiyorsa, modülleri kaçış karakterleriyle API moduna geçirmeli, verilerinizi mantıksal paketlere ayırmalı ve API modunda bir XBee'ye verilen bir paketin bozulmadan veya bir şey değil. Protokolünüzü 1-255 baytlık yığınların iletimi etrafında tasarlayın ve XBee modüllerinin her bir yığın içindeki verilerin nasıl dağıtılacağı konusunda endişelenmesine izin verin. Tek tek paketlerin bütünlüğünü veya aralarındaki alt bölümleri korumak konusunda endişelenmeyin. Digi modülleri bununla ilgilenmek için iyi bir iş çıkarır. Endişelenmeniz gereken en büyük şey, bir paketi ileten düğümün teslim edilmediğine ve bir yedek gönderdiğine inansa bile, alıcının bunu bir şekilde elde edebileceği gerçeğidir - muhtemelen değiştirildikten sonra bile. Protokolünüzü bir tarafı "master" olacak şekilde tasarlarsanız en kolay şey olabilir; Master bir parça veri isterse, köle bir kez göndermeli ve master'ın alıp almadığından endişe etmemelidir. Eğer master istediği verileri alamazsa, tekrar talep edebilir.

Slave, verilere bir tür sıra numarası atamalı ve master, slave değiştirme durumunu talep etmek için sıra numaraları atamalıdır. Kaptanın isteği "sıra numarası XXX'dan büyük olan ilk öğeyi gönder" biçimindeyse ve ikincil öğenin her veri öğesi kendi sıra numarasını ve önceki öğenin isteğini içerir (arka arkaya numaralandırılmamışsa) ), geç gelen paketler, slave'in master'a yedekli olarak veri göndermesine neden olabilir, ancak master, gelen geç gelen yanıtları göz ardı etmekte zorluk çekmez. Slave, sıra numarası daha önceki bir isteğin altında olan bir durum değişikliği isteği alırsa, alınmadan önce üstlendiği için bu isteği yok saymalıdır.


3

Firmata ne dersiniz ? Çeşitli işletim sistemleri ve programlama dilleri için desteği vardır. Denetleyici tarafı Arduino ve PICduino desteklenir, ancak çıplak bir mikro denetleyiciye taşınması çok zor olmamalıdır.


3

Buna benzer bir sorum vardı ve küçük AVR'ler vb. İçin yeterince basit ve küçük bir şey bulamadım. Bu yüzden CAN'dan ilham alan bir şey yuvarladım. Buna MIN (Mikrodenetleyici Ara Bağlantı Ağı) denir:

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

Burada bu konuda blog yazdım:

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

Blok verileri için kancalar vardır, ancak çoğunlukla sensörler / aktüatörler için sinyalleri hedefler. MIN çerçeveleri içinde sinyalleri ve paketlerini tanımlamak için bir JSON formatı tanımladım ve bunu kullanan bir Wireshark disektörü almayı umuyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.