falseIBAEDLISTEDatenInDatenlisten-DBDatenlisten-1.DWAufrufparameter (Auftrag / Anzahl Zusatzdaten)Such-Daten-SchnittstelleRückmeldungOutDaten-SchnittstelleDaten stehen an angegebener Position in DatenbankZeiger, wo Rein-Daten sindZeiger, FIFO-StelleDatenliste-Kennnung (DA)Datensatzlänge in Word (01 - F0) F0=128Länge der Datenliste (maximale Anzahl der Datensätze)Stammdatenlänge in Word (1 - 9)reserviert von Datenlistereserviert von Datenlistereserviert von Datenlistereserviert von DatenlisteAnzahl der eingetragenen DatensätzeReserveReserve1.Aufrufparameter2.AufrufparameterSuchzeigerDatenlisten-DBStammdaten beginnen ab hierRückmeldung SFC-AufrufRückmeldung SFC-AufrufEnde der DatenlisteAdress-Register 2 zwischenspeichernLoopzählerSuch-Daten-DB, falls angegebenSuch-Daten-Pointer: Kennung, AdresseSuch-Daten-Startpunkt: AdresseOut-Daten-DB, falls angegebenOut-Daten-Pointer: Kennung, AdresseOut-Daten-Startpunkt: AdresseZeiger für IndDB1.Datenwort der IndatenDatenblocklänge in BytesBei angegebenen Datensatz suchenRückmeldung SFC-AufrufWeitersuchen ist aktivOffsetsuchen ist aktivStatt AR1 (ging nur bis DB-Länge <= 8191 Bytes)RückmeldungStandardDatenFindOffsetSort91STLde-DECOPYRIGHT by Ingenieurbüro A.Emmert
Ortsstr.33, D-869925 Fuchstal (Germany)
Tel.: 0049(0)8243-1254
Version: ILS2100 / 06.11.2009
Offsetdaten in sortierter Datenliste suchen
SSDB: Datenlisten-DB
SSDW: Datenlisten-1.DW
SEARCHDATEN: Pointer, wo einzutragende Daten stehen (P#DB1.DBX0.0, P#M220.0)
AUFTRAG: XXYY
XX: 00 = angegebenen Datensatz suchen
02 - 80 = Stammdaten beginnen ab angegebenen Datenwort
F1 = 1.Datensatz lesen
FF = nächsten vorhandenen Eintrag lesen (ab letzten Zugriff)
YY: 01 - 09 = Anzahl der Stammdaten (falls abweichend vom Datenlistenkopf!)
OUTDATEN: Pointer, wohin ausgelesene Daten übergeben werden (P#DB1.DBX0.0,
P#M220.0)
RE_VAL: Rückmeldungen:
Bit0: Kein Datenlistenbereich / falscher Kopfinhalt / Endekennung
Bit1: SFC20-Aufruf mit Fehler
Bit2: Listenende ist erreicht
Bit3: Falscher Parameter bei Aufruf
Bit4: Undefinierte Stammdaten
Bit5: Undefinierte OUT-Daten
Bit6: Datensatz ist nicht vorhanden
Bit7: Datensatz ist vorhanden
AR2 zwischenspeichern CALL TEST_DB DB_NUMBER :=#DBDatenliste RET_VAL :=#SFC_RET_VAL DB_LENGTH :=#SFC_DB_LENGTH WRITE_PROT :=#SFC_WRITE_PROTWord2#0000_0000_0000_0000schreibgeschütztkein Datenlisten-BereichSTLde-DEde-DESchnittstellen-DB sinnvoll ?Word16#1004Kennung 10 + Word=04Any-Kennung, DatentypWord16#000A10 Dw´s holenWiederholungenDB_NummerAdresseInt3DWord16#8400_0000Kennung: DatenKennung, Adresse1.-10.DW Datenliste holenVariantAnyP#L20.0 WORD 10Word2#0000_0000_0000_0000STLde-DEQuelle-Pointer erzeugen:de-DEDatenlistekopf holenDatenliste-KopfByte16#DB= Sort-Datenlistekennung ?Nein !kein DatenlistebereichInt1Datenblocklängekein DatenlistebereichInt128kein DatenlistebereichInt1Max.Anzahl von Datenblöckenkein DatenlistebereichInt1Anzahl der Stammdatenkein DatenlistebereichInt9kein DatenlistebereichAnzahl der StammdatenDatenblocklängekein DatenlistebereichLänge der DatenlisteDatenblocklängeInt2DB byteorientiertInt20Speichern ab 10.DWInt3/Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)Datenlisten-DB ist zu kurz!kein Datenlisten-BereichWord16#DAEEDatenliste-Endekennung ?Nein !Word16#DBEESort-Datenliste-Endekennung ?Nein !kein Datenlisten-BereichDatenblocklängeInt2Datenblocklänge in BytesSTLde-DEde-DEZeigerüberprüfungWeitersuchen ist aktivOffsetsuchen ist aktivInt0Vorerst kein OffsetAufrufparameter zwischenspeichernByte16#00XX = 00 ?Ja!Byte16#E1XX = E1 ?Ja!Falscher AufrufparameterByte16#F1XX = F1 ?Nein !Byte16#00Falscher AufrufparameterInt20OutDaten ok ?Byte16#FFXX = FF ?Nein !Byte16#00Falscher AufrufparameterAlter SuchzeigerDatenblocklänge in bytesNächsten Datensatz suchenNeuer SuchzeigerDatenblocklänge in bytesAlle möglichen EinträgeGesamtlängeStartpunktInt20Offset 1.DatenSchreibzeigerNoch nicht am Ende !OutDaten ok ?Listenende erreichtByte16#02XX < 02 ?Ja!Falscher AufrufparameterByte16#80XX > 80 ?Ja!Falscher AufrufparameterXX > DatensatzlängeJa!Falscher AufrufparameterInt-1Angegebener Offset -1Int2DB byteorientiertRichtiger Offset der 1.StammdatenInt0Suche ab AnfangByte16#00=0 ?2.AufrufparameterJa !Anzahl der StammdatenDatenblocklängeFalscher AufrufparameterInt1Anzahl der StammdatenFalscher AufrufparameterInt9Falscher AufrufparameterOffsetInt-1Letzte Stammdaten zu groß ?Ja!Falscher AufrufparameterSTLde-DEde-DEAuftrag kontrollierenAnzahl der eingetragenen DatensätzeInt0Eintrag vorhanden ?Nein !Datensatz ist nicht vorhandenInt0SuchzeigerSuchdaten-DBKennung, AdresseSuchdaten-DBInt0Angegeben ?Nein CALL TEST_DB DB_NUMBER :=#DBSuchDaten RET_VAL :=#SFC_RET_VAL DB_LENGTH :=#SFC_DB_LENGTH WRITE_PROT :=#SFC_WRITE_PROTWord2#0000_0000_0000_0000Fehler vorhanden ?Ja !Undefinierte StammdatenKennung, AdresseDWord16#00FF_FFFFOhne KennungInt3Ohne BitDatenblocklängeInt2DB byteorientiertSuchdaten-DB ist zu kurzUndefinierte StammdatenSuchdaten-DBInt0Angegeben ?Nein Suchdaten überprüfen1.Suchdaten speichernSuchdaten-DBInt0Angegeben ?Nein Suchdaten überprüfenInt0Etwas angegeben ?Ja !WeiterARefP#2.0Undefinierte StammdatenSTLde-DESuch-DATEN-Pointer übernehmen:de-DESuchdaten definiert ?SuchzeigerInt0Angegeben ?Nein !Suche bei 1.Datensatz beginnenSuchzeigerInt-20Zeiger 1.DatenDatenblocklänge in BytesErmittlung der wievielten Daten -1Int16Rest ermittelnInt0= 0 ?Suchzeiger nicht im Raster !Suche bei 1.Datensatz beginnenInt0Bei angegebener Stelle suchenSuch bei X-ten DatensatzInt1Suche bei 1.Datensatz beginnenSuch bei X-ten DatensatzInt20Offset für 1.DatenSuchzeigerSuchzeigerRichtiger Offset der 1.StammdatenInt3/Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)Anzahl der StammdatenSuchdaten-DBInt0Angegeben ?Nein Suchdaten überprüfen mitDatenliste-Daten lesennicht identisch !Int3DInt2Int3ARefP#2.0Word2#0000_0000_1000_0000Daten sind vorhandenOk-StatusDatensatz ist in Liste enthaltenInt0Suche bei 1.Datensatz begonnenSuch bei X-ten DatensatzNein !Such bei X-ten DatensatzInt1Such bei X-ten DatensatzAnzahl der eingetragenen DatensätzeAlle Datensätze sind durchsuchtNein !Datensatz ist nicht vorhandenDatenblocklänge in bytesSuchzeigerSuchzeigerSTLde-DEde-DEKontrolle auf gleiche StammdatenOutdaten-DBKennung, AdresseOutdaten-DBInt0Angegeben ?Nein CALL TEST_DB DB_NUMBER :=#DBOutDaten RET_VAL :=#SFC_RET_VAL DB_LENGTH :=#SFC_DB_LENGTH WRITE_PROT :=#SFC_WRITE_PROTWord2#0000_0000_0000_0000Fehler vorhanden ?Ja !Undefinierte OutdatenKennung, AdresseDWord16#00FF_FFFFOhne KennungInt3Ohne BitOutdaten-DB ist zu kurzUndefinierte OutdatenSTLde-DEOut-DATEN-Pointer übernehmen:de-DEOutdaten ok ?Word16#1004Kennung 10 + Word=04Any-Kennung, DatentypDatenwords speichernWiederholungenDATEN-Pointer übernehmen:DB_NummerAdresseInt3DWord16#8400_0000Kennung: DatenKennung, AdresseZiel-Pointer erzeugen:Kennung + Datenbytes s.o.DB_NummerKennung, AdresseDatenliste-Daten speichernVariantWord2#0000_0000_0000_0000Int12im 12.DW speichernInt3/Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)SuchzeigerSpeicherung letzter ZugriffSuchzeigerInt-20Offeset 1.DSDatenblocklänge in BytesInt1Position errechnenDaten stehen an angegebener Position in DatenbankSTLde-DEQuelle-Pointer erzeugen:de-DEDaten aus Datenliste lesen (in OUTDaten übergeben)Outdaten-DBInt0Angegeben ?Nein Outdaten überprüfenInt0Etwas angegeben ?Ja !OkARefP#2.0Word2#0000_0000_0100_0000Daten sind nicht vorhandenOk-StatusWord2#0000_0000_1000_0000Daten sind vorhandenOk-StatusSTLde-DEde-DEWeitersuchen aktiv ? Datensatz vorhanden oder 0 ?VKE = 1 ohne Fehler !!!Ok-StatusWord2#0000_0000_0000_0001Kein DatenlistebereichWord2#0000_0000_0000_0010SFC20-Aufruf mit FehlerWord2#0000_0000_0000_0100Listenende ist erreichtWord2#0000_0000_0000_1000Falscher Parameter bei AufrufWord2#0000_0000_0001_0000Undefinierte SuchdatenWord2#0000_0000_0010_0000Undefinierte OUTDatenWord2#0000_0000_0100_0000Datensatz nicht vorhandenVKE = 0 bei Fehler !!!VKE in BIE-Bit speichern AR2 zurückspeichernSTLde-DEde-DEFehlerausgabe / RET_VALSTLde-DEde-DEde-DEDatensort-Modul