Domotique avec prise en charge des langages de programmation industriels ou BluePill x405

Début de l'examen


Donc, mes chers collègues, nous commençons l'examen par ce que nous voulons vraiment souligner ici. Dans l'article, je veux examiner les éléments typiques de la construction d'un programme de contrôleur industriel et montrer comment ils peuvent être appliqués aux systèmes domotiques. Et le plus important est de trouver la réponse à la question - ce qui est nécessaire pour cela.

Domotique - Applications


Home sweet home ... Avez-vous vraiment besoin d'un contrôleur? La réponse est simple - tout dépend de ce qui est disponible dans une telle maison. Bien sûr, si vous venez d'avoir un appartement et que l'automatisation consiste à gérer votre centre multimédia à domicile et la climatisation en été, tout ce qui est écrit ci-dessous peut être complètement inintéressant. Mais si votre hobby n'est pas seulement de pousser le canapé (ce qui est là pour se cacher, je l'ai moi-même parfois remarqué), alors l'article peut être très utile.

Essayons donc de comprendre comment des moyens improvisés peuvent simplifier notre vie difficile. À titre d'exemple, nous utilisons la situation réelle - une pompe dans un puits de 70 mètres de profondeur, que deux voisins ont mis dans un pli. Ils l'ont installé au printemps, quand il y avait beaucoup d'eau dans le puits, et en général, c'était juste chaud et bon. Mais le temps passe et les questions commencent - pour faire monter l'eau à une telle profondeur, vous avez besoin d'électricité, pour laquelle vous devez payer. Le sous-sol et le plancher technique ont été inondés plusieurs fois - ils ont juste oublié d'éteindre la pompe ... Oui, et ce n'est pas très pratique de la contrôler manuellement - vous devez fermer un robinet, en ouvrir un autre, puis allumer la pompe et regarder le niveau d'eau dans le réservoir.

Vaut-il la peine d'y consacrer votre temps, qui fait déjà défaut? Un esprit curieux commence à chercher des solutions et, bien sûr, le trouve! Une liste de tâches à mettre en œuvre est née.

  1. Le paiement de l'électricité consommée n'a pas à être commun - cela signifie que nous installerons deux démarreurs, chacun étant connecté à son propre compteur électrique.
  2. La pompe ne doit pas tomber en panne en raison du manque d'eau - cela signifie que nous allons installer un capteur pour la course «sèche» de la pompe. S'il n'y a pas d'eau, il suffit de ne pas démarrer la pompe, et si cela fonctionne, nous nous arrêtons d'urgence.
  3. La pompe ne doit pas fonctionner trop longtemps, par exemple plus de 25 minutes. Le dépassement de cette durée indique que le système quitte son mode de fonctionnement normal.
  4. Le remplissage des conteneurs doit se faire sans intervention humaine, c'est-à-dire automatiquement, ce qui signifie commencer au niveau inférieur et s'arrêter au niveau supérieur.
  5. Un seul réservoir doit être rempli, c'est-à-dire que nous installons deux vannes - pour alimenter en eau un ensemble dans chaque réservoir.
  6. La pause entre les démarrages de la pompe doit être d'au moins 30 minutes.
  7. Une coupure de courant ne devrait pas affecter l'algorithme de fonctionnement, s'il était actif. Malgré tout, l'algorithme doit être terminé.

Les tâches sont simples et peuvent être résolues de cent, voire mille façons. Mais le titre de l'article parle de lui-même, et nous emprunterons un chemin épineux. Utilisons un contrôleur virtuel (pour l'instant, bien sûr), qui fera tout cela.

Comment fonctionne un contrôleur industriel?


Bien sûr, nous allons clarifier tout de suite - nous parlons des soi-disant contrôleurs logiques programmables, ou PLC pour faire court. Qu'est-ce qui se cache sous cette abréviation? Et voici ce qui est caché - une incroyable variété de solutions matérielles, un grand nombre de produits logiciels et d'utilitaires. Une question raisonnable se pose immédiatement - comment alors utiliser tout ce bien? Est-il vraiment nécessaire d'étudier la partie matérielle à partir de zéro et de trouver du temps et de l'argent pour chaque nouvel appareil afin de suivre des cours de formation et d'acquérir les compétences nécessaires pour travailler avec chaque appareil?

