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 :D

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 :D
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 :D