Page 1 sur 1
blocage sur somachine
Posté : 07 déc. 2015, 21:42
par nastyrott
Bonjour,
Je me permet de vous écrire pour avoir votre aide sur un bout de code qui me pose problème.
Je suis bloqué sur un bout de code sur somachine, voici un extrait:
CASE vitesse_variateur OF
0: X_Variateur_vitesse_0 := TRUE ;
1: X_Variateur_vitesse_1:= TRUE ;
2: X_Variateur_vitesse_2:= TRUE ;
3: X_Variateur_vitesse_3:= TRUE ;
4: X_Variateur_vitesse_4:= TRUE ;
5: X_Variateur_vitesse_5:= TRUE ;
ELSE
X_Variateur_vitesse _DEF := TRUE;
END_CASE;
Je m'explique, quand je lance mon programme, la valeur de vitesse variateur (en décimal) est de 0 donc la sortie X_Variateur_Vitesse_0 est à true puis je passe sur la valeur 1 donc X_Variateur_Vitesse_1 passe à true mais X_Variateur_Vitesse_0 ne passe pas à false, il reste sur true.
Je ne trouve pas mon erreur, pouvez vous m'aider s'il vous plait.
Merci pour votre aide.
cordialement.
Re: blocage sur somachine
Posté : 07 déc. 2015, 22:46
par lerieur
C'est normal que ta variable X_Variateur_vitesse_0 ne passe pas à FALSE car rien dans ton programme n'est prévu pour.
La non exécution d'une ligne d'une ligne du genre toto:=1 n'est pas égal à l'exécution de toto:=0.
Si tu veux que X_Variateur_vitesse_0 repasse à 0, il faut l'écrire.
Il y a deux solutions possibles.
Tu peux soit remettre toutes les variables X_Variateur_vitesse_z à 0 avant le CASE:
X_Variateur_vitesse_0 := FALSE;
X_Variateur_vitesse_1 := FALSE;
X_Variateur_vitesse_2 := FALSE;
X_Variateur_vitesse_3 := FALSE;
X_Variateur_vitesse_4 := FALSE;
X_Variateur_vitesse_5 := FALSE;
CASE vitesse_variateur OF
0: X_Variateur_vitesse_0 := TRUE ;
1: X_Variateur_vitesse_1:= TRUE ;
2: X_Variateur_vitesse_2:= TRUE ;
3: X_Variateur_vitesse_3:= TRUE ;
4: X_Variateur_vitesse_4:= TRUE ;
5: X_Variateur_vitesse_5:= TRUE ;
ELSE
X_Variateur_vitesse _DEF := TRUE;
END_CASE;
Ou alors, à chaque fois que tu mets une variable à 1 tu passes toutes les autres à 0 dans le CASE.
(mais là je ne sais plus si on peut mettre plusieurs instructions dans chaque cas du CASE.)
Re: blocage sur somachine
Posté : 07 déc. 2015, 22:50
par Ulairi
nastyrott a écrit :X_Variateur_Vitesse_1 passe à true mais X_Variateur_Vitesse_0 ne passe pas à false, il reste sur true.
Bonsoir,
Eh bien il n'y a aucune raison que ta variable passe de True à False si tu ne programmes nulle part ce changement de valeur ce cette variable.
Il est par exemple possible de programmer une RAZ des cinq variables X_Variateur_Vitesse_0 à X_Variateur_Vitesse_5 juste avant la fonction CASE
X_Variateur_vitesse_0 := FALSE ;
X_Variateur_vitesse_1 := FALSE ;
X_Variateur_vitesse_2 := FALSE ;
X_Variateur_vitesse_3 := FALSE ;
X_Variateur_vitesse_4 := FALSE ;
X_Variateur_vitesse_5 := FALSE ;
CASE ...
Edit : Grillé par Lerieur

Re: blocage sur somachine
Posté : 08 déc. 2015, 10:03
par Brebiou
lerieur a écrit :Ou alors, à chaque fois que tu mets une variable à 1 tu passes toutes les autres à 0 dans le CASE.
(mais là je ne sais plus si on peut mettre plusieurs instructions dans chaque cas du CASE.)
Si si, tu peux mettre beaucoup plus qu'une instruction dans un "cas de CASE", heureusement d'ailleurs

Re: blocage sur somachine
Posté : 08 déc. 2015, 10:37
par jpratpsft
Il doit y avoir un système genre "begin...end" ou "()" pour indiquer qu'il y a plus d'une fonction.
Re: blocage sur somachine
Posté : 08 déc. 2015, 11:10
par itasoft
slts,
il fat utiliser un bit quantique qui peut avoir les deux états en même temps.
LOL
Re: blocage sur somachine
Posté : 08 déc. 2015, 11:40
par Pierre3188
Sinon suffit d'initialiser les variables juste avant l'instruction case
Re: blocage sur somachine
Posté : 08 déc. 2015, 18:42
par steph68
Hello,
Je rajoute une variante
Code : Tout sélectionner
X_Variateur_vitesse_0 := vitesse_variateur = 0 ;
X_Variateur_vitesse_1 := vitesse_variateur = 1 ;
X_Variateur_vitesse_2 := vitesse_variateur = 2 ;
X_Variateur_vitesse_3 := vitesse_variateur = 3 ;
X_Variateur_vitesse_4 := vitesse_variateur = 4 ;
X_Variateur_vitesse_5 := vitesse_variateur = 5 ;
X_Variateur_DEF := vitesse_variateur < 0 OR vitesse_variateur > 5;
il doit bien y avoir aussi un bloc type MUX qui fait tout ça en une seule ligne ... (la flemme de consulter la doc de codesys)
tout ça pour dire que le ladder est plus adapté pour ce combinatoire (bcp plus lisible et debug plus facile).
après c'est mieux d'éviter d'écrire ce genre de code ... (en restant en valeur numérique de bout en bout)
l'étape suivante sera probablement un contrôle qu'il n'y ait qu'un seul booléen actif ... les bits changent pendant le voyage dans un câble, les relais restent collés ... on n'en finit plus
pour moi, c'est une erreur de conception de faire ce genre de programme
@+