verschiedene ergebnisse aus 0b 35 addieren

stift

Level-1
Beiträge
261
Reaktionspunkte
17
Zuviel Werbung?
-> Hier kostenlos registrieren
hi
ich komme grade nicht weiter.
ich berechne meine formel zur geschwindigkeitsmessung mit einfluss von ob35.
nun arbeitet die cpu meine formel ja zyklisch durch.
mein ziel ist es alle einzelergebnisse zu addieren und anschließend durch die anzahl der teilschritte zu teilen.

leider kann ich die einzelergebnisse irgendwie nicht addieren
Code:
L #Betrag_Geschwindigkeit
L "DB_V-Messung".Summe_Momentangeschw
+R
T "DB_V-Messung".Summe_Momentangeschw

So habe ich gedacht kann ich die summe aller momentangeschwindigkeiten bilden.
Allerdings funktioniert das nicht. "Summe_Momentangesch" ist immer null. Es wird nicht dazu addiert.
Wie müsste ich denn Vorgehen um die Summe aller Momentangeschwindigkeiten zu bilden.
Ob 35 rechnet die jeweilige Momentangeschwindigkeit alle 25ms aus.
 
ja genau,
die daten sind vom datentyp real.
allerdings wenn ich in den beobachtungsmodus schalte steht bei summe-momentangeschwindigkeit immer 0 und bei betrag geschwindigkeit irgendein wert, für einen beliebigen zeitpunkt den mir mein fc errechnet.
 
also außer ob1 und ob35 werden ganz sicher keine obs verwendet.
Summe_Momentangeschwindigkeit wird ganz sicher nur in diesem fc verwendet. Mein db ist auch auf der cpu, da die anderen variabeln aus dem db ganz normal arbeiten
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... ganz so kann es ja nicht sein ...

1. kann ich mich erinnern, dass du mit den Werten etwas ausrechnen wolltest (Mittelwert oder so) - das wird also sicherleich auch irgendwo programmiert sein.

2. das von dir eingestellte Netzwerk funktioniert so. Einzige Ausnahme : der Wert, der von einem FC generiert wird hat in jeweils aufeinanderfolgenden Zyklen jeweils abwechselnd den gleichen Wert positiv wie negativ. Das kann ich mir allerdings nicht vorstellen, da du ja geschrieben hast, dass der FC sinnvolle Werte ausgibt - habe ich jedenfalls so verstanden ...
 
...
2. das von dir eingestellte Netzwerk funktioniert so. Einzige Ausnahme : der Wert, der von einem FC generiert wird hat in jeweils aufeinanderfolgenden Zyklen jeweils abwechselnd den gleichen Wert positiv wie negativ. Das kann ich mir allerdings nicht vorstellen, da du ja geschrieben hast, dass der FC sinnvolle Werte ausgibt - habe ich jedenfalls so verstanden ...

hmm wenn ich mich recht erinnere, hast du einen Antrieb mit Kurbel, d.h. der Schlitten fährt ständig vor und zurück - dann kann das sogar richtig sein ;).

du kommst anscheinend wieder grad an das Problem, dass dein Algorhytmus nicht so richitg mit der Abtastzeit zusammen passt, was ich ein Stück weiter vorher mal drauf hingewiesen hab.
Aber ist ja auch für nen Lernprozess...:-D
 
Ist eine Frage, wie lange der Fahr-Vorgang dauert. Für eine reine Messwert-Aufnahme ist 25 ms OK. Für Statistik-Funktionen vielleicht etwas lahm ... Da wären vielleicht 5 ms besser ...

Es wäre aber schon unwarscheinlich, das sich berechnete Werte absolut kompensieren ...
Wir wissen allerdings auch nicht, was der FC ausgibt ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Stift,

versuch doch einfach mal, irgendein freies Doppelwort anstelle Deines Wertes im DB zu verwenden. Wenns dann funktioniert, überschreibst Du irgendwo Deinen Wert im DB.
 
ihr habts erfasst.
es geht wieder um diesen schlitten.
mein signal das mein fc ausgibt ist zwar sinusförmig, aber ich rechne davon den betrag aus und desshalb können sich die negativen und die positiven werte nicht wegaddieren.
meine drehzahl ist maximal 40 1/min das heist ein zyklus dauert max 1,5s.
diese 1,5s splitte ich in lauter inkremente zu 50ms auf, d.h. mein ob35 soll mir die werte für t=0, 0,050, 0,100 usw. bis 1,5 s hochrechnen.
Kurioserweise ist heute ein neues problem aufgetaucht.
er rechnet mir überhaupt nichts mehr aus da er sagt dass t immer 0 ist.
darum funktionieren die nachfolgenden netzwerke nicht mehr, da deren eingangsgröße ja dann logischerweise auch null ist.

