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

205 lines
7.8 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 82: FifoReset [STL] ===
INTERFACE:
Input:
SSDB : Int // Schnittstellen-DB
SSDW : Int // Schnittstellen-1.DW
PARA : Word // Aufrufparameter (Durchlaufspeicher?)
Output:
RE_VAL : Byte // Rückmeldung
InOut:
Temp:
Quelle : Any // Zeiger, wo Rein-Daten sind
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
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
Schleife : Word // Loopzähler
SFC_WRITE_PROT : Bool // Rückmeldung SFC-Aufruf
Constant:
Return:
Ret_Val : Void
--- NW 1: Schnittstellen-DB sinnvoll ? ---
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
O SFC_WRITE_PROT
JC Err0 // kein Fifobereich
--- NW 2: Quelle-Pointer erzeugen: ---
L 16#1004 // Kennung 10 + Word=04
T LW0 // 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#L10.0 WORD 6) // 1.-6.DW FIFO holen
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 !
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 FifoLaenge // Länge FIFO (in Word)
L Datensatzlaenge // Datenblocklänge
*I
L 2 // DB byteorientiert
*I
+ 40 // Speichern ab 20.DW
L SSDW
+I
T Fifo_Ende
SLW 3 // Pointer erzeugen
LAR1
OPN DB[DBFifo]
L Fifo_Ende
L SFC_DB_LENGTH
>I // Fifo-DB ist zu kurz!
JC Err0 // kein Fifo-Bereich
L DBW [AR1,]
L 16#FFEE // Fifo-Endekennung ?
<>I // Nein !
JC Err0 // kein Fifobereich
--- NW 4: Fifo-Daten löschen ---
L SSDW
+ 4 // Ab 2.Dw
SLW 3 // Pointer erzeugen
LAR1
OPN DB[DBFifo]
L Datensatzlaenge
L FifoLaenge
*I
+ 18 // 18 Datenwörter (wortorientiert)
L400: T Schleife
L 0
T DBW [AR1,]
ADDAR1 P#2.0
L Schleife
LOOP L400
--- NW 5: Durchlaufspeicher ? ---
L PARA // Aufrufparameter
SRW 4
L 16#000D // Durchlaufspeicher ?
<>I // Nein !
JC N006
L SSDW
+ 4 // Speichern ab 4.DW
SLW 3 // Pointer erzeugen
LAR1
OPN DB[DBFifo]
L SSDW
+ 40 // 1.Speicherzelle
T DBW [AR1,] // Bringzeiger
T DBW [AR1,] // Holzeiger
L FifoLaenge // Fifo ist voll
T DBW [AR1,] // Anzahl
L PARA // Aufrufparameter
L 16#00D1 // Durchlaufspeicher mit FFFF füllen
<>I // Nein !
JC N006
L FifoLaenge // Fifo ist voll
T DBW [AR1,] // 1.Zusatz-Dw (Anzahl der Daten)
L 2#0000_0000_0000_0011 // Daten vorhanden/kommen raus
T DBW [AR1,] // 4.Zusatz-Dw (Status)
L SSDW
+ 40 // Ab 20.Dw
SLW 3 // Pointer erzeugen
LAR1
OPN DB[DBFifo]
L Datensatzlaenge
L FifoLaenge
*I
L500: T Schleife
L 16#FFFF
T DBW [AR1,]
ADDAR1 P#2.0
L Schleife
LOOP L500
--- NW 6: Fehlerausgabe / RET_VAL ---
N006: SET // VKE = 1 ohne Fehler !!!
L 2#0000_0000_0000_0000
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