-> Hier kostenlos registrieren
An die SPS werden die IDs der Fördergüter gesendet, welches die 10 IDs speichert, auf die man zugreifen kann...
Welchen Wertebereich (INT oder DINT) haben die IDs?
DINT wär am günstigsten
Hier ist noch einmal ein neues Programmbeispiel für die Speicherung von Werten in einen FIFO-Speicher.
Eine beliebige Fördergut ID-Nummer wird im MD100 ID_NUMMER im Datenformat DINT eingetragen.
Bei einem positiven Flankenwechsel am M110.0 SIGNAL wird die ID-Nummer im FIFO-Speicher im DB100 DB_FOERDERGUT gespeichert.
Im FIFO-Speicher werden die letzten 10 ID-Nummern gespeichert.
Code:
ORGANIZATION_BLOCK OB 1
TITLE = Hauptprogramm
//18
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 =FIFO Foerdergut
U M 110.0;
FP M 110.1;
SPBNB _001;
CALL FC 100 (
DB_FOERDERGUT := DB 100,
ANZAHL_ID_NUMMERN := 10,
ID_NUMMER := MD 100);
_001: NOP 0;
END_ORGANIZATION_BLOCK
Code:
FUNCTION FC 100 : VOID
TITLE =FIFO Foerdergut
AUTHOR : KAI
FAMILY : SPSFORUM
NAME : FIFO
VERSION : 1.0
VAR_INPUT
DB_FOERDERGUT : BLOCK_DB ;
ANZAHL_ID_NUMMERN : INT ;
ID_NUMMER : DINT ;
END_VAR
VAR_TEMP
DB_REGISTER : WORD ;
AR1_REGISTER : DWORD ;
ZWISCHENWERT : DINT ;
SCHLEIFE : INT ;
END_VAR
BEGIN
NETWORK
TITLE =Register sichern
L DBNO; // DB-Register
T #DB_REGISTER;
TAR1 #AR1_REGISTER; // AR1-Register
NETWORK
TITLE =FIFO Foerdergut
AUF #DB_FOERDERGUT; // DB Foerdergut
L P#0.0;
LAR1 ;
L #ID_NUMMER; // ID-Nummer
T #ZWISCHENWERT; // Zwischenwert
L #ANZAHL_ID_NUMMERN; // Anzahl ID-Nummern
M01: T #SCHLEIFE;
L DBD [AR1,P#0.0]; // ID-Nummer
L #ZWISCHENWERT; // Zwischenwert
T DBD [AR1,P#0.0]; // Zwischenwert => ID-Nummer
TAK ;
T #ZWISCHENWERT; // ID-Nummer => Zwischenwert
L P#4.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
Anhänge
Zuletzt bearbeitet: