
Originally Posted by
Jackjackson
ich will in STEP7 ein Programm schreiben, das über ein Signal einen Zähler hochzählt und jedesmal, wenn der hochzählt, den Wert als Integer-Wert speichert.... Frage ist, wo soll ich die Werte reinspeichern bzw. wie kann ich auf diese dann zugreifen?

Originally Posted by
Jackjackson
Es sind 10 Eingangssignale gekommen, der Zähler ist auf 10...
ich will dass die Werte 10, 9, 8, 7, 6, 5 irgendwo gespeichert werden, so dass ich auf die zugreifen kann... bei 11 wärn dann eben 11, 10, 9, 8, 7, 6...
Hier ist einmal ein Programmbeispiel für die Speicherung von Werten in einen FIFO-Speicher.
Die letzten 10 Zählwerte eines Zählers werden als INT-Werte in einem Datenbaustein als FIFO-Speicher gespeichert.
Code:
RGANIZATION_BLOCK "OB_HAUPTPROGRAMM"
TITLE = Hauptprogramm
//16
AUTHOR : KAI
FAMILY : SPSFORUM
NAME : FIFO
VERSION : 1.0
VAR_TEMP
OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
OB1_PRIORITY : BYTE ; //Priority of OB Execution
OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)
OB1_RESERVED_1 : BYTE ; //Reserved for system
OB1_RESERVED_2 : BYTE ; //Reserved for system
OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds)
OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)
OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)
OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started
END_VAR
BEGIN
NETWORK
TITLE =Zaehler
U "SIGNAL";
ZV "ZAEHLER";
BLD 101;
NOP 0;
NOP 0;
U "ZAEHLER_RUECKSETZEN";
R "ZAEHLER";
NOP 0;
LC "ZAEHLER";
T "ZAEHLER_ZAEHLWERT_BCD";
NOP 0;
NETWORK
TITLE =Zaehler
L "ZAEHLER_ZAEHLWERT_BCD";
BTI ;
T "ZAEHLER_ZAEHLWERT_INT";
NOP 0;
NETWORK
TITLE =FIFO Zaehler
U "SIGNAL";
FP "SIGNAL_FLANKE";
SPBNB _001;
CALL "FC_FIFO_ZAEHLER" (
DB_ZAEHLER := "DB_ZAEHLER",
ANZAHL_ZAEHLWERTE := 10,
ZAEHLWERT := "ZAEHLER_ZAEHLWERT_INT");
_001: NOP 0;
END_ORGANIZATION_BLOCK
Code:
TITLE =FIFO Zaehler
AUTHOR : KAI
FAMILY : SPSFORUM
NAME : FIFO
VERSION : 1.0
VAR_INPUT
DB_ZAEHLER : BLOCK_DB ;
ANZAHL_ZAEHLWERTE : INT ;
ZAEHLWERT : INT ;
END_VAR
VAR_TEMP
DB_REGISTER : WORD ;
AR1_REGISTER : DWORD ;
SCHLEIFE : INT ;
ZWISCHENWERT : INT ;
END_VAR
BEGIN
NETWORK
TITLE =Register sichern
L DBNO; // DB-Register
T #DB_REGISTER;
TAR1 #AR1_REGISTER; // AR1-Register
NETWORK
TITLE =FIFO Zaehler
AUF #DB_ZAEHLER; // DB Zaehler
L P#0.0;
LAR1 ;
L #ZAEHLWERT; // Zaehlwert
T #ZWISCHENWERT; // Zwischenwert
L #ANZAHL_ZAEHLWERTE; // Anzahl Zaehlwerte
M01: T #SCHLEIFE;
L DBW [AR1,P#0.0]; // Zaehlwert
L #ZWISCHENWERT; // Zwischenwert
T DBW [AR1,P#0.0]; // Zwischenwert => Zaehlwert
TAK ;
T #ZWISCHENWERT; // Zaehlwert => Zwischenwert
L P#2.0;
+AR1 ;
L #SCHLEIFE;
LOOP M01;
NETWORK
TITLE =Register wiederherstellen
AUF DB [#DB_REGISTER]; // DB-Register
LAR1 #AR1_REGISTER; // AR1-Register
END_FUNCTION
Gruß Kai
Bookmarks