Page 1 sur 2

ST* problème mémoire

Posté : 16 févr. 2016, 10:58
par happyjer
Bonjour, voici un bout de mon 1ér programme en ST
Je bidouille depuis un moment avec les M/MW qui ne "s'actualisent pas" je sais pas comment expliquer.
Je cherche des conseils ou méthode pour palier a ce genre de problème. Je sais que le problème viens aussi du fait qu'en st le programme lit lignes par lignes.
Ici par exemple MW4 ne passe jamais a un a cause de Mw1 et si je met Mw1:=0 alors mon mw1 restera toujours a 0 je me mord la queue en quelque sorte.

Code : Tout sélectionner

(*Demande de remplissage Sac*)
FM(CLK:=Demande_Remplissage,Q=>);
IF FM.Q AND Presence_Sac1 AND Presence_Sac2 AND Nv_PT=100 THEN
	MW1:=1;
END_IF;

(*Commande Moteur Ecluse*)			
IF MW1 THEN
	WCMD_VAR_ECLUSE:=15;//Sens Avant Ecluse
	LSP_VAR_ECLUSE:=50;//Vitesse en x0.1Hz
	MW3:=0;
	MW4:=0;
END_IF;

IF MW3 OR MW4 THEN
	MW1:=0;
LSP_VAR_ECLUSE:=0;//Arrêt moteur Ecluse
END_IF;
		
(*Arret Temporisé Ecluse pour Vidage*)
TPInst4(IN := Position_Ecluse, PT:= T#5S); 
MW115 :=TPInst4.Q;
FD(CLK:=MW115,Q=>);
IF MW115 THEN
	MW1:=0;
	MW3:=1;
	ELSIF FD.Q THEN
MW3:=0;
MW1:=1;
END_IF;

(*Petite Trémie vide*)
IF Nv_PT =0 AND NOT Position_Ecluse AND NOT MW1 THEN
	MW4:=1;
END_IF;

Re: ST* problème mémoire

Posté : 16 févr. 2016, 11:28
par Mantysse
Salut

Et si tu fais un truc du genre?

Code : Tout sélectionner

(*Commande Moteur Ecluse*)         
IF MW1=1 THEN
   WCMD_VAR_ECLUSE:=15;//Sens Avant Ecluse
   LSP_VAR_ECLUSE:=50;//Vitesse en x0.1Hz
   MW3:=0;
   MW4:=0;
END_IF;
A+

Re: ST* problème mémoire

Posté : 16 févr. 2016, 11:39
par happyjer
Non :( quand mon niveau arrive a zero MW4 passe bien a 1 mais MW1 reste a 1 donc le moteur ne s'arrête pas.

Re: ST* problème mémoire

Posté : 16 févr. 2016, 12:02
par Mantysse
Re,

C'est un exercice je t'ai juste donné une piste sur la synthaxe...
Mais il faut conditionner tes mots... ils peuvent avoir plusieurs valeurs 1, 2, 3, 4 etc... je trouve ça étrange que ça passe au compilateur d'ailleurs

Re: ST* problème mémoire

Posté : 16 févr. 2016, 12:07
par JC87
Mantysse a écrit :Re,

je trouve ça étrange que ça passe au compilateur d'ailleurs
Bonjour,

En effet ça m'interpelle aussi, un mot c'est une valeur numérique pas booléenne, si on écrit "if mw" on teste quelle valeur ? c'est sur quel automate ce code ?

JC

Re: ST* problème mémoire

Posté : 16 févr. 2016, 13:04
par happyjer
Oui un MW est une valeur numérique je me suis trompé a la place de prendre des M, mais j'avais également essayé cela mais ca ne marche pas. Ici dans ma liste des variables mes MW sont déclaré comme étant des BOOL, mais je vais modifier et retravailler avec des M booléens.
je code sur somachine avec un hmiscu8a5.

EDIT: Un screen peut être que ca aidera (je suis repassé avec des M)
http://www.noelshack.com/2016-07-1455624890-prg.jpg

Re: ST* problème mémoire

Posté : 16 févr. 2016, 14:07
par philou77
salut !
ton %M1 et remis à 1 dans le esle if de l'arrêt temporisé (ligne 70)
Donc au tour de cycle suivant ton LSP est remis à 50....

Re: ST* problème mémoire

Posté : 16 févr. 2016, 15:05
par happyjer
Effectivement mais si je l'enlève mon arrêt temporisé ne fonctionne plus comme il ce doit.

Re: ST* problème mémoire

Posté : 16 févr. 2016, 16:07
par Cyril93
Salut,

Tu peux utiliser une instruction CASE pour une séquence cela simplifie souvent,
sinon écrit tes équation sur ton pilotage variateur
par exemple

Code : Tout sélectionner


IF M1 AND M3=FALSE AND M4=FALSE THEN
	WCMD_VAR_ECLUSE:=15;//Sens Avant Ecluse
   	LSP_VAR_ECLUSE:=50;//Vitesse en x0.1Hz
ELSE 
 	WCMD_VAR_ECLUSE:=0;
   	LSP_VAR_ECLUSE:=0;
END_IF 	
  
Puis tu fait tes équations pour M1, M3 et M4

exemple :

Code : Tout sélectionner

(*Petite Trémie vide*)
IF Nv_PT =0 AND NOT Position_Ecluse AND NOT MW1 THEN (* je sais pas pourquoi tu conditionnes avec MW1 ? *)
   MW4:=1;
ELSE 
   MW4:=0;
END_IF;
Donc si MW4 est un bool :

Code : Tout sélectionner

(*Petite Trémie vide*)
MW4:= Nv_PT =0 AND NOT Position_Ecluse;

Re: ST* problème mémoire

Posté : 16 févr. 2016, 16:55
par happyjer
Bonjour Cyril93, en utilisant votre syntaxe mon programme semble mieux fonctionner. Je ne crie pas victoire de suite mais cela semble aller dans le bon sens. Je vais donc coder comme ça et voir si tous fonctionne car ceci n'entait qu'une infime partie du code. Merci encore a tous pour votre aide et au prochain debug! :D