Salutations Habr! Il était une fois j'ai écrit
un article sur les saveurs de réaction. Beaucoup de temps s'est écoulé, je suis revenu sur cette question.
Dans cet article, je n'entrerai pas dans les détails de la technologie pour développer des saveurs de réaction, mais je parlerai de mon expérience dans l'automatisation de mes heures de travail et le partage d'un code qui pourrait être utile. Je suis tombé sur un réacteur chimique de laboratoire de fabrication chinoise et, malheureusement, il manquait d'outils pour automatiser le refroidissement, la lecture et l'écriture de données et les modes de programmation, ce qui était très important. Le réacteur lui-même était un flan métallique ordinaire sur un trépied, avec un radiateur jusqu'à 350 degrés.
Le contrôleur
Yudian AI518 est responsable du contrôle de la température.

La bonne nouvelle pour moi était la présence d'un port RS-485.
Oui, Yudian AI518 a des minuteries et des programmes très simples, mais premièrement, c'était très intéressant de créer votre propre "blackjack" avec des fenêtres et des boutons, et deuxièmement ce n'est pas très pratique de pousser sur un contrôleur régulier, j'aimerais ça faire sur l'ordinateur.
Comme j'avais de l'expérience avec les contrôleurs Arduino, j'ai d'abord décidé de faire de la communication et du contrôle à travers elle, puis j'ai déjà eu l'idée d'écrire un programme sur Qt qui sera responsable du contrôle et de l'automatisation, et Arduino Mega pour la formation et le décryptage des paquets avec AI518.
Étant donné que la vanne de validation de l'eau froide peut être située à distance de l'ordinateur et de l'installation elle-même, il a été décidé de construire un contrôleur supplémentaire qui ouvrira / fermera la vanne d'eau froide sur commande et lira et enverra la température de refroidissement. Oui, à la fin du projet, j'ai réalisé que la construction était très encombrée, il serait possible de se débarrasser du sifflet RS485 sur un ordinateur et d'utiliser un programme, mais l'ambition de faire son propre appareil a suscité l'intérêt.
Total dans notre bouquet:
- Contrôleur natif Yudian AI518.
- Arduino Mega + 2 convertisseurs RS485 (MAX485)
- Arduino nano + 1 convertisseur RS485 (MAX485) + thermocouple + transistor 12V.
- Vanne d'eau froide 12V.
Tout d'abord, la structure de communication entre méga et nano a été écrite.
struct packet_arduino_pomp // Arduino nano { byte start_byte_one;
Lorsque tout a fonctionné de manière stable, j'ai commencé à lire beaucoup sur les différents protocoles de transfert de données, mais je n'ai pas trouvé celui dont j'avais besoin. Le fait est que le contrôleur Yudian AI518 communique avec le monde extérieur via le protocole AIBUS, si je comprends bien, c'est l'analogue chinois de MODBUS. (
documentation ) Je l'ai fait pour la première fois et en me concentrant sur la documentation et l'aide de tous les forums possibles.
Structure des paquets sortants pour 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; } ;
La structure du paquet entrant pour 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; };
En fait, il s'est avéré que les packages de tous les appareils viennent au Mega (de nano avec des températures de refroidissement, de AI518 avec une température de réacteur mise à jour et d'autres valeurs et commandes de l'ordinateur). Ensuite, Mega a tout réuni dans un seul paquet et l'a envoyé à un ordinateur, où le programme QT l'a lu.
Structure du package méga-ordinateur:
struct packet_big // PC { byte start_byte_one;
Étant donné que le protocole chinois est silencieux, si le paquet envoyé ne correspond pas à la description, en sélectionnant la structure, j'ai généralement commencé à penser qu'il était cassé, mais à la fin tout a fonctionné. Quand j'ai vu les premiers chiffres corrects dans le journal, il y avait du bonheur ...
Afin de protéger le contrôleur de l'Arduino nano de l'humidité, j'ai décidé de graver ma propre carte et de la mettre dans le boîtier. Ce n'est pas une chose délicate, il existe de nombreuses descriptions sur la façon de procéder, mais j'ai choisi la technologie LUT. (
LUT ). Le plus difficile a été de choisir un papier jet d'encre brillant adapté, qui imprime normalement une imprimante laser. Mais après tous les essais et erreurs, nous avons obtenu un tel appareil.

Mais qu'en est-il du programme sur l'ordinateur, avec des boutons et des fenêtres. Heureusement, de telles choses sont très faciles à faire sur Qt. Nous sommes en mesure de formuler des requêtes et de les lire à partir d'un appareil «basurmanien», il est maintenant nécessaire de pouvoir régler les modes, tracer un graphique temps-température, donner à la fin de la réaction un rapport sur la vitesse de chauffe à la température réglée, le temps de réaction lui-même, la vitesse de refroidissement à une certaine température et etc. En combinant tout cela dans une structure distincte, selon QSerialPort, via le port COM auquel Arduinka lui-même est connecté, nous transmettons et acceptons des valeurs.
Le plus difficile a été de compiler le projet fini sous Windows XP. Malheureusement, ces systèmes fonctionnent et j'ai dû danser avec un tambourin pendant quelques jours pour le faire fonctionner. Comme je l'ai déjà fait le deuxième jour, je n'ai pas exposé les instructions exactes sans avoir délibérément et trié toutes les options proposées dans les forums.
Le résultat a été un programme qui fonctionne et m'aide sur mon lieu de travail et fait gagner beaucoup de temps (je ne publierai pas le projet QT, car il n'y a rien d'intéressant là-bas. Transfert de données via QSerialPort, puis tout ce que votre cœur désire).
Liens vers le firmware pour Arduinok:
→
Pour Nano→
Pour Mega