blocage sur somachine
blocage sur somachine
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.
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
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:
(mais là je ne sais plus si on peut mettre plusieurs instructions dans chaque cas du CASE.)
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:
Ou alors, à chaque fois que tu mets une variable à 1 tu passes toutes les autres à 0 dans 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;
(mais là je ne sais plus si on peut mettre plusieurs instructions dans chaque cas du CASE.)
La théorie, c’est quand on sait tout et que rien ne fonctionne. La pratique, c’est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne ... et personne ne sait pourquoi !
Re: blocage sur somachine
Bonsoir,nastyrott a écrit :X_Variateur_Vitesse_1 passe à true mais X_Variateur_Vitesse_0 ne passe pas à false, il reste sur true.
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
![Rire :lol:](./images/smilies/icon_lol.gif)
Enseignant en BTS électrotechnique (Pas taper sur l'intru !)
Re: blocage sur somachine
Si si, tu peux mettre beaucoup plus qu'une instruction dans un "cas de CASE", heureusement d'ailleurslerieur 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.)
![Cool 8-)](./images/smilies/icon_cool.gif)
-
- Générateur de blocs fonctions
- Messages : 124
- Enregistré le : 24 nov. 2015, 11:10
- Localisation : Blagnac
- Contact :
Re: blocage sur somachine
Il doit y avoir un système genre "begin...end" ou "()" pour indiquer qu'il y a plus d'une fonction.
--
Commissaire Bialès : Parlez-moi de vous plutôt…
Odile Deray : Odile. Moi, c'est Odile. Pluto, c'est l'ami de Mickey.
Commissaire Bialès : Ah non, Pluto c'est le chien de Mickey. L'ami de Mickey c'est Dingo.
La cité de la peur
Commissaire Bialès : Parlez-moi de vous plutôt…
Odile Deray : Odile. Moi, c'est Odile. Pluto, c'est l'ami de Mickey.
Commissaire Bialès : Ah non, Pluto c'est le chien de Mickey. L'ami de Mickey c'est Dingo.
La cité de la peur
- itasoft
- Mi homme - Mi automate
- Messages : 7167
- Enregistré le : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: blocage sur somachine
slts,
il fat utiliser un bit quantique qui peut avoir les deux états en même temps.
LOL
il fat utiliser un bit quantique qui peut avoir les deux états en même temps.
LOL
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
-
- Première mise en service
- Messages : 51
- Enregistré le : 20 oct. 2015, 15:30
- Localisation : Toulouse
Re: blocage sur somachine
Sinon suffit d'initialiser les variables juste avant l'instruction case
Re: blocage sur somachine
Hello,
Je rajoute une variante
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
@+
Je rajoute une variante
![M. Vert :mrgreen:](./images/smilies/icon_mrgreen.gif)
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;
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
![Diable rieur :twisted:](./images/smilies/icon_twisted.gif)
pour moi, c'est une erreur de conception de faire ce genre de programme
@+