softwareheini
Level-1
- Beiträge
- 29
- Reaktionspunkte
- 1
-> Hier kostenlos registrieren
Hallo Leute,
hoffe Ihr könnt mir weiterhelfen.
Habe ne Siemens CPU 315 2DP (Step7 V5.4)
Ich möchte skallierte Analogwerte über ein Schleife
in einen DB schreiben.
Das funktioniert auch soweit.
Nur möchte ich nur einmal pro Sekunden den
Analogwert in den DB schreiben, bei erneutem Impuls
den Wert in die nächste Speicherstelle vom dem DB
usw. bis der DB voll ist.
Und dann wieder von vorne anfangen.
Brauch das für ne Mittelwertbildung.
Im moment werden aber leider alle Speicherstellen
gleichzeitig beschrieben.
vielen Dank schon mal im vor aus!!!
hoffe Ihr könnt mir weiterhelfen.
Habe ne Siemens CPU 315 2DP (Step7 V5.4)
Ich möchte skallierte Analogwerte über ein Schleife
in einen DB schreiben.
Das funktioniert auch soweit.
Nur möchte ich nur einmal pro Sekunden den
Analogwert in den DB schreiben, bei erneutem Impuls
den Wert in die nächste Speicherstelle vom dem DB
usw. bis der DB voll ist.
Und dann wieder von vorne anfangen.
Brauch das für ne Mittelwertbildung.
Im moment werden aber leider alle Speicherstellen
gleichzeitig beschrieben.
Code:
FUNCTION "FC Schreiben" : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
dbnummer : INT ;
Analogsignal : REAL ;
Impuls : BOOL ;
END_VAR
VAR_OUTPUT
Ausgang : REAL ;
END_VAR
VAR_TEMP
dbnr : WORD ;
Schleifenzaehler : INT ;
Check_Ret_Val : INT ;
Check_DB_Length : WORD ;
Check_Write_rot : BOOL ;
dbnummer_1 : WORD ;
Ergebniss : REAL ;
Schleifenzaehler_1 : INT ;
Flanke_Impulse : BOOL ;
END_VAR
BEGIN
NETWORK
TITLE =
L #dbnummer;
T #dbnummer_1;
NETWORK
TITLE =Aktuelle DB Checken
CALL "TEST_DB" (
DB_NUMBER := #dbnummer_1,
RET_VAL := #Check_Ret_Val,
DB_LENGTH := #Check_DB_Length,
WRITE_PROT := #Check_Write_rot);
NOP 0;
NETWORK
TITLE =
L #dbnummer;
T #dbnr;
AUF DB [#dbnr];
NETWORK
TITLE =
LAR1 P#0.0;
L #Check_DB_Length; // Länge vom DB laden
SRW 2; // 2 Bit nach Rechts schieben
anf: T #Schleifenzaehler; /
L #Analogsignal;
T DBD [AR1,P#0.0];
+AR1 P#4.0;
L #Schleifenzaehler;
LOOP anf;