Page 2 sur 2
Re: Declaration de variable STRUCT SoMachine
Posté : 11 mars 2016, 09:09
par Cyril93
je vois pas ou est le problème, par exemple en ST tu peux faire comme ça
Code : Tout sélectionner
IF ConditionCopieDeMesVariables THEN
ConditionCopieDeMesVariables:=FALSE;
StructurePID.rKp:=Autotune.rKp;
StructurePID.rTn:=Autotune.rTn;
etc...
etc...
END_IF;
Re: Declaration de variable STRUCT SoMachine
Posté : 11 mars 2016, 09:18
par Paul
Bonjour,
je pensais qu'il était possible de l'écrire comme dans l'exemple : StructurePID(rKp:=8,rTn:=152,rTv:=32,rTd=3,ect...)
En gros envoyer une chaine sans avoir à réécrire StructurePID 15 fois

Re: Declaration de variable STRUCT SoMachine
Posté : 11 mars 2016, 09:54
par Cyril93
Non on ne peux pas écrire comme ça directement.
Si tu dois faire cette copie de nombreuse fois dans le programme fait toi une fonction de copie.
Re: Declaration de variable STRUCT SoMachine
Posté : 11 mars 2016, 09:57
par Paul
Oui je doit faire 12 régulateur thermique donc je vais essayer une fonction copie.
Re: Declaration de variable STRUCT SoMachine
Posté : 11 mars 2016, 10:30
par Cyril93
Dans l'entête de la fonction :
Code : Tout sélectionner
FUNCTION TuneToPidParam : BOOL
VAR_INPUT
stcAutotune: PidAutotune; (* Ici la structure venant de l'autotune *)
END_VAR
VAR
END_VAR
VAR_IN_OUT
Copy: BOOL; (* la variable qui déclenche la copie *)
stcParam: Pidparam; (* ici la structure du bloc de régul *)
END_VAR
Le programme de la fonction:
Code : Tout sélectionner
IF Copy THEN
stcParam.rKp:=stcAutotune.rKp;
stcParam.rTn:=stcAutotune.rTn;
stcParam.rTd:=stcAutotune.rTd;
Copy:=FALSE;
END_IF
A adapter à ton besoin
J'ai remis à FALSE le déclenchement de la copie en interne de la fonction.
Re: Declaration de variable STRUCT SoMachine
Posté : 11 mars 2016, 11:05
par Paul
Ok c'est sympas je ne m'étais jamais servi de la Fonction copy
