Protokol AIBUS Cina dan reaktor kimia laboratorium

Salam Habr! Sekali waktu saya menulis artikel tentang rasa reaksi. Banyak waktu berlalu, saya kembali ke pertanyaan ini.

Pada artikel ini, saya tidak akan membahas tentang teknologi untuk mengembangkan rasa reaksi, tetapi akan berbicara tentang pengalaman saya dalam mengotomatisasi jam kerja saya dan berbagi kode yang mungkin berguna. Saya menemukan reaktor kimia laboratorium buatan China dan, sayangnya, tidak memiliki alat untuk mengotomatisasi pendinginan, membaca dan menulis data, dan mode pemrograman, yang sangat penting. Reaktor itu sendiri adalah logam kosong biasa pada tripod, dengan pemanas hingga 350 derajat. Pengontrol Yudian AI518 bertanggung jawab untuk kontrol suhu.




Kabar baiknya bagi saya adalah kehadiran port RS-485 di dalamnya.

Ya, Yudian AI518 memiliki penghitung waktu dan beberapa program yang sangat sederhana, tetapi pertama-tama, sangat menarik untuk membuat "blackjack" Anda sendiri dengan jendela dan tombol, dan kedua, tidak terlalu nyaman untuk menyodok pada pengontrol biasa, saya ingin itu lakukan di komputer.

Karena saya memiliki pengalaman bekerja dengan pengontrol Arduino, saya awalnya memutuskan untuk membuat komunikasi dan kontrol melalui itu, maka saya sudah punya ide untuk menulis sebuah program pada Qt yang akan bertanggung jawab untuk kontrol dan otomatisasi, dan Arduino Mega untuk pembentukan dan dekripsi paket dengan AI518.

Karena katup pengaktifan air dingin dapat ditempatkan pada jarak tertentu dari komputer dan pemasangannya sendiri, diputuskan untuk membangun pengontrol tambahan yang akan menghidupkan / mematikan katup air dingin sesuai perintah dan membaca serta mengirim suhu pendinginan. Ya, pada akhir proyek, saya menyadari bahwa pembangunannya telah menumpuk, akan mungkin untuk menghilangkan peluit RS485 pada komputer dan menggunakan satu program, tetapi ambisi untuk membuat perangkat Anda sendiri memicu minat.

Total dalam kelompok kami:

  1. Pengendali asli Yudian AI518.
  2. Konverter Arduino Mega + 2 RS485 (MAX485)
  3. Arduino nano + 1 RS485 (MAX485) converter + termokopel + transistor 12V.
  4. 12V katup air dingin.

Pertama-tama, struktur komunikasi antara mega dan nano ditulis.

struct packet_arduino_pomp // Arduino nano { byte start_byte_one;//    212 byte start_byte_two;//    211 byte temp_pomp;//  byte on_of_pomp;//on-off  (1  0) byte CRC8;//  /**/ void pask() { CRC8 = (start_byte_one + start_byte_two + temp_pomp + on_of_pomp + tmp) / 10; } /* */ bool test_pask() { if (CRC8 == (start_byte_one + start_byte_two + temp_pomp + on_of_pomp + tmp) / 10) return 0; // return 1; //  } }; 

Ketika semuanya berjalan dengan stabil, saya mulai membaca banyak tentang berbagai protokol transfer data, tetapi tidak dapat menemukan yang saya butuhkan. Faktanya adalah bahwa pengontrol Yudian AI518 standar berkomunikasi dengan dunia luar melalui protokol AIBUS, seperti yang saya pahami itu adalah analog Cina MODBUS. ( dokumentasi ) Saya melakukan ini untuk pertama kalinya dan berfokus pada dokumentasi dan bantuan semua forum yang mungkin.

Struktur paket keluar untuk Yudian AI518:

 struct tagREQ_FRM_T { uint8_t u8DevAddr1; uint8_t u8DevAddr2; uint8_t u8ReqType; uint8_t u8DevPara; uint8_t u8LoParam; uint8_t u8HiParam; uint8_t u8LoSumCheck; uint8_t u8HiSumCheck; } ; 

