=== FC 86: DatenOut [STL] === INTERFACE: Input: SSDB : Int // Datenlisten-DB SSDW : Int // Datenlisten-1.DW PARA : Word // Aufrufparameter (Auftrag / Anzahl Zusatzdaten) SEARCHDATEN : Pointer // Such-Daten-Schnittstelle Output: RE_VAL : Byte // Rückmeldung OUTDATEN : Pointer // OutDaten-Schnittstelle Position : Int // Daten stehen an angegebener Position in Datenbank InOut: Temp: Quelle : Any // Zeiger, wo Rein-Daten sind Ziel : Any // Zeiger, FIFO-Stelle Kopf : Byte // Datenliste-Kennnung (DA) Datensatzlaenge : Byte // Datensatzlänge in Word (01 - F0) F0=128 Listenlaenge : Int // Länge der Datenliste (maximale Anzahl der Datensätze) Stammdaten : Int // Stammdatenlänge in Word (1 - 9) IndDB : Word // Indizierter DB (nur bei Stammdaten = 1 erlaubt !!!) IndDB_Laenge : Int // Länge des indizierten DB in Einträge (nur bei Stammdaten = 1 erlaubt !!!) IndDaten_FC : Int // FC zum Wandeln der indizierte Daten (nur bei Stammdaten = 1 erlaubt !!!) Suchzeiger : Int // Speicherung des letzten Zugriffs / Suchzeiger Belegt14 : Int // reserviert von Sort-Datenliste AnzahlEintraege : Int // Anzahl der eingetragenen Datensätze (nicht bei ind.Zugriff!) Reserve18 : Int // Reserve Para1 : Byte // 1.Aufrufparameter Para2 : Byte // 2.Aufrufparameter DBDatenliste : Word // Datenlisten-DB OffsetDaten_1 : Int // Stammdaten beginnen ab hier SFC_RET_VAL : Int // Rückmeldung SFC-Aufruf SFC_DB_LENGTH : Word // Rückmeldung SFC-Aufruf Datenlisten_Ende : Int // Ende der Datenliste AR2_Speicher : DWord // Adress-Register 2 zwischenspeichern Schleife : Word // Loopzähler DBSuchDaten : Word // Such-Daten-DB, falls angegeben SuchDaten_Pointer : DWord // Such-Daten-Pointer: Kennung, Adresse SuchDaten_Startpunkt : Word // Such-Daten-Startpunkt: Adresse DBOutDaten : Word // Out-Daten-DB, falls angegeben OutDaten_Pointer : DWord // Out-Daten-Pointer: Kennung, Adresse OutDaten_Startpunkt : Word // Out-Daten-Startpunkt: Adresse IndPointer : DWord // Zeiger für IndDB Daten_1 : Word // 1.Datenwort der Indaten Daten_2 : DWord // 1+2.Datenwort der Indaten (falls ind.Suchen mit Stammdaten 2) Datenblock_inBytes : Word // Datenblocklänge in Bytes Suchstelle : Word // Bei angegebenen Datensatz suchen SFC_WRITE_PROT : Bool // Rückmeldung SFC-Aufruf Indok : Bool // Indizierung möglich IndZeiger_ok : Bool // Indizier-Zeiger angegeben Weitersuchen : Bool // Weitersuchen ist aktiv Offsetsuchen : Bool // Offsetsuchen ist aktiv Sortliste : Bool // Sortliste wird durchsucht WandelFC : Bool // Wnadel-FC für ind.Suchen vorhanden tRE_VAL : Byte // Rückmeldung AR1Zeiger : DWord // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes) DB_Länge : Int NichtCopy : Int // Datenmenge, die nicht vorschoben wird LoeschPos : Word // Lösch-Position Wandel_FC : Word // Wandel-FC Constant: Return: Ret_Val : Void --- NW 1: Schnittstellen-DB sinnvoll ? --- TAR2 T AR2_Speicher // AR2 zwischenspeichern L SSDB T DBDatenliste CALL FC "TEST_DB_TO_ATTR_DB" (DB_Number:=DBDatenliste, RetVal:=SFC_RET_VAL, DB_Length:=SFC_DB_LENGTH, Write_Prot:=SFC_WRITE_PROT) CALL FC "BCD (4stellig)_to_INT" (BCD_Wert:=SFC_DB_LENGTH, Int_Wert:="DB_Länge") L SFC_RET_VAL L 2#0000_0000_0000_0000 <>I O SFC_WRITE_PROT // schreibgeschützt JC Err0 // kein Datenlisten-Bereich --- NW 2: Quelle-Pointer erzeugen: --- L 16#1004 // Kennung 10 + Word=04 T LW0 // Any-Kennung, Datentyp L 16#000A // 10 Dw´s holen T LW2 // Wiederholungen L SSDB T LW4 // DB_Nummer L SSDW // Adresse SLD 3 L 16#8400_0000 // Kennung: Daten OD T LD6 // Kennung, Adresse CALL SYS "BLKMOV" (SRCBLK:=Quelle, RET_VAL:=SFC_RET_VAL, DSTBLK:=P#L20.0 WORD 10) // 1.-10.DW Datenliste holen L SFC_RET_VAL L 2#0000_0000_0000_0000 <>I JC Err1 --- NW 3: Zeigerüberprüfung --- L Kopf // Datenliste-Kopf L 16#DB // = Sort-Datenlistekennung ? ==I // Ja ! = Sortliste // Sortliste wird durchsucht JC w030 CAC L 16#DA // = Datenlistekennung ? <>I // Nein ! JC Err0 // kein Datenlistebereich w030: L 1 L Datensatzlaenge // Datenblocklänge >I JC Err0 // kein Datenlistebereich L 128 >I JC Err0 // kein Datenlistebereich L 1 L Listenlaenge // Max.Anzahl von Datenblöcken >I JC Err0 // kein Datenlistebereich L 1 L Stammdaten // Anzahl der Stammdaten >I JC Err0 // kein Datenlistebereich L 9 >I JC Err0 // kein Datenlistebereich L Stammdaten // Anzahl der Stammdaten L Datensatzlaenge // Datenblocklänge >I JC Err0 // kein Datenlistebereich L Listenlaenge // Länge der Datenliste L Datensatzlaenge // Datenblocklänge *I L 2 // DB byteorientiert *I + 20 // Speichern ab 10.DW L SSDW +I T Datenlisten_Ende ITD SLD 3 T AR1Zeiger // /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes) OPN DB[DBDatenliste] L Datenlisten_Ende L "DB_Länge" >I // Datenlisten-DB ist zu kurz! JC Err0 // kein Datenlisten-Bereich L DBW [AR1Zeiger] L 16#DAEE // Datenliste-Endekennung ? <>I // Nein ! A( CAC L 16#DBEE // Sort-Datenliste-Endekennung ? <>I // Nein ! ) JC Err0 // kein Datenlisten-Bereich L Datensatzlaenge // Datenblocklänge L 2 *I T Datenblock_inBytes // Datenblocklänge in Bytes --- NW 4: Auftrag kontrollieren --- SET R Indok // Indizierung möglich R IndZeiger_ok // Indizier-Zeiger angegeben R Weitersuchen // Weitersuchen ist aktiv R Offsetsuchen // Offsetsuchen ist aktiv L 0 // Vorerst kein Offset T OffsetDaten_1 L PARA T LW40 // Aufrufparameter zwischenspeichern L 16#00 // XX = 00 ? L Para1 ==I // Ja! JC W401 L 16#E1 // XX = E1 ? ==I // Ja! A Sortliste // Sortliste wird durchsucht JC Err3 // Falscher Aufrufparameter (austragen nicht erlaubt !) CAC L 16#E1 // XX = E1 ? ==I // Ja! JC W401 L 16#F1 // XX = F1 ? L Para1 <>I // Nein ! JC W400 L Para2 L 16#00 <>I O Sortliste // Sortliste wird durchsucht JC Err3 // Falscher Aufrufparameter SET S Weitersuchen L SSDW + 20 T Suchzeiger JU Nw08 // OutDaten ok ? W400: L 16#FF // XX = FF ? <>I // Nein ! JC W403 L Para2 L 16#00 <>I O Sortliste // Sortliste wird durchsucht JC Err3 // Falscher Aufrufparameter SET S Weitersuchen L Suchzeiger // Alter Suchzeiger L Datenblock_inBytes // Datenblocklänge in bytes +I // Nächsten Datensatz suchen T Suchzeiger // Neuer Suchzeiger L Datenblock_inBytes // Datenblocklänge in bytes L Listenlaenge // Alle möglichen Einträge *I // Gesamtlänge L SSDW // Startpunkt +I + 20 // Offset 1.Daten L Suchzeiger // Schreibzeiger >I // Noch nicht am Ende ! JC Nw08 // OutDaten ok ? JU Err2 // Listenende erreicht W403: L 16#02 // XX < 02 ? L Para1 >I // Ja! JC Err3 // Falscher Aufrufparameter L 16#80 // XX > 80 ? >I // Ja! JC Err3 // Falscher Aufrufparameter CAC L Datensatzlaenge // XX > Datensatzlänge >I // Ja! JC Err3 // Falscher Aufrufparameter CAC + -1 // Angegebener Offset -1 L 2 // DB byteorientiert *I T OffsetDaten_1 // Richtiger Offset der 1.Stammdaten L 0 T Suchzeiger // Suche ab Anfang SET S Offsetsuchen W401: L 16#00 // =0 ? L Para2 // 2.Aufrufparameter ==I // Ja ! JC W402 T Stammdaten // Anzahl der Stammdaten L Datensatzlaenge // Datenblocklänge >I JC Err3 // Falscher Aufrufparameter L 1 L Stammdaten // Anzahl der Stammdaten >I JC Err3 // Falscher Aufrufparameter L 9 >I JC Err3 // Falscher Aufrufparameter W402: AN Offsetsuchen JC Nw05 L Para1 // Offset + -1 L Stammdaten +I // Letzte Stammdaten zu groß ? L Datensatzlaenge >I // Ja! JC Err3 // Falscher Aufrufparameter --- NW 5: Such-DATEN-Pointer übernehmen: --- Nw05: L 0 T Suchzeiger // Suchzeiger L P# LAR2 L NoneW [AR2,] T DBSuchDaten // Suchdaten-DB L NoneD [AR2,] // Kennung, Adresse T SuchDaten_Pointer L DBSuchDaten // Suchdaten-DB L 0 // Angegeben ? ==I // Nein JC W501 CALL FC "TEST_DB_TO_ATTR_DB" (DB_Number:=DBSuchDaten, RetVal:=SFC_RET_VAL, DB_Length:=SFC_DB_LENGTH, Write_Prot:=SFC_WRITE_PROT) CALL FC "BCD (4stellig)_to_INT" (BCD_Wert:=SFC_DB_LENGTH, Int_Wert:="DB_Länge") L SFC_RET_VAL L 2#0000_0000_0000_0000 // Fehler vorhanden ? <>I // Ja ! JC Err4 // Undefinierte Stammdaten L NoneD [AR2,] // Kennung, Adresse L 16#00FF_FFFF // Ohne Kennung AW SRW 3 // Ohne Bit T SuchDaten_Startpunkt L Datensatzlaenge // Datenblocklänge L 2 // DB byteorientiert *I L SuchDaten_Startpunkt +I L "DB_Länge" >I // Suchdaten-DB ist zu kurz JC Err4 // Undefinierte Stammdaten W501: L SuchDaten_Pointer LAR2 L DBSuchDaten // Suchdaten-DB L 0 // Angegeben ? ==I // Nein JC W502 OPN DB[DBSuchDaten] W502: L NoneW [AR2,] // Suchdaten überprüfen T Daten_1 // 1.Suchdaten speichern L NoneD [AR2,] // Suchdaten überprüfen T Daten_2 // 1.Suchdaten speichern L Stammdaten L500: T Schleife L DBSuchDaten // Suchdaten-DB L 0 // Angegeben ? ==I // Nein JC W503 OPN DB[DBSuchDaten] W503: L NoneW [AR2,] // Suchdaten überprüfen L 0 // Etwas angegeben ? <>I // Ja ! JC Nw06 // Weiter ADDAR2 P#2.0 L Schleife LOOP L500 JU Err4 // Undefinierte Stammdaten --- NW 6: Indiziert suchen ? --- Nw06: L IndDB // Indizierter DB L 0 // =0 ? ==I // Kein indizierter DB ! O Offsetsuchen O Sortliste // Sortliste wird durchsucht JC Nw07 CALL FC "TEST_DB_TO_ATTR_DB" (DB_Number:=IndDB, RetVal:=SFC_RET_VAL, DB_Length:=SFC_DB_LENGTH, Write_Prot:=SFC_WRITE_PROT) CALL FC "BCD (4stellig)_to_INT" (BCD_Wert:=SFC_DB_LENGTH, Int_Wert:="DB_Länge") L SFC_RET_VAL L 2#0000_0000_0000_0000 <>I O SFC_WRITE_PROT JC Nw07 // kein Indizier-DB vorhanden L IndDB_Laenge // Länge des Indizierten DB überschritten ? L DINT#2 // DB byteorientiert *D L "DB_Länge" >I // Indizier-DB ist zu kurz JC Nw07 // Zeiger ausserhalb Ind.DB L Stammdaten // Stammdaten L 3 // zu viele Stammdaten ? >=I // Ja ! JC Nw07 // ohne Indizierung weiter L IndDaten_FC // Offset zum Abziehen T Wandel_FC L 0 // Parameter vorhanden ? <=I // Nein JC NoFC // Bei diesem Schritt weiter L Daten_1 // Stammdaten (1.DW) T "MW90" // übergeben L Daten_2 // Stammdaten (2.DW) T "MD94" // übergeben UC DB[Wandel_FC] // Beeinflussung der Weiterfahrt L "MW92" // Rückwert von FC JU Ret NoFC: L Daten_1 // Stammdaten Ret: T IndPointer // Stelle, wo Zeiger hinterlegt ist L 0 I // Suchzeiger nicht im Raster ! JC W700 // Suche bei 1.Datensatz beginnen L 0 // Bei angegebener Stelle suchen T Suchstelle // Such bei X-ten Datensatz JU W701 W700: L 1 // Suche bei 1.Datensatz beginnen T Suchstelle // Such bei X-ten Datensatz SET R IndZeiger_ok // Indizier-Zeiger angegeben L SSDW + 20 // Offset für 1.Daten T Suchzeiger // Suchzeiger W701: L Suchzeiger // Suchzeiger L OffsetDaten_1 // Richtiger Offset der 1.Stammdaten +I ITD SLD 3 T AR1Zeiger // /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes) L SuchDaten_Pointer LAR2 L Stammdaten // Anzahl der Stammdaten L700: T Schleife L DBSuchDaten // Suchdaten-DB L 0 // Angegeben ? ==I // Nein JC W702 OPN DB[DBSuchDaten] W702: L NoneW [AR2,] // Suchdaten überprüfen mit OPN DB[DBDatenliste] L DBW [AR1Zeiger] // Datenliste-Daten lesen <>I // nicht identisch ! JC W703 L AR1Zeiger SRD 3 L DINT#2 +D SLD 3 T AR1Zeiger ADDAR2 P#2.0 L Schleife LOOP L700 L 2#0000_0000_1000_0000 // Daten sind vorhanden T tRE_VAL // Ok-Status JU Nw08 // Datensatz ist in Liste enthalten W703: L 0 // Suche bei 1.Datensatz begonnen L Suchstelle // Such bei X-ten Datensatz ==I // Nein ! JC W700 L Suchstelle // Such bei X-ten Datensatz + 1 T Suchstelle // Such bei X-ten Datensatz L Listenlaenge // Anzahl aller Daten in Datenliste <=I // Alle Datensätze sind durchsucht JC W705 // Nein ! JU Err6 // Datensatz ist nicht vorhanden W705: L Datenblock_inBytes // Datenblocklänge in bytes L Suchzeiger // Suchzeiger +I T Suchzeiger // Suchzeiger JU W701 --- NW 8: Out-DATEN-Pointer übernehmen: --- Nw08: L P# LAR2 L NoneW [AR2,] T DBOutDaten // Outdaten-DB L NoneD [AR2,] // Kennung, Adresse T OutDaten_Pointer L DBOutDaten // Outdaten-DB L 0 // Angegeben ? ==I // Nein JC Nw09 CALL FC "TEST_DB_TO_ATTR_DB" (DB_Number:=DBOutDaten, RetVal:=SFC_RET_VAL, DB_Length:=SFC_DB_LENGTH, Write_Prot:=SFC_WRITE_PROT) CALL FC "BCD (4stellig)_to_INT" (BCD_Wert:=SFC_DB_LENGTH, Int_Wert:="DB_Länge") L SFC_RET_VAL L 2#0000_0000_0000_0000 // Fehler vorhanden ? <>I // Ja ! JC Err5 // Undefinierte Outdaten L NoneD [AR2,] // Kennung, Adresse L 16#00FF_FFFF // Ohne Kennung AW SRW 3 // Ohne Bit T OutDaten_Startpunkt L OutDaten_Startpunkt L "DB_Länge" >I // Outdaten-DB ist zu kurz JC Err5 // Undefinierte Outdaten --- NW 9: Quelle-Pointer erzeugen: --- Nw09: L 16#1004 // Kennung 10 + Word=04 T LW0 T LW10 // Any-Kennung, Datentyp L Datensatzlaenge // Datenwords speichern T LW2 T LW12 // Wiederholungen // DATEN-Pointer übernehmen: L SSDB T LW4 // DB_Nummer L Suchzeiger // Adresse SLD 3 L 16#8400_0000 // Kennung: Daten OD T LD6 // Kennung, Adresse // Ziel-Pointer erzeugen: // Kennung + Datenbytes s.o. L DBOutDaten T LW14 // DB_Nummer L OutDaten_Pointer T LD16 // Kennung, Adresse CALL SYS "BLKMOV" (SRCBLK:=Quelle, RET_VAL:=SFC_RET_VAL, DSTBLK:=Ziel) // Datenliste-Daten speichern L SFC_RET_VAL L 2#0000_0000_0000_0000 <>I JC Err1 A SFC_WRITE_PROT // Datenliste kann nicht beschrieben werden JC Nw10 L SSDW + 12 // Offset letzter Zugriff ITD SLD 3 // Pointer erzeugen T AR1Zeiger // /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes) L Suchzeiger // Suchzeiger OPN DB[DBDatenliste] T DBW [AR1Zeiger] // Speicherung letzter Zugriff L Suchstelle // Such bei X-ten Datensatz T Position // Übergabe nach außen --- NW 10: Daten aus Datenliste löschen ? (nicht indiziert!) --- Nw10: L 16#E1 // Daten löschen ? L Para1 // 1.Aufrufparameter <>I // Nein ! O SFC_WRITE_PROT // Datenliste kann nicht beschrieben werden JC Nw11 A Indok // Indizierung möglich JC X010 // Bei ind.Zugriff nur löschen, nicht verschieben, keine Anzahl! // Gemeinsame Daten für Pointer erzeugen: L 16#1004 // Kennung 10 + Word=04 T LW0 T LW10 // Any-Kennung, Datentyp L Suchzeiger // Stelle, wo gelöscht werden soll + -20 L SSDW -I L Datenblock_inBytes // Datenblocklänge in bytes /I + 1 // Stelle, die gelöscht werden soll T LoeschPos // Lösch-Position L Listenlaenge // Länge der Datenliste (Letzter Eintrag zum Löschen ?) ==I // Ja ! JC Last // Ohne Verschieben letzten Eintrag löschen L LoeschPos // Lösch-Position L Datensatzlaenge // Datenblocklänge *I // Gesamtdatenlänge in Words T NichtCopy // Datenmenge, die nicht vorschoben wird L Listenlaenge // Länge der Datenliste L Datensatzlaenge // Datenblocklänge *I // Gesamtdatenlänge in Words L NichtCopy // Datenmenge, die nicht vorschoben wird -I // abziehen T LW2 T LW12 // Wiederholungen L SSDB T LW4 T LW14 // DB_Nummer // Quelle-Pointer erzeugen: L Suchzeiger // Stelle, wo gelöscht werden soll L Datenblock_inBytes // Datenblocklänge in Bytes +I SLD 3 L 16#8400_0000 // Kennung: Daten OD T LD6 // Kennung, Adresse // Ziel-Pointer erzeugen: L Suchzeiger // Stelle, wo gelöscht werden soll SLD 3 L 16#8400_0000 // Kennung: Daten OD T LD16 // Kennung, Adresse // Daten verschieben: CALL SYS "BLKMOV" (SRCBLK:=Quelle, RET_VAL:=SFC_RET_VAL, DSTBLK:=Ziel) // DatenSortliste-Daten verschieben L SFC_RET_VAL L 2#0000_0000_0000_0000 <>I JC Err1 // Letzte Daten löschen: Last: L Datenlisten_Ende // Ende des Datenbereichs L Datenblock_inBytes // Datenblocklänge in Bytes -I // Ab hier löschen ! ITD SLD 3 T AR1Zeiger // /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes) L Datensatzlaenge // Datensatzlänge L080: T Schleife OPN DB[DBDatenliste] L 0 // Daten löschen T DBW [AR1Zeiger] L AR1Zeiger SRD 3 L 2 // nächstes DW +D SLD 3 T AR1Zeiger L Schleife LOOP L080 // Speicherung letzter Zugriff: L SSDW + 12 // Offset letzter Zugriff ITD SLD 3 T AR1Zeiger // /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes) OPN DB[DBDatenliste] L 0 // löschen T DBW [AR1Zeiger] // Speicherung letzter Zugriff T Suchzeiger // Suchzeiger SET R IndZeiger_ok // Indizier-Zeiger angegeben // Anzahl Einträge: L SSDW + 16 // Offset Anzahl Einträge ITD SLD 3 T AR1Zeiger // /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes) OPN DB[DBDatenliste] L DBW [AR1Zeiger] // Anzahl der Einträge + -1 // -1 T DBW [AR1Zeiger] // Anzahl der Einträge L 0 >=I JC w080 T DBW [AR1Zeiger] // Minimum übergeben w080: JU Nw11 --- NW 11: Daten aus Datenliste löschen ? (indiziert) --- X010: L 16#E1 // Daten löschen ? L Para1 // 1.Aufrufparameter <>I // Nein ! JC Nw11 L Suchzeiger // Suchzeiger ITD SLD 3 T AR1Zeiger // /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes) OPN DB[DBDatenliste] L Datensatzlaenge LA00: T Schleife L 0 T DBW [AR1Zeiger] L AR1Zeiger SRD 3 L DINT#2 +D SLD 3 T AR1Zeiger L Schleife LOOP LA00 L SSDW + 12 ITD SLD 3 T AR1Zeiger // /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes) L 0 // Löschen T Suchzeiger // Suchzeiger T DBW [AR1Zeiger] SET R IndZeiger_ok // Indizier-Zeiger angegeben --- NW 12: Weitersuchen aktiv ? Datensatz vorhanden oder 0 ? --- Nw11: AN Weitersuchen JC Nw12 L OutDaten_Pointer LAR2 L Datensatzlaenge L110: T Schleife L DBOutDaten // Outdaten-DB L 0 // Angegeben ? ==I // Nein JC W111 OPN DB[DBOutDaten] W111: L NoneW [AR2,] // Outdaten überprüfen L 0 // Etwas angegeben ? <>I // Ja ! JC W112 // Ok ADDAR2 P#2.0 L Schleife LOOP L110 L 2#0000_0000_0100_0000 // Daten sind nicht vorhanden T tRE_VAL // Ok-Status JU Ende W112: L 2#0000_0000_1000_0000 // Daten sind vorhanden T tRE_VAL // Ok-Status JU Ende --- NW 13: Indizierung ok ? --- Nw12: AN Indok // Indizierung möglich O IndZeiger_ok // Indizier-Zeiger angegeben JC Ende OPN DB[IndDB] // Indizierter DB L Suchzeiger // Suchzeiger T DBW [IndPointer] OPN DB[DBDatenliste] // Datenliste DB --- NW 14: Fehlerausgabe / RET_VAL --- Ende: SET // VKE = 1 ohne Fehler !!! L tRE_VAL // Ok-Status JU Ok Err0: L 2#0000_0000_0000_0001 // Kein Datenlistebereich JU Err Err1: L 2#0000_0000_0000_0010 // SFC20-Aufruf mit Fehler JU Err Err2: L 2#0000_0000_0000_0100 // Listenende ist erreicht JU Err Err3: L 2#0000_0000_0000_1000 // Falscher Parameter bei Aufruf JU Err Err4: L 2#0000_0000_0001_0000 // Undefinierte Suchdaten JU Err Err5: L 2#0000_0000_0010_0000 // Undefinierte OUTDaten JU Err Err6: L 2#0000_0000_0100_0000 // Datensatz nicht vorhanden Err: CLR // VKE = 0 bei Fehler !!! Ok: T tRE_VAL SAVE // VKE in BIE-Bit speichern L AR2_Speicher // AR2 zurückspeichern LAR2 --- NW 15: Ende --- L tRE_VAL T RE_VAL