falseIBAEDLISTEDatenInDatenlisten-DBDatenlisten-1.DWAufrufparameter (Auftrag , Offset/Anzahl Daten)OutDaten-SchnittstelleRückmeldungZeiger, 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.AufrufparameterRückmeldung SFC-AufrufRückmeldung SFC-AufrufStelle, wo gelesen werden sollStelle, wo gelöscht werden sollStelle, wo 1. zu bleibende Daten sindDatenlisten-DBEnde der DatenlisteAdress-Register 2 zwischenspeichernOut-Daten-DB, falls angegebenOut-Daten-Pointer: Kennung, AdresseOut-Daten-Startpunkt: AdresseDatenblocklänge in BytesBei angegebenen Datensatz suchenRückmeldung SFC-AufrufDatenmenge, die nicht vorschoben wirdLoopzählerStatt AR1 (ging nur bis DB-Länge <= 8191 Bytes)StandardDatenOutSort89STLde-DECOPYRIGHT by Ingenieurbüro A.Emmert
Ortsstr.33, D-869925 Fuchstal (Germany)
Tel.: 0049(0)8243-1254
Version: ILS2100 / 06.11.2009
Datenblock in Datenliste suchen / löschen
SSDB: Datenlisten-DB
SSDW: Datenlisten-1.DW
SEARCHDATEN: Pointer, wo einzutragende Daten stehen (P#DB1.DBX0.0, P#M220.0)
AUFTRAG: XXYY
XX: 0A = Datensatz YY lesen
0D = Datensätze löschen (ab DS1, Anzahl = YY)
0E = Datensatz YY löschen
YY: 01 - Anzahl Einträge = Angabe welcher Datensatz / Anzahl zum Löschen
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: Sortliste ist leer
Bit3: Falscher Parameter bei Aufruf
Bit4: Frei
Bit5: Undefinierte OUT-Daten
Bit6: Frei
Bit7: Frei
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= 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#DBEEDatenliste-Endekennung ?Nein !kein Datenlisten-BereichDatenblocklängeInt2Datenblocklänge in BytesSTLde-DEde-DEZeigerüberprüfungAufrufparameter zwischenspeichernByte16#00Falscher AufrufparameterLänge der Datenliste (maximale Anzahl der Datensätze)Falscher AufrufparameterByte16#0AXX = 0A ? (Datensatz YY lesen)Nein !Eintrag lesen:Datensatz YY Int-11.Datensatz ohne OffsetDatenblocklänge in bytesInt20Stelle, wo gelesen werden sollOutDaten ok ?Byte16#0EXX = 0E ? (Datensatz YY löschen)Nein !Datensatz löschen:Int0Liste ist leerDatensatz YY zu löschender Datensatz ist grösser als Einträge ?Ja !Keine AktionDatensatz YY Int-11.Datensatz ohne OffsetDatenblocklänge in bytesInt20Stelle, wo gelöscht werden sollDaten löschenByte16#0DXX = 0D ? (Datensätze YY löschen, ab 1.DS)Nein !Datenblock löschen:Int0Liste ist leerAnzahl Datensätze YY Datenblocklänge in bytesInt20Stelle, wo 1. zu bleibende Daten sindFalscher AufrufparameterSTLde-DEde-DEAuftrag kontrollierenOut-DATEN-Pointer übernehmen:Outdaten-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-DEde-DEOutdaten ok ?Quelle-Pointer erzeugen:Word16#1004Kennung 10 + Word=04Any-Kennung, DatentypDatenwords speichernWiederholungenDATEN-Pointer übernehmen:DB_NummerAdresseInt3DWord16#8400_0000Kennung: DatenKennung, AdresseZiel-Pointer erzeugen:Kennung + Datenbytes s.o.DB_NummerKennung, AdresseDatenSortliste-Daten speichernVariantWord2#0000_0000_0000_0000STLde-DEde-DEDaten aus Datenliste lesen (in OUTDaten übergeben)Gemeinsame Daten für Pointer erzeugen:Word16#1004Kennung 10 + Word=04Any-Kennung, DatentypDatensatzlängeDatensatz YY Datenmenge, die nicht vorschoben wirdLänge der DatenlisteDatenblocklängeGesamtdatenlänge in WordsDatenmenge, die nicht vorschoben wirdabziehenWiederholungenDB_NummerQuelle-Pointer erzeugen:Stelle, wo gelöscht werden sollDatenblocklänge in BytesInt3DWord16#8400_0000Kennung: DatenKennung, AdresseZiel-Pointer erzeugen:Stelle, wo gelöscht werden sollInt3DWord16#8400_0000Kennung: DatenKennung, AdresseDaten verschieben:DatenSortliste-Daten verschiebenVariantWord2#0000_0000_0000_0000Letzte Daten löschen:Ende des DatenbereichsDatenblocklänge in BytesAb hier löschen !Int3/Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)DatensatzlängeInt0Daten löschenInt3DInt2Int3Anzahl der eingetragenen DatensätzeInt-1Int0Minimum übergebenInt14Anzahl der EinträgeInt3/Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)Anzahl der eingetragenen DatensätzeAnzahl der EinträgeSTLde-DEde-DEDaten aus Datenliste löschen ?Gemeinsame Daten für Pointer erzeugen:Word16#1004Kennung 10 + Word=04Any-Kennung, DatentypDatensatzlängeAnzahl Datensätze YY Datenmenge, die nicht vorschoben wirdLänge der DatenlisteDatenblocklängeGesamtdatenlänge in WordsDatenmenge, die nicht vorschoben wirdabziehenWiederholungenDB_NummerQuelle-Pointer erzeugen:Stelle, wo 1. zu bleibende Daten sindInt3DWord16#8400_0000Kennung: DatenKennung, AdresseZiel-Pointer erzeugen:Int201.DSInt3DWord16#8400_0000Kennung: DatenKennung, AdresseDaten verschieben:DatenSortliste-Daten verschiebenVariantWord2#0000_0000_0000_0000Letzte Daten löschen:Ende des DatenbereichsDatenmenge, die nicht vorschoben wird2 mal, da Angabe in Word (Angabe in Byte benötigt!)Ab hier löschen !Int3/Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)Datenmenge, die nicht vorschoben wirdInt0Daten löschenInt3DInt2Int3Anzahl der eingetragenen DatensätzeAnzahl Datensätze YY Int0Minimum übergebenInt14Anzahl der EinträgeInt3/Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)Anzahl der eingetragenen DatensätzeAnzahl der EinträgeSTLde-DEde-DEDatensätze aus Datenliste löschen ?VKE = 1 ohne Fehler !!!Word2#0000_0000_0000_0000Ok-StatusWord2#0000_0000_0000_0001Kein DatenlistebereichWord2#0000_0000_0000_0010SFC20-Aufruf mit FehlerWord2#0000_0000_0000_0100Sortliste ist leerWord2#0000_0000_0000_1000Falscher Parameter bei AufrufWord2#0000_0000_0010_0000Undefinierte OUTDatenVKE = 0 bei Fehler !!!VKE in BIE-Bit speichern AR2 zurückspeichernSTLde-DEde-DEFehlerausgabe / RET_VALde-DEDatensort-Modul