alle xml in .awl konvertiert und eingecheckt

This commit is contained in:
2026-07-08 09:44:59 +02:00
parent 1c935599e9
commit 9910240835
473 changed files with 102599 additions and 0 deletions
@@ -0,0 +1,376 @@
=== FC 83: FIFOSearch [STL] ===
INTERFACE:
Input:
SSDB : Int // Schnittstellen-DB
SSDW : Int // Schnittstellen-1.DW
SEARCHDATEN : Pointer // SuchDaten-Schnittstelle
Laenge : Int // Anzahl der DWs zum Vergleichen im Datensatz
Output:
RE_POS : Int // Position des Eintrags, der gesuchten Daten
RE_VAL : Byte // Rückmeldungen
InOut:
Temp:
Quelle : Any // Zeiger, wo Rein-Daten sind
Ziel : Any // Zeiger, FIFO-Stelle
Kopf : Byte // Fifo-Kennung (FF)
Datensatzlaenge : Byte // Datensatzlänge in Word (1 - 128)
FifoLaenge : Int // Länge des Fifo (maximale Anzahl der Datensätze)
Bringzeiger : Int // Zeiger, wohin nächster Eintrag gespeichert wird
Holzeiger : Int // Zeiger, woher nächste Daten geholt werden
Anzahl : Int // Anzahl der Datensätze (eingetragene)
Status : Word // Status des Fifo
Err : Byte // Fehlerbits
MinHolzeiger : Int // Minimum Holzeiger
MaxHolzeiger : Int // Maximum Holzeiger
DBFifo : Word // FIFO-DB
SFC_RET_VAL : Int // Rückmeldung SFC-Aufruf
SFC_DB_LENGTH : Word // Rückmeldung SFC-Aufruf
Fifo_Ende : Word // Ende des Fifo
AR2_Speicher : DWord // Adress-Register 2 zwischenspeichern
DBSuchdaten : Word // Solldaten-DB, falls angegeben
SuchDaten_Startpunkt : Word // SuchDaten-Startpunkt: Adresse
SuchZeiger : Word // Suchzeiger
Schleife : Word // Loopzähler
NixSave : Bool // Status nicht speichern
SFC_WRITE_PROT : Bool // Rückmeldung SFC-Aufruf
AR1Zeiger : DWord // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
AR1Start : DInt // Startwert mit Offset 0
sRE_POS : Int // Position des Eintrags, der gesuchten Daten
Constant:
Return:
Ret_Val : Void
--- NW 1: Schnittstellen-DB sinnvoll ? ---
TAR2
T AR2_Speicher // AR2 zwischenspeichern
L SSDB
T DBFifo
// CALL TEST_DB
// DB_NUMBER :=#DBFifo
// RET_VAL :=#SFC_RET_VAL
// DB_LENGTH :=#SFC_DB_LENGTH
// WRITE_PROT :=#SFC_WRITE_PROT
CALL FC "TEST_DB_TO_ATTR_DB" (DB_Number:=DBFifo, RetVal:=SFC_RET_VAL, DB_Length:=SFC_DB_LENGTH, Write_Prot:=SFC_WRITE_PROT)
L SFC_RET_VAL
L 2#0000_0000_0000_0000
<>I
= NixSave // Status nicht speichern
O SFC_WRITE_PROT
JC Err0 // kein Fifobereich
--- NW 2: Quelle-Pointer erzeugen: ---
L 16#1004 // Kennung 10 + Word=04
T sRE_POS // Any-Kennung, Datentyp
L 16#0006 // 6 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 6) // 1.-6.DW FIFO holen
L Status
L 2#0000_0000_1110_0000
AW
T Err
JP Err // Kapitalfehler vorhanden
L SFC_RET_VAL
L 2#0000_0000_0000_0000
<>I
JC Err1
--- NW 3: Zeigerüberprüfung ---
L Kopf // Fifo-Kopf
L 16#FF // = Fifokennung ?
<>I // Nein !
= NixSave // Status nicht speichern
JC Err0 // kein Fifobereich
L 1
L Datensatzlaenge // Datenblocklänge
>I
JC Err0 // kein Fifobereich
L 128
>I
JC Err0 // kein Fifobereich
L 1
L FifoLaenge // Max.Anzahl von Datenblöcken
>I
JC Err0 // kein Fifobereich
L SSDW
+ 40 // Speichern ab 20.DW
T MinHolzeiger // Minimum Holzeiger
L FifoLaenge // Länge FIFO (in Word)
+ -1
L Datensatzlaenge // Datenblocklänge
*I
L 2 // DB byteorientiert
*I
+ 40 // Speichern ab 20.DW
L SSDW
+I
T MaxHolzeiger // Maximum Holzeiger
L Datensatzlaenge // Datenblocklänge
L 2 // DB byteorientiert
*I
L MaxHolzeiger // Maximum Holzeiger
+I // Zeiger Endekennung
T Fifo_Ende
ITD
T AR1Start // Startwert mit Offset 0
SLD 3
T AR1Zeiger // /Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
OPN DB[DBFifo]
L Fifo_Ende
L SFC_DB_LENGTH
>I // Fifo-DB ist zu kurz!
JC Err0 // kein Fifo-Bereich
L DBW [AR1Zeiger]
L 16#FFEE // Fifo-Endekennung ?
<>I // Nein !
JC Err0 // kein Fifobereich
L MinHolzeiger // Minimum Holzeiger
L Holzeiger // Holzeiger
<=I // Ok ?
JC W300 // Ja!
L 0 // Grundstellung ?
<>I // Nein !
JC Err6 // Holzeiger ist ausserhalb
L Bringzeiger // Bringzeiger Grundstellung ?
<>I // Nein !
JC Err6 // Holzeiger ist ausserhalb
L Anzahl // Anzahl Datensätze
L 0 // Grundstellung ?
<>I // Nein !
JC Err6 // Holzeiger ist ausserhalb
L MinHolzeiger // Minimum Holzeiger
T Bringzeiger // Bringzeiger
T Holzeiger // Holzeiger
JU Err2 // Fifo ist leer
W300: L MaxHolzeiger // Maximum Holzeiger
<=I // Ok ?
JC W301 // Ja!
JU Err6 // Holzeiger ist ausserhalb
W301: L Bringzeiger // Bringzeiger
L Holzeiger // Holzeiger
==I // Identisch !
A(
L FifoLaenge
L Anzahl // Anzahl der gespeicherten Datensätze
<>I // Fifo noch nicht voll !
)
A(
L 0
<>I // Datensätze aber noch vorhanden !
)
JC Err7 // Versatz Bring-/Holzeiger
L Bringzeiger // Bringzeiger
L Holzeiger // Holzeiger
<>I // Ungleich !
A(
L FifoLaenge
L Anzahl // Anzahl der gespeicherten Datensätze
==I // Aber Fifo ist voll !
O(
L 0
==I // Aber keine Datensätze vorhanden !
)
)
JC Err7 // Versatz Bring-/Holzeiger
L Anzahl // Anzahl der gespeicherten Datensätze
L 0
==I // Keine Datensätze vorhanden !
JC Err2 // Fifo ist leer
--- NW 4: Fifodaten suchen ---
L 1
T sRE_POS // RET-POS
L Holzeiger // Holzeiger
T SuchZeiger // Suchzeiger
W400: ITD
T AR1Start // Startwert mit Offset 0
SLD 3
T AR1Zeiger // /Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
// DATEN-Pointer übernehmen:
L P#
LAR2
L NoneW [AR2,]
T DBSuchdaten // Solldaten-DB
L DBSuchdaten // Solldaten-DB
L 0 // Angegeben ?
==I // Nein
JC W401
// CALL TEST_DB
// DB_NUMBER :=#DBSuchdaten
// RET_VAL :=#SFC_RET_VAL
// DB_LENGTH :=#SFC_DB_LENGTH
// WRITE_PROT :=#SFC_WRITE_PROT
CALL FC "TEST_DB_TO_ATTR_DB" (DB_Number:=DBSuchdaten, RetVal:=SFC_RET_VAL, DB_Length:=SFC_DB_LENGTH, Write_Prot:=SFC_WRITE_PROT)
L SFC_RET_VAL
L 2#0000_0000_0000_0000 // Fehler vorhanden ?
<>I // Ja !
JC Err1 // SFC20-Aufruf mit Fehler
L NoneD [AR2,] // Kennung, Adresse
L 16#00FF_FFFF // Ohne Kennung
AW
SRW 3 // Ohne Bit
T SuchDaten_Startpunkt
L Datensatzlaenge // Datenblocklänge
L 2 // DB byteorientiert
*I
L SuchDaten_Startpunkt
+I
L SFC_DB_LENGTH
>I // Indaten-DB ist zu kurz
JC Err1 // SFC20-Aufruf mit Fehler
W401: L NoneD [AR2,] // Kennung, Adresse
LAR2
L Laenge // Anzahl der DWs zum Vergleichen im Datensatz
L400: T Schleife
L DBSuchdaten // Solldaten-DB
L 0 // Angegeben ?
==I // Nein
JC W402
OPN DB[DBSuchdaten]
W402: L NoneW [AR2,] // Mit Solldaten überprüfen
OPN DB[DBFifo]
L DBW [AR1Zeiger] // Fifo-Daten lesen
<>I // nicht identisch !
JC W403
L AR1Start // Startwert mit Offset 0
+ DINT#2
T AR1Start // Startwert mit nächstem Offset
SLD 3
T AR1Zeiger // /Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
ADDAR2 P#2.0
L Schleife
LOOP L400
JU Ende // Datensatz ist in Fifo enthalten
W403: L sRE_POS // RET-POS
+ 1
T sRE_POS // RET-POS
L Anzahl // Anzahl der Daten im Fifo
>I // Alle Datensätze sind durchsucht
JC Err2
L Datensatzlaenge // Datenblocklänge
L 2 // DB byteorientiert
*I
L SuchZeiger // Suchzeiger
+I
T SuchZeiger // Suchzeiger
L MaxHolzeiger // Maximum Holzeiger
<=I // Ende erreicht? Nein!
JC W404
L MinHolzeiger // Minimum Holzeiger
T SuchZeiger
W404: L SuchZeiger // Suchzeiger
JU W400
--- NW 5: Fehlerausgabe / RET_VAL ---
Ende: SET // VKE = 1 ohne Fehler !!!
JU Ok
Err0: L 2#0000_0000_0000_0001 // Kein Fifobereich
T Err
JU Err
Err1: S L32.1 // SFC20-Aufruf mit Fehler
JU Err
Err2: S L32.2 // Fifo ist leer
JU Err
Err6: S L32.6 // Holzeiger außerhalb
JU Err
Err7: S L32.7 // Versatz Bring-/Holzeiger
Err: L 0
T sRE_POS // RET-POS = 0
CLR // VKE = 0 bei Fehler !!!
Ok: L Err
T RE_VAL
L Status
OW
T Status
SAVE // VKE in BIE-Bit speichern
--- NW 6: Fifokopfdaten speichern ---
L AR2_Speicher // AR2 zurückspeichern
LAR2
A L32.0 // Falscher Parameter
A NixSave // Status nicht speichern
BEC
L SSDW
+ 10 // Status
ITD
T AR1Start // Startwert mit Offset 0
SLD 3
T AR1Zeiger // /Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
OPN DB[DBFifo]
L Err
T DBW [AR1Zeiger]
--- NW 7: ---
L sRE_POS
T RE_POS