Chenillard pour le séquencement des requêtes READ_VAR / WRITE_VAR
---------clic dessus pour zoom------------
-----------sans le bit horloge--------
c'est le IoScanning à la mano
[Ecostruxure Control Expert] [Tuto] Chenillard pour requêtes Read_Var
- itasoft
- Mi homme - Mi automate
- Messages : 7089
- Enregistré le : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
[Ecostruxure Control Expert] [Tuto] Chenillard pour requêtes Read_Var
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
Re: [Ecostruxure Control Expert] [Tuto] Chenillard pour requêtes Read_Var
Bonjour
pour lancer des requêtes de communication sur un même port il faut cadencer les envois. En effet une requête prend plusieurs cycles à l'automate pour la créer et faire l'envoi. Du coup si à chaque cycle automate on demande à lancer une requête la carte va très vite se retrouver saturée de demandes. On le voit par le voyant qui va progressivement augmenter la fréquence de clignotement.
C'est pour cela que l'on crée un chenillard qui envoie requête après requête. On attend la fin de l'envoi d'une requête pour demander une nouvelle. Pas tous en même temps c'est comme à la cantine en rang à la file un par un.
Et là on est pas mal.
pour lancer des requêtes de communication sur un même port il faut cadencer les envois. En effet une requête prend plusieurs cycles à l'automate pour la créer et faire l'envoi. Du coup si à chaque cycle automate on demande à lancer une requête la carte va très vite se retrouver saturée de demandes. On le voit par le voyant qui va progressivement augmenter la fréquence de clignotement.
C'est pour cela que l'on crée un chenillard qui envoie requête après requête. On attend la fin de l'envoi d'une requête pour demander une nouvelle. Pas tous en même temps c'est comme à la cantine en rang à la file un par un.
Et là on est pas mal.
- itasoft
- Mi homme - Mi automate
- Messages : 7089
- Enregistré le : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: [Ecostruxure Control Expert] [Tuto] Chenillard pour requêtes Read_Var
slts,
ça c'est vrai si on ne conditionne pas la requête avec le bit d'activité, not %MW40.0
Avec le test du bit d’activité la requête suivante ne se fait que si la précédente se termine (si la voie est libre)
ça c'est vrai si on ne conditionne pas la requête avec le bit d'activité, not %MW40.0
Avec le test du bit d’activité la requête suivante ne se fait que si la précédente se termine (si la voie est libre)
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
- Béryl
- Mi homme - Mi automate
- Messages : 1682
- Enregistré le : 20 oct. 2015, 12:00
- Localisation : localhost
Re: [Ecostruxure Control Expert] [Tuto] Chenillard pour requêtes Read_Var
Voici un extrait d'un DFB que j'ai codé pour communiquer avec des M172 sur des tours de refroidissement.
L'entrée "Valid" débloque une partie du code, "Taille_Registre" fixe le nombre de pas du chenillard. "Raz_req" remet les compteurs de requêtes à zéro.
"Write_Done" indique que la requête d'écriture (non présente dans cet exemple à part le mot de vie) s'est bien déroulée.
Le mot de vie est un INT qui tourne de 0 à 9.
Aucune horloge. Le chenillard se décale dès que la requête en cours est terminée.
Le code est plus complet que ça, c'est juste un extrait.
L'entrée "Valid" débloque une partie du code, "Taille_Registre" fixe le nombre de pas du chenillard. "Raz_req" remet les compteurs de requêtes à zéro.
"Write_Done" indique que la requête d'écriture (non présente dans cet exemple à part le mot de vie) s'est bien déroulée.
Le mot de vie est un INT qui tourne de 0 à 9.
Aucune horloge. Le chenillard se décale dès que la requête en cours est terminée.
Le code est plus complet que ça, c'est juste un extrait.
Code : Tout sélectionner
If Valid Then
(* Gestion de la communication *)
Tab_Gest[2] := Timeout_Req ;
If Not Tab_Gest[0].0 Then (* Si aucune requête n'est en cours *)
(* Gestion du registre des requêtes *)
Registre := SHL (IN := Registre, N := 1); (* Décallage du registre *)
If Registre = 0 Or INT_TO_REAL(Registre) >= 2.0 ** Taille_Registre Then Registre := 1; End_If;
Case Registre Of
1: READ_VAR (Adresse, '%MW', 9108, 2, Tab_Gest, Tab_ES); (* Lecture des 2 mots d'image des E/S *)
2: READ_VAR (Adresse, '%MW', 9110, 2, Tab_Gest, Tab_Def); (* Lecture des 2 mots d'image des défauts *)
4: READ_VAR (Adresse, '%MW', 9113, 15, Tab_Gest, Tab_Div); (* Lecture des 15 mots d'image de lecture *)
8: READ_VAR (Adresse, '%MW', 9130, 15, Tab_Gest, Tab_Etat); (* Lecture des 15 mots d'image d'états *)
16: READ_VAR (Adresse, '%MW', 9152, 1, Tab_Gest, Tab_Read_Vie); (* Lecture du mot de vie *)
32: WRITE_VAR (Adresse, '%MW', 9153, 1, Tab_Write_Vie, Tab_Gest); (* Ecriture du mot de vie *)
End_Case;
(* Compteurs des requêtes *)
If Not Raz_Req Then
INC_UDINT (Cpt_Req_Tot);
If Tab_Gest[1] = 0 Then
INC_UDINT (Cpt_Req_Ok);
Else
INC_UDINT (Cpt_Req_Nok);
End_If;
End_If;
End_If ;
(* Contrôle du mot de vie *)
T_Com (IN := Tab_Read_Vie[0] <> Tab_Write_Vie[0], PT := INT_TO_TIME(Timeout_Vie), Q => Defaut_Com);
If Tab_Read_Vie[0] = Tab_Write_Vie[0] Then
INC_INT (Tab_Write_Vie[0]);
If Tab_Write_Vie[0] >= 10 Then Tab_Write_Vie[0] := 0; End_If;
End_If;
Else
Defaut_com := Write_done := False;
End_If;
- itasoft
- Mi homme - Mi automate
- Messages : 7089
- Enregistré le : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: [Ecostruxure Control Expert] [Tuto] Chenillard pour requêtes Read_Var
slts,
c'est bien d'avoir pensé au mot de vie on a tendance à l'oublier , plus sur que le mot de vie tu meurs
c'est bien d'avoir pensé au mot de vie on a tendance à l'oublier , plus sur que le mot de vie tu meurs
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
Re: [Ecostruxure Control Expert] [Tuto] Chenillard pour requêtes Read_Var
Bonjour,
Personnellement, lors d'échange entre 2 équipements uniquement, j'ai une préférence pour le bit de vie: Le maitre le met à 0 et l'esclave le mets à 1. Ainsi les 2 équipements peuvent voire si l'autre est fonctionnel.
L'inconvénient: il faut autant de bit de vie que d'équipements et dans les systèmes à interconnexion complexe cela devient rapidement des usine à gaz.
Personnellement, lors d'échange entre 2 équipements uniquement, j'ai une préférence pour le bit de vie: Le maitre le met à 0 et l'esclave le mets à 1. Ainsi les 2 équipements peuvent voire si l'autre est fonctionnel.
L'inconvénient: il faut autant de bit de vie que d'équipements et dans les systèmes à interconnexion complexe cela devient rapidement des usine à gaz.