Convenzione: controllo scrittura variabile ingresso

Descrizione utente

Nella parte dichiarativa di un programma, blocco funzione, metodo o funzione, è possibile definire le variabili di ingresso. Quando si chiamano oggetti di questo tipo, occorre specificare i valori di ingresso. Quando si chiama un metodo o una funzione, i valori di ingresso vengono copiati nello stack. Tali valori (area di memoria) sono utilizzati solo dalla chiamata di funzione o metodo.

Rispetto ai programmi dove esiste esattamente un'istanza nella memoria (o blocchi funzione istanziati più volte memoria), i programmi o blocchi funzione possono essere chiamati più volte, da più task e si utilizza la stessa posizione di memoria per la variabile di ingresso (in parallelo).

Per la stabilità di esecuzione dell'applicazione, la variabile di ingresso deve essere scritta solo dal chiamante (dall'esterno) del programma o blocco funzione.

NOTA: Le variabili di categoria ingresso significano che i dati vengono trasferiti a quel costrutto, che sia programma, blocco funzione, metodo o funzione. I risultati della chiamata sono della categoria uscita. Le variabili di ingresso devono essere limitate a quelle passate al costrutto e le variabili di ingresso del costrutto non devono essere lette dall'esterno del costrutto né scritte dall'interno del costrutto.

Regola di verifica convenzione

Ogni accesso in scrittura a una variabile di ingresso dall'interno del blocco funzione è segnalato come violazione della convenzione.

Esempio

SR_Main
VAR
   fbTest: FB_Test;
   xTest: BOOL;
END_VAR

// call of FB method without calling FB (Body) before
fbTest(TRUE);

//potential violation reading outside the construct
xTest := fbTest.i_xEnable ;

FB_Test
VAR_INPUT
   i_xEnable: BOOL;
END_VAR

// potential violation. Now the input value has changed its value.
i_xEnable := FALSE;