' schrieb:5x eine 1-Sekunden-Schleife laufen lassen, wobei in 4 Durchläufen halt nichts passiert (oder wird das bisher anders gemacht?).
Oder:
Größtes gemeinsames Vielfaches ermitteln.
Oder:
Timed-Loops verwenden, die du aufeinander synchronisierst.
Gruß, Jens
Das ist etwas, was ich vermeiden möchte. Eine Schleife soll genau so lange laufen, wie angegeben wurde. Deswegen, weil ich über den Index der jeweiligen Schleife mein Array auslesen möchte, in dem der Benutzer seine Messdauer bzw Probenzugabe-Dauer eingibt. Ausserdem ist eine Sekunde etwas kritisch, da die Messpunkt-Abnahme bei Langzeitmessungen so ist, dass 4 Messpunkte alle 500ms genommen dann gemittelt werden. Somit ist die Dauer eines Messpunktes mindestens 2 Sekunden (Diode vorher einschalten und Vorbelichten sind dann nochmal normalerweise 2 Sekunden, wodurch sich das Aufnehmen eines Messpunktes auf min. 4 Sekunden erstreckt.
Bei Timed-Loops kenne ich mich nicht aus, die hatte ich glaub ich in der Version 7 (die ich bis vor 8 Tagen hatte) noch nicht (glaub ich jedenfalls). Kann ich das die einzelnen Durchgänge der Loops unterschiedlich timen? Es geht drum, dass ich eben dass der erste Zyklus eines Loops 10 Minuten dauert, die folgenden 5 Loops dann 5 Minuten, der folgende 7 Minunten und dann geht das ganze wieder von vorne los.
' schrieb:Kann ich das auch so ausdrücken:
Zu einem bestimmten Zeitpunkt, der z.B. von einem vierten Prozess festgelegt wird, sollen die 3 Prozesse innerhalb eines Fensters von (z.B.) 10ms eine bestimmte Aktion durchführen. Der Zeitpunkt kann z.B. pro Sekunde, alle 2 Sekunden oder auch alle 7 Sekunden sein.
Ist es das, was du willst?
Nein, nicht ganz. Ich hab das mal versucht zu Visualisieren.
Schleife A: Messgerät
Schleife B: Probenzugabe
Schleife C: Thermostat
Während Zyklus A alle 1 Sekunden (bzw 5 Sekunden oder 30 Sekunden oder 60 Sekunden) einen Messpunkte aufnimmt, regelt Schleife B die Analytzugabe. Zuerst kommt zB 10 Minuten lang eine Nullwert-Zugabe, dann wird die Konzentration bis zum Maximum in 5 Schritten a 7 Minuten erhöht. Ist das Fertig, regelt Schleife C den Thermostat, da einmal eine Messkurve bei 10°C und einmal bei 25°C aufgenommen werden soll. Somit läuft eine Schleife schnell und die andere langsam (und zwar im Unterschied von Größenordnungen, A läuft alle 5 Sekunden, während C alle 45 Minuten nur läuft.
' schrieb:Die Lösung ist doch hier: Erzeuger-Verbraucher-Struktur mit Queues zum Datenaustausch. Die Schleifen synchronisierein sich immer ganz von selbst. Die Queues sind auch für mehrere Verbraucher und einen Erzeuger oder mehrere Ezeuger und einen Verbraucher konfigurierbar. Also drei Schleifen wären da auch kein Problem.
Bei der einfachen Erzeuger-Verbraucher Struktur funktioniert die Synchronisation so:[list=1]
[*]Verbraucher schneller als Erzeuger (Normalfall). Das Queelement in der Verbraucherschleife wartet solange, bis wieder ein Datenelement in der Queue ist.<>
[*]Ezeuger schneller als Verbraucher: Die Queue füllt sich zumächst immer mehr auf. Wenn sie voll ist, wartet das Queueelmenent in der Erzeugerschleife so lange, bis in der Queue wieder Platz für 1 Datenelement ist.<>
[st]In jedem Fall bestimmt die langsamte Schleife die Geschwindigkeit, und Daten gehen keine verloren.
Das mit dem timen der langsamsten Schleife ist etwas kritischt, da das Programm Modular aufgebaut sein soll, und durchaus mal Messungen ohne Schleife B oder C stattfinden sollen können. Wenn ich aber mit C timen will, dann aber kein C habe gibt das wohl Probleme.
Es kommt dann noch ein ganz anderes Problem auf mich zu, nämlich dass Schleife C sozusagen Schleife B pausieren kann. Und das wird für mich noch blöder. Ist eigentich ein einfacher Gedanken: Schleife C (Thermostat) wechselt die Temperatur. Und Schlefie B (Probenzugabe) soll erst dann wieder von vorne beginnen, wenn Schleife C sagt, dass die nächste Messtemperatur auch erreicht wurde (Der Thermostat ist ein bisserl älter und braucht ein wenig um sich einzustellen.