Aide programme

Aide à la résolution d'exercices ou devoirs en automatisme industriel, electrotechnique, régulation, electronique.
happyjer
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 127
Inscription : 24 janv. 2016, 21:35

Aide programme

Message par happyjer »

Bonjour,
J'ai un programme qui fonctionne de la manière suivante:

A l'appuis sur start, j'active ma sortie Q0, je scan l'etat de mes 16 entrées si Q0 = I0 alors le test est bon et je passe au suivant si Q0=une des autres entrées ou aucunes entrées alors le test est faux.
Si le test est bon je test la suivante si Q1=I1 le test est bon est ainsi de suite.

En ladder cela me semble un peu lourd car beaucoup d'entrées/sortie a comparer a chaque fois.
Une idée sur comment programmer cela en st par exemple?

Merci.
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7035
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Aide programme

Message par itasoft »

slts,
Si ça veut dire que le test est BON si l'état des sorties correspond à l'état des entrées, suffit de faire une comparaison.
Exemple en PL7-PRO

(* Copie des entrées dans mot de 16 bits*)
%MW0:=%I1.0:16;

(* Copie des sorties dans mot de 16 bits*)
%MW1:=%Q2.0:16;

(*Test OK*)
%M1:=%MW0=%MW1;
Automaticien privé (de tout)
itasoft@free.fr
happyjer
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 127
Inscription : 24 janv. 2016, 21:35

Re: Aide programme

Message par happyjer »

Salut,
en fait il ne faut pas tous tester d'une seule traite, mais plutôt de manière séquencé.
Donc vérifié en premier que Q0 allume I0 et non pas une autre entrées ou aucune puis si c'est vrai vérifié que Q1 allume I1 et ainsi de suite, si un test est faux a un moment, je remonte une erreur et arrête la séquence.
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7035
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Aide programme

Message par itasoft »

slts,
OK, une des solutions serait d'appliquer un masque dans une boucle et si le compteur des bons arrive à 15 c'est que tout correspond.

un exemple:

(* Copie des entrées dans mot de 16 bits*)
%MW0:=%I1.0:16;

(* Copie des sorties dans mot de 16 bits*)
%MW1:=%Q2.0:16;

(*Initialisation du compteur nb bons *)
%MW4:=0;
(*Initialisation du masque *)
%MW5:=1;

REPEAT
%MW2:=%MW0 AND %MW5;
%MW3:=%MW1 AND %MW5;
(*Compteur Test bon *)
IF %MW2=%MW3 THEN INC %MW4;END_IF;
%MW5:=SHL(%MW5,1);
UNTIL %MW5<>0 END_REPEAT;
Automaticien privé (de tout)
itasoft@free.fr
Répondre