alle xml in .awl konvertiert und eingecheckt
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user