Protokol berbasis RS232 yang baik untuk komunikasi Embedded to Computer


10

Saya sedang mengerjakan proyek yang melibatkan sedikit komunikasi data yang baik antara remote Arduino dan komputer. Koneksi nirkabel melalui sepasang XBees, jadi kami memiliki tautan RS232 antara Arduino dan komputer. Untuk sejumlah kecil data, cukup mudah untuk menyatukan beberapa protokol komunikasi sederhana. Namun, untuk proyek yang lebih besar, apa saja protokol komunikasi sederhana yang bagus?

Saya telah melihat MODBUS, yang sepertinya merupakan opsi yang layak, tetapi saya ingin melihat apakah ada opsi lain yang lebih baik.


2
Apa saja persyaratannya?

Mencari saran umum. Kesederhanaan dan biaya overhead yang rendah akan menjadi tujuan utama untuk proyek ini.
Komputeris

1
Maaf, saya juga bermaksud: berapa banyak data, seberapa cepat

Saya tidak memiliki ukuran kuantitatif untuk itu, tetapi tidak banyak dan kecepatan bukanlah masalah besar.
Computerish

7
Tidak banyak dan kecepatan tidak menjadi masalah sangat mendukung sesuatu yang dapat dibaca manusia, karena itu membuat pengembangan & debugging lebih mudah. Sangat bagus ketika Anda dapat menghubungkan terminal dan mengganti diri Anda dengan kedua ujung tautan.
Chris Stratton

Jawaban:


4

OP meminta protokol serial untuk situasi di mana " tidak banyak [data] dan kecepatan bukanlah masalah besar ". MODBUS disebutkan dalam OP MODBUS melalui RS-485 bukan protokol cepat. Meskipun ini bukan spec, ini memberikan gambaran tentang niche tersebut.

Saya hanya bisa memikirkan dua protokol standar umum untuk ceruk ini:

  • NEMA 0183 . Protokol ASCII teks biasa. Dapat dibaca manusia. Hanya point-to point. Tidak mendukung multi-drop bus.
  • MODBUS yang sudah disebutkan di OP

Sangat sering, ketika programmer tertanam dalam situasi seperti OP, mereka merancang protokol komunikasi serial mereka sendiri dari awal.


10

Beberapa protokol sistem tertanam, beberapa di antaranya sangat sederhana, terdaftar di Embedded Systems: Common Protocols , termasuk:

Mungkin salah satu dari protokol ini akan memadai untuk aplikasi Anda apa adanya, atau hanya dengan sedikit penyesuaian.


6

Saya akan memilih roll Anda sendiri, dan membuatnya sesederhana mungkin.

Saya telah berurusan dengan banyak protokol serial untuk berbagai aplikasi kontrol, dan beberapa hal yang saya dapat merekomendasikan Anda sertakan adalah:

  • Mulai & hentikan karakter yang tidak digunakan di tempat lain
  • Semacam pemeriksaan checksum / kesalahan
  • Beberapa metode kontrol aliran / pensinyalan, terutama jika Anda memerlukan komunikasi dua arah.

Sebagai contoh yang sangat mendasar, Anda dapat mengonversi data Anda ke karakter ASCII dan menempelnya di dalam karakter start / stop seperti ini:

Untuk mengirim nilai byte 0x7A, data yang dikirim adalah (7A), di mana () adalah karakter start / stop yang dipilih dan 7 dan A adalah dua karakter ascii. OK itu menambahkan banyak overhead, tetapi itu berarti Anda dapat men-debug dengan perangkat lunak terminal dasar.


5

Jika data Anda melalui XBees, Anda harus meletakkan modul ke mode API dengan karakter escape, membagi data Anda ke dalam paket logis, dan mengambil keuntungan dari kenyataan bahwa dalam mode API paket yang diberikan kepada XBee akan tiba utuh atau tidak semuanya. Rancang protokol Anda di sekitar pengiriman potongan 1-255 byte, dan biarkan modul XBee khawatir tentang cara mengirimkan data dalam setiap potongan. Jangan khawatir tentang menjaga integritas masing-masing paket atau subdivisi di antara mereka. Modul Digi akan melakukan pekerjaan dengan baik untuk mengurusnya. Hal terbesar yang perlu Anda khawatirkan adalah kenyataan bahwa bahkan jika node yang mentransmisikan sebuah paket percaya itu tidak dikirimkan dan mengirimkan pengganti, penerima mungkin akhirnya mendapatkannya - mungkin bahkan setelah mendapat penggantian. Hal-hal mungkin paling mudah jika Anda mendesain protokol Anda sehingga satu sisi adalah "master"; jika master meminta sepotong data, budak harus mengirimnya sekali dan tidak khawatir tentang apakah master mendapatkannya. Jika master tidak mendapatkan data yang diinginkan, master dapat memintanya lagi.

Budak harus menetapkan semacam nomor urut untuk data, dan master harus menetapkan nomor urut untuk permintaan bahwa kondisi perubahan budak. Jika permintaan master adalah dalam bentuk "kirim item pertama yang nomor urutnya lebih besar dari XXX", dan setiap potongan item data oleh budak menyertakan nomor urutnya sendiri dan item sebelumnya (jika tidak diberi nomor secara berurutan) ), paket yang datang terlambat dapat menyebabkan budak mengirim data secara berlebihan ke master, tetapi master tidak akan mengalami kesulitan untuk mengabaikan tanggapan yang datang terlambat. Jika budak menerima permintaan perubahan-negara yang nomor urutnya di bawah permintaan sebelumnya, ia harus mengabaikan permintaan itu, karena permintaan itu digantikan bahkan sebelum diterima.


3

Bagaimana dengan Firmata ? Ini memiliki dukungan untuk berbagai sistem operasi dan bahasa pemrograman. Sisi pengontrol Arduino dan PICduino didukung, tetapi seharusnya tidak terlalu sulit untuk port ke mikrokontroler telanjang.


3

Saya punya pertanyaan serupa dengan ini dan tidak pernah menemukan sesuatu yang sederhana dan cukup kecil untuk AVR kecil dll. Jadi saya menggulung sesuatu yang terinspirasi oleh CAN. Ini disebut MIN (Microcontroller Interconnect Network):

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

Saya sudah membuat blog tentang hal ini di sini:

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

Ada kait di sana untuk blok data, tetapi sebagian besar ditujukan pada sinyal untuk sensor / aktuator. Saya telah mendefinisikan format JSON untuk menggambarkan sinyal dan pengemasannya dalam bingkai MIN dan berharap mendapatkan pembangkang Wireshark yang menggunakannya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.