E’ molto utile poter utilizzare le funzioni R_Trig e F_Trig. Tali funzioni sono però disponibili solo per S7-1200 e S7-1500 e non per S7-300 e S7-400 (in SCL).
Per ovviare a questo problema, si possono creare le seguenti FB (ovviamente creo delle Function Block perchè posso avere più istanze di queste funzioni):
R_Trig (Positive signal edge):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | FUNCTION_BLOCK "R_Trig1" { S7_Optimized_Access := 'FALSE' } VERSION : 0.1 VAR_INPUT input : Bool; END_VAR VAR_OUTPUT out : Bool; END_VAR VAR input_old : Bool; END_VAR BEGIN IF #input AND NOT #input_old THEN #out := 1; ELSE #out := 0; END_IF; #input_old := #input; END_FUNCTION_BLOCK |
F_Trig (Negative signal edge):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | FUNCTION_BLOCK "F_Trig1" { S7_Optimized_Access := 'FALSE' } VERSION : 0.1 VAR_INPUT input : Bool; END_VAR VAR_OUTPUT out : Bool; END_VAR VAR input_old : Bool; END_VAR BEGIN IF NOT #input AND #input_old THEN #out := 1; ELSE #out := 0; END_IF; #input_old := #input; END_FUNCTION_BLOCK |