CChris Geschrieben May 20, 2013 at 08:02 Geschrieben May 20, 2013 at 08:02 Hallo Zusammen, ich möchte mein DualRelay gerne wie folgt ansteuern: Wenn die Temperatur unter XGrad ist, dann soll Relay1 des DualRelayBricklets für den Zeitraum A eingeschaltet werden. Danach soll es für den Zeitraum B ausgeschaltet sein und nach ablauf dieser Zeit wieder eingeschaltet werden. Das ganze so lange im Wechsel, bis die Temperatur X erreicht ist... Ist diese erreicht, soll das Relay1 ausgeschaltet bleiben, bis die Temperatur wieder unter X Grad liegt. Lässt sich das mit SetMonoflop(); machen? oder muss ich einen eigenen Counter laufen lassen, um den Statuswechsel durchführen zu können? private void TemperatureBricklet(object tmpObj) { while (myTemp < 3000) { startHeating(); } } private void startHeating() { TF_Bricklets.BrickletDualRelay.SetMonoflop(1, true, 10000); } Zitieren
AuronX Geschrieben May 20, 2013 at 16:29 Geschrieben May 20, 2013 at 16:29 Durch das Mono-flopping wird der heizer von alleine wieder ausgehen. Allerdings musst du nach dem Starten der Erhitzung selbst die Zeit A+B abwarten, um dann den Heizer wieder erneut einzuschalten. Zitieren
CChris Geschrieben May 20, 2013 at 17:43 Autor Geschrieben May 20, 2013 at 17:43 Also brauche ich einen Counter, der Anspringt, sobald das Relay durch den Monoflop ausschaltet - und wenn der Timer seine Zeit durch hat, wird das Relay wieder mit SetState(true, ...) eingeschaltet - bis das Monoflop ihn wieder ausschaltet... hm... Generell wäre das ja komplett dann über eigene Timer steuerbar - mit dem Unterschied, dass der Heizer im Schlimmsten Falle bei einem Disconnect der Verbindung oder einem Absturz der Software aktiviert bleibt... stimmts? Zitieren
AuronX Geschrieben May 21, 2013 at 19:52 Geschrieben May 21, 2013 at 19:52 Genau. Durch Monoflop kann die verbindung wegfallen und er schaltet trotzdem ab. Zitieren
CChris Geschrieben May 22, 2013 at 06:07 Autor Geschrieben May 22, 2013 at 06:07 aber es ist nicht möglich, ein Relay mittels SetState(true...) zu schalten und dennoch im Falle eines Disconnects den MonoflopCounter auszulösen?! Zitieren
AuronX Geschrieben May 27, 2013 at 14:33 Geschrieben May 27, 2013 at 14:33 Meinst du das MonoflopDone event? Das kommt definitiv nur dann, wenn du auch verbunden bist. Zitieren
CChris Geschrieben May 28, 2013 at 20:51 Autor Geschrieben May 28, 2013 at 20:51 Hi, nein.... (oder doch?) Ich hatte mir das ganze Ursprünglich wie folgt gedacht: Ich setze den Status des Relay vom Bricklet auf true... und lasse weiterhin meinen Code laufen... wird jetzt plötzlich die Verbindung getrennt (warum auch immer) setzt der Monoflop-Counter ein. und das Gerät schaltet das Relay auf false, wenn der MonoflopCounter abgelaufen ist. Zitieren
AuronX Geschrieben May 29, 2013 at 10:03 Geschrieben May 29, 2013 at 10:03 Ja das wird auch passieren. Aber dein Programm wird bestenfalls mitbekommen, dass die verbindung getrennt wurde, aber nicht wann der Counter das Relay zurücksetzt. Zitieren
CChris Geschrieben May 29, 2013 at 10:20 Autor Geschrieben May 29, 2013 at 10:20 dass das Programm davon nix mitbekommt macht nichts... wenn der Rechner hängen bleibt oder probleme macht, dann bekommt das Programm sowieso nix mehr mit. Mir ist nur aufgefallen, dass wenn ich den Status mit setState auf true setze, der Monoflop Counter eben nicht runterzählt und das Relay auf Off stellt, wenn z.B. das Programm beendet wird. Beispiel: Ich möchte im Programm das Relay einschalten. Wie lange usw. ist jetzt erstmal unwichtig. irgndwann soll das Relay wieder ausgeschaltet werden. "Normalerweise" mit SetState(true...) und anschließend mit SetState(false...) bricht jetzt die Verbindung ab, oder beendet sich die Software, sollte "in diesem Moment" der Monoflop-Counter beginnen und das Relay nach z.B. 20000ms auf false stellen (da ja die Kontrolle über das Programm fehlt). Dies funktioniert aber nicht, wenn ich z.B. im Callback den Monoflop setze und an anderer Stelle dann dem Bricklet sage: SetState(true...) bei der Simulation bleibt das Relay dann nach beenden der Software an. Der MonoflopCounter wird also in diesem Moment nicht mehr "aktiviert" Zitieren
AuronX Geschrieben May 29, 2013 at 11:34 Geschrieben May 29, 2013 at 11:34 So ist das auch nicht gedacht. Du nutzt nur SetMonoflop mit true und SetState mit false. Das bedeutet wenn die Verbindung nach einem SetState(false) abbricht, dann bleibt es aus. Wenn sie nach einem SetMonoflop(true) abbricht, dann geht es von alleine aus, wegen des Monoflop-Counters. Sehr einfaches Beispiel: while(true) { if(temp < minimumTemp) { relay.SetMonoflop(1, true, 12000); } Thread.Sleep(10000); //etwas kürzer schlafen als das Monoflop dauert, sonst schaltet sich das Gerät zwischendurch jedes mal kurz aus } Zitieren
CChris Geschrieben May 29, 2013 at 18:20 Autor Geschrieben May 29, 2013 at 18:20 danke für das Beispiel... da stand ich irgendwie voll auf dem Schlauch^^ Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.