*
DATA_BLOCK DB 2
TITLE =
VERSION : 0.1
STRUCT
aFlag : ARRAY [0 .. 119 ] OF BOOL ;
END_STRUCT ;
BEGIN
END_DATA_BLOCK
FUNCTION FC 6 : INT
TITLE =
VERSION : 0.1
VAR_INPUT
iInDBNo : INT ;
iInFirstByte : INT ;
iNumberOfIns : INT ;
END_VAR
VAR_TEMP
iDbNo : INT ;
iLoopCounter : INT ;
iNumber : INT ;
dAR1Temp : DWORD ;
dAR2Temp : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =
TAR1 #dAR1Temp
TAR2 #dAR2Temp
L #iInDBNo;
T #iDbNo;
//Adressregister initialisieren
L #iInFirstByte;
SLD 3;
LAR1 ;
LAR2 P#0.0;
AUF DB [#iDbNo];
//Schleife vorbereiten
L #iNumberOfIns;
next: T #iLoopCounter;
//Eingang Abfragen
U E [AR1,P#0.0];
FP DBX [AR2,P#0.0];
SPBN nich;
//Nummer berechnen und ausgeben
L -1;
L #iLoopCounter;
*I ;
L #iNumberOfIns;
+I ;
T #iNumber;
//Adressregister erhöhen und solange Schleifenzähler > 0 zurück zu next
nich: +AR1 P#0.1;
+AR2 P#0.1;
L #iLoopCounter;
LOOP next;
LAR1 #dAR1Temp
LAR2 #dAR2Temp
L #iNumber;
T #RET_VAL;
END_FUNCTION
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
sTemp : STRING [11 ];
END_VAR
BEGIN
NETWORK
TITLE =
CALL FC 6 (
iInDBNo := 2,
iInFirstByte := 0,
iNumberOfIns := 120,
RET_VAL := MW 10);
NOP 0;
END_ORGANIZATION_BLOCK