false IBAE DLISTE DatenIn
Datenlisten-DB Datenlisten-1.DW Aufrufparameter (Auftrag , Offset/Anzahl Daten)
OutDaten-Schnittstelle Rückmeldung
Zeiger, wo Rein-Daten sind Zeiger, FIFO-Stelle Datenliste-Kennnung (DA) Datensatzlänge in Word (01 - F0) F0=128 Länge der Datenliste (maximale Anzahl der Datensätze) Stammdatenlänge in Word (1 - 9) reserviert von Datenliste reserviert von Datenliste reserviert von Datenliste reserviert von Datenliste Anzahl der eingetragenen Datensätze Reserve Reserve 1.Aufrufparameter 2.Aufrufparameter Rückmeldung SFC-Aufruf Rückmeldung SFC-Aufruf Stelle, wo gelesen werden soll Stelle, wo gelöscht werden soll Stelle, wo 1. zu bleibende Daten sind Datenlisten-DB Ende der Datenliste Adress-Register 2 zwischenspeichern Out-Daten-DB, falls angegeben Out-Daten-Pointer: Kennung, Adresse Out-Daten-Startpunkt: Adresse Datenblocklänge in Bytes Bei angegebenen Datensatz suchen Rückmeldung SFC-Aufruf Datenmenge, die nicht vorschoben wird Loopzähler Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
Standard DatenOutSort 89 STL de-DE COPYRIGHT 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_PROT Word 2#0000_0000_0000_0000 schreibgeschützt STL de-DE de-DE Schnittstellen-DB sinnvoll ? Word 16#1004 Kennung 10 + Word=04
Any-Kennung, Datentyp Word 16#000A 10 Dw´s holen
Wiederholungen
DB_Nummer Adresse Int 3 DWord 16#8400_0000 Kennung: Daten
Kennung, Adresse 1.-10.DW Datenliste holen Variant Any P#L20.0 WORD 10 Word 2#0000_0000_0000_0000 STL de-DE Quelle-Pointer erzeugen: de-DE Datenlistekopf holen Datenliste-Kopf Byte 16#DB = Datenlistekennung ? Nein ! Int 1 Datenblocklänge Int 128 Int 1 Max.Anzahl von Datenblöcken Int 1 Anzahl der Stammdaten Int 9 Anzahl der Stammdaten Datenblocklänge Länge der Datenliste Datenblocklänge Int 2 DB byteorientiert Int 20 Speichern ab 10.DW Int 3 /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes) Datenlisten-DB ist zu kurz! Word 16#DBEE Datenliste-Endekennung ? Nein ! Datenblocklänge Int 2 Datenblocklänge in Bytes STL de-DE de-DE Zeigerüberprüfung
Aufrufparameter zwischenspeichern Byte 16#00 Länge der Datenliste (maximale Anzahl der Datensätze) Byte 16#0A XX = 0A ? (Datensatz YY lesen) Nein ! Eintrag lesen: Datensatz YY Int -1 1.Datensatz ohne Offset Datenblocklänge in bytes Int 20 Stelle, wo gelesen werden soll Byte 16#0E XX = 0E ? (Datensatz YY löschen) Nein ! Datensatz löschen: Int 0 Datensatz YY zu löschender Datensatz ist grösser als Einträge ? Ja ! Datensatz YY Int -1 1.Datensatz ohne Offset Datenblocklänge in bytes Int 20 Stelle, wo gelöscht werden soll Byte 16#0D XX = 0D ? (Datensätze YY löschen, ab 1.DS) Nein ! Datenblock löschen: Int 0 Anzahl Datensätze YY Datenblocklänge in bytes Int 20 Stelle, wo 1. zu bleibende Daten sind STL de-DE de-DE Auftrag kontrollieren Out-DATEN-Pointer übernehmen: Outdaten-DB Kennung, Adresse Outdaten-DB Int 0 Angegeben ? Nein CALL TEST_DB DB_NUMBER :=#DBOutDaten RET_VAL :=#SFC_RET_VAL DB_LENGTH :=#SFC_DB_LENGTH WRITE_PROT :=#SFC_WRITE_PROT Word 2#0000_0000_0000_0000 Fehler vorhanden ? Ja ! Kennung, Adresse DWord 16#00FF_FFFF Ohne Kennung Int 3 Ohne Bit Outdaten-DB ist zu kurz STL de-DE de-DE Outdaten ok ? Quelle-Pointer erzeugen: Word 16#1004 Kennung 10 + Word=04
Any-Kennung, Datentyp Datenwords speichern
Wiederholungen DATEN-Pointer übernehmen:
DB_Nummer Adresse Int 3 DWord 16#8400_0000 Kennung: Daten
Kennung, Adresse Ziel-Pointer erzeugen: Kennung + Datenbytes s.o.
DB_Nummer
Kennung, Adresse DatenSortliste-Daten speichern Variant Word 2#0000_0000_0000_0000 STL de-DE de-DE Daten aus Datenliste lesen (in OUTDaten übergeben) Gemeinsame Daten für Pointer erzeugen: Word 16#1004 Kennung 10 + Word=04
Any-Kennung, Datentyp Datensatzlänge Datensatz YY Datenmenge, die nicht vorschoben wird Länge der Datenliste Datenblocklänge Gesamtdatenlänge in Words Datenmenge, die nicht vorschoben wird abziehen
Wiederholungen
DB_Nummer Quelle-Pointer erzeugen: Stelle, wo gelöscht werden soll Datenblocklänge in Bytes Int 3 DWord 16#8400_0000 Kennung: Daten
Kennung, Adresse Ziel-Pointer erzeugen: Stelle, wo gelöscht werden soll Int 3 DWord 16#8400_0000 Kennung: Daten
Kennung, Adresse Daten verschieben: DatenSortliste-Daten verschieben Variant Word 2#0000_0000_0000_0000 Letzte Daten löschen: Ende des Datenbereichs Datenblocklänge in Bytes Ab hier löschen ! Int 3 /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes) Datensatzlänge Int 0 Daten löschen Int 3 DInt 2 Int 3 Anzahl der eingetragenen Datensätze Int -1 Int 0 Minimum übergeben Int 14 Anzahl der Einträge Int 3 /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes) Anzahl der eingetragenen Datensätze Anzahl der Einträge STL de-DE de-DE Daten aus Datenliste löschen ? Gemeinsame Daten für Pointer erzeugen: Word 16#1004 Kennung 10 + Word=04
Any-Kennung, Datentyp Datensatzlänge Anzahl Datensätze YY Datenmenge, die nicht vorschoben wird Länge der Datenliste Datenblocklänge Gesamtdatenlänge in Words Datenmenge, die nicht vorschoben wird abziehen
Wiederholungen
DB_Nummer Quelle-Pointer erzeugen: Stelle, wo 1. zu bleibende Daten sind Int 3 DWord 16#8400_0000 Kennung: Daten
Kennung, Adresse Ziel-Pointer erzeugen: Int 20 1.DS Int 3 DWord 16#8400_0000 Kennung: Daten
Kennung, Adresse Daten verschieben: DatenSortliste-Daten verschieben Variant Word 2#0000_0000_0000_0000 Letzte Daten löschen: Ende des Datenbereichs Datenmenge, die nicht vorschoben wird 2 mal, da Angabe in Word (Angabe in Byte benötigt!) Ab hier löschen ! Int 3 /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes) Datenmenge, die nicht vorschoben wird Int 0 Daten löschen Int 3 DInt 2 Int 3 Anzahl der eingetragenen Datensätze Anzahl Datensätze YY Int 0 Minimum übergeben Int 14 Anzahl der Einträge Int 3 /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes) Anzahl der eingetragenen Datensätze Anzahl der Einträge STL de-DE de-DE Datensätze aus Datenliste löschen ? VKE = 1 ohne Fehler !!! Word 2#0000_0000_0000_0000 Ok-Status Word 2#0000_0000_0000_0001 Kein Datenlistebereich Word 2#0000_0000_0000_0010 SFC20-Aufruf mit Fehler Word 2#0000_0000_0000_0100 Sortliste ist leer Word 2#0000_0000_0000_1000 Falscher Parameter bei Aufruf Word 2#0000_0000_0010_0000 Undefinierte OUTDaten VKE = 0 bei Fehler !!! VKE in BIE-Bit speichern AR2 zurückspeichern STL de-DE de-DE Fehlerausgabe / RET_VAL de-DE Datensort-Modul