UH07 Original .awl Bausteine von Andi importiert
This commit is contained in:
@@ -1,327 +1,375 @@
|
||||
=== FC 84: FIFOChange [STL] ===
|
||||
INTERFACE:
|
||||
Input:
|
||||
SSDB : Int // Schnittstellen-DB
|
||||
SSDW : Int // Schnittstellen-1.DW
|
||||
CH_POS : Int // Position des Eintrags, der zu ändernden Daten
|
||||
CHANGEDATEN : Pointer // Wechsel-Daten-Schnittstelle
|
||||
Output:
|
||||
RE_VAL : Byte // Rückmeldung
|
||||
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
|
||||
AlleDaten : Word // Anzahl der bytes für alle Daten
|
||||
Offset : Word // Offset zu überschreibender Datensatz
|
||||
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
|
||||
Constant:
|
||||
Return:
|
||||
Ret_Val : Void
|
||||
FUNCTION "FIFOChange" : Void
|
||||
TITLE = Fifo-Modul
|
||||
{ S7_Optimized_Access := 'FALSE' }
|
||||
AUTHOR : IBAE
|
||||
FAMILY : FIFO
|
||||
NAME : FifoIn
|
||||
VERSION : 0.1
|
||||
//COPYRIGHT by Ingenieurbüro A.Emmert
|
||||
//Ortsstr.33, D-869925 Fuchstal (Germany)
|
||||
//Tel.: 0049(0)8243-960629
|
||||
//Version: KyungBang00 / 14.04.2009
|
||||
//
|
||||
//Datenblock in Fifo überschreiben
|
||||
//SSDB: FIFO-DB
|
||||
//SSDW: FIFO-1.DW
|
||||
//CH_POS: angegebene Position überschreiben
|
||||
//CHANGEDATEN: Pointer, wo zu ändernde Daten stehen (P#DB1.DBX0.0, P#M220.0)
|
||||
//RE_VAL: Rückmeldungen:
|
||||
// Bit0: Kein Fifobereich / falscher Kopfinhalt / Endekennung
|
||||
// Bit1: SFC20-Aufruf mit Fehler
|
||||
// Bit2: Fifo ist leer
|
||||
// Bit3: Falscher Parameter bei Aufruf
|
||||
// Bit4: Position nicht belegt
|
||||
// Bit5: Bringzeiger ist ausserhalb
|
||||
// Bit6: Holzeiger ist ausserhalb
|
||||
// Bit7: Versatz Bring-/Holzeiger
|
||||
//
|
||||
VAR_INPUT
|
||||
SSDB : Int; // Schnittstellen-DB
|
||||
SSDW : Int; // Schnittstellen-1.DW
|
||||
CH_POS : Int; // Position des Eintrags, der zu ändernden Daten
|
||||
CHANGEDATEN : Pointer; // Wechsel-Daten-Schnittstelle
|
||||
END_VAR
|
||||
|
||||
--- NW 1: Schnittstellen-DB sinnvoll ? ---
|
||||
L SSDB
|
||||
T DBFifo
|
||||
VAR_OUTPUT
|
||||
RE_VAL : Byte; // Rückmeldung
|
||||
END_VAR
|
||||
|
||||
// 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)
|
||||
VAR_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
|
||||
AlleDaten : Word; // Anzahl der bytes für alle Daten
|
||||
Offset : Word; // Offset zu überschreibender Datensatz
|
||||
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
|
||||
END_VAR
|
||||
|
||||
|
||||
L SFC_RET_VAL
|
||||
L 2#0000_0000_0000_0000
|
||||
<>I
|
||||
O SFC_WRITE_PROT
|
||||
= NixSave // Status nicht speichern
|
||||
JC Err0 // kein Fifobereich
|
||||
BEGIN
|
||||
NETWORK
|
||||
TITLE = 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 "TEST_DB_TO_ATTR_DB"
|
||||
( DB_Number := #DBFifo ,
|
||||
RetVal := #SFC_RET_VAL ,
|
||||
DB_Length := #SFC_DB_LENGTH ,
|
||||
Write_Prot := #SFC_WRITE_PROT
|
||||
);
|
||||
|
||||
|
||||
--- 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
|
||||
L #SFC_RET_VAL;
|
||||
L 2#0000_0000_0000_0000;
|
||||
<>I;
|
||||
O #SFC_WRITE_PROT;
|
||||
= #NixSave;//Status nicht speichern
|
||||
SPB Err0;//kein Fifobereich
|
||||
|
||||
CALL SYS "BLKMOV" (SRCBLK:=Quelle, RET_VAL:=SFC_RET_VAL, DSTBLK:=P#L20.0 WORD 6) // 1.-6.DW FIFO holen
|
||||
NETWORK
|
||||
TITLE = Fifokopfdaten holen
|
||||
//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
|
||||
|
||||
L Status
|
||||
L 2#0000_0000_1110_0000
|
||||
AW
|
||||
T Err
|
||||
JP Err // Kapitalfehler vorhanden
|
||||
CALL BLKMOV//1.-6.DW FIFO holen
|
||||
{blk_type := 'Variant'}
|
||||
( SRCBLK := #Quelle ,
|
||||
RET_VAL := #SFC_RET_VAL ,
|
||||
DSTBLK := P#L20.0 WORD 6
|
||||
);
|
||||
|
||||
L SFC_RET_VAL
|
||||
L 2#0000_0000_0000_0000
|
||||
<>I
|
||||
JC Err1
|
||||
L #Status;
|
||||
L 2#0000_0000_1110_0000;
|
||||
UW;
|
||||
T #Err;
|
||||
SPP Err;//Kapitalfehler vorhanden
|
||||
|
||||
L #SFC_RET_VAL;
|
||||
L 2#0000_0000_0000_0000;
|
||||
<>I;
|
||||
SPB Err1;
|
||||
|
||||
NETWORK
|
||||
TITLE = Zeigerüberprüfung
|
||||
L #Kopf;//Fifo-Kopf
|
||||
L 16#FF;//= Fifokennung ?
|
||||
<>I;//Nein !
|
||||
= #NixSave;//Status nicht speichern
|
||||
SPB Err0;//kein Fifobereich
|
||||
|
||||
L 1;
|
||||
L #Datensatzlaenge;//Datenblocklänge
|
||||
>I;
|
||||
SPB Err0;//kein Fifobereich
|
||||
|
||||
L 128;
|
||||
>I;
|
||||
SPB Err0;//kein Fifobereich
|
||||
|
||||
L 1;
|
||||
L #FifoLaenge;//Max.Anzahl von Datenblöcken
|
||||
>I;
|
||||
SPB Err0;//kein Fifobereich
|
||||
|
||||
L #SSDW;
|
||||
+ 40;//Speichern ab 20.DW
|
||||
T #MinHolzeiger;//Minimum Bringzeiger
|
||||
|
||||
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 Bringzeiger
|
||||
|
||||
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)
|
||||
|
||||
AUF DB[ #DBFifo];
|
||||
|
||||
L #Fifo_Ende;
|
||||
L #SFC_DB_LENGTH;
|
||||
>I;//Fifo-DB ist zu kurz!
|
||||
SPB Err0;//kein Fifo-Bereich
|
||||
|
||||
L DBW[ #AR1Zeiger];
|
||||
L 16#FFEE;//Fifo-Endekennung ?
|
||||
<>I;//Nein !
|
||||
SPB Err0;//kein Fifobereich
|
||||
|
||||
L #MinHolzeiger;//Minimum Holzeiger
|
||||
L #Holzeiger;//Holzeiger
|
||||
<=I;//Ok ?
|
||||
SPB W300;//Ja!
|
||||
|
||||
L 0;//Grundstellung ?
|
||||
<>I;//Nein !
|
||||
SPB Err6;//Holzeiger ist ausserhalb
|
||||
|
||||
L #Holzeiger;//Holzeiger Grundstellung ?
|
||||
<>I;//Nein !
|
||||
SPB Err6;//Holzeiger ist ausserhalb
|
||||
|
||||
L #Anzahl;//Anzahl Datensätze
|
||||
L 0;//Grundstellung ?
|
||||
<>I;//Nein !
|
||||
SPB Err6;//Holzeiger ist ausserhalb
|
||||
|
||||
L #MinHolzeiger;//Minimum Holzeiger
|
||||
T #Bringzeiger;//Bringzeiger
|
||||
T #Holzeiger;//Holzeiger
|
||||
|
||||
W300: L #MaxHolzeiger;//Maximum Holzeiger
|
||||
<=I;//Ok ?
|
||||
SPB W301;//Ja!
|
||||
SPA Err6;//Holzeiger ist ausserhalb
|
||||
|
||||
|
||||
--- NW 3: Zeigerüberprüfung ---
|
||||
L Kopf // Fifo-Kopf
|
||||
L 16#FF // = Fifokennung ?
|
||||
<>I // Nein !
|
||||
= NixSave // Status nicht speichern
|
||||
JC Err0 // kein Fifobereich
|
||||
W301: L #Bringzeiger;//Bringzeiger
|
||||
L #Holzeiger;//Holzeiger
|
||||
==I;//Identisch !
|
||||
U(;
|
||||
L #FifoLaenge;
|
||||
L #Anzahl;//Anzahl der gespeicherten Datensätze
|
||||
<>I;//Fifo noch nicht voll !
|
||||
);
|
||||
U(;
|
||||
L 0;
|
||||
<>I;//Datensätze aber noch vorhanden !
|
||||
);
|
||||
SPB Err7;//Versatz Bring-/Holzeiger
|
||||
|
||||
L 1
|
||||
L Datensatzlaenge // Datenblocklänge
|
||||
>I
|
||||
JC Err0 // kein Fifobereich
|
||||
L #Bringzeiger;//Bringzeiger
|
||||
L #Holzeiger;//Holzeiger
|
||||
<>I;//Ungleich !
|
||||
U(;
|
||||
L #FifoLaenge;
|
||||
L #Anzahl;//Anzahl der gespeicherten Datensätze
|
||||
==I;//Aber Fifo ist voll !
|
||||
O(;
|
||||
L 0;
|
||||
==I;//Aber keine Datensätze vorhanden !
|
||||
);
|
||||
);
|
||||
SPB Err7;//Versatz Bring-/Holzeiger
|
||||
|
||||
L 128
|
||||
>I
|
||||
JC Err0 // kein Fifobereich
|
||||
L #Anzahl;//Anzahl der gespeicherten Datensätze
|
||||
L 0;
|
||||
==I;//Keine Datensätze vorhanden !
|
||||
SPB Err2;//Fifo ist leer
|
||||
|
||||
L 1
|
||||
L FifoLaenge // Max.Anzahl von Datenblöcken
|
||||
>I
|
||||
JC Err0 // kein Fifobereich
|
||||
NETWORK
|
||||
TITLE = Offset bilden
|
||||
L 0;
|
||||
L #CH_POS;
|
||||
>=I;
|
||||
SPB Err3;//falscher Parameter bei Aufruf
|
||||
|
||||
L SSDW
|
||||
+ 40 // Speichern ab 20.DW
|
||||
T MinHolzeiger // Minimum Bringzeiger
|
||||
L #FifoLaenge;//Max.Anzahl von Datenblöcken
|
||||
>I;
|
||||
SPB Err3;//falscher Parameter bei Aufruf
|
||||
|
||||
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 Bringzeiger
|
||||
L #Anzahl;//Anzahl der Datensätze
|
||||
L #CH_POS;
|
||||
<I;
|
||||
SPB Err4;//Fifo ist leer
|
||||
|
||||
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)
|
||||
+ -1;//1.Teil = Holzeiger !
|
||||
L #Datensatzlaenge;//Datenblocklänge
|
||||
*I;
|
||||
L 2;//DB byteorientiert
|
||||
*I;
|
||||
L #Holzeiger;//Holzeiger
|
||||
+I;
|
||||
W400: T #Offset;//Schreibzeiger
|
||||
L #MaxHolzeiger;//Maximum Holzeiger
|
||||
<=I;
|
||||
SPB Nw05;
|
||||
|
||||
OPN DB[DBFifo]
|
||||
L #FifoLaenge;//Max.Anzahl von Datenblöcken
|
||||
L #Datensatzlaenge;//Datenblocklänge
|
||||
*I;
|
||||
L 2;//DB byteorientiert
|
||||
*I;
|
||||
T #AlleDaten;//Bytes für alle Datensätze
|
||||
|
||||
L Fifo_Ende
|
||||
L SFC_DB_LENGTH
|
||||
>I // Fifo-DB ist zu kurz!
|
||||
JC Err0 // kein Fifo-Bereich
|
||||
L #Offset;//Schreibzeiger
|
||||
L #AlleDaten;
|
||||
-I;
|
||||
SPA W400;
|
||||
|
||||
L DBW [AR1Zeiger]
|
||||
L 16#FFEE // Fifo-Endekennung ?
|
||||
<>I // Nein !
|
||||
JC Err0 // kein Fifobereich
|
||||
NETWORK
|
||||
TITLE = Fifodaten überschreiben
|
||||
//Quelle-Pointer erzeugen:
|
||||
Nw05: L 16#1004;//Kennung 10 + Word=04
|
||||
T %LW0;
|
||||
T %LW10;//Any-Kennung, Datentyp
|
||||
L #Datensatzlaenge;//Datenbytes speichern
|
||||
T %LW2;
|
||||
T %LW12;//Wiederholungen
|
||||
|
||||
L MinHolzeiger // Minimum Holzeiger
|
||||
L Holzeiger // Holzeiger
|
||||
<=I // Ok ?
|
||||
JC W300 // Ja!
|
||||
//DATEN-Pointer übernehmen:
|
||||
L P##CHANGEDATEN;
|
||||
LAR1;
|
||||
|
||||
L 0 // Grundstellung ?
|
||||
<>I // Nein !
|
||||
JC Err6 // Holzeiger ist ausserhalb
|
||||
L W[ AR1, P#0.0];
|
||||
T %LW4;//DB_Nummer
|
||||
L D[ AR1, P#2.0];
|
||||
T %LD6;//Kennung, Adresse
|
||||
|
||||
L Holzeiger // Holzeiger Grundstellung ?
|
||||
<>I // Nein !
|
||||
JC Err6 // Holzeiger ist ausserhalb
|
||||
//Ziel-Pointer erzeugen:
|
||||
//Kennung + Datenbytes s.o.
|
||||
|
||||
L Anzahl // Anzahl Datensätze
|
||||
L 0 // Grundstellung ?
|
||||
<>I // Nein !
|
||||
JC Err6 // Holzeiger ist ausserhalb
|
||||
L #SSDB;
|
||||
T %LW14;//DB_Nummer
|
||||
L #Offset;//Adresse
|
||||
SLD 3;
|
||||
L 16#8400_0000;//Kennung: Daten
|
||||
OD;
|
||||
T %LD16;//Kennung, Adresse
|
||||
|
||||
L MinHolzeiger // Minimum Holzeiger
|
||||
T Bringzeiger // Bringzeiger
|
||||
T Holzeiger // Holzeiger
|
||||
CALL BLKMOV//FIFO-Daten speichern
|
||||
{blk_type := 'Variant'}
|
||||
( SRCBLK := #Quelle ,
|
||||
RET_VAL := #SFC_RET_VAL ,
|
||||
DSTBLK := #Ziel
|
||||
);
|
||||
|
||||
W300: L MaxHolzeiger // Maximum Holzeiger
|
||||
<=I // Ok ?
|
||||
JC W301 // Ja!
|
||||
JU Err6 // Holzeiger ist ausserhalb
|
||||
L #SFC_RET_VAL;
|
||||
L 2#0000_0000_0000_0000;
|
||||
<>I;
|
||||
SPB Err1;
|
||||
|
||||
NETWORK
|
||||
TITLE = Fehlerausgabe / RET_VAL
|
||||
SET;//VKE = 1 ohne Fehler !!!
|
||||
SPA Ok;
|
||||
Err0: L 2#0000_0000_0000_0001;//Kein Fifobereich
|
||||
T #Err;
|
||||
SPA Err;
|
||||
Err1: S %L32.1;//SFC20-Aufruf mit Fehler
|
||||
SPA Err;
|
||||
Err2: S %L32.2;//Fifo ist voll
|
||||
SPA Err;
|
||||
Err3: S %L32.3;//Falscher Parameter
|
||||
SPA Err;
|
||||
Err4: S %L32.4;//Position nicht belegt
|
||||
SPA Err;
|
||||
Err6: S %L32.6;//Holzeiger außerhalb
|
||||
SPA Err;
|
||||
Err7: S %L32.7;//Versatz Bring-/Holzeiger
|
||||
|
||||
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
|
||||
Err: CLR;//VKE = 0 bei Fehler !!!
|
||||
Ok: L #Err;
|
||||
T #RE_VAL;
|
||||
L #Status;
|
||||
OW;
|
||||
T #Status;
|
||||
|
||||
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
|
||||
SAVE;//VKE in BIE-Bit speichern
|
||||
|
||||
L Anzahl // Anzahl der gespeicherten Datensätze
|
||||
L 0
|
||||
==I // Keine Datensätze vorhanden !
|
||||
JC Err2 // Fifo ist leer
|
||||
NETWORK
|
||||
TITLE = Fifokopfdaten speichern
|
||||
U %L32.0;//Falscher Parameter
|
||||
U #NixSave;//Status nicht speichern
|
||||
BEB;
|
||||
|
||||
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)
|
||||
|
||||
--- NW 4: Offset bilden ---
|
||||
L 0
|
||||
L CH_POS
|
||||
>=I
|
||||
JC Err3 // falscher Parameter bei Aufruf
|
||||
AUF DB[ #DBFifo];
|
||||
|
||||
L FifoLaenge // Max.Anzahl von Datenblöcken
|
||||
>I
|
||||
JC Err3 // falscher Parameter bei Aufruf
|
||||
L #Err;
|
||||
T DBW[ #AR1Zeiger];
|
||||
|
||||
L Anzahl // Anzahl der Datensätze
|
||||
L CH_POS
|
||||
<I
|
||||
JC Err4 // Fifo ist leer
|
||||
|
||||
+ -1 // 1.Teil = Holzeiger !
|
||||
L Datensatzlaenge // Datenblocklänge
|
||||
*I
|
||||
L 2 // DB byteorientiert
|
||||
*I
|
||||
L Holzeiger // Holzeiger
|
||||
+I
|
||||
W400: T Offset // Schreibzeiger
|
||||
L MaxHolzeiger // Maximum Holzeiger
|
||||
<=I
|
||||
JC Nw05
|
||||
|
||||
L FifoLaenge // Max.Anzahl von Datenblöcken
|
||||
L Datensatzlaenge // Datenblocklänge
|
||||
*I
|
||||
L 2 // DB byteorientiert
|
||||
*I
|
||||
T AlleDaten // Bytes für alle Datensätze
|
||||
|
||||
L Offset // Schreibzeiger
|
||||
L AlleDaten
|
||||
-I
|
||||
JU W400
|
||||
|
||||
|
||||
--- NW 5: Quelle-Pointer erzeugen: ---
|
||||
Nw05: L 16#1004 // Kennung 10 + Word=04
|
||||
T LW0
|
||||
T LW10 // Any-Kennung, Datentyp
|
||||
L Datensatzlaenge // Datenbytes speichern
|
||||
T LW2
|
||||
T LW12 // Wiederholungen
|
||||
|
||||
// DATEN-Pointer übernehmen:
|
||||
L P#
|
||||
LAR1
|
||||
|
||||
L NoneW [AR1,]
|
||||
T LW4 // DB_Nummer
|
||||
L NoneD [AR1,]
|
||||
T LD6 // Kennung, Adresse
|
||||
|
||||
// Ziel-Pointer erzeugen:
|
||||
// Kennung + Datenbytes s.o.
|
||||
|
||||
L SSDB
|
||||
T LW14 // DB_Nummer
|
||||
L Offset // Adresse
|
||||
SLD 3
|
||||
L 16#8400_0000 // Kennung: Daten
|
||||
OD
|
||||
T LD16 // Kennung, Adresse
|
||||
|
||||
CALL SYS "BLKMOV" (SRCBLK:=Quelle, RET_VAL:=SFC_RET_VAL, DSTBLK:=Ziel) // FIFO-Daten speichern
|
||||
|
||||
L SFC_RET_VAL
|
||||
L 2#0000_0000_0000_0000
|
||||
<>I
|
||||
JC Err1
|
||||
|
||||
|
||||
--- NW 6: Fehlerausgabe / RET_VAL ---
|
||||
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 voll
|
||||
JU Err
|
||||
Err3: S L32.3 // Falscher Parameter
|
||||
JU Err
|
||||
Err4: S L32.4 // Position nicht belegt
|
||||
JU Err
|
||||
Err6: S L32.6 // Holzeiger außerhalb
|
||||
JU Err
|
||||
Err7: S L32.7 // Versatz Bring-/Holzeiger
|
||||
|
||||
Err: CLR // VKE = 0 bei Fehler !!!
|
||||
Ok: L Err
|
||||
T RE_VAL
|
||||
L Status
|
||||
OW
|
||||
T Status
|
||||
|
||||
SAVE // VKE in BIE-Bit speichern
|
||||
|
||||
|
||||
--- NW 7: Fifokopfdaten speichern ---
|
||||
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]
|
||||
END_FUNCTION
|
||||
|
||||
|
||||
Reference in New Issue
Block a user