# Rechenoperationen mit sich ändernden Variablen



## stift (9 Februar 2008)

Hallo, ich habe wieder einmal ein Problem mit meiner Geschwindigkeitsmessung meines Schlittens, der über eine Pleuelstange an einem Rad hängt. 
Mittlerweile kenne ich nun alle Variable meiner Formel zur errechnung
(siehe formel nr. 2)
http://www.schulphysik.de/strutz/DAMPFM2.pdf

Problem ist nun dass ich v berechnen will, t sich aber bei einem Zyklus 26 mal ein anderer Wert ist. 
d.h. für meinen fall z.B. Winkelgeschwindikgeit=10 1/s, r=0,4m, a=1,2m. 
Ich excel habe ich um den verlauf der Geschwindikeit zu errechnen 26 zeilen mit den zeiten 0, 0,025, 0,05, 0,075 usw. gemacht und dann das entsprechende Ergebnis pro Zeile bekommen, welche ich durch ein Diagramm schön aufzeigen kann. 
Wie muss ich zur errechnung in Step 7 vorgehen?
Eine möglichkeit wäre ich würde 26mal das gleiche Netzwerk erstellen, und dann bei den Rechenoperationen die 26 unterschiedlichen Zeiten auf einen Merker legen. 
Aus diesen Merkern könnte ich mir dann den arithmetischen Mittelwert meiner Geschwindigkeit errechnen. 
Diese Lösung ist aber meines Erachtens nach nicht die einfachste und benötigt außerdem massig Merkerbytes und Rechenkapazität der CPU. 
Welche Lösungansätze gäbe es da denn noch?
Vielen Dank schon mal im Vorraus
mfg
Stift


----------



## kpeter (9 Februar 2008)

was ich nicht verstehe wieso brauchst du das ganze 26 mal pro zyklus

wenn ich deine zeitwerte die du in excel hernimmst ansehe rechnest du alle 25 ms also sollte das fast 1 zyklus sein


----------



## stift (9 Februar 2008)

ein zylus ist beim mir bei einer drehzahl von 100 1/min 0,6s. 
Um einen saubenen sinus zu errechen muss ich desshalb auf diese 0,6s verteilt alle 0,25 s rechnen. D.h. mein lösungsansatz wäre ich würde bei den rechenoperationen beim ersten netzwerk bei t "0" bei meinen rechenoperanten eingeben. 
beim zweiten netzwerk dann "0,025" usw. 
Aber das geht doch sicherlich auch einfacher


----------



## kpeter (9 Februar 2008)

wieso machst du es nicht zeitgesteuert und rechnest eine variabel immer um diesen wert hoch und wenn du bei der max zahl bist wieder auf min setzen


----------



## stift (9 Februar 2008)

und die einzelnen ergebnisse lege ich dann immer auf merkerbytes?
und wenn max erreicht ist kann ich dann meinen arithmetischen mittelwert errechnen oder?
was meintes du mit zeitgesteuert?
und wie rechne ich so eine zeit hoch?
einfach den aktuellen wert auf ein merkerbyte legen und dann immer 25ms hinzuzählen bis max erreicht ist?
Problem ist ja auch dass ich für jedes ergebnis ein anderes merkerbyte für mein ergebnis meiner rechnung addressiern muss. 
wie kann ich denn erreichen dass die sps meinetwegen bei md 20 und t=0 anfängt, anschließend für t=0,025 mein ergebnis auf md 24 legt usw.


----------



## zotos (9 Februar 2008)

Das klingt doch alles sehr theoretisch. Mit angenommenen Zeiten usw. nimm was gescheites entweder einen Weckzeit OB (OB35) oder rechne mit der Zykluszeit aus dem OB1 (OB1_prev_cycle).

Poste doch mal den Code den Du bis her verwendest incl. Formel.


----------



## Ralle (9 Februar 2008)

Was will er denn nun berechnen? Für die Geschwindigkeit hat er doch nun die Formel? Will er die Durchschnittsgeschwindigkeit haben oder was? Ich verstehe gerade den Sinn der Aktion nicht mehr.