La réponse est non, ce n'est pas nécessaire. Tout a été fait avant nous. Il ne reste plus qu'à étudier et apprendre à utiliser. C'est ce que je propose de faire plus loin - une petite immersion dans la norme CEI 61131. Révélons quelles parties cette norme contient.

  • CEI 61131-1: Informations générales.
  • CEI 61131-2: Exigences et essais des équipements.
  • CEI 61131-3: langages de programmation.
  • CEI 61131-4: Guide de l'utilisateur.
  • CEI 61131-5: Communications.
  • CEI 61131-6: Sécurité fonctionnelle.
  • CEI 61131-7: Programmation de commande floue.
  • CEI 61131-8: Lignes directrices pour l'utilisation et la mise en œuvre des langages de programmation.
  • CEI 61131-9: Interface de communication numérique monopoint pour petits capteurs et actionneurs.
  • CEI 61131-10: Format d'échange basé sur XML ouvert API.

Mais nous ne nous attarderons pas sur le sujet des normes et, pour le dire simplement, le contrôleur fonctionne généralement de manière cyclique - interrogation de l'état des entrées, l'interprète exécutant le programme de contrôle, définition de l'état des sorties, exécution des tâches de maintenance interne et retour à nouveau à l'interrogation de l'état des entrées. C’est assez ennuyeux, mais efficace et efficient. Un programme de contrôle est un pseudo-code créé à l'aide d'un environnement de programmation. Habituellement, un tel pseudo-code est une séquence codée binaire, qui n'a rien à voir avec les langages de programmation habituels. Bien que pour l'utilisateur, il soit présenté sous une forme compréhensible - pour le contrôleur, une vue complètement différente est utilisée. Un bon exemple est un petit programme, présenté sous forme d'IL, LD et sous forme d'encodage binaire pour le contrôleur (hmm, il n'y a même pas de terme spécial). Sous le becquet, un petit exemple est montré.

Options d'affichage du programme


Alors, qu'est-ce qui rend ce programme utile? Oui, elle ne fait rien - si la valeur du merker M8010 est 1, alors 1. sera écrit dans la sortie avec l'adresse Y377. Par conséquent, la même chose est pour 0.
L'un des plus grands avantages d'une telle implémentation est la possibilité de décharger le programme de la mémoire du contrôleur, de l'ouvrir pour le modifier dans un éditeur d'une manière compréhensible pour les humains, de compiler (ce terme est conditionnel ici) et de le recharger dans la mémoire du contrôleur. De plus, certains contrôleurs enregistrent même des commentaires et des noms de variables.

Comment programmer le contrôleur?


Bien sûr, un logiciel spécialisé est nécessaire. Après de longues recherches et expériences, Autoshop v3.02 de Inovance Control a été choisi. Il est remarquable en ce qu'il est gratuit, disponible en téléchargement gratuit et qu'il prend en charge les contrôleurs compatibles avec les contrôleurs Mitsubishi. Et il prend en charge le travail non seulement via les ports série, mais également via Ethernet. Lien vers la version que nous utilisons, sous le spoiler.

Lien pour télécharger à partir du disque Yandex

Eh bien, nous avons installé le programme et maintenant une autre question - comment écrire le programme sur notre contrôleur? Puisque nous travaillerons avec un périphérique spécifique, nous installerons des pilotes spécifiques pour le port COM virtuel. Pour sauvegarder les conclusions et pour simplifier, j'ai décidé d'utiliser le port USB de la carte pour la connexion. Pilotes sous le spoiler.

Pilotes sur disque Yandex

Après avoir installé les pilotes et connecté la carte via mini-USB, vous pouvez vérifier si tout se passe bien avec vous. Pour ce faire, cliquez avec le bouton droit sur My Computer-Management-Device Manager-Ports (COM et LPT). Vous devriez voir une telle fenêtre comme sous un spoiler. Le numéro de port COM sur votre système peut varier.

Gestionnaire d'appareils


Vous pouvez maintenant sélectionner Tools-Communication Setting dans le menu AutoShop, sélectionnez Serial dans la fenêtre qui apparaît, spécifiez le numéro de port et cliquez sur le bouton Test. Vous devriez avoir une fenêtre comme celle-ci sous un spoiler.

Connexion réussie à la carte


Mais si quelque chose ne fonctionne pas pour vous, écrivez en PM ou dans un commentaire. Nous allons certainement vous aider.

Éléments du programme, sans lesquels il sera triste


Ci-après, nous considérerons le langage des diagrammes en échelle, ou le soi-disant LD. Examinons uniquement les éléments que nous utiliserons plus tard.

  • Les entrées et sorties sont discrètes. Ils sont désignés par X et Y. Conçus pour recevoir et émettre des signaux discrets.
  • La zone de mémoire de M merkers M. Elle peut prendre deux états - on et off.
  • Les minuteries sont désignées par T. Conçu pour compter le temps de 0,1 à 3276,7 secondes.
  • La zone des registres D. Elle a une dimension de cellule de 16 bits, mais peut également être adressée comme une cellule de 32 bits.

