FUNCTION FC 1 : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
aktualisieren_Anfordern : BOOL ;
DB_Nr : INT ;
Anfang : INT ;
END_VAR
VAR_OUTPUT
Ausgabe_Byte : BYTE ;
END_VAR
VAR_IN_OUT
SPL_B : BYTE ;
Hilfsbyte : BYTE ;
END_VAR
VAR_TEMP
SPL_Byte : BYTE ;
Ausgabe : BYTE ;
DB_Nr_Speicher : WORD ;
Hilfsbyte_1 : BYTE ;
END_VAR
BEGIN
NETWORK
TITLE =
L #Hilfsbyte; //Lade Hilfsbyte
T #Hilfsbyte_1; //transfer nach Temp. Hilfsbyte
U #aktualisieren_Anfordern; //Anforderung zum aktualisieren
FP L 4.0; //positive Flanke zum Anstoss nutzt Hilfsbit 0 aus Hilfsbyte
SPBN aus; //Sprung nach aus wenn kein Bedarf
L #SPL_B; //Hilfsbyte aus In-Out
T #SPL_Byte; //nach Temporär kopieren
L #DB_Nr; //gewünschter DB in
T #DB_Nr_Speicher; //Temp. Speicher ablegen
AUF DB [#DB_Nr_Speicher]; //Öffnen des o.g. Datenbausteins
L #Anfang; //Anfangsadresse nach
LAR1 ; //Adressregister
next: L #SPL_Byte; //Lade die Nummer des Sprungziels in AKKU1-L-L.
SPL LSTX; //Sprungziel, wenn AKKU1-L-L > 3 ist.
SPA Bit0; //Sprungziel, wenn AKKU1-L-L = 0 ist.
SPA Bit1; //Sprungziel, wenn AKKU1-L-L = 1 ist.
SPA Bit2; //Sprungziel, wenn AKKU1-L-L = 2 ist.
SPA Bit3; //Sprungziel, wenn AKKU1-L-L = 3 ist.
SPA Bit4; //Sprungziel, wenn AKKU1-L-L = 4 ist.
SPA Bit5; //Sprungziel, wenn AKKU1-L-L = 5 ist.
SPA Bit6; //Sprungziel, wenn AKKU1-L-L = 6 ist.
SPA Bit7; //Sprungziel, wenn AKKU1-L-L = 7 ist.
LSTX: SPA COMM;
Bit0: U DBX [AR1,P#0.0]; //ausgelesenes bit Nr.0
= L 1.0; //zuweisen auf Temp.var. Ausgabe
L 1; //nächster Schritt
SPA COMM;
Bit1: U DBX [AR1,P#0.1]; //ausgelesenes bit Nr.1
= L 1.1; //zuweisen auf Temp.var. Ausgabe
L 2; //nächster Schritt
SPA COMM;
Bit2: U DBX [AR1,P#0.2]; //ausgelesenes bit Nr.2
= L 1.2; //zuweisen auf Temp.var. Ausgabe
L 3; //nächster Schritt
SPA COMM;
Bit3: U DBX [AR1,P#1.1]; //ausgelesenes bit Nr.3
= L 1.3; //zuweisen auf Temp.var. Ausgabe
L 4; //nächster Schritt
SPA COMM;
Bit4: U DBX [AR1,P#1.2]; //ausgelesenes bit Nr.4
= L 1.4; //zuweisen auf Temp.var. Ausgabe
L 5; //nächster Schritt
SPA COMM;
Bit5: U DBX [AR1,P#1.4]; //ausgelesenes bit Nr.5
= L 1.5; //zuweisen auf Temp.var. Ausgabe
L 6; //nächster Schritt
SPA COMM;
Bit6: U DBX [AR1,P#2.1]; //ausgelesenes bit Nr.6
= L 1.6; //zuweisen auf Temp.var. Ausgabe
L 7; //nächster Schritt
SPA COMM;
Bit7: U DBX [AR1,P#2.4]; //ausgelesenes bit Nr.7
= L 1.7; //zuweisen auf Temp.var. Ausgabe
L 0; //nächster Schritt
SPA COMM;
COMM: T #SPL_Byte;
L #SPL_Byte; //Temporär nach
T #SPL_B; //In-Out schnittstelle kopieren
L 0; //Vergleich mit ungleich 0
<>I ; //SPL ist noch nicht fertig
SPB next; //Sprungziel wenn noch nicht fertig
L #Ausgabe; //Lade Temp. Byte
T #Ausgabe_Byte; //Transfer nach Out (konsistent)
aus: NOP 0; //Sprungziel bei kein Bedarf
L #Hilfsbyte_1; //Hilfsbyte aus Temp.Speicher laden
T #Hilfsbyte; //Nach In-Out schreiben
END_FUNCTION