----------



## stift (9 Februar 2008)

ich will den arithymtischen mittelwert der geschwindigkeit. 
dazu muss ich doch erst einmal mir die geschwindigkeit ausrechnen. 
diese ist abhängig von t, d.h. mit der formel 2 bekomme ich immer die momentangeschwindigkeit. 
Aus diesem grund habe ich in excel meinen zyklus in 26 teilschritte geteilt (eben diese 25ms), d.h. 26 momentangeschwindigkeiten berechnet. Aus diesen ergebnissen habe ich dann den mittelwert errechnet. 
jetzt möchte ich das ganze eben in s7 umsetzten. 
bisher habe ich lediglich den code für die drehzahlberechnung. Ansonsten habe ich noch nichts programmiert, da ich mich erstmal umhören wollte weil ich keinen Schimmer habe wie das am besten funktioniert. 
noch schöner wäre es natürlich, wenn man die formel 2 so modifizieren könnte dass man auf einen schlag den mittelwert berechnen kann, trotz sich ändernder winkelgeschwindigkeit.


----------



## Ralle (9 Februar 2008)

Ok, rechne das mal aus, das ist ja nicht verkehrt. Wie genau muß das Ganze denn sein? Es gibt ja in der Technik viele sinusförmige Vorgänge. Eines davon ist natürlich die Wechselspannung. Da gibt es dann solche Dinge wie den Effektivwert. Hier http://de.wikipedia.org/wiki/Effektivwert findest du mehr dazu. Die einfachste Näherung wäre meiner Meinung nach den Maximalwert der Geschwindigkeit durch Wurzel(2) zu dividieren. Der Maximalwert der Geschwindigkeit ist lt. Strutz in unmittelbare Nähe der Mittelstellung M erreicht. Ich mach ja nun auch nicht ständig Mathe und Physik, aber vielleicht kann man damit den ganzen Berechnungskram doch erheblich vereinfachen, wenn es auch nicht 100%-ig genau werden wird.

Korrigiert mich bitte, wenn ich falsch liege.


----------



## stift (9 Februar 2008)

Du hast recht wenn ich die Mittelpunktstellung und damit Maximalwert ausrechene, dann kann ich über einen Faktor (den ich mittels meiner Excel tabelle relativ einfach ermittlen könnte) das mittel der Geschwindigkeit berechnen. 
Problem dabei ist nur, dass das Antriebsrad sprich die kurbelwelle an einem stufenlos verstellbaren Getriebe hängt. d.h. verändere ich die geschwindigkeit so verschiebt sich ja der Zeitpunkt meines Maximalmalwertes da sich die winkelgeschwindigkeit ändert.  Das Programm würde aber ja dann mit diesem feste Zeitpunkt, den ich als Mittelstellung angegeben habe, weiter rechnen und einen beliebigen wert, der z.b. nur noch 1/3 so groß ist wie der Maximalwert auf den Effektivwert hochrechnen, was logischerweise ja falsch ist. 

Ich hatte gehofft es bestünde die möglichkeit einer Art Variablentabelle in der ich meine Zeiten angeben kann,die meine Rechenoperationsschaltung durcharbeitet und anschließend auf verschiedene Merkerwörter schiebt.


----------



## kpeter (9 Februar 2008)

stift schrieb:


> und die einzelnen ergebnisse lege ich dann immer auf merkerbytes?
> und wenn max erreicht ist kann ich dann meinen arithmetischen mittelwert errechnen oder?
> was meintes du mit zeitgesteuert?
> und wie rechne ich so eine zeit hoch?
> ...


 
also mit denn ob35 rufst du das ganze alle 25 ms auf
zählst deine variabel immer um die 25 ms hoch
addierst das ergebniss in ein merkerbyte oder datenwort oder was auch immer
wenn alle 26 durchläufe fertig sind addierten wert durch 26 und du hast deinen mittelwert aus 26 werten

alles wieder löschen und von null beginnen


aber ich verstehe es noch nicht was du vorhast


----------



## stift (9 Februar 2008)

