falseIBAEDLISTEDatenInDatenlisten-DBDatenlisten-1.DWInDaten-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ätzeReserveReserveDatenlisten-DBRückmeldung SFC-AufrufRückmeldung SFC-AufrufEnde der DatenlisteAdress-Register 2 zwischenspeichernLoopzählerIndaten-DB, falls angegebenIn-Daten-Pointer: Kennung, AdresseIn-Daten-Startpunkt: AdresseEinzusortierende Daten (DWord)Datenblocklänge in BytesRückmeldung SFC-AufrufAn dieser Stelle Datensatz lesenMinimal sinnvolle LesestelleMaximal sinnvolle LesestelleAn dieser Stelle wird In-Datensatz gespeichertIn Tabelle gelesenen DatenFreiraum schaffen: Stelle zum Daten holenFreiraum schaffen: Stelle zum Daten schreibenFreiraum schaffen: Zeiger zum Daten holenFreiraum schaffen: Zeiger zum Daten schreibenStatt AR1 (ging nur bis DB-Länge <= 8191 Bytes)StandardDatenInSort88STLde-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 einsortieren (aufsteigend)
SSDB: Datenlisten-DB
SSDW: Datenlisten-1.DW
INDATEN: Pointer, wo einzutragende Daten stehen (P#DB1.DBX0.0, P#M220.0)
RE_VAL: Rückmeldungen:
Bit0: Kein Datenlistenbereich / falscher Kopfinhalt / Endekennung
Bit1: SFC20-Aufruf mit Fehler
Bit2: Liste ist voll
Bit3: Frei
Bit4: Undefinierte Indaten
Bit5: Gespeicherte Daten <= 0 (Inhalt ungültig)
Bit6: Frei
Bit7: Eintrag ist richtig erfolgt
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_0000kein 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 BytesAnzahl der eingetragenen DatensätzeMax.Anzahl von DatenblöckenNein !Datenliste ist vollSTLde-DEde-DEZeigerüberprüfungIn-DATEN-Pointer übernehmen:Indaten-DBIndaten-DBInt0Angegeben ?Nein CALL TEST_DB DB_NUMBER :=#DBInDaten RET_VAL :=#SFC_RET_VAL DB_LENGTH :=#SFC_DB_LENGTH WRITE_PROT :=#SFC_WRITE_PROTWord2#0000_0000_0000_0000Fehler vorhanden ?Ja !Undefinierte IndatenKennung, AdresseDWord16#00FF_FFFFOhne KennungInt3Ohne BitDatenblocklängeInt2DB byteorientiertIndaten-DB ist zu kurzUndefinierte IndatenKennung, AdresseIndaten-DBInt0Angegeben ?Nein Indaten überprüfen1.Indaten speichernIndaten-DBInt0Angegeben ?Nein Indaten überprüfenInt0Etwas angegeben ?Ja !WeiterARefP#2.0Undefinierte IndatenSTLde-DEde-DEIndaten definiert ?Int1Minimal sinnvolle LesestelleAnzahl der eingetragenen DatensätzeMaximal sinnvolle LesestelleSonderfall: noch kein Eintrag: Int0Eintrag schon vorhanden ? Ja !Int1An 1.Stelle speichernAdresseSTLde-DEde-DEMinimale + maximale Lesestelle am AnfangMaximal sinnvolle LesestelleInt1Minimal sinnvolle LesestelleInt2Minimal sinnvolle LesestelleAn dieser Stelle Datensatz lesenSTLde-DEde-DEAktuelle Lesestelle errechnenAn dieser Stelle Datensatz lesenInt-1Datenblocklänge in BytesInt20Offset für 1.DatenInt3/Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)Datenliste-Daten lesenIn Tabelle gelesenen DatenDInt0Nichts gespeicher oder negativ ?Ja !STLde-DEde-DEDaten an Lesestelle auslesenMaximal sinnvolle LesestelleMinimal sinnvolle LesestelleInt0Suche fertig ?Ja !STLde-DEde-DESuche fertig ?Einzusortierende Daten In Tabelle gelesenen DatenSort > TabelleEinzusortierende Daten Tabelle > SortAn dieser Stelle Datensatz lesenAn dieser Stelle wird In-Datensatz gespeichertFreiplatz schaffenAn dieser Stelle Datensatz lesenInt1Minimal sinnvolle LesestelleMaximal sinnvolle LesestelleSuche ist fertigAn dieser Stelle Datensatz lesenInt-1Maximal sinnvolle LesestelleMinimal sinnvolle LesestelleSuche ist fertigSTLde-DEde-DEGelesene Daten auswertenEinzusortierende Daten In Tabelle gelesenen DatenSort > TabelleAn dieser Stelle Datensatz lesenAn dieser Stelle wird In-Datensatz gespeichertFreiplatz schaffenAn dieser Stelle Datensatz lesenInt1An dieser Stelle wird In-Datensatz gespeichertSTLde-DEde-DESpeicherstelle ermittelnAn dieser Stelle wird In-Datensatz gespeichertAnzahl der eingetragenen DatensätzeEintrag ans Ende !Anzahl der eingetragenen DatensätzeDatenblocklänge in BytesInt20Offset für 1.DatenInt-2Letzte Daten letzter EintragFreiraum schaffen: Stelle zum Daten holenFreiraum schaffen: Stelle zum Daten holenDatenblocklänge in BytesFreiraum schaffen: Zeiger zum Daten schreibenAnzahl der eingetragenen DatensätzeAn dieser Stelle wird In-Datensatz gespeichertInt1Datenblocklänge in BytesInt2da DW-Zugriff (2Byte)Freiraum schaffen: Stelle zum Daten holenInt3Freiraum schaffen: Zeiger zum Daten holenFreiraum schaffen: Zeiger zum Daten schreibenInt3Freiraum schaffen: Zeiger zum Daten schreibenDatenliste-Daten lesenDatenliste-Daten verschiebenInt-22 Byte wegen DW-ZugriffFreiraum schaffen: Stelle zum Daten holenInt-22 Byte wegen DW-ZugriffFreiraum schaffen: Zeiger zum Daten schreibenSTLde-DEde-DEFreiraum für Speicherung schaffenQuelle-Pointer erzeugen:Word16#1004Kennung 10 + Word=04Any-Kennung, DatentypDatenwords speichernWiederholungenDATEN-Pointer übernehmen:DB_NummerKennung, AdresseZiel-Pointer erzeugen:Kennung + Datenbytes s.o.DB_NummerAdresseInt-1Datenblocklänge in BytesInt20Offset für 1.DatenInt3DWord16#8400_0000Kennung: DatenKennung, AdresseDatenliste-Daten speichernVariantWord2#0000_0000_0000_0000Int14Anzahl der EinträgeInt3/Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)Anzahl der EinträgeInt1Einträge +1Anzahl der EinträgeSTLde-DEde-DEDaten in Datenliste schreibenVKE = 1 ohne Fehler !!!Word2#0000_0000_1000_0000Daten wurden gespeichertWord2#0000_0000_0000_0001Kein DatenlistebereichWord2#0000_0000_0000_0010SFC20-Aufruf mit FehlerWord2#0000_0000_0000_0100Datenliste ist vollWord2#0000_0000_0001_0000Undefinierte IndatenWord2#0000_0000_0010_0000Gespeicherte Daten <= 0 (Inhalt ungültig)VKE = 0 bei Fehler !!!VKE in BIE-Bit speichern AR2 zurückspeichernSTLde-DEde-DEFehlerausgabe / RET_VALde-DEDatensort-Modul