Hallo Leute, folgendes Problem:
habe eine Eingangsfrequenz (z.B. 5 Hz)
habe einen Frequenzteiler (z.B. 2 Hz)
5/2 = 2,5, passt aber nicht, soll ganzzahlig sein, so würde eine 1 für den Frequenzteiler als nächstkleinerer passen.
Wie kann ich es mathematisch(ohne For-Loop) berechnen ?
Grüsse
Keine Ideen? Oder das Problem zu schlecht beschrieben? Bitte, brauche mathematische Hilfe, soll doch bestimmt ganz einfach gehen, nur komme ich nicht drauf.
Gruss
etwas schlecht beschrieben schon, denn was ist ein "Frequenzteiler von 2 Hz" (ein Frequenzteiler ist doch etwas was dividiert, also z.B durch 2)
Aber wenn Du 5 Hz und 2 Hz brauchst, dann muß Du natürlich von einer Mutterfrequenz ausgehen, die das kleinste gemeinschfaftliche Vielfache von 2 und 5 ist (oder ein Mehrfaches davon). Hier wäre das minimal 10 Hz: dividiert duch 2 ergibt 5 Hz, und dividiert duch 5 ergibt 2 Hz.
Also folgendes:
1)ich bekomme Daten mit einer bestimmten Frequenz (ist vor dem Starten des Programms einstellbar)
2)aus dem Config-File lese ich den Frequenzdivisor (Teiler) aus
3)die Ausgangsfrequenz soll der Eingangsfrequenz geteilt durch den Teiler sein
Der Teiler muss logischerweise ein Vielfaches der Eingangsfrequenz sein, sonst kann ich nicht teilen. Der Bediener macht aber natürlich keine Berechnung, sondern verlässt sich auf mein Programm.
So, was soll ich dann als Ausgangsfrequenz ausgeben, wenn meine Eingangsfrequenz durch den Teiler nicht ganzzahlig teilbar ist?
Deshalb gebe ich eine Warnung aus, dass der Teiler angepasst wurde und passe den Teiler so an, dass die Eingangsfrequenz durch diesen ganzzahlig teilbar ist.
Bsp.
Eingfrq = 10Hz
Teiler = 3
Was soll ich jetzt machen?
Aus der 3 mache ich eine 2, dann habe ich 5Hz Ausgangsfrequenz und bin glücklich.
Ich habe es schon mit einer While-Schleife realisiert:
der Teiler wird solange dekrementiert, bis ich keinen Rest bei der Division EinFrq/Teiler habe.
Die Lösung gefällt mir aber nicht, denn ich will keine While-Schleifen solcher Art haben, weil meine Applikation als Dienst arbeiten soll.
Deshalb will ich eine direkte mathematische Lösung finden, man hat ja genug math. VIs in LV.
Grüsse, Eugen
P.S. Danke Lucki, dass du zumindest mal etwas vorgeschlagen hast.
Ich fürchte du wirst um deine While Schleife nicht drumherum kommen.
Das ganze läßt sich sicher realisieren durch eine Faktorzerlegung deiner Eingangsfrequenz und dann einer Annäherung.
Ich habe allerdings keine passende Mathfunktion dazu gefunden. Was ich gesehen habe ist eine ggT und eine kgV Funktion, mit denen man das sicher auch hinbiegen könnte.
Aber: Ich habe mir diese ggT Funktion angesehen und in der steckt auch eine While Schleife, wie du sie schon hast.
Ich glaube also, dass du um deine Schleife nicht herumkommst.
Habe es wie auf dem Bild gemacht.
Wenn aber jemand doch eine Idee dazu hat, bitte melden.
Danke, Eugen
Hi eugen,
pack in die Whileschleife noch eine kleine Wartezeit von z.B. 10ms rein. Dann bremst du nicht den Rechner aus, wenn dein Prog. mal ein Fehlermacht oder länger rechnet...
Ansonsten auch keine andere Idee zur Fragestellung.
Gruß
Oliver