blocage sur somachine

Forum traitant des automates industriels de marque Schneider - Telemecanique
Répondre
nastyrott
Apprend le binaire
Apprend le binaire
Messages : 1
Enregistré le : 07 déc. 2015, 21:39

blocage sur somachine

Message 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.
Avatar du membre
lerieur
Forcené des structures
Forcené des structures
Messages : 153
Enregistré le : 27 nov. 2015, 22:04

Re: blocage sur somachine

Message 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.)
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 !
Avatar du membre
Ulairi
Expert de l'héxadécimal
Expert de l'héxadécimal
Messages : 366
Enregistré le : 20 oct. 2015, 06:22

Re: blocage sur somachine

Message 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 :lol:
Enseignant en BTS électrotechnique (Pas taper sur l'intru !)
Avatar du membre
Brebiou
Dieu du process
Dieu du process
Messages : 946
Enregistré le : 21 oct. 2015, 08:38

Re: blocage sur somachine

Message 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 8-)
jpratpsft
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 124
Enregistré le : 24 nov. 2015, 11:10
Localisation : Blagnac
Contact :

Re: blocage sur somachine

Message par jpratpsft »

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
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7167
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: blocage sur somachine

Message par itasoft »

slts,
il fat utiliser un bit quantique qui peut avoir les deux états en même temps.
LOL
Automaticien privé (de tout)
itasoft@free.fr
Pierre3188
Première mise en service
Première mise en service
Messages : 51
Enregistré le : 20 oct. 2015, 15:30
Localisation : Toulouse

Re: blocage sur somachine

Message par Pierre3188 »

Sinon suffit d'initialiser les variables juste avant l'instruction case
steph68
Codeur fou
Codeur fou
Messages : 269
Enregistré le : 21 oct. 2015, 08:23

Re: blocage sur somachine

Message par steph68 »

Hello,

Je rajoute une variante :mrgreen:

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 :twisted:
pour moi, c'est une erreur de conception de faire ce genre de programme

@+
Répondre