ob35 habe ich so programmiert dass ich sage
Code:
L DB10.Zeit_fuer_Umdrehung
L Db10.Zeit
<R

SPBNB M001
L DB10.Zeit
L 5.000000e-002
+R
T DB10.Zeit
M001: NOP 0
Das müsste doch so passen oder.
ich möchte dass er immer weiter 50ms hinzuzählt bis die zeit für eine umdrehung erreicht ist.
 
? ... tut mir leid, den Sinn des abgebildeten Netzwerkes habe ich leider nicht verstanden - trotz deiner Beschreibung.

Wofür zählst du die Zeit hoch ?
Warum zählst du die Zeit (wenn du sie benötigst) nicht ständig hoch und setzt sie auf "0.0" wenn du von neuem beginnst ?

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
genau das mache ich ja damit.
also ob 35 habe ich jetzt ausreichend getestet. daran liegt es nicht.
allerdings habe ich jetzt den betrag von meiner geschwindigkeit mal auf ein dbd gelegt und beobachtet und da ist ebenfalls ein fehler.

meine betragsrechnung sieht folgendermaßen aus:
Code:
         L #Geschwindigkeit
         L 0.000000e+000
         >R
         SPBNB M010
 
         L #Geschwindigkeit
         T #Betrag_Geschwindigkeit
 
M010:    L #Geschwindigkeit
         L -1.000000e+000
         *R
         #Betrag_Geschwindigkeit
Stimmt meine Rechnung so um den Betrag zu erhalten?
Ich kann leider keinen Fehler finden.
Habs schon verzweifelt versucht.
 
... wenn du auf diese Weise einen negativen Wert zu einem positiven machen willst, dann würde ich das so machen :
Code:
L #Geschwindigkeit
L 0.000000e+000
>R
SPB M010
SPA M020
 
M010: L #Geschwindigkeit
         T #Betrag_Geschwindigkeit
         spa M030

M020: L #Geschwindigkeit
         L -1.000000e+000
         *R
         T #Betrag_Geschwindigkeit
 
M030: nop 0
 
... wenn du auf diese Weise einen negativen Wert zu einem positiven machen willst, dann würde ich das so machen :
Code:
L #Geschwindigkeit
L 0.000000e+000
>R
SPB M010
SPA M020
 
M010: L #Geschwindigkeit
         T #Betrag_Geschwindigkeit
         spa M030

M020: L #Geschwindigkeit
         L -1.000000e+000
         *R
         T #Betrag_Geschwindigkeit
 
M030: nop 0

und warum nicht?

Code:
L #geschwindigkeit
ABS
T #betrag_geschwindigkeit
 
tut mir leid aber ich steht schon wieder auf dem schlauch.
um die durchschnittsgeschwindigeit zu ermitteln addiere ich doch alle werte zu einer summe und dividiere die dann durch die anzahl der teilschritte (siehe oben)

In den Befehl
Code:
L #Betrag_Geschwindigkeit
L DB10.Summe_Momentangeschw
+R
T DB10.Summe_Momentangeschw

musste ich noch eine Funktion einfügen dass nur solange addiert werden soll bis der ob35 einmal durch ist, d.h. bis er einmal den Zyklus abgearbeitet hat.
Also bis alle Ergebnisse für die Zeiten 0s, 0,05s 0,1s usw. einmal addiert worden sind.
Ansonsten würde ja immer weiter addiert und mein Ergebnis wäre total Schwachsinnig.
Wie würdet ihr das machen?
 
da wird nur einmal je weckalarm addiert ... oder ist dein codeschnipsel aus einem anderen, zyklisch durchlaufenen baustein? wenn ja, dann würd ichs so machen:

Code:
      U     #TRIGGER
      FP    #HELP_FLAG
      SPN   _001

      L     #ACCU_1
      L     #ACCU_2
      +R    
      L     #ACCU_3
      +R    
      L     #ACCU_4
      +R    
      L     #ACCU_5
      +R    
      L     #ACCU_6
      +R    
      L     #ACCU_7
      +R    
      L     #ACCU_8
      +R    
      L     8.000000e+000
      /R    
      T     #OUTPUT
_001: NOP

und als trigger zum beispiel den cpu-takt
 
Zuletzt bearbeitet:
Zurück
Oben