verschiedene ergebnisse aus 0b 35 addieren

Zuviel Werbung?
-> Hier kostenlos registrieren
... du solltest dann die Berechnung der Beschleunigung auch vom OB35 ausgehen lassen. Ansonsten erhälst du ja irgend etwas unsynchrones ...

Wenn du zuviel Code in deinem OB35 hast, dann gheht die CPU auch in Stop (außer du hats den Fehler-OB dafür geschrieben), weil ein neuer Aufruf erfolgte bevor der alte abgearbeitet war. Ich weiß jetzt nicht, wie komplex deine Berechnung ist, aber eigentlich habe ich da nicht so die Bedenken.
Was hattest du noch für eine CPU am Start ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wie fahre ich dann eigentlich die auswertung?
Ich muss ja alle DBD die größer als 0 sind addieren und durch ihre anzahl teilen. Wie kann ich das denn umsetzen?
 
Die Auswertung oder die Zwischenberechnung ?

In der Auswertung weißt du doch, wieviele Werte du aufgezeichnet hast (#Pointerwertigkeit).
Wenn du daraus einen Gesamt-Mittelwert bilden willst (z.B.), dann addierst du alle diese Werte und teilst die Summe durch #Pointerwertigkeit. Im Prinzip genauso kannst du mit Zwischen-Werte verfahren (Abschnittsberechnung). Du mußt da halt nur wissen, wie weit ein Abschnitt geht ...

Bei der Zwischenberechnung geht es dir (soweit ich mich da erinnere) doch um die aktuelle Geschwindigkeit. Das wäre dann v = ds / t also :
Geschwindigkeit = (aktuelle Position - letzte Position) / Zeit (5 ms).

Bitte um Ergänzung ...:rolleyes:

Gruß
LL
 
die geschwindigkeit habe ich ja schon.
jetzt gehts um die beschleunigung (ich hab weiter vorne im thread mal von geschwindigkeit geredet haber hab beschleunigung gemeint. Aber was kümmert mich mein dummes geschwätzt von gestern:ROFLMAO:)
Und jetzt hab ich die beschleunigung über b=-r*w²*sin(w*t)+(r²/a)*w²*cos(2*w*t) berechnet wobei r der kurbelwellenradius ist, w die winkelgeschwindigkeit, t der momentanzeitpunkt und a die pleuelstangenlänge.
gibt es eigentlich irgendeinen tollen befehl mit dem ich alle werte aus meinem db auf einen schlag summieren kann oder muss ich so was ekliges programmieren:

L DB11.DBD0
L DB11.DBD4
+R
L DB11.DBD8
+R
.... usw bis DB11.dbd1192
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
... wenn du da doch so eine wunderschöne (komplizierte) Formel hast, dann setzt die doch ein.
Die Beschleunigung bezieht sich doch immer auch auf delta Strecke (oder delta Winkel) zu delta (verstrichene) Zeit ^2.

Ich verstehe also die Frage im Augenblick nicht ...
 
... oh, du hast deinen Beitrag noch ergänzt ...

Das Summieren kannst du über eine Schleife machen, die der she ähnlich ist, die du für das Reinschreiben der Werte in den DB nimmst :
Code:
Pointer = 0
Summe = 0
 
Loop: Pointer := Pointer +1
        wenn Pointer > Anzahl_Werte dann Ende
 
        Summe = Summe + Wert (Pointer)
        spa Loop
 
Ende: Mittelwert = Summe / Anzahl_Werte

Ich wollte das jetzt nicht in Step7-Code schreiben (der wäre dann warscheinlich auch fehlerhaft :ROFLMAO: ), aber ich denke, damit kommst du trotzdem weiter ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also wie ich meine Berechnung noch im FC gefahren habe hat alles funktioniert.
Nun hab ich alles in den ob35 eingefügt und jetzt geht die cpu nach einer belibigen zeit (manchmal 10s manchmal 15s oder so) in stop.
woran kann das denn liegen?
Gibt es irgend ne möglichkeit genau herauszufinden wo der fehler ist?
Im Diagnosepuffer steht ja nur dass es im OB35 ist.
 
da du ja wirklich viel rechnest, scheint die abarbeitungszeit deines OB35 deutlich höher als der aufruftakt zu sein und schon die step7-hilfe weiß

Hinweis
Sie müssen dafür sorgen, daß die Laufzeit jedes Weckalarm-OBs deutlich kleiner ist als sein Zeittakt. Falls ein Weckalarm-OB noch nicht beendet ist, aber wegen des abgelaufenen Zeittakts erneut zur Bearbeitung ansteht, wird der Zeitfehler-OB (OB 80) gestartet. Anschließend wird der fehlerverursachende Weckalarm nachgeholt.
die zeit von 10-15s kann ich mir dadurch erklären, dass die zahl der zur mittelwert herangezogenen werte steigt und damit auch der rechenaufwand... ein anderer, möglicher fehlergrund wäre die zuletzt eingefügte schleife, die nicht beendet wird...

zur genaueren fehlerdiagnose empfehle ich das betrachten des stacks und man möge mir gestatten, auch dafür die step7-hilfe zu zitieren:


Anzeigen der Stacks der CPU
Mit diesem Register können Sie für jede Zentralbaugruppe (CPU) online die Informationen über den Inhalt der Stacks anzeigen. Die CPU muss sich dabei im Betriebszustand STOP befinden oder einen Haltepunkt erreicht haben.
Das Anzeigen der Stacks ist eine wichtige Hilfe zum Finden von Fehlern, z.B. beim Testen Ihrer Bausteine. Ist die CPU dabei in den Betriebszustand STOP gegangen, können Sie sich im Unterbrechungs-Stack (U-Stack) die Unterbrechungsstelle mit den dort aktuellen Anzeigen und Akku-Inhalten anzeigen lassen, um so die Ursache (z.B. Programmierfehler) herauszufinden.
Voraussetzung ist eine bestehende Verbindung zur CPU.


Gehen Sie folgendermaßen vor:
  1. Wählen Sie den Menübefehl Zielsystem > Baugruppenzustand.
  2. Wählen Sie im folgenden Dialogfeld das Register "Stacks".


@larry: respekt für soviel geduld!
 
Zuletzt bearbeitet:
@larry: respekt für soviel geduld!

Danke, aber wenn sich einer interessiert und mitmacht, dann helfe ich gerne ...

@Stift:
Vielleicht kannst du deine Berechnung noch optimieren, oder andere Alternative um herauszufinden, ob es daran liegt, das Intervall des OB35 auf einen langsameren Wert setzen (z.B. 10 ms). Wenn es dann durchläuft, dann liegt es am Wiederaufruf.

...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In stacks steht
ob35 cyc_int5

Was sagt mir das jetzt?
Das in ob35 ein fehler ist.
Aber das hat der diagnosepuffer ja auch schon gemeldet.
Tut mir übringens leid wenn ich mich blöd anstelle.
Ich bemüh mich echt und probier schon viel abends zuhause aus.
Aber so langsam werd ich echt besser.
Als ich mit dem projekt angefangen habe war awl für mich ein buch mit sieben siegeln. Ich hab nur fup verstanden.
Mittlerweile mach ich alles nur noch in awl.
 
Zuletzt bearbeitet:
Tut mir übringens leid wenn ich mich blöd anstelle.
Ich bemüh mich echt und probier schon viel abends zuhause aus.

1. hat keiner gesagt, dass du blöd bist oder dich blöd anstellst
2. deinen einsatz merkt man und wird durch konsequente hilfe von larry gewürdigt

In stacks steht
ob35 cyc_int5

ist irgendwo ersichtlich, ob der OB80 angefordert wird? versuchs mal mit larrys tipp, einfach mal die aufruftaktung erhöhen ...
 
Also die Auftaktung hab ich jetzt erhöht auf 10ms.
Das Programm läuft wieder.
Allerdings stimmt die Berechnung der Maximalgeschwindigkeit nicht mehr.
Ich vergleiche im 0b35 immer die Momentangeschwindigkeit mit der geschwindgkeit die auf dem dbd für die maximalgeschwindgkeit ist.
Ist diese größer als die alte maximalgeschwindigkeit so wird die momentangeschwindgkeit auf die maximalgeschwindigkeit gelegt.
Normalerweise ist der wert bei 63 1/min 29.01m/s. Jetzt wird mir ein wert von 7.25 m/s angezeigt.
ich denk mal das liegt daran dass der ob35 nicht alle werte durchrechnen kann oder?
Für die Durchschnittsbeschleunigung wird mir noch 0 angezeigt. Da bin ich aber auch noch nicht auf fehlersuche gewesen.

Von ob80 steht nirgend etwas.
Ich glaub aber ich habe noch ein problem.
Wenn jemand die drehzahl herunterregelt dann hätte ich maximal 300 momentanbeschleunigungen.
Ist das eigentlich möglich dass die cpu alle diese werte in 10ms durchrechnet?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
1. hat keiner gesagt, dass du blöd bist oder dich blöd anstellst
2. deinen einsatz merkt man und wird durch konsequente hilfe von larry gewürdigt
*ACK*
Ich würde da sogar noch einen draufsetzen ...
Du hast ja bisher nur Tips erhalten. Den Code hasr du im Großen und Ganzen selbst erstellt ... und das ist Ober-Klasse ...

Zum Thema:
300 Berechnungen in 10 ms - weiß nicht. Du hast aber auch die Möglichkeit, die Zykluszeit-Überwachung hochzusetzen. Dann kann dir der eine Berechnungs-Zyklus ja egal sein.
In meinen Auswertungen erreiche ich bei bestimmten Aufgaben auch schon mal eine Zykluszeit von 1 s beim Auswerten. Das passiert aber nicht so oft und zu dem Zeitpunkt passiert auch nichts zeitkritisches in der Anlage.

Aber ... wo liegt im Moment das Problem ... in der Berechnung ?

Außerdem, wenn die Umschaltung der Rate auf 10ms erfolgreich war, dann solltest du ggf. versuchen, die Formel noch zu optimieren ... Muß die so aufwendig sein ? Ich werde mir das eventuell nachher selbst mal zu Gemüte führen ...
 
Hier meine Tabelle zur berechnung der Geschwindigkeit und der Beschleunigung
Anhang anzeigen Berechnung Geschwindigkeit.zip

Ich hab jetzt übrigens den 0b35 auf 100ms gestellt. Nun bekomme ich den exakten Wert für die Maximalgeschwindgkeit wieder angezeigt.
Jetzt muss ich nur noch die Durchschnittsgeschwindgkeit zum laufen bekommen
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich konnte mich mit der Sache noch nicht beschäftigen.
Die Excel-Tabelle sieht gut aus ... aber - ohne Wertung zunächst ...

Die max.-Geschwindigkeit ? nicht den Momentan-Wert ?
OB35 auf 100ms bringt m.E. nichts. Stell doch bitte mal den kompletten OB35 hier ein. Ich möchte mir den doch mal ansehen ...
 
Hallo Stift,
sieht die Umsetzung der von dir angegebenen Formel ungefähr so aus ?
Code:
     L     #r
      SQR   
      T     #r2                         // r^2 erzeugen
      L     2.000000e+000
      L     3.141593e+000
      *R    
      L     #f
      *R    
      T     #w                          // w erzeugen
      L     #w
      SQR   
      T     #w2                         //w^2 erzeugen
      L     #w
      L     #t
      *R    
      T     #wt                         //wt erzeugen
      L     #wt
      SIN   
      T     #sin_wt                     // Sin(wt) erzeugen
      L     #wt
      L     2.000000e+000
      *R    
      COS   
      T     #cos_2wt                    //Cos(2wt) erzeugen
      L     #r2
      L     #a
      /R    
      T     #r2a                        // r^2 / a erzeugen
// End-Berechnung -----------------------------------
      L     -1.000000e+000
      L     #r
      *R    
      L     #w2
      *R    
      L     #sin_wt
      *R    
      T     #hwert
      L     #r2a
      L     #w2
      *R    
      L     #cos_2wt
      *R    
      L     #hwert
      +R    
      T     #Beschleunigung
 
Ja genau so hab ichs auch gemacht.
Ich hab halt nur wesentlich mehr temp-variablen reingebaut um die sache übersichtlich zu machen.
 
Zurück
Oben