Cheval sphérique dans le vide, ou registres d'adressage indirect


Les registres d'adressage indirect sont désignés V et Z et peuvent être adressés de V0 à V7 et de Z0 à Z7. Pourquoi peuvent-ils être utilisés? Voyons comment ils fonctionnent généralement. Cet enregistrement D1000V0 à l'aspect fou signifie que l'adresse de cellule calculée comme adresse D1000 plus la valeur écrite dans le registre d'adressage indirect sera utilisée. S'il y en a 15, alors nous utiliserons l'adresse de la cellule D1015. C'est très pratique lorsque vous travaillez avec des tableaux de données ou avec un contrôle de table - il nous suffit de changer la valeur du registre d'index, et nous obtenons les valeurs de ces cellules de mémoire qui ont été adressées. Mais même si nous ne les appliquerons pas, nous en parlerons dans la prochaine publication.

Un peu sur la visualisation du programme ou le débogage en ligne


Si vous êtes programmeur et que vous venez de terminer l'écriture d'un programme, l'étape suivante est le débogage. Et ici, la question se pose - comment le faire. Encore une fois, il y a beaucoup d'options, mais je vais parler de celle que nous utiliserons plus loin. L'éditeur d'environnement de programmation vous permet de montrer visuellement quelles valeurs de bits et de variables sont actuellement dans la mémoire du contrôleur en appuyant sur un bouton. Un exemple très révélateur sera - sous l'affichage hors ligne et en ligne des spoilers du programme dans l'éditeur.

Bouton pour passer en mode d'affichage variable


Type de programme en mode de visualisation des valeurs des variables


Type de programme en mode édition


Un peu plus sur les processus qui se produisent lorsque vous cliquez sur le bouton En ligne. Le programme compile rapidement une liste de variables visibles et, une fois terminé, l'écrit dans un tampon de contrôleur spécifique. Après cela, le contrôleur prépare les données de cette liste et les place dans un autre tampon. Le programme lit les valeurs de ce tampon et les affiche sous forme de valeurs sur le diagramme synoptique. Si vous faites défiler un petit programme dans la fenêtre d'affichage et modifiez les variables visibles, ce cycle se répétera à nouveau ...

Qui appelle Hamlet, ou sur scène BluePill x405


Avez-vous remarqué que le marché ne rencontre pas de simples cartes mères comme une tablette bleue, mais équipées de processeurs comme F405 et plus? Personnellement, je n'ai rencontré que des pierres F401, mais c'est un niveau légèrement différent ... Je suis facile à gravir, et pour mes expériences, sans y réfléchir à deux fois, j'ai effectué un paiement dans le bon vieux P-CAD 2006 et commandé auprès des Chinois sur l'un des sites de commande rapide. Bien sûr, en couleur, c'est une tablette verte, mais en termes de signification, j'ai décidé de laisser le nom BluePill, mais indiquant qu'il est déjà x405. Le résultat sous les spoilers est une photo de la carte BluePill x405.

Vue de dessus


Vue de dessous


Concept et gerber sur github

Un peu pourquoi cette planche est si remarquable? Après tout, il n'y a eu que des milliers de tentatives pour créer des clones de bluepill! Mais la différence est la suivante: j'attache un micrologiciel à cette carte, ce qui la transformera en un noyau qui exécute un programme compatible avec les contrôleurs industriels Mitsubishi dans un système de commande. Ce miracle est calculé sur 16 entrées, 16 sorties, 2 entrées analogiques, 3 UART avec prise en charge DE pour RS485, 1 bus maître monofil. L'UART peut fonctionner en tant que bus maître Modbus RTU et en tant qu'esclave. Et ils peuvent travailler de manière totalement indépendante.
Mais ce n'est pas tout - si vous connectez une batterie 3V à la broche VBAT, alors non seulement l'horloge, mais aussi les temporisateurs, compteurs, merkers et les 1000 premiers registres à usage général D conserveront leurs valeurs. Et il y a 8000 registres.

Anticipant les questions, je dirai tout de suite - oui, le logiciel est basé sur un système d'exploitation en temps réel. Oui, le DMA est utilisé dans la mesure du possible. Ces fonctionnalités permettent de travailler sans changement significatif du temps de cycle à des charges de communication élevées. Cette version est la deuxième révision, révisée et complétée.

Cette carte peut être entièrement programmée par GX FXDeveloper et IEC Developer et GX Works.

Le sort de la pompe et de deux réservoirs


Résolvons maintenant ce problème - d'autant plus que tous les outils pour cela sont disponibles. Afin de ne pas trop traîner, j'ai écrit un programme, je l'ai divisé en plusieurs parties (les soi-disant réseaux ou chaînes de travail), et je vais montrer chacune d'elles ici et commenter.

