FUNCTION "3rd test" : VOID
TITLE =VERSION : 0.1
VAR_INPUT
Timeout : INT ;
Alarm_DB : WORD ;
DB_Alarm_Range_Start : DWORD ;
END_VAR
VAR_IN_OUT
Fault_Timer : INT ;
Index_Value : INT ;
Index_History : INT ;
END_VAR
VAR_TEMP
Temp_DB_Original : WORD ;
Temp_DB_Alarm : WORD ;
Temp_TL_Index_No : DWORD ;
Temp_Alarm_Offset : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =
L #Alarm_DB; // DB for Alarm generation
T #Temp_DB_Alarm;
OPN DB [#Temp_DB_Alarm];
L #DB_Alarm_Range_Start;
SLD 3; //byte offset 40.0
T #Temp_Alarm_Offset; // Total Offset
LAR2
NETWORK
TITLE =
L #Index_Value;
L #Index_History;
==I ;
JC TOUT;
L L#0;
T #Fault_Timer;
T DBD[AR2, P#0.0];
T DBD[AR2, P#4.0];
T DBD[AR2, P#8.0];
T DBD[AR2, P#12.0];
T DBD[AR2, P#16.0];
NETWORK
TITLE =Generate Time//
TOUT: L #Fault_Timer;
L #Timeout;
>=I ;
JC ALM; // Increment the timer
L #Fault_Timer;
INC 1;
T #Fault_Timer;
JU NW5;
NETWORK
TITLE =Timeout time exceeded
ALM: L #Temp_Alarm_Offset;
L #Index_Value;
+D ;
T #Temp_Alarm_Offset; // Total Offset
SET;
S DBX [#Temp_Alarm_Offset]; // Write Alarm Bit
NETWORK
TITLE =Prepare ready for next call // Update History
NW5: L #Index_Value;
T #Index_History;
END_FUNCTION
With alarm clearing. Writen in haste, may be with bugs. Check it.