Jump to content

Recommended Posts

Geschrieben

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);
        }

Geschrieben

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?

Geschrieben

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.

Geschrieben

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"

Geschrieben

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
}

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...