Negli S7-300 e S7-400 era presente in OB1 il tag OB1_PREV_CYCLE, mentre invece come sappiamo questo tag non è presente nei nuovi S7-1200 e S7-1500 se OB1 è impostato ad “accesso ottimizzato”.
Per avere l’informazione contenuta in quel tag possiamo procedere in due modi:
1)leggere il tempo del sistema in OB1 (in questo caso effettuo tutte le operazioni in una FB che richiamo in OB1) e sottrarlo al valore letto nel ciclo precedente.
2)Utilizzare un Timer e sottrarre al valore attuale del “elapsed time” il valore precedente.
Per il primo caso creo la seguente FB1:
dove come si può notare posso avere il tempo anche in nanosecondi; mentre nel secondo caso creo la seguente FB2:
Creo poi una FB con un ciclo while all’interno creato appositamente per aumentare il cycle time, ovvero:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | FUNCTION_BLOCK "Ciclo_WHILE" { S7_Optimized_Access := 'TRUE' } VERSION : 0.1 VAR intero1 : DInt; END_VAR BEGIN #intero1 := 0; WHILE #intero1<99999 DO #intero1 := #intero1 + 1; END_WHILE; END_FUNCTION_BLOCK |
Quindi chiamo nel main tutte e tre le FB:
e vado a testare nel simulatore: