VAR_INPUT
DATENBEREICH : ANY ; //Datenbereich der auf Änderungen überwacht werden soll
FLANKENMERKER : ANY ; //Flankenmerker für Überwachung Datenbereich
END_VAR
VAR_OUTPUT
POS_IMP : BOOL ; //pos. Flanke im Datenbereich gefunden
NEG_IMP : BOOL ; //neg. Flanke im Datenbereich gefunden
ENTRY : BOOL ; //statisch: mind. ein Eintrag ist im Datenbereich vorhanden
ERROR : INT ; //0-kein Fehler, 1-Typ 1 nicht Byte, 2-Typ 2 nicht Byte, 3-Bereiche verschieden groß
END_VAR
VAR_TEMP
AR1_TEMP : DWORD ;
TEMP_INT : WORD ;
TEMP_DINT : DWORD ;
LOOP : INT ;
END_VAR
BEGIN
NETWORK
TITLE =
//*** AR1 sichern
TAR1 #AR1_TEMP;
SET ;
SAVE ;
//*** Ergebnisse initialisieren
L B#16#0;
T #ERROR;
SET ;
R #POS_IMP;
R #NEG_IMP;
R #RET_VAL;
R #ENTRY;
//*** AR2 auf Datenbereich
L P##DATENBEREICH;
LAR2 ;
//*** AR1 auf Flankenmerker
L P##FLANKENMERKER;
LAR1 ;
//*** Prüfe, ob DATENBEREICH vom Typ=Byte
L W [AR2,P#0.0]; // Typ
L W#16#1002;
==I ;
L 1; // Fehler 1: DATENBEREICH nicht vom Typ Byte
SPBN ERR;
//*** Prüfe, ob FLANKENMERKER vom Typ=Byte
L W [AR1,P#0.0]; // Typ
L W#16#1002;
==I ;
L 2; // Fehler 2: FLANKENMERKER nicht vom Typ Byte
SPBN ERR;
//*** Prüfe, ob Datenbereiche gleich groß
L W [AR2,P#2.0]; // Anzahl Typ im DATENBEREICH
L W [AR1,P#2.0]; // Anzahl Typ im FLANKENMERKER
T #LOOP; // Schleifenzähler initialisieren
==I ;
L 3; // Fehler 3: Bereiche unterschiedlich groß
SPBN ERR;
//*** DB's öffnen und Adressregister auf Bereichszeiger
L W [AR2,P#4.0];
T #TEMP_INT;
AUF DB [#TEMP_INT];
L D [AR2,P#6.0];
LAR2 ; // DATENBEREICH
L W [AR1,P#4.0];
T #TEMP_INT;
AUF DI [#TEMP_INT];
L D [AR1,P#6.0];
LAR1 ; // FLANKENMERKER
//*** Schleife für was auch immer
L #LOOP;
LOOP: T #LOOP;
[COLOR=#0000ff] .=======================ooooooo
___ ,' \_________________________________________
/ /-/ dP / //////////// ''--..._
\___\-\ dP \ hier schreibst du \\\\\\\\\\\\ __..--'
`---------------------------------''''''''''''''[/COLOR]
+AR1 P#1.0; // Pointer erhöhen
+AR2 P#1.0; // Pointer erhöhen
L #LOOP;
LOOP LOOP;
//*** AR1-Register wiederherstellen
LAR1 #AR1_TEMP;
BEA ;
//*** Fehler
ERR: T #ERROR;
//*** AR1-Register wiederherstellen
LAR1 #AR1_TEMP;
BE ;
END_FUNCTION