Step 7 Werte wandern zu anderen Instanzen ?!?

Nik3000

Level-1
Beiträge
6
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich steh da ein bisschen auf den Schlauch :D

Ich hab mir ein FB12 gebaut, mit dem ich ein Wert errechne.
Ein Kamerasystem sendet mir nur ein True/Flase, ob die Messung IO oder NIO war.
Ich möchte jetzt eine Tendenz der letzten 10 Messungen darstellen. (um ggf. einzugreifen)
Also hab ich mir einen FB gebaut, bei dem ich mir für jede IO Flanke eine "100" wegspeichere und bei einer NIO Flanke eine "0", die Werte landen in einem "Schieberegister" und mit jedem neuen Wert addiere ich alle Register und Teile sie durch 10. Anhand diesem Wertes kann ich dann erkennen, ob wir mehr in Richtung IO oder NIO gehen.

Wenn ich meinen FB12+DB112 1x benutze funktioniert alles super.

ABER ich möchte ihn ja mehr mals benutzen. :-D
Sobald ich ihn mehrmals aufrufe wird seltsam.
Jeder weitere FB12 Aufruf mit neunem Instanz-DB (113,114,..) übernimmt den Tendenzwert des vorgieren.
OBWOHL alle Speicherplätze mit 0 gefüllt sind.
Sprich obwohl noch nichts passiert ist, hat der Ausgang des 2. Aufrufes den Wert des 1. Aufrufes.
Der 3. Aufruf den Wert des 1 & 2. Aufrufes usw.

Als Beispiel: wenn ich 4 Aufrufe habe und jeder Aufruf EINE Messung hat, erwarte ich überall eine 10. ( (100+0+0+0+0+0+0+0+0+0)/100)
Aber ich erhalte:
Aufruf 1: Tendenz 10
Aufruf 2: Tendenz 20
Aufruf 3: Tendenz 30
Aufruf 4: Tendenz 40

-Ausgang auch schon von OUT in in_Out gewechselt.
- FB12+DB112 & FB13 + DB113 ( FB kopiert & umbenannt) selbst so ist der Fehler mitgewandert.
-Dabei sollten doch Instanzen/FB-Aufrufe separat arbeiten ?

Evtl. hat ja jemand von euch einen Tipp und kann mir sagen wo mein Denkfehler liegt?
Ein FB wären doch genau für so etwas perfekt ?
Oder kann mir helfen nach welchem Thema ich hier suchen soll.

Ich hoffe ihr könnt mir folgen & Ich danke euch schon mal 🙈🙈
 

Anhänge

  • InstanzDB.PNG
    InstanzDB.PNG
    98,3 KB · Aufrufe: 80
  • InstanzFB.PNG
    InstanzFB.PNG
    176,6 KB · Aufrufe: 81
Zuviel Werbung?
-> Hier kostenlos registrieren
ist dein #ZwischenErgebnis ein Temp?
wenn ja, wird es zu Bausteinbeginn vom FB12 abgenullt?
Wenn nein würde es genau dieses Verhalten erklären, weil er sich den Wert vom vorigen Aufruf merken würde..
 
mit jedem neuen Wert addiere ich alle Register und Teile sie durch 10.
(...)
Als Beispiel: wenn ich 4 Aufrufe habe und jeder Aufruf EINE Messung hat, erwarte ich überall eine 10. ( (100+0+0+0+0+0+0+0+0+0)/100)
Warum addierst Du überhaupt #ZwischenErgebnis zu #Speicherplatz_1 ?? :unsure:

Den Mittelwert über 10 Werte (alle 10 Werte addieren und dann durch 10) macht man in AWL nicht so überaus umständlich sondern einfach so:
Code:
L #Speicherplatz_1
L #Speicherplatz_2
+R
L #Speicherplatz_3
+R
L #Speicherplatz_4
+R
L #Speicherplatz_5
+R
L #Speicherplatz_6
+R
L #Speicherplatz_7
+R
L #Speicherplatz_8
+R
L #Speicherplatz_9
+R
L #Speicherplatz_10
+R
L 1.000000e+001
/R
T #BoolscheTendenz

Am Ende von Netzwerk 16 die 3 Anweisungen "NOP 0, L 0, BEA" sind total überflüssig, die kannst Du weglassen.

Harald
 
ist dein #ZwischenErgebnis ein Temp?
wenn ja, wird es zu Bausteinbeginn vom FB12 abgenullt?
Wenn nein würde es genau dieses Verhalten erklären, weil er sich den Wert vom vorigen Aufruf merken würde..

Ja richtig, es ist eine Temp, denn als ich sie in Static deklariert habe, hat er immer nur drauf Addiert und nicht mehr aufgehört. Bei Temp war das erschlagen und hab’s nicht weiter verfolgt. Aber mit einem vernünftigen ablöschen am Baustein Anfang könnte ich es nochmal probieren. Klingt erstmal sehr plausibel, als wäre das mein Problem.

Warum addierst Du überhaupt #ZwischenErgebnis zu #Speicherplatz_1 ?? :unsure:

Den Mittelwert über 10 Werte (alle 10 Werte addieren und dann durch 10) macht man in AWL nicht so überaus umständlich sondern einfach so:
Code:
L #Speicherplatz_1
L #Speicherplatz_2
+R
L #Speicherplatz_3
+R
L #Speicherplatz_4
+R
L #Speicherplatz_5
+R
L #Speicherplatz_6
+R
L #Speicherplatz_7
+R
L #Speicherplatz_8
+R
L #Speicherplatz_9
+R
L #Speicherplatz_10
+R
L 1.000000e+001
/R
T #BoolscheTendenz

Am Ende von Netzwerk 16 die 3 Anweisungen "NOP 0, L 0, BEA" sind total überflüssig, die kannst Du weglassen.

Harald

Ich bin in awl nicht besonders fit, daher wollte ich erstmal mich langsam rantasten, aber wo ich dein Vorschlag so lese, da hast du natürlich einfach recht, das ist wesentlich einfacher und würde auch gleich mein Problem, was revve, angesprochen hat mit erschlagen.

Die „Nop 0/Bea“ waren verzweifelte Lösungsansätze 😃.

Im nächsten Step, wäre dann meine idee, irgendwie mit nem Array und ner Schleife zuarbeiten damit man mit einer flexible Anzahl Ergebnissen arbeiten könnte, aber erstmal muss das laufen 😃😃

Ich danke euch schon mal für eure Hilfe, ich werde das mal ausprobieren und Bericht erstatten

Beste Grüße 🖖🏻
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja richtig, es ist eine Temp, denn als ich sie in Static deklariert habe, hat er immer nur drauf Addiert und nicht mehr aufgehört. Bei Temp war das erschlagen und hab’s nicht weiter verfolgt. Aber mit einem vernünftigen ablöschen am Baustein Anfang könnte ich es nochmal probieren. Klingt erstmal sehr plausibel, als wäre das mein Problem.
na, zumindest haben wir dann heute gelernt, warum es wichtig ist Variablen zu initialisieren und was Verschleppung von Temp Variablen ist :)
 
Moin,

ich hab ganz vergessen ein Feedback zugeben.
Es war genau das was ihr beschrieben habt, einmal die "Verschleppung" und das hat sich dann auch beheben lassen, mit dem Code-Schema von PN/DP.
Ich danke euch, nun funktioniert alles sowie ich es gerne hätte.

Beste Grüße
 
Zurück
Oben