Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 5 von 5

Thema: Steigende Flanke mit TOF - Verzweifle langsam

  1. #1
    Registriert seit
    19.05.2013
    Beiträge
    29
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich bräuchte Hilfe mit folgendem Problem:
    Per Wetterstation wird das Tageslicht gemessen. Z.B. bei 2 Lux sollen die Rolläden (nach Gruppendefinition) herunterfahren und z.B. bei 900 Lux wieder hochfahren.
    Dazu muss ein Puls von ca 5s auf den KNX-Bus gesendet werden. Der jeweilige Rolladen in der Gruppendefinition (wird im HMI festgelegt) wird dann gefahren.
    Folgender Code funktioniert einwandfrei für rauf und runter, aber leider jeweils nur 1x. Beim 2. Rauf- oder Runterfahren geht es nicht mehr.

    Lokal definiert:
    RTRIG_AB_Fahren,RTRIG_AUF_Fahren: R_TRIG;
    Gr_P_AUF,Gr_P_AB: TOF;
    AB_gefahren, AUF_gefahren: BOOL;
    AB_fahren,AUF_fahren: BOOL;

    Code:
    IF Tageslicht=Dunkelheit AND NOT AB_gefahren THEN
        IF    Gruppe_Auto_AB  THEN
            AB_fahren:=TRUE;
            RTRIG_AB_Fahren(CLK:= AB_fahren);
            Gr_P_AB(IN :=RTRIG_AB_Fahren.Q , PT:= T#5s);
            GruppeAB_Tageslicht:=Gr_P_AB.Q;
            IF NOT Gr_P_AB.Q THEN
                AB_gefahren:=TRUE;
            END_IF
            AB_fahren:=FALSE;
        END_IF
    ELSIF Tageslicht=Helligkeit AND NOT AUF_gefahren THEN
        IF    Gruppe_Auto_AUF  THEN
            AUF_fahren:=TRUE;
            RTRIG_AUF_Fahren(CLK:= AUF_fahren);
            Gr_P_AUF(IN :=RTRIG_AUF_Fahren.Q , PT:= T#5s);
            GruppeAUF_Tageslicht:=Gr_P_AUF.Q;
            IF NOT Gr_P_AUF.Q THEN
                AUF_gefahren:=TRUE;
            END_IF
            AUF_fahren:=FALSE;
        END_IF
    ELSIF Tageslicht>Helligkeit THEN
            AB_gefahren:=FALSE;
    ELSIF Tageslicht=0 THEN
            AUF_gefahren:=FALSE;
    END_IF


    SPSForum.txt als formatierter Text

    Vielleicht kennt jemand eine elegantere Lösung. Mit Pulse_T von Oscat hatte ich es auch schon versucht, hat auch nicht geklappt. Eine globale Definition von R_Trig und TOF ändert ebenfalls nichts.

    Schönen Sonntag
    Geändert von Schlappendulli (17.05.2015 um 14:32 Uhr)
    Zitieren Zitieren Steigende Flanke mit TOF - Verzweifle langsam  

  2. #2
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 919 Danke für 740 Beiträge

    Standard

    Nutze bitte mal für den Code die Codetags [CODE] [/CODE] bzw. das entsprechende Icon # in der 2. Iconreihe ganz am Ende. Dann läßt sich der Code besser lesen. Guckst Du:

    Code:
    IF Tageslicht = Dunkelheit AND NOT AB_gefahren THEN
        IF    Gruppe_Auto_AB THEN
            AB_fahren:=TRUE;
            RTRIG_AB_Fahren(CLK:= AB_fahren);
            Gr_P_AB(IN :=RTRIG_AB_Fahren.Q , PT:= T#5s);
            GruppeAB_Tageslicht:=Gr_P_AB.Q;
            IF NOT Gr_P_AB.Q THEN
                AB_gefahren:=TRUE;
            END_IF
            AB_fahren:=FALSE;
        END_IF;
    ELSIF Tageslicht =Helligkeit AND NOT AUF_gefahren THEN
        IF    Gruppe_Auto_AUF  THEN
            AUF_fahren:=TRUE;
            RTRIG_AUF_Fahren(CLK:= AUF_fahren);
            Gr_P_AUF(IN :=RTRIG_AUF_Fahren.Q , PT:= T#5s);
            GruppeAUF_Tageslicht:=Gr_P_AUF.Q;
            IF NOT Gr_P_AUF.Q THEN
                AUF_gefahren:=TRUE;
            END_IF
            AUF_fahren:=FALSE;
        END_IF;
    ELSIF Tageslicht > Helligkeit THEN
            AB_gefahren:=FALSE;
    ELSIF Tageslicht = 0 THEN
            AUF_gefahren:=FALSE;
    END_IF;
    Ansonsten ist es immer schlecht, wenn Timer nicht in jedem Zyklus passiert werden, weil Sie sich z.B. innerhalb einer IF..ELSE-Verzweigung befinden. Dann haben sie in der Regel Schwierigkeiten, die Low-High-Flanke an ihrem Eingang zu erkennen und werden so nicht sicher gestartet oder beendet.
    Du solltest also zuerst mal die Timer dort herauslösen.

  3. #3
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Genau, du kannst den Timer außerhalb der If...Then Abfrage aufrufen. (z.B. ganz am Ende) Aktiviert wird er ja mit der Variable am Input IN. Das Ergebnis kannst du an beliebiger Stelle jederzeit abfragen.

    PS: Auch bei Flanken mußt du darauf achten, dass sie nicht nur True am Eingang "sehen", sondern auch das False, denn sonst können die naturgemäß ja keine Flanke erkennen!
    Zur Sicherheit könntest du also auch die Flanken außerhalb der If...Then Anweisung anlegen.
    Geändert von Ralle (17.05.2015 um 14:40 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  4. #4
    Schlappendulli ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    19.05.2013
    Beiträge
    29
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Vielen Dank an Euch ! Danke für den Tip mit [CODE], ich hatte mir mit der Textdatei fast einen abgebrochen. Wusste ich nicht, sorry.
    Und schon gehts !

    Code:
    IF Tageslicht=Dunkelheit AND NOT AB_gefahren THEN
        IF    Gruppe_Auto_AB  THEN
            AB_fahren:=TRUE;
            IF NOT Gr_P_AB.Q THEN
                AB_gefahren:=TRUE;
            END_IF
        END_IF
    ELSIF Tageslicht=Helligkeit AND NOT AUF_gefahren THEN
        IF    Gruppe_Auto_AUF  THEN
            AUF_fahren:=TRUE;
            IF NOT Gr_P_AUF.Q THEN
                AUF_gefahren:=TRUE;
            END_IF
        END_IF
    ELSIF Tageslicht>Helligkeit THEN
            AB_gefahren:=FALSE;
    ELSIF Tageslicht=0 THEN
            AUF_gefahren:=FALSE;
    END_IF
    
    RTRIG_AB_Fahren(CLK:= AB_fahren);
    Gr_P_AB(IN :=RTRIG_AB_Fahren.Q , PT:= T#5s);
    GruppeAB_Tageslicht:=Gr_P_AB.Q;
    AB_fahren:=FALSE;
    
    RTRIG_AUF_Fahren(CLK:= AUF_fahren);
    Gr_P_AUF(IN :=RTRIG_AUF_Fahren.Q , PT:= T#5s);
    GruppeAUF_Tageslicht:=Gr_P_AUF.Q;
    AUF_fahren:=FALSE;
    Ich dachte es ist kein Problem wenn die IF-Schleife solange offen ist wie der Timer läuft. Ausserdem würde der Zyklus durch die geschlossene IF Anweisung entlastet. Nun muss er halt jedesmal Flanke und TOF durchlaufen. Eine elegantere Lösung fällt mir im Moment nicht ein - totale Blockage.

    Auf jeden Fall wieder was gelernt und es läuft.
    DANKE.
    Schönen Sonntag noch

  5. #5
    Registriert seit
    13.10.2013
    Ort
    shertogenbosch niederlande
    Beiträge
    120
    Danke
    0
    Erhielt 8 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    du fragst IF tageslicht ======= das passiert ja fast nie also da soll <= stehen.
    weiter sagst du wenn die tageslicht =0 dan ist die aufgeharen false das stimmt nicht, wenn die laden runter ist nicht wenn das licht anders ist.
    paul deelen
    shooter@home.nl
    +31736139136

Ähnliche Themen

  1. Stetig steigende Falschmessungen
    Von DelphiKE im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 29.08.2012, 10:53
  2. IF 'steigende Flanke' THEN 'send Byte'
    Von sablitos im Forum CODESYS und IEC61131
    Antworten: 11
    Letzter Beitrag: 02.08.2011, 13:54
  3. steigende/fallende Flanke unter CoDeSys 2.3.9 ???
    Von Jumpinjack im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 27.08.2010, 09:18
  4. S7 200er CPU 212 TOF mit TON :-)
    Von veritas im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 06.01.2009, 10:16
  5. Verzweifle an Rolladensteuerung mit Logo
    Von eidunna im Forum Programmierstrategien
    Antworten: 16
    Letzter Beitrag: 01.04.2008, 22:43

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •