-> Hier kostenlos registrieren
Hallo zusammen,
Ich programmiere gerade eine alte 315-2-DP mit TIA-Portal v.11 (STEP 7 Prof.) in AWL und kommen an einem Problem nicht weiter. Ich bin neu in der Simatic Welt und habe schon vieles hier gelesen und versucht das Problem zu lösen. Leider komme ich an dieser Stelle seit Tagen nicht weiter.
Ich möchte Analogwerte einer Spannungsmessung im 1s Takt fortlaufend in einem Array speichern und zu einem bestimmten Zeitpunkt (ausgelöst durch einen Näherungssensor), den Mittelwert dieses Arrays auswerten.
Ich bin schon in der lage im 1s Takt die Werte aus dem Analogeingang als WORD, durch Auswertung einer pos. Flanke, fortlaufend im Array zu speichern, ohne eine Fehlermeldung o.ä. zu bekommen.
Desweiteren funktioniert auch die Analogwert-Skalierung mit der Funktion "SCALE".
Leider bekomme ich es nicht hin, dass mir der Analogwert zuerst in einen REAL-Wert zwischengespeichert und anschließend fortlaufend ins Array geschrieben wird.
Es scheint als würde die CPU nach dem ersten SCALE nicht mehr weiter arbeiten, da mir der erste Wert ins Array geschrieben wird und der Index noch inkrementiert wird, dann aber nichts weiter passiert.
Ich hab nun versucht zuerst das WORD aus dem Analogeingang in eine DB zu schreiben, um dann anschließend diese Werte zu skalieren und in eine weitere DB zu schreiben. Dabei tritt leider das selbe Problem auf, es wird der erste Werte in die DB geschrieben und dann passiert nichts mehr, obwohl ich sehen kann, dass der Taktgeber noch weiter arbeitet.
Wenn ich nun den unteren Teil mit der Skalierung heraus nehme, funktioniert alles einwandfrei.
Habt ihr eine Idee wie ich dieses Problem lösen könnte ?
Danke schonmal.
Viele Grüße,
Doc
Ich programmiere gerade eine alte 315-2-DP mit TIA-Portal v.11 (STEP 7 Prof.) in AWL und kommen an einem Problem nicht weiter. Ich bin neu in der Simatic Welt und habe schon vieles hier gelesen und versucht das Problem zu lösen. Leider komme ich an dieser Stelle seit Tagen nicht weiter.
Ich möchte Analogwerte einer Spannungsmessung im 1s Takt fortlaufend in einem Array speichern und zu einem bestimmten Zeitpunkt (ausgelöst durch einen Näherungssensor), den Mittelwert dieses Arrays auswerten.
Ich bin schon in der lage im 1s Takt die Werte aus dem Analogeingang als WORD, durch Auswertung einer pos. Flanke, fortlaufend im Array zu speichern, ohne eine Fehlermeldung o.ä. zu bekommen.
Desweiteren funktioniert auch die Analogwert-Skalierung mit der Funktion "SCALE".
Leider bekomme ich es nicht hin, dass mir der Analogwert zuerst in einen REAL-Wert zwischengespeichert und anschließend fortlaufend ins Array geschrieben wird.
Es scheint als würde die CPU nach dem ersten SCALE nicht mehr weiter arbeiten, da mir der erste Wert ins Array geschrieben wird und der Index noch inkrementiert wird, dann aber nichts weiter passiert.
Ich hab nun versucht zuerst das WORD aus dem Analogeingang in eine DB zu schreiben, um dann anschließend diese Werte zu skalieren und in eine weitere DB zu schreiben. Dabei tritt leider das selbe Problem auf, es wird der erste Werte in die DB geschrieben und dann passiert nichts mehr, obwohl ich sehen kann, dass der Taktgeber noch weiter arbeitet.
Wenn ich nun den unteren Teil mit der Skalierung heraus nehme, funktioniert alles einwandfrei.
// Auswertung pos. Flanke
U "Taktzyklus"
FP "Merker_Flanke"
= "Trigger"
// WORD fortlaufend in Array speichern bis Array voll
L "Index"
L 500
>I
= "Merker_Vergleich"
U "Merker_Vergleich"
SPB ENDE
UN "Trigger"
SPB ENDE
L "Index" //Index der Sprungadresse
SLD 3
LAR1
L "Messwert"
AUF "Datenbaustein_1"
T DBW [ AR1 , P#0.0 ]
L "Index"
L 2
+I
T "Index"
ENDE: R "Trigger"
// MB2 mit der Zahl 0 füllen
U "Sensor_1"
SPBNB Label_0
L 0
T "DUMMY"
CALL FILL
BVAL :=P#M2.0 BYTE 1
RET_VAL :="RET_VAL_FILL"
BLK :="Index"
Label_0 : NOP 0
// Werte aus dem WORD Array in REAL skalieren und in einer anderen DB speichern
L 1
T "Unsigned_Byte"
L "Datenbaustein_1".Transmission[0]
T "Word_to_INT"
U "Unsigned_Bit"
= %L20.0
BLD 103
CALL SCALE
IN :="Word_to_INT"
HI_LIM :=0.08
LO_LIM :=0.0
BIPOLAR :=%L20.0
RET_VAL :="RET_VAL_SCALE"
OUT :="Datenbaustein_2".Ergebnis[0]
Habt ihr eine Idee wie ich dieses Problem lösen könnte ?
Danke schonmal.
Viele Grüße,
Doc
Zuletzt bearbeitet: