Struct Literal

davidmic
2025-03-28
2025-04-07
  • davidmic - 2025-03-28

    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

    someFB.write(structArgument := MyStruct#(a := 1, b := 1.2), otherArgument := TRUE);
    

    With this struct declaration

    TYPE MyStruct :
    STRUCT
        a : INT;
        b : REAL;
    END_STRUCT
    END_TYPE
    
     
  • jampid

    jampid - 2025-04-07

    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!

     

Log in to post a comment.