OB1_PREV_CYCLE (S7-1200 e S7-1500)

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:

FB1_final

dove come si può notare posso avere il tempo anche in nanosecondi; mentre nel secondo caso creo la seguente FB2:

FB2_final

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:

main_final

e vado a testare nel simulatore:

simulatore2

You may also like...


Warning: count(): Parameter must be an array or an object that implements Countable in /membri/fabioplc/wp-includes/class-wp-comment-query.php on line 399
Menu Title