Bonjour Davidmic,
Il n'est pas possible d'associer une méthode à une fonction. Cela est possible sur les Blocs fonctions.
En utilisant ta DUT MyStruct, je créé une fonction avec en entrée un tableau de structure :**
FUNCTION F_F3 : REAL
VAR_IN_OUT // bien définir un type IN_OUT
IN_ptrINT: ARRAY[*] OF MyStruct; // la taille sera définie ultérieurement/
END_VAR
VAR
_di: DINT; // Index de parcours du tableau pour l'écriture dans les cases
ENDVAR ==============
//Programme F_F3:
FOR _di := LOWER_BOUND(IN_ptrINT,1) TO UPPER_BOUND(IN_ptrINT,1) DO
IN_ptrINT[_di].som:=IN_ptrINT[_di].a + IN_ptrINT[_di].b;
END_FOR
J'utilise ensuite cette fonction dans un POU Programme :
PROGRAM Test_F_Fx
VAR
_aiTAB9:ARRAY[0..3] OF MyStruct := [(a := 1, b := 1.2), (a := 2, b := 2.2), (a := 3, b := 3.3), (a := 4, b := 4.4)];
END_VAR
** ==========**
F_F3(IN_ptrINT:=_aiTAB9 );
Voilà l'idée pour avancer.
Une autre idée, est d'utiliser les pointeurs ou les références.
Bon développement!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi all
I want to pass a struct into a function without declaring the struct in a VAR/END_VAR. Is this possible? I think this would be called a struct literal
It would look something like this
With this struct declaration
Bonjour Davidmic,
Il n'est pas possible d'associer une méthode à une fonction. Cela est possible sur les Blocs fonctions.
En utilisant ta DUT MyStruct, je créé une fonction avec en entrée un tableau de structure :**
FUNCTION F_F3 : REAL
VAR_IN_OUT // bien définir un type IN_OUT
IN_ptrINT: ARRAY[*] OF MyStruct; // la taille sera définie ultérieurement/
END_VAR
VAR
_di: DINT; // Index de parcours du tableau pour l'écriture dans les cases
ENDVAR
==============
//Programme F_F3:
FOR _di := LOWER_BOUND(IN_ptrINT,1) TO UPPER_BOUND(IN_ptrINT,1) DO
IN_ptrINT[_di].som:=IN_ptrINT[_di].a + IN_ptrINT[_di].b;
END_FOR
J'utilise ensuite cette fonction dans un POU Programme :
PROGRAM Test_F_Fx
VAR
_aiTAB9:ARRAY[0..3] OF MyStruct := [(a := 1, b := 1.2), (a := 2, b := 2.2), (a := 3, b := 3.3), (a := 4, b := 4.4)];
END_VAR
** ==========**
F_F3(IN_ptrINT:=_aiTAB9 );
Voilà l'idée pour avancer.
Une autre idée, est d'utiliser les pointeurs ou les références.
Bon développement!