naja das Ergebnis wäre doch dann das Mittel der Geschwindigkeit. 
und Genau das war mein Ziel
ich habe die Anforderung gestellt bekommen über ein touch panel anzeigen zu lassen wie schnell der Schlitten im Schnitt verfährt. 
Problem dabei war dass ein weg-mess-system am schlitten mein budget überschritten hätte. Aus diesem Grund will ich das Ganze programmtechnisch lösen. Als Eingangssignal habe ich einfach einen Bero, der mir die Drehzahl meines Antriebrades ausgibt. 

Dein Tipp hört sich schon mal gut an. 
Mal schauen ob ich die Umsetzung nächste Woche hinbekomme. 
Dankeschön
mfg
Stift


----------



## kpeter (9 Februar 2008)

und schlupf hast du keinen ????
dann kannst du das ganze nämlich vergessen


----------



## Oberchefe (10 Februar 2008)

> Als Eingangssignal habe ich einfach einen Bero, der mir die Drehzahl meines Antriebrades ausgibt.



Das reicht doch, die Geschwindigkeit des Schlittens ist proportional zur Drehzahl des Antriebsrades, einfach nach der Formel einmalig den Faktor berechnen, X Impulse pro Minute am Antriebsrad ergeben x m/min am Schlitten, dann folgt später nur eine einfache Frequenzmessung und anschließend eine Skalierung mit Deinem Faktor.


----------



## Larry Laffer (10 Februar 2008)

Warum überhaupt so kompliziert ?

Bei mir ist "v = s / t" - also "Geschwindigkeit = Strecke / benötigte Zeit"

Ich würde dann also so vorgehen :
Messen der benötigten Zeit von Start bis Ziel (dafür gab es ja schon mindestens einen Vorschlag).
Messen der Strecke (Impulse). Hier entspricht jeder Impuls ja einer bestimmten zurückgelegten Strecke (siehe Oberchefe).
Das Ergebnis muss dann zwangsläufig die mittlere Geschwindigkeit sein.

Dauert das Ganze länger, dann kannst du ja auch zusätzlich Zwischenwerte ausgeben (anzeigen) in dem du die bis dahin benögtigte Zeit mit der bis dahin zurückgelegte Strecke verrechnest oder auch die Differenz zur letzten Messung. Da kann man sich ja dann daran austoben, wie man möchte ...

Gruß
LL


----------



## stift (10 Februar 2008)

Ich versteh nicht ganz. 


> und schlupf hast du keinen ????


was meinst du mit schlupf?
Von der Drehzahlerfassung her?

selbstverständlich ist das mittel der geschwindikeit proportional zur geschwindigkeit des antriebrades. Die kunst dabei ist jedoch die passende Formel dafür herzuleiten und in S7 umzusetzen. 

was meinst du mit frequenzmessung?


> dann folgt später nur eine einfache Frequenzmessung



wie meinst du das mit messen der strecke (Impulse)
die länge des hubs bleibt doch gleich und ein hub ist immer 2PI also 360° des Antriebrades. Und was meinst du mit 


> dauert das ganze länger


----------



## Larry Laffer (10 Februar 2008)

hast du gelesen, was die Anderen und ich geschrieben haben ?

1. Frequenz = Impulse / Zeit

2. eine Strecke wird in Metern (oder Untergrößen) angegeben, nicht in Winkelgraden oder 2*Pi


Die genannte Berechnung läßt sich bei einer S7 ganz bequem zyklisch durchführen ...
Die Formel dafür habe ich ja oben genannt. Dabei kann Strecke sein : 37 Impulse deines Antriebs entsprechen 12,5 cm (oder irgend etwas anderes). Das kannst du dann ja beliebig hochrechnen (Dreisatz).

Gruß
LL


----------



## stift (10 Februar 2008)

Ich hab die beiträge der anderen schon gelesen aber ich kann euch erlich gesagt nicht folgen. 
mit v=s/t darf ich hier nicht arbeiten. 
das ergebnis wäre komplett falsch. 
bei n= 100 1/min, r=0,4m und a=1,2m lautet das korrekte ergebnis des mittelwertes der geschwindigkeit *2,668 m/s.* 
bei diesen werten ist für einen Zyklus
t=0,6s und s=0,8m 
das ergebnis daraus wäre dann *1,333 m/s. 
Und das ist falsch!!!

