FUNCTION FC 103 : VOID
TITLE =
//Diese Funktion steuert in abhängigkeit der Eingänge "S" (setzen) und "R"
//(rücksetzen) ein Bit (Nr) im Any-Pointer (Bitfeld).
//
//- Zulässige Parameter für den Any-Pointer sind:
// BIT, BYTE, WORD u. DWORD
//- Folgende Fehler (Fehler) werden ausgewertet:
// Parametrierung, Nr größer Bitanzahl u. Nr kleiner 0
// Fehler wird im BIE-Bit signalisiert.
// Parametrierung Fehlerfrei BIE = TRUE
// " " " Fehler BIE = FALSE
AUTHOR : dalbi
VERSION : 1.0
VAR_INPUT
S : BOOL ; //Bit setzen
R : BOOL ; //Bit rücksetzen
NR : INT ; //Nummer
END_VAR
VAR_IN_OUT
ZEIGER : ANY ; //Zeiger Bitfeld
END_VAR
VAR_TEMP
tSaveAR1 : DWORD ; //Speicher Adressregister 1
tSaveAR2 : DWORD ; //Speicher Adressregister 2
tDBNr : WORD ; //Datenbausteinnummer
tLaenge : INT ;
END_VAR
BEGIN
NETWORK
TITLE =Prüfen
TAR1 #tSaveAR1; // Adressregister sichern
TAR2 #tSaveAR2;
L P##ZEIGER; // AR1 auf Bitfeld
LAR1 ;
L W [AR1,P#4.0]; // DB-Nummer
T #tDBNr;
L B [AR1,P#1.0]; // Datentyp
L B#16#1; // BIT
==I ;
SPB bit;
TAK ;
L B#16#2; // BYTE
==I ;
SPB byte;
TAK ;
L B#16#4; // WORD
==I ;
SPB word;
TAK ;
L B#16#6; // DWORD
==I ;
SPB dw;
SPA err; // Fehler, wenn kein Typ
bit: L 1; // BIT
SPA set;
byte: L 8; // BYTE
SPA set;
word: L 16; // WORD
SPA set;
dw: L 32; // DWORD
set: L W [AR1,P#2.0]; // Wiederholfaktor für Typ
*I ;
T #tLaenge; // Länge in Bit
L #NR;
L 1;
<I ;
SPB err;
L #NR;
L #tLaenge; // Wiederholfaktor für Typ
>I ;
SPB err;
NETWORK
TITLE =
AUF DB [#tDBNr]; // DB aufschlagen
L #NR;
L P#0.1;
-D ;
L D [AR1,P#6.0]; // AR1 auf Anfangsadresse
+D ;
LAR1 ;
NETWORK
TITLE =Logik
U #S;
S [AR1,P#0.0];
U #R;
R [AR1,P#0.0];
NETWORK
TITLE =Auswertung BIE-Bit
SET ; // IO
SPA io; // BIE-Bit auf 1 setzen
err: NOP 0; // Bei Fehler
CLR ; // BIE-Bit auf 0 setzen
io: SAVE ; // BIE-Bit sichern
LAR1 #tSaveAR1; // Adressregister 1 rückschreiben
LAR2 #tSaveAR2; // Adressregister 2 rückschreiben
END_FUNCTION