CChris Posted May 20, 2013 at 08:02 AM Share Posted May 20, 2013 at 08:02 AM 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); } Quote Link to comment Share on other sites More sharing options...
AuronX Posted May 20, 2013 at 04:29 PM Share Posted May 20, 2013 at 04:29 PM 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. Quote Link to comment Share on other sites More sharing options...
CChris Posted May 20, 2013 at 05:43 PM Author Share Posted May 20, 2013 at 05:43 PM 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? Quote Link to comment Share on other sites More sharing options...
AuronX Posted May 21, 2013 at 07:52 PM Share Posted May 21, 2013 at 07:52 PM Genau. Durch Monoflop kann die verbindung wegfallen und er schaltet trotzdem ab. Quote Link to comment Share on other sites More sharing options...
CChris Posted May 22, 2013 at 06:07 AM Author Share Posted May 22, 2013 at 06:07 AM aber es ist nicht möglich, ein Relay mittels SetState(true...) zu schalten und dennoch im Falle eines Disconnects den MonoflopCounter auszulösen?! Quote Link to comment Share on other sites More sharing options...
AuronX Posted May 27, 2013 at 02:33 PM Share Posted May 27, 2013 at 02:33 PM Meinst du das MonoflopDone event? Das kommt definitiv nur dann, wenn du auch verbunden bist. Quote Link to comment Share on other sites More sharing options...
CChris Posted May 28, 2013 at 08:51 PM Author Share Posted May 28, 2013 at 08:51 PM 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. Quote Link to comment Share on other sites More sharing options...
AuronX Posted May 29, 2013 at 10:03 AM Share Posted May 29, 2013 at 10:03 AM 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. Quote Link to comment Share on other sites More sharing options...
CChris Posted May 29, 2013 at 10:20 AM Author Share Posted May 29, 2013 at 10:20 AM 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" Quote Link to comment Share on other sites More sharing options...
AuronX Posted May 29, 2013 at 11:34 AM Share Posted May 29, 2013 at 11:34 AM 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 } Quote Link to comment Share on other sites More sharing options...
CChris Posted May 29, 2013 at 06:20 PM Author Share Posted May 29, 2013 at 06:20 PM danke für das Beispiel... da stand ich irgendwie voll auf dem Schlauch^^ Quote Link to comment Share on other sites More sharing options...
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.