Struktur paket yang masuk untuk Yudian AI518:

 struct tagANS_FRM_T { uint8_t u8LoPV; uint8_t u8HiPV; uint8_t u8LoSV; uint8_t u8HiSV; uint8_t u8MV; uint8_t u8ALm; uint8_t u8LoParam; uint8_t u8HiParam; uint8_t u8LoSumCheck; uint8_t u8HiSumCheck; }; 

Bahkan, ternyata paket dari semua perangkat datang ke Mega (dari nano dengan suhu pendingin, dari AI518 dengan suhu reaktor yang diperbarui dan nilai serta perintah lain dari komputer). Kemudian Mega menyatukan semuanya dalam satu paket dan mengirimkannya ke komputer, tempat program QT membacanya.

Struktur paket mega-komputer:

 struct packet_big // PC { byte start_byte_one;//    254 byte start_byte_two;//    232 byte temp_pomp;//  byte on_of_pomp;//on-off  (1  0) byte ex_temp_reactor_one;//    1 byte ex_temp_reactor_two;//    2 byte current_temp_reactor;//    byte timer_ex;// byte tmp;//   byte CRC8;//   void pask() { CRC8 = (start_byte_one + start_byte_two + temp_pomp + on_of_pomp + ex_temp_reactor_one + ex_temp_reactor_two + current_temp_reactor + timer_ex + tmp) / 10; } /* */ bool test_pask() { if (CRC8 == ((start_byte_one + start_byte_two + temp_pomp + on_of_pomp + ex_temp_reactor_one + ex_temp_reactor_two + current_temp_reactor + timer_ex + tmp)) / 10) return 0; // return 1; //  } }; 

Karena protokol China diam, jika paket yang dikirim tidak sesuai dengan deskripsi, memilih struktur, saya biasanya mulai berpikir bahwa itu rusak, tetapi pada akhirnya semuanya berhasil. Ketika saya melihat angka yang benar pertama di log, ada kebahagiaan ...

Untuk melindungi pengontrol pada Arduino nano dari kelembaban, saya memutuskan untuk mengetsa papan saya sendiri dan memasukkannya ke dalam case. Ini bukan hal yang rumit, ada banyak deskripsi tentang bagaimana melakukan ini, tetapi saya memilih teknologi LUT. ( LUT ). Yang paling sulit adalah memilih kertas inkjet mengkilap yang cocok, yang biasanya mencetak printer laser. Tapi setelah semua coba-coba, kami mendapat perangkat seperti itu.



Tapi bagaimana dengan program di komputer, dengan tombol dan windows. Untungnya, hal-hal seperti itu sangat mudah dilakukan pada Qt. Kami dapat memformulasikan permintaan dan membacanya dari perangkat "Basurman", sekarang kita perlu mengatur mode, membuat grafik suhu-waktu, memberikan pada akhir reaksi laporan tentang laju pemanasan ke suhu yang ditetapkan, waktu reaksi itu sendiri, laju pendinginan hingga suhu tertentu dan dll. Menggabungkan semua ini ke dalam struktur yang terpisah, menurut QSerialPort, melalui port COM yang terhubung dengan Arduinka, kami mengirimkan dan menerima nilai.

Yang paling sulit adalah mengkompilasi proyek yang sudah selesai di bawah Windows XP. Sayangnya, sistem ini sedang bekerja dan saya harus menari dengan rebana selama beberapa hari untuk membuatnya bekerja. Karena saya sudah melakukan ini pada hari kedua, saya tidak memberikan instruksi yang tepat tanpa sengaja dan memilah semua opsi yang diusulkan dari forum.

Hasilnya adalah sebuah program yang bekerja dan membantu saya di tempat kerja saya dan menghemat banyak waktu (saya tidak akan memposting proyek QT, karena tidak ada yang menarik di sana. Mentransfer data melalui QSerialPort, dan kemudian apa pun yang diinginkan hati Anda).

Tautan ke firmware untuk Arduinok:

Untuk Nano
Untuk Mega

Source: https://habr.com/ru/post/id448212/


All Articles