Vai al contenuto

Definizione parametri in funzione e in blocco funzione

Home Forum Programmazione IEC 61131 (LogicLab) Definizione parametri in funzione e in blocco funzione

Stai visualizzando 3 post - dal 1 a 3 (di 3 totali)
  • Autore
    Post
  • #58965
    Rubox
    Partecipante

    Faccio una domanda da principiante, e mi scuso se la risposta sta scritta nel manuale di programmazione o di LogicLab ma non l’ho trovata.

    Blocco funzione: posso definire come variabili in ingresso e come variabili interne al blocco funzione qualsiasi tipo di dato, anche quelli definiti da me come struttura.

    Funzione: posso definire come variabili di ingresso e come variabili interne alla funzione solo i tipi di base.

    E’ corretto? Chiedo questo perché volevo scrivere una funzione che accettasse una mia struttura come variabile in ingresso ma LogicLab continua a dirmi che il tipo di dato non è valido. Se metto un REAL invece funziona tutto. La struttura che uso è rappresentativa di un numero complesso, quindi due real.

    #58973
    Sergio Bertana
    Amministratore del forum

    Nelle funzioni non viene allocata memoria, i parametri in ingresso, uscita e le variabili interne sono tipicamente appoggiati su registri e non su aree di memoria, quindi ci sono limitazioni sulla dimensione e sul riferimento agli stessi all’interno della funzione. Cito ad esempio l’impossibilità di utilizzare lo statement ADR riferito ad un parametro o variabile.

    Nei FB invece viene allocata memoria per l’appoggio dei parametri e delle variabili e questo permette  di utilizzare qualsiaso tipo di dato. Inoltre nei FB possono essere usati riferimenti a variabili globali di programma con la keyword EXTERN.

    Ma se vuoi defire come parametro in ingresso da una funzione parametri di tipo definito da te, puoi passare il parametro come riferimento e non come valore indicando come tipo l’indirizzo della tua variabile. Ecco la definizione della funzione.

    FUNCTION MyFun: BOOL
    VAR_INPUT
        In : @MYSTRUCT;
    END_VAR
    
        @In.V2:[email protected];
        MyFun:=TRUE;

    Ecco il programma dove viene eseguita.

    PROGRAM MyProgram
    VAR
        MyVar : MYSTRUCT;
        Res : BOOL;
    END_VAR
    
        MyVar.V1:=LREAL#10.0;
        Res:=MyFun(ADR(MyVar));
    #58974
    Rubox
    Partecipante

    … e Rubox dovrebbe ricordarsi che il Modo simulazione è molto utile, ma certe funzioni, come ad esempio SysVsnprintf non vengono eseguite e danno errore…

    Mi son collegato ad una CPU e funziona correttamente la funzione che avevo preparato e che manipola le stringhe.

Stai visualizzando 3 post - dal 1 a 3 (di 3 totali)
  • Devi essere connesso per rispondere a questo topic.