Files
HundM_awl/=A01+UH06-KF00/Programmbausteine/Module/DatenReset.awl
T

235 lines
9.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
=== FC 87: DatenReset [STL] ===
INTERFACE:
Input:
SSDB : Int // Datenlisten-DB
SSDW : Int // Datenlisten-1.DW
Output:
RE_VAL : Byte // Rückmeldung
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
Reserve16 : Int // Reserve
Reserve18 : Int // Reserve
DBDatenliste : Word // Datenlisten-DB
SFC_RET_VAL : Int // Rückmeldung SFC-Aufruf
SFC_DB_LENGTH : Word // Rückmeldung SFC-Aufruf
Datenlisten_Ende : Word // Ende der Datenliste
Schleife : Word // Loopzähler
SFC_WRITE_PROT : Bool // Rückmeldung SFC-Aufruf
AR1Zeiger : DWord // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
DB_Länge : Int
Constant:
Return:
Ret_Val : Void
--- NW 1: Schnittstellen-DB sinnvoll ? ---
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
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#DA // = Datenlistekennung ?
<>I // Nein !
JC Err0 // kein Datenlistebereich
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 !
JC Err0 // kein Datenlisten-Bereich
--- NW 4: Indizierung löschen ? ---
L IndDB // Indizierter DB
L 0 // =0 ?
==I // Kein indizierter DB !
JC Nw05
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 Nw05 // kein Indizier-DB vorhanden
L 0
ITD
SLD 3
T AR1Zeiger // /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
OPN DB[IndDB]
L "DB_Länge" // In Bytes angegeben
L400: T Schleife
L 0
T DBB [AR1Zeiger] // Inhalte löschen
L AR1Zeiger
SRD 3
L DINT#1
+D
SLD 3
T AR1Zeiger
L Schleife
LOOP L400
--- NW 5: Datenliste löschen ---
Nw05: L SSDW
+ 12 // 12.Dw
ITD
SLD 3
T AR1Zeiger // /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
OPN DB[DBDatenliste]
L 0
T DBW [AR1Zeiger] // Letzte Speicherung löschen
L SSDW
+ 16 // 16.Dw
ITD
SLD 3
T AR1Zeiger // /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
OPN DB[DBDatenliste]
L 0
T DBW [AR1Zeiger] // Anzahl Einträge löschen
L SSDW
+ 20 // Daten ab 20.Dw
ITD
SLD 3
T AR1Zeiger // /Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
L Datensatzlaenge
L Listenlaenge
*I
L500: T Schleife
OPN DB[DBDatenliste]
L 0
T DBW [AR1Zeiger] // Inhalte löschen
L AR1Zeiger
SRD 3
L DINT#2
+D
SLD 3
T AR1Zeiger
L Schleife
LOOP L500
--- NW 6: Fehlerausgabe / RET_VAL ---
SET // VKE = 1 ohne Fehler !!!
JU Ok
Err0: L 2#0000_0000_0000_0001 // Kein Fifobereich
JU Err
Err1: L 2#0000_0000_0000_0010 // SFC20-Aufruf mit Fehler
Err: CLR // VKE = 0 bei Fehler !!!
Ok: T RE_VAL
SAVE // VKE in BIE-Bit speichern