*


----------



## Larry Laffer (10 Februar 2008)

... eine andere Formel gibt es aber nicht.
Vielleicht solltes du dann deine Eingangs-Größe mal kontrollieren. Woher weißt du, dass deine Drehzahl 100 Umdrehungen/Min. ist ? Mit Drehzahlmesser kontrolliert ?

Gruß
LL


----------



## stift (10 Februar 2008)

oops. 
sorry. 
ich muss s ja mit 2 multiplizieren
dann wäre v=2,667 m/s. 
du hast recht!
Allerdings muss ich den Maximalwert auch noch berechen.
Da komme ich um diese obige vorgehensweise wohl nicht mehr herum.


----------



## Larry Laffer (10 Februar 2008)

... das ist aber zu schaffen. Vielleicht baust du dir dafür einen netten kleinen Baustein, der das für dich ständig für dich auswertet und dir die Endergebnisse liefert (ein FB also).

Gruß
LL


----------



## stift (10 Februar 2008)

ja genau. 
ich werds wohl irgendwie hinbekommen. 
Da werd ich mal nächste woche ein bischen dran arbeiten
danke dir
mfg
stift


----------



## stift (12 Februar 2008)

wie muss ich denn vorgehen wenn ich ob 35 das mit den 25ms programmieren will?
Hab so was noch nie gemacht!


----------



## nightworker (12 Februar 2008)

*Ob 35*

Mahlzeit,

1. HW-Konfig öffnen,
2. Objekteigenschaften der CPU aufrufen,
3. Reiter "Weckalarme" öffnen,
4. Ausführung in ms auf 25ms setzen.

mfg

night


----------



## stift (12 Februar 2008)

ok, das hilft mir schon mal weiter. 
muss ich dann im ob35 was programmieren oder muss ich den in meinem programm einfach aufrufen?


----------



## Ralle (12 Februar 2008)

Der OB35 wird dann alle 25ms aufgerufen. Du mußt ihn programmieren und in die SPS übertragen.


----------



## stift (12 Februar 2008)

alles klar. 
jetzt müsste ichs auf die reihe bekommen. 
danke


----------



## stift (13 Februar 2008)

ich hab leider schon wieder einen hänger. 
ich habe jetzt im meinem FC10 die Winkelgeschwindigkeit errechnet. 
Bei der Deklarationstabelle habe ich jetzt die Winkelgeschwindigkeit bei "OUT" reingeschrieben. 
Kann ich dann in den anderen Bausteinen auf die zugreifen oder muss ich meine Ergebnisse auf Merker legen?
Wie kann ich die über das "OUT" weiterverarbeiten?
Muss ich die im anderen FB dann bei "IN" angeben?
Kann ich im OB auch auf diese "IN" und "OUT" irgendwie zugreifen oder hab ich da nur Temporäre?


----------



## Ralle (13 Februar 2008)

Die Out kannst du mit einer beliebigen Variablen versorgen, der Typ muß natürlich stimmen. Du kannst Merker (Bit, Byte, Word, ...), Daten (Bool, Byte, Int, ...) aus Datenbausteinen oder auch Temporäre Variablen des aufrufenden Bausteins verwenden. Allerdings daran denken, Temp-Var gelten nur in dem aufrufenden Baustein (der, in welchem sie definiert wurden) und erst nach dem Aufruf deines FC10. Auch alle anderen Out sind beim allerersten Durchlauf des Programms unbestimmt, bis der FC10 einmal durchlaufen wurde. Denk auch daran, daß du im FC10 die OUT immer mit Daten versorgst, also nicht drumherumspringst, ansonsten durchaus mal ungültige Outputs (besonders bei Temp!) das Resultat sein können.


----------



## stift (13 Februar 2008)

Alles klar. 
jetzt bin ich wieder ein stück weiter. 
danke!


----------