Net 1 - première exécution du programme


Le registre D1000 stocke le temps nécessaire pour supprimer le rebond de contact. En fait, c'est déjà dans le programme - mais je veux le montrer plus clairement. Le registre D1001 est responsable du temps de protection de la pompe. Nous y écrivons 15 000 ou 1 500 secondes. Ensuite, nous avons une chaîne de réinitialisation de sauvegarde - en cas de problème, vous pouvez envoyer le signal 1 à l'entrée X14 et redémarrer la carte. Dans ce cas, 0 est écrit dans les registres D0 et D1, et les merckers M98 et M99 sont réinitialisés.

Net 2 - traitement du signal d'entrée


Ici, avec l'aide de minuteries, on se débarrasse du rebond des contacts. Pour ce faire, utilisez un délai de 200 millisecondes. Pour m'assurer que dans le futur programme lors du changement de l'adresse d'entrée du contact, il n'est pas nécessaire de réécrire un grand nombre de chaînes, j'utilise des merkers intermédiaires (par exemple, M102). Il convient également de noter que le marchand du système M8003 est utilisé ici - il s'allume après le premier cycle d'exécution du programme. Mais le M8002 Merker n'est actif qu'au premier cycle du programme, et cela peut et doit être utilisé pour définir les valeurs initiales.

Net 3 - remplissage du réservoir 1.


Le remplissage du réservoir 1 est totalement identique au remplissage du réservoir 2 à l'exception des adresses. Le dessin ne correspondait pas du tout - mais vous feriez mieux de le regarder juste en ouvrant le projet. Qu'est-ce qui est remarquable avec cette unité de contrôle? La présence de protections et de blocages qui permettent des mécanismes de démarrage et d'arrêt sans choc. Par exemple, après l'ouverture de la vanne 1, ce n'est qu'après 700 ms qu'une commande sera lancée pour démarrer le démarreur, qui allumera la pompe.

La gestion ici ne prévoit pas de mode manuel. De plus, une protection contre le fonctionnement à sec et une protection contre un fonctionnement trop long de la pompe sont mises en œuvre.

Net 5-6 - Gestion des sorties


Et ici, nous contrôlons les sorties conformément aux verrous.

Parmi les tâches, seule la connexion de l'intervalle de protection de 30 minutes avant le redémarrage est restée non satisfaite. Je dois dire tout de suite - dans cette version, seules les entrées X0-X3 et la sortie Y0-Y3 sont implémentées, ce qui est assez suffisant pour tester le matériel de cet article. La liaison est PA4-X0, PA5-X1, PA6-X2, PA7-X3 et PB4-Y0, PB5-Y1, PB6-Y2, PB7-Y3.

Vitesse du cycle de programme - Méthodes de mesure des droits acquis


Lorsque nous nous posons cette question, il nous vient immédiatement à l'esprit de le faire - écrire au contrôleur un très gros programme à partir d'un certain nombre d'éléments identiques, obtenir le temps d'exécution et obtenir le temps d'exécution d'une commande. Il est dit - fait, sous le programme spoiler et au nom du temps d'exécution du spoiler.

7995 pas - 2,6 millisecondes

Ici, chaque étape est une commande, et nous obtenons que 2,6 / 7995 = 0,325 microsecondes. Pas très rapide, mais pas mal.

FPU - être ou ne pas être?


Déterminons maintenant la rapidité avec laquelle les instructions à virgule flottante fonctionnent dans notre micrologiciel. Il existe deux firmwares, l'un utilisant le FPU intégré et l'autre avec l'émulation logicielle. Le programme ci-dessous:

Programme de calcul du temps d'exécution d'une instruction

Le firmware ci-dessous est sous le spoiler, et ils n'ont aucune restriction

Deux firmware

Lors de l'utilisation d'un FPU matériel, le temps d'exécution du programme est de 1,8 ms, ou 1,8 / 600 = 0,003 ms, ou 3 microsecondes.

Remplacez maintenant le firmware - utilisez l'émulation logicielle. Le résultat est déjà différent - 2,5 ms, ou 2,5 / 600 = 0,0041 ms, ou 4,1 microsecondes. Pas mal, mais la différence est assez notable.

Conclusion


Malgré le volume important de l'article, il reste encore beaucoup de matériaux qu'il serait bon de couvrir. Donc, si cet article vous intéresse, cet article sera suivi d'un autre. Mais je voudrais trouver des personnes partageant les mêmes idées qui veulent rejoindre le croisement de l'industrie et du domestique avec un seul but - afin que ces outils soient accessibles à un simple profane.

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


All Articles