AIBUS البروتوكول الصيني والمفاعل الكيميائي المختبري

تحيات حبر! ذات مرة كتبت مقالًا عن نكهات التفاعل. لقد مر الكثير من الوقت ، عدت إلى هذا السؤال.

في هذه المقالة ، لن أخوض في تفاصيل التكنولوجيا لتطوير نكهات التفاعل ، لكن سأتحدث عن تجربتي في أتمتة ساعات العمل ومشاركة رمز قد يكون مفيدًا. صادفت مفاعل كيميائي مختبري صيني الصنع ، ولسوء الحظ ، كان يفتقر إلى أدوات لأتمتة التبريد وقراءة وكتابة البيانات وأنماط البرمجة ، وهو أمر مهم للغاية. كان المفاعل نفسه عبارة عن معدن عادي فارغ على حامل ثلاثي القوائم ، مع سخان يصل إلى 350 درجة. تحكم Yudian AI518 هو المسؤول عن التحكم في درجة الحرارة.




كان الخبر السار بالنسبة لي هو وجود منفذ RS-485 فيه.

نعم ، يوجد في Yudian AI518 أجهزة ضبط الوقت وبعض البرامج البسيطة للغاية ، ولكن أولاً ، كان من المثير للاهتمام للغاية أن تصنع "لعبة ورق" بنفسك مع النوافذ والأزرار ، وثانياً ، ليس من المناسب للغاية وضع جهاز التحكم بشكل منتظم ، أود ذلك القيام به على الكمبيوتر.

نظرًا لأنني اكتسبت خبرة في العمل مع وحدات التحكم في Arduino ، فقد قررت في البداية إجراء الاتصالات والتحكم فيها ، ثم كانت لدي فكرة عن كتابة برنامج على Qt سيكون مسؤولاً عن التحكم والأتمتة ، و Arduino Mega عن تشكيل وفك تشفير الحزم باستخدام AI518.

نظرًا لأن صمام تمكين الماء البارد يمكن أن يقع على مسافة من الكمبيوتر والتثبيت نفسه ، فقد تقرر إنشاء وحدة تحكم إضافية تعمل على تشغيل / إيقاف تشغيل صمام الماء البارد في القيادة وقراءة وإرسال درجة حرارة التبريد. نعم ، في نهاية المشروع ، أدركت أن الإنشاءات قد تراكمت ، سيكون من الممكن التخلص من صافرة RS485 على جهاز كمبيوتر واستخدام برنامج واحد ، لكن الطموح لإنشاء اهتمام خاص بك قد زاد من الاهتمام.

المجموع في حفنة لدينا:

  1. تحكم الأصلي Yudian AI518.
  2. محولات Arduino Mega + 2 RS485 (MAX485)
  3. اردوينو نانو + 1 RS485 (MAX485) محول + الحرارية + 12V الترانزستور.
  4. 12V صمام الماء البارد.

بادئ ذي بدء ، تم كتابة بنية التواصل بين ميجا ونانو.

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; //  } }; 

عندما كان كل شيء يعمل بشكل مستقر ، بدأت في قراءة الكثير عن بروتوكولات نقل البيانات المختلفة ، لكن لم أتمكن من العثور على البروتوكول الذي أحتاجه. الحقيقة هي أن وحدة التحكم Yudian AI518 القياسية تتواصل مع العالم الخارجي عبر بروتوكول AIBUS ، كما أفهمها هي التماثلية الصينية لـ MODBUS. ( التوثيق ) فعلت هذا للمرة الأولى وركزت على التوثيق ومساعدة جميع المنتديات الممكنة.

بنية الحزمة الصادرة لـ 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; } ; 

هيكل الحزمة الواردة لـ 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; }; 

في الأساس ، اتضح أن الحزم من جميع الأجهزة تأتي إلى Mega (من nano مع درجات حرارة التبريد ، من AI518 مع درجة حرارة مفاعل محدثة والقيم والأوامر الأخرى من الكمبيوتر). ثم توحدت Mega كل شيء في حزمة واحدة وأرسلتها إلى جهاز كمبيوتر ، حيث قرأها برنامج QT.

بنية حزمة الكمبيوتر الضخمة:

 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; //  } }; 

نظرًا لأن البروتوكول الصيني صامت ، إذا كانت الحزمة المرسلة لا تتناسب مع الوصف ، واختيار الهيكل ، فقد بدأت عمومًا أعتقد أنه قد تم كسره ، ولكن في النهاية تم حل كل شيء. عندما رأيت أول الأرقام الصحيحة في السجل ، كان هناك سعادة ...

من أجل حماية وحدة التحكم في Arduino nano من الرطوبة ، قررت حفر لوحتي ووضعها في العلبة. هذا ليس بالأمر الصعب ، فهناك العديد من الأوصاف حول كيفية القيام بذلك ، لكنني اخترت تقنية LUT. ( لوت ). أصعب شيء كان اختيار ورق نفث الحبر المصقول المناسب ، الذي يطبع عادة طابعة ليزر. ولكن بعد كل التجربة والخطأ ، حصلنا على مثل هذا الجهاز.



ولكن ماذا عن البرنامج على الكمبيوتر ، مع الأزرار والنوافذ. لحسن الحظ ، من السهل جدًا القيام بهذه الأشياء على Qt. نحن قادرون على صياغة الطلبات وقراءتها من جهاز "Basurmanian" ، والآن من الضروري أن نتمكن من ضبط الأوضاع ، ورسم رسم بياني لدرجة حرارة الوقت ، وإعطاء في نهاية التفاعل تقريرا عن معدل التسخين إلى درجة الحرارة المحددة ، ووقت رد الفعل نفسه ، ومعدل التبريد إلى درجة حرارة معينة و إلخ عند دمج كل هذا في بنية منفصلة ، وفقًا لـ QSerialPort ، من خلال منفذ COM الذي يتصل به Arduinka نفسه ، فإننا نرسل ونقبل القيم.

أصعب شيء كان تجميع المشروع النهائي تحت نظام التشغيل Windows XP. لسوء الحظ ، هذه الأنظمة تعمل وقد اضطررت للرقص مع الدف لبضعة أيام لجعلها تعمل. نظرًا لأنني فعلت هذا بالفعل في اليوم الثاني ، لم أضع التعليمات الدقيقة دون تعمد وفرز جميع الخيارات المقترحة من المنتديات.

كانت النتيجة برنامجًا يساعدني ويساعدني في مكان عملي ويوفر الكثير من الوقت (لن أقوم بنشر مشروع كيو تي ، لأنه لا يوجد شيء مثير للاهتمام هناك. نقل البيانات عبر QSerialPort ، ومن ثم كل ما تريده قلبك).

الروابط إلى البرامج الثابتة ل Arduinok:

للحصول على نانو
للحصول على ميجا

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


All Articles