FUNCTION_BLOCK FB 1
TITLE =Beispiel String
VERSION : 0.1
VAR_INPUT
schreiben : BOOL ; //String schreiben
reset : BOOL ; //String leeren
END_VAR
VAR_OUTPUT
Text : STRING [8 ];
END_VAR
VAR_TEMP
dTempAR1 : DWORD ; //Zwischenspeicher Adressregister 1
dTempAR2 : DWORD ; //Zwischenspeicher Adressregister 2
bTempLaenge_max : BYTE ; //Maximale Länge des Strings
bTempSchleife : BYTE ; //Schleifenzaehler
END_VAR
BEGIN
NETWORK
TITLE =Adressregister stellen
//Adressregister retten
TAR1 #dTempAR1;
TAR2 #dTempAR2;
//Adressregister auf den String stellen
TAR2 ; //Offset der Instanz laden
UD DW#16#FFFFFF; //Bereichskennung vom AR2 ausblenden
LAR1 P##Text;
+AR1 ;
NETWORK
TITLE =String Formatieren
//msximale Länge des Strings lesen
L B [AR1,P#0.0];
T #bTempLaenge_max;
//aktuelle Länge Schreiben
L 8;
T B [AR1,P#1.0];
NETWORK
TITLE =String schreiben
//prüfung schreiben ???
UN #schreiben;
SPB A001;
//"HANS" zusmmenhängend in den
//vorderen Teil schreiben
L 'HANS';
T D [AR1,P#2.0];
//"PAUL" einzelen in den hinteren
//Teil schreiben
L 'P';
T B [AR1,P#6.0];
L 'A';
T B [AR1,P#7.0];
L 'U';
T B [AR1,P#8.0];
L 'L';
T B [AR1,P#9.0];
A001: NOP 0;
NETWORK
TITLE =String löschen
//prüfung löschen ???
UN #reset;
SPB B002;
//Adressregister auf den ersten
//Buschstaben stellen
+AR1 P#2.0;
//Schleife initalisieren
L #bTempLaenge_max;
//Lösch-Schleife
B001: T #bTempSchleife;
//Buchstaben löschen
L '';
T B [AR1,P#0.0];
//Adressregister auf den nächsten
//Buchstaben stellen
+AR1 P#1.0;
L #bTempSchleife;
LOOP B001;
B002: NOP 0;
NETWORK
TITLE =Adressregister wieder herstellen
LAR1 #dTempAR1;
LAR2 #dTempAR2;
END_FUNCTION_BLOCK
DATA_BLOCK DB 1
TITLE =
VERSION : 0.0
FB 1
BEGIN
schreiben := FALSE;
reset := FALSE;
Text := '';
END_DATA_BLOCK
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
END_VAR
BEGIN
NETWORK
TITLE =
NETWORK
TITLE =
CALL FB 1 , DB 1 (
schreiben := E 0.1,
reset := E 0.0);
END_ORGANIZATION_BLOCK