Programmer l'application de contrôle dans le projet
Déclarer les variables globales
Déclarez d'abord les variables que vous souhaitez utiliser dans l'application. Pour ce faire, mettez sous Application une liste de variables globales :
Sélectionnez le
Applicationentrez et cliquez dans le menu contextuel. Modifier le nom par défautGVLàGlob_Varet cliquez Ajouter pour confirmer.Le
 Glob_Varl'objet est affiché ci-dessous
 Application. L'éditeur GVL s'ouvre à droite de l'arborescence des appareilsLorsque la vue textuelle s'ouvre, elle contient déjà les mots clés
VAR_GLOBALetEND_VAR. Pour notre exemple, cliquez sur
 bouton sur la barre latérale droite de l'éditeur pour activer la vue tabulaire.Une ligne vide apparaît. Le curseur se trouve dans Nom colonne.
Sélectionnez la commande dans le menu contextuel Insérer.
Un champ de saisie s'ouvre. En même temps, la ligne affiche automatiquement le portée
VAR_GLOBALet le Type de donnéesBOOLinscrit.Spécifiez
rTempActualdans le Nom champ.Double-cliquez dans le champ de la colonne Type de données.
Maintenant, le champ peut être modifié et le
 bouton s'affiche.Cliquez sur
 bouton, puis sélectionnez Assistant de saisie.Le dialogue aide à la saisie s'ouvre.
Choisissez le type de données
REALet cliquez sur le bouton d'accord.Entrez une valeur numérique dans la colonne initialisation un, par exemple
8.0.
Déclarez les variables suivantes de la même manière :
Nom  | Type de données  | Initialisation  | commenter  | 
|---|---|---|---|
  | 
  | 
  | Température réelle  | 
  | 
  | 
  | Régler la température  | 
  | 
  | 
  | État de la porte  | 
  | 
  | 
  | Temps de fonctionnement du compresseur après lequel un signal retentit  | 
  | 
  | 
  | Temps depuis l'ouverture de la porte après lequel un signal retentit  | 
  | 
  | 
  | Signal de commande  | 
  | 
  | 
  | Signal de commande  | 
  | 
  | 
  | Message d'état  | 
Créer le programme principal pour la régulation du refroidissement dans l'éditeur CFC
Vous allez maintenant décrire la fonction principale du programme d'application dans PLC_PRG POU, qui est créé par défaut. Le compresseur est activé et se refroidit lorsque la température réelle est supérieure à la température réglée plus une hystérésis. Le compresseur s'arrête lorsque la température réelle est inférieure à la température réglée moins l'hystérésis
Pour décrire cette fonctionnalité dans le langage d'implémentation CFC, procédez comme suit :
Double-cliquez
PLC_PRGdans l'arborescence des appareils.L'éditeur CFC s'ouvre dans le
PLC_PRGonglet. L'éditeur de déclarations apparaît au-dessus de la zone de l'éditeur graphique sous forme de texte ou de tableau. Boîte à outils la vue est sur le côté droit.Dans le Boîte à outils afficher, sélectionnez Entrée élément et faites-le glisser vers l'éditeur CFC situé sous
PLC_PRGonglet.L'entrée sans nom
???a été inséré.Dans l'éditeur CFC, cliquez sur
???à l'entrée, puis cliquez sur
 pour ouvrir l'assistant de saisie. Dans le Variables catégorie, sélectionnez rTempActualvariable ci-dessous . Voici comment référencer la variable globalerTempActualici.Le nom d'entrée est
Glob_Var.rTempActual.Comme à l'étape 3, créez une autre entrée avec le nom de la variable globale
Glob_Var.rTempSet.Créez une autre entrée, cliquez sur les trois points d'interrogation
???et remplacez-le par le nomrHysteresis.Comme il ne s'agit pas du nom d'une variable déjà connue, la boîte de dialogue apparaît déclarer une variable. Le nom est déjà inclus dans la boîte de dialogue.
Remplissez les champs de la boîte de dialogue déclarer une variable avec le Type de données
REALet le valeur d'initialisation1en dehors. Cliquez sur le bouton d'accord.La variable
rHysteresisapparaît dans l'éditeur de déclaration.Dans le Boîte à outils afficher, sélectionner Bloquer élément et faites-le glisser vers l'éditeur CFC situé sous PLC PRG onglet.
Le bloc apparaît dans l'éditeur CFC.
Remplacer
???AvecADD.Le bloc additionne toutes les entrées qui lui sont connectées.
Connectez l'entrée
Glob_Var.rTempSetavec le bloc de constructionADD. Pour ce faire, cliquez sur la broche de sortie de l'entrée et faites-la glisser vers la broche d'entrée supérieure du blocADD.Connectez l'entrée de la même manière
rHysteresisavec l'entrée inférieure du blocADD.Les deux entrées
rHysteresisetGlob_Var.rTempSetsont maintenant deADDajoutée.Si vous souhaitez déplacer un élément dans l'éditeur, cliquez sur un emplacement libre de l'élément ou sur le cadre pour que l'élément soit sélectionné (cadre rouge, ombré rouge). Maintenez le bouton de la souris enfoncé et faites glisser l'élément jusqu'à la position souhaitée.
Placez un autre bloc de construction à droite du bloc de construction
ADDau. Il devraitGlob_Var.rTempActualavec la sommeGlob_Var.rTempSet+rHysteresiscomparer. Donnez au bloc la fonctionGT(Plus grand que).la
GTbloc fonctionne comme suit :IF (oberer Eingang > unterer Eingang) THEN Ausgang := TRUE;Connectez l'entrée
Glob_Var.rTempActualavec l'entrée supérieure du blocGT.Connecter la sortie du bloc
ADDavec l'entrée inférieure du blocGT.Utilisez maintenant l'élément de bloc pour créer un bloc fonctionnel à droite du
GTPOU qui démarre et arrête le compresseur en fonction des conditions d'entrée (Set — Reset). Spécifiez le nomSRdans le???champ. Appuyez sur la touche Entrée pour fermer le champ de saisie ouvert au-dessus du POU (SR_0).Le dialogue déclarer une variable apparaît.
Déclarez la variable avec le nom
SR_0et le type de donnéesSR. Cliquez sur le bouton d'accord.Le bloc de construction
SRde la bibliothèqueStandardest instancié.SRsert à définir laTHENà la sortie du bloc GT. Les entréesSET1etRESETapparaître.Connectez la connexion de sortie sur le côté droit du bloc
GTavec l'entréeSET1du bloc de constructionSR_0.SRpeut être une variable booléenne deFALSEauTRUEet remettre à nouveau. Si la condition à l'entréeSET1est vrai, la variable booléenne est activéeTRUEensemble. Répond à la conditionRESETà , la variable est à nouveau réinitialisée. La variable booléenne (globale) est dans notre exempleGlob_Var.xCompressor.Insérer un élément sortir et affectez-lui la variable globale
Glob_Var.xCompressorà. Tracez une ligne de liaison entreGlob_Var.xCompressoret connexion de sortieQ1à partir deSR.
Maintenant, vous spécifiez la condition dans laquelle le compresseur doit s'éteindre à nouveau, c'est-à-dire RESETentrée du bloc SR TRUE-Signal reçu. Pour ce faire, formulez la condition inverse comme ci-dessus. Utilisez les blocs de construction pour cela SUB (Soustraire) et LT (Moins que).
En fin de compte, le plan CFC suivant est créé :

Création d'un bloc de programme pour la gestion des signaux dans l'éditeur de schéma à contacts
Vous implémentez maintenant la gestion des signaux pour la sirène d'alarme et pour l'allumage et l'extinction de la lampe dans un autre module de programme. Le langage d'implémentation Ladder Diagram (LAD) convient pour cela.
Traitez les signaux suivants, chacun dans son propre réseau :
Lorsque le compresseur fonctionne trop longtemps parce que la température est trop élevée, un signal sonore continu retentit.
Si la porte est ouverte trop longtemps, un signal temporisé attire l'attention.
Tant que la porte est ouverte, la lumière est allumée.
Dans l'arborescence des appareils, cliquez avec le bouton droit sur
Applicationobjet et ajoutez un objet POU de type Programme avec le Échelle (LD2) langage de mise en œuvre.Nommez le programme comme
Signals.Le
Signalsle programme est répertorié dans l'arborescence des appareils à côté dePLC_PRG. L'éditeur de diagrammes en échelle s'ouvre dans leSignalsonglet. L'éditeur de déclarations apparaît dans la partie supérieure, le Boîte à outils vue vers la droite. Le diagramme en échelle contient un réseau vide.Créez un programme sur le réseau pour qu'un signal sonore retentisse lorsque le compresseur fonctionne trop longtemps sans atteindre la température spécifiée. Pour ce faire, insérez
TONminuterie POU dans les prochaines étapes. Il commute un signal booléen enTRUEaprès une durée spécifiée.Dans le Boîte à outils afficher, faites glisser le Bloquer élément et déposez-le dans le réseau vide jusqu'à une position d'insertion disponible.
Le bloc est affiché sous la forme d'une boîte avec des entrées et des sorties.
Double-cliquez sur les trois points d'interrogation (
???) dans le bloc et cliquez sur le
 symbole dans l'éditeur de lignes.Le Assistant de saisie une boîte de dialogue s'ouvre.
Dans le Assistant de saisie boîte de dialogue, dans le Blocs fonctionnels standard catégorie, dans la Norme bibliothèque, sélectionnez
TONMinuteur et cliquez OK.Maintenant, dans l'éditeur de ligne du bloc, qui affiche le nom du bloc de fonction
TON, appuyez sur la touche Entrée.Le
TONLe POU est affiché avec ses entrées et ses sorties.Pour supprimer le
ENentrée et laENOsortie, sélectionnez le bloc et cliquez sur le FR/ENO → FR dans le menu contextuel.Maintenant, le bloc n'a plus que le
INetPTentrées et lesQetETsorties.Double-cliquez sur les trois points d'interrogation [? ? ?] directement au-dessus du bloc, entrez
TON_0comme nom de l'instance, puis appuyez sur la touche Entrée.Vous avez confirmé le nom de l'instance et la boîte de dialogue déclarer une variable s'ouvre.
Confirmez la boîte de dialogue avec d'accord.
Maintenant, inséré
TONLe POU est instancié avec le nomTON_0.Programmez le bloc pour qu'il soit activé dès que le compresseur démarre. Faites d'abord glisser le
Contactélément d'échelle provenant du Boîte à outils vue devant leINentrée du bloc. Double-cliquez sur les trois points d'interrogation et cliquez sur l'icône dans l'éditeur de lignes (
). Dans l'assistant de saisie, sélectionnez maintenant la variable globale déjà déclarée Compresseur et cliquez OK.Le nom de la variable
Glob_Var.xCompressorest affiché au-dessus du contact.Astuce
Lorsque vous commencez à taper un nom de variable à la position d'entrée, vous obtenez toujours automatiquement une liste de toutes les variables dont les noms commencent par les caractères que vous avez tapés et qui peuvent être utilisées à ce stade. Ce support est un défaut dans le CODESYS-Options de codage intelligentes.
Insérez le signal qui doit être activé. Pour ce faire, faites glisser Bobine à partir du Boîte à outils vue, Échelle catégorie, à la
Qsortie duTONbloquer. Spécifiez le nomGlob_Var.xSignalpour la bobine.Définissez la période à partir de l'activation du POU
TON_0jusqu'à ce que le signal retentisse. Cette définition s'effectue via la variableGlob_Var.timAlarmThreshold, que vous insérez à cette fin en entréePTdeTON_0. Pour ce faire, déplacez le pointeur de la souris vers l'extrémité gauche de la broche d'entréePT. Cliquez sur la zone à bords fins qui s'affiche maintenant à gauche de la broche de saisie et spécifiez le nom de la variableAppuyez sur la touche Entrée.
Le Déclarer automatiquement une boîte de dialogue s'ouvre.
Cliquez OK pour confirmer la boîte de dialogue.
La variable nouvellement déclarée est affichée dans la partie déclaration.
Cliquez avec le bouton droit
TONPOU et cliquez Supprimer les épingles non utilisées dans le menu contextuel.La sortie inutilisée
ETest retiré.Dans le deuxième réseau du KOP, vous programmez que le signal doit retentir cycliquement si la porte est ouverte trop longtemps.
Utilisez la souris pour faire glisser un Réseau élément du Boîte à outils vue vers le point d'insertion situé sous le Réseau 1.
Un réseau vide avec numéro 2 apparaît.
Comme dans le premier réseau, implémentez un
TONPOU pour une activation du signal contrôlée dans le temps. Cette fois, il est déclenché par la variable globaleGlob_Var.xDoorOpenà l'entréeIN. À l'entréePT, ajoutez la variable globaleGlob_Var.timDoorOpenThreshold.À partir du
Utilbibliothèque, ajoutez unBLINKPOU à la sortieQde laTONPOU sur ce réseau et instanciez-le avec le nomBlink_0.Le
BLINK_0POU synchronise le transfert du signalQet doncGlob_Var.xSignal.Tout d'abord, faites glisser deux Contactez éléments du Boîte à outils vue sur
OUTsortie du POU. Attribuer la variableTON_1.Qau contact directement après la sortieQet la variable globaleGlob_Var.xDoorOpenau deuxième contact.Ajouter un élément après les deux contacts Évier de cuisine et affectez-lui la variable globale
Glob_Var.xSignalà.Déclarer la variable locale
timSignalTime : TIME := T#1S;et ajouter cette variable aux entréesTIMELOWetTIMEHIGHun; le temps de cycle est donc de 1 seconde pour chaqueTRUEet 1 seconde pourFALSE.Cliquez avec le bouton droit
TONPOU et cliquez Supprimer les épingles non utilisées dans le menu contextuel.La sortie non utilisée
ETest supprimé.Dans le troisième réseau, programmez pour que la lampe s'allume tant que la porte est ouverte. Ajoutez un réseau supplémentaire et un contact. Attribuer la variable
GlobVar.xDoorOpenau contact.Le contact inséré mène directement à une bobine. Ajoutez une bobine à droite du contact et attribuez la variable globale
Glob_Var.xLampà la bobine.CODESYS traite successivement les réseaux d'un CONT. Pour vous assurer que seul le réseau 1 ou uniquement le réseau 2 est exécuté, ajoutez un saut vers le réseau 3 à la fin du réseau 1 :
When you hover the mouse pointer over the 3rd line in the top left-hand edge of the network, the information <insert jump here> is displayed. Double-click this position and enter DoorIsOpen: as the jump label in the line editor.
Sélectionnez le réseau 1. À partir du Boîte à outils vue, Schéma de l'échelle catégorie, faites glisser le Sauter élément à la position d'insertion marquée d'un triangle devant le
Glob_Var.xSignalbobine.L'élément de saut apparaît. La cible de saut est toujours incluse
???spécifié.Double-cliquez sur les trois points d'interrogation [? ? ?] et cliquez sur l'icône dans l'éditeur de ligne (
). Dans le Assistant de saisie boîte de dialogue, sélectionnez DoorIsOpenà partir des identificateurs d'étiquette possibles et cliquez sur OK pour confirmer.L'étiquette de saut vers le réseau 3 est implémentée.
Le programme LD ressemble maintenant à ceci :

Appel du programme « Signals » dans le programme principal
Dans notre exemple de programme, le programme principal PLC_PRG le programme Signals appel au traitement du signal.
Double-cliquez dans l'arborescence des appareils
PLC_PRG.Le programme
PLC_PRGs'ouvre dans le Bloc-notes.Dans le Boîte à outils afficher, faites glisser Bloquer élément destiné à l'éditeur de
PLC_PRG.Double-cliquez sur les trois points d'interrogation [? ? ?] et cliquez sur
 symbole dans l'éditeur de lignes. Dans le Assistant de saisie boîte de dialogue, dans le POU/Appels de programmes et de fonctions catégorie, sélectionnez Signalsprogramme et cliquez OK pour confirmer.
Création d'un bloc de programme ST pour une simulation
Étant donné que l'application de cet exemple de projet n'est pas liée à de vrais capteurs et actionneurs, vous écrivez maintenant un programme pour simuler la montée et la chute de la température. Vous pouvez ensuite l'utiliser pour surveiller le fonctionnement de la commande du réfrigérateur en mode en ligne.
Vous créez le programme de simulation en texte structuré.
Le programme augmente la température jusqu'au programme principal PLC_PRG détermine que la température réglée a été dépassée. Ensuite, le programme active le compresseur. Ensuite, le programme de simulation diminue la température jusqu'à ce que le programme principal désactive à nouveau le compresseur.
Dans l'arborescence des appareils, cliquez avec le bouton droit sur Demande objet et ajoutez un objet POU de type Programme avec le Texte structuré (ST) langage de mise en œuvre. Nommez le POU comme
Simulation.Implémentez le code suivant dans l'éditeur ST :
Partie déclaration :
PROGRAM Simulation VAR TON_1: TON; //The temperature is decreased on a time delay, when the comepressor has been activated P_Cooling: TIME:=T#500MS; xReduceTemp: BOOL; //Signal for dereasing the temperature TON_2: TON; //The temperature is increased on a time delay P_Environment: TIME:=T#2S; //Delay time when the door is closed P_EnvironmentDoorOpen: TIME:=T#1S; //Delay time when the door is open xRaiseTemp: BOOL; //Signal for increasing the temperature timTemp: TIME; //Delay time iCounter: INT; END_VARPartie mise en œuvre :
iCounter := iCounter + 1; // No function, just for demonstration purposes. // After the compressor has been activated due to TempActual being too high, the temperature decreases. // The temperature is decremented by 0.1°C per cycle after a delay of P_Cooling IF Glob_VAR.xCompressor THEN TON_1(IN:= Glob_Var.xCompressor, PT:= P_Cooling, Q=>xReduceTemp); IF xReduceTemp THEN Glob_Var.rTempActual := Glob_Var.rTempActual-0.1; TON_1(IN:=FALSE); END_IF END_IF //If the door is open, the warming occurs faster; SEL selects P_EnvironmentDoorOpen timTemp:=SEL(Glob_Var.xDoorOpen, P_Environment, P_EnvironmentDoorOpen); //If the compressor is not in operation, then the cooling chamber becomes warmer. //The temperature is incremented by 0.1°C per cycle after a delay of tTemp TON_2(IN:= TRUE, PT:= timTemp, Q=>xRaiseTemp); IF xRaiseTemp THEN Glob_Var.rTempActual := Glob_Var.rTempActual + 0.1; TON_2(IN:=FALSE); END_IF
Astuce
L'utilisation d'une visualisation est recommandée pour une commande et une surveillance pratiques de l'ensemble du programme de commande. Dans l'exemple de projet terminé pour ce didacticiel, qui est créé avec le CODESYS-Installation standard (répertoire Projekte) est fourni est un avec CODESYS Visualisation intégrée. Vous pouvez charger et démarrer ce projet sur le contrôleur pour le voir fonctionner avec la visualisation. Au démarrage, le Live_Visu a commencé par une représentation du réfrigérateur, qui reflète le fonctionnement du programme de simulation sans que vous ayez à saisir quoi que ce soit. Cependant, vous pouvez ouvrir et fermer la porte en cliquant sur l'interrupteur marche/arrêt, et vous pouvez également régler la présélection de la température à l'aide de l'aiguille sur la commande rotative. Nous n'entrerons pas dans la création de la visualisation dans ce tutoriel. Un tutoriel correspondant dans le cadre de l'aide CODESYS La visualisation est prévue.
Définir les programmes à exécuter dans la configuration de la tâche
La configuration de la tâche par défaut contient l'appel du programme principal PLC_PRG. Pour notre exemple de projet, vous devez encore appeler le programme Simulation Ajouter.
Dans l'arborescence des appareils, faites glisser l'entrée
Simulationavec la sourisMainTasksous le configuration des tâches.Le programme
Simulationest inséré dans la configuration de la tâche.Si vous souhaitez afficher la configuration de la tâche, double-cliquez sur l'entrée
MainTaskpour ouvrir le Bloc-notes.Dans le tableau de la partie inférieure de l'éditeur, vous pouvez voir les POU appelées par la tâche :
PLC_PRG(renseigné par défaut) etSimulation. Le type d'appel de la tâche est cyclique à des intervalles de 20 millisecondes. En mode connecté, la tâche traitera les deux blocs une fois par cycle.
Définition de "l'application active" pour la communication avec l'automate
Le nom de l'application Application est dans la fenêtre équipement indiqué en gras. Cela signifie que cette application a été définie comme "l'application active". La communication avec le contrôleur se réfère alors à cette application.
S'il n'y a qu'une seule application dans un projet, elle devient automatiquement l'application active. Si votre application n'est pas encore active, activez-la comme suit :
Clic-droit
Applicationet sélectionnez la commande dans le menu contextuel Définir l'application active.L'application Application sera dans la vue équipement maintenant affiché en gras.
Vérification du programme d'application pour les erreurs
Lors de la saisie du code, les instructions CODESYS Vous alerter immédiatement des erreurs de syntaxe avec des gribouillis rouges. Vous pouvez également voir les résultats de la vérification dans la fenêtre de message. Si nécessaire, ouvrez la fenêtre de message avec la commande . Les messages sont affectés à la catégorie de message précompilation affiché. Vous pouvez sélectionner un message et appuyer sur le bouton F4 sauter au code correspondant. D'autres vérifications du programme d'application sont effectuées lorsque l'application est chargée sur le contrôleur.
Vous ne pouvez charger une application sans erreur sur le contrôleur qu'ensuite.