ORGANIZATION_BLOCK OB 1
TITLE = "Main Program Sweep (Cycle)"
VERSION : 0.1
VAR_TEMP
OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
OB1_PRIORITY : BYTE ; //Priority of OB Execution
OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)
OB1_RESERVED_1 : BYTE ; //Reserved for system
OB1_RESERVED_2 : BYTE ; //Reserved for system
OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds)
OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)
OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)
OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started
NULL : ANY ;
END_VAR
BEGIN
NETWORK
TITLE =set up null any pointer
LAR1 P##NULL;
L 0;
T B [AR1,P#0.0];
NETWORK
TITLE =example call
A I 0.0;
= L 30.0;
BLD 103;
CALL FC 2 (
bRequest := L 30.0,
pInterlock1 := #NULL,
pInterlock2 := I 0.1,
bQ := Q 0.0);
NOP 0;
END_ORGANIZATION_BLOCK
FUNCTION FC 2 : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
bRequest : BOOL ;
pInterlock1 : ANY ;
pInterlock2 : ANY ;
END_VAR
VAR_OUTPUT
bQ : BOOL ;
END_VAR
VAR_TEMP
Interlock1 : STRUCT
byFormat : BYTE ;
byType : BYTE ;
iQuantity : INT ;
iDBNumber : INT ;
dwAreaPointer : DWORD ;
bUsed : BOOL ;
bValue : BOOL ;
END_STRUCT ;
Interlock2 : STRUCT
byFormat : BYTE ;
byType : BYTE ;
iQuantity : INT ;
iDBNumber : INT ;
dwAreaPointer : DWORD ;
bUsed : BOOL ;
bValue : BOOL ;
END_STRUCT ;
END_VAR
BEGIN
NETWORK
TITLE =interlock 1
L P##pInterlock1;
LAR1 ;
L B [AR1,P#0.0];
T #Interlock1.byFormat;
L B [AR1,P#1.0];
T #Interlock1.byType;
L W [AR1,P#2.0];
T #Interlock1.iQuantity;
L W [AR1,P#4.0];
T #Interlock1.iDBNumber;
L D [AR1,P#6.0];
T #Interlock1.dwAreaPointer;
L #Interlock1.byFormat; //check for null any pointer
L B#16#10;
==I ;
= #Interlock1.bUsed; //if ok then interlock is used
A #Interlock1.bUsed;
JCN notu;
OPN DB [#Interlock1.iDBNumber];
LAR1 #Interlock1.dwAreaPointer;
A [AR1,P#0.0];
= #Interlock1.bValue; //current value of interlock
notu: NOP 0;
NETWORK
TITLE =interlock 2
L P##pInterlock2;
LAR1 ;
L B [AR1,P#0.0];
T #Interlock2.byFormat;
L B [AR1,P#1.0];
T #Interlock2.byType;
L W [AR1,P#2.0];
T #Interlock2.iQuantity;
L W [AR1,P#4.0];
T #Interlock2.iDBNumber;
L D [AR1,P#6.0];
T #Interlock2.dwAreaPointer;
L #Interlock2.byFormat; //check for null any pointer
L B#16#10;
==I ;
= #Interlock2.bUsed;
A #Interlock2.bUsed;
JCN not2;
OPN DB [#Interlock2.iDBNumber];
LAR1 #Interlock2.dwAreaPointer;
A [AR1,P#0.0];
= #Interlock2.bValue;
not2: NOP 0;
NETWORK
TITLE =simple ladder control
A #bRequest;
A( ;
O #Interlock1.bValue;
ON #Interlock1.bUsed;
) ;
A( ;
O #Interlock2.bValue;
ON #Interlock2.bUsed;
) ;
= #bQ;
END_FUNCTION