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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 20 von 20

Thema: Wochenzeitschaltuhr ??

  1. #11
    Registriert seit
    16.11.2008
    Beiträge
    51
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren

    Hallo

    Wie könnte ich die Zeit in der ich von 1 auf 10 V regle beeinflussen???
    Und wie wichtig ist wohl die e-Funktion ???
    Sollte man das überhaupt so machen ???

    FUNCTION_BLOCK Dimmer
    VAR_INPUT

    Soll_min: INT; (* 3276 = 1 V *)
    Soll_max: INT; (* 32767 = 10 V *)
    Istwert: INT;

    An_von_Uhr: BOOL;

    END_VAR
    VAR_OUTPUT

    Steuerspannung: INT;

    END_VAR
    VAR
    END_VAR

    IF An_von_Uhr AND Istwert < 3276 THEN
    Istwert:= 3276;
    END_IF
    IF An_von_Uhr AND Istwert < Soll_max THEN
    Istwert:= Istwert +1;
    END_IF
    IF An_von_Uhr = FALSE AND Istwert > Soll_min THEN
    Istwert:= Istwert - 1;
    END_IF

    Steuerspannung:= Istwert;
    Geändert von Der Nils (18.12.2008 um 20:25 Uhr)
    Gruß
    vom Nils


    ------------------------------------------------
    Wer Rechtschreibfehler findet,darf Sie behalten !

  2. #12
    Registriert seit
    05.04.2006
    Beiträge
    74
    Danke
    0
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Hallo Nils,

    eine zeitliche Verzögerung beim hoch und runterzählen (ca.1s) nicht vergessen, sonst geht es ein wenig schnell.

    gruß

    Markus

  3. #13
    Registriert seit
    16.11.2008
    Beiträge
    51
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi

    Wenn 32767 -> 10 Volt und 3276 -> 1 Volt
    hab ich nen Regelbereich von 29491.
    Im Sekundentakt dauert das schon zulange....?
    Wie könnte man den die Zeit einbinden (ST-Befehl)???
    Gruß
    vom Nils


    ------------------------------------------------
    Wer Rechtschreibfehler findet,darf Sie behalten !

  4. #14
    Registriert seit
    28.11.2008
    Ort
    in der Schweiz
    Beiträge
    40
    Danke
    2
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Hallo Nils

    Im Sekundentakt dauert das schon zulange....?
    Klar! Bei einem Delta (Unterschied, des Regelbereich vor und nach einem Durchlauf deines FB) von nur 1, du kannst, das Delta locker höher setzen.

    Angenommen der Impuls ist 1Sekunde
    Bei deinem Regelbereich von 29491 enspricht dies ungefähr 8 Stunden, bis dein Dimmer den SollWert_Max erreicht hat.

    Jetzt ist rechen angesagt...
    Willst du z.B. in einer Stunde hochdimmen, dann sie dein Delta etwa so aus:
    1 Stunde = 60 Min = 3600 Sekunden
    Delta = 29491 / 3600 => also ca. 8

    Wie könnte man den die Zeit einbinden (ST-Befehl)???
    In Oscat gibts glaubs eine Timer....

    Gruss
    Roman

  5. #15
    Registriert seit
    28.11.2008
    Ort
    in der Schweiz
    Beiträge
    40
    Danke
    2
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Hallo Nils

    Bei mir würde dein FB, etwa so aussehen....


    Deklaration
    Code:
    FUNCTION_BLOCK Dimmer
    VAR_INPUT
      Soll_min     : INT := 3276;  (* 3276 = 1 V *)
      Soll_max     : INT;:= 32767; (* 32767 = 10 V *)
        Istwert      : INT;
      Dimmzeit     : INT; (*Zeit die der Dimmer braucht / in Minuten*)
    
      An_von_Uhr   : BOOL;
    END_VAR
    VAR_OUTPUT
      Steuerspannung  : INT;
    END_VAR
    VAR
      Delta        : INT := 0; (*Um so viel wird jede Sekunde die Regelgrösse erhöht*)
    
      Impuls       : BOOL;
      Flanke       : R_TRIG; (*Detektor für eine ansteigende Flanke, in standard.lib von TwinCat*)
      Impulsglied  : TP;     (*Impulsgeber, in standard.lib von TwinCat*)
      BoolImpuls   : BOOL;   (*Für den Impuls*)
    END_VAR
    Code:
    (*Berechnung des Delta*)
    
    Delta := ((Soll_max - Soll_min) / (Dimmzeit * 60));
    (* " * 60 * weil wird das Delta pro Sekunde wissen wollen*)
    
    
    (*Impuls erzeugen*)
    IF NOT Impulsglied.Q THEN
      BoolImpuls := NOT BoolImpuls;
      Impulsglied( IN := FALSE );
    END_IF
    Impulsglied( IN := TRUE, PT := T#500ms );     (*PT ist die Hälfte des eigentlichen Impuls*)
    Flanke( CLK := BoolImpuls, Q => Impuls);      (*Erst jetzt haben wir, mit Impuls, einen richtigen Impuls*)
    
    IF Impuls THEN                                (*Der Impuls kommt*)
      IF An_von_Uhr THEN                          (*An_von_Uhr ist True*)
        IF Istwert < Soll_min THEN                (*Der Istwert ist kleiner als er solte, dann*)
          Steuerspannung := Soll_min;             (*Steuerspannung gleich dem SollWert_Min*)
        ELSIF (Istwert + Delta) < Soll_max THEN   (*Ist der (Istwert + Delta => Überlaufschutz) kleiner als der Maxwert, dann*)
          Steuerspannung := Istwert + Delta;      (*Steuerspannung gleich dem (Istwert + Delta)*)
        ELSE                                      (*sonst*)
          Steuerspannung := Soll_max;             (*Steuerspannung gleich dem SolWert_Max*)
       END_IF
      ELSE                                        (*An_von_Uhr ist FALSE*)
        IF (Istwert - Delta) > Soll_min THEN      (*Der (Istwert - Delta => Unterlaufschutz) ist grösser als der Maxwert, dann*)
          Steuerspannung:= Istwert - Delta;       (*Steuerspannung gleich dem (Istwert - Delta)*)
        ELSE                                      (*sonst*)
          Steuerspannung:= Soll_min;              (*Steuerspannung gleich dem SollWert_Min*)
        END_IF
      END_IF
    END_IF
    Bei mir dreht das so....
    Habe beim Test die Dimmerzeit auf 2 (Minuten) gesetzt.

    Gruess
    Roman

  6. #16
    Registriert seit
    16.11.2008
    Beiträge
    51
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    HI
    @BRRO87

    hab das Prg.mal getestet is SUPER
    aber ich hatte das selbe Problem wi mit meinen diversen Prog's ....wenn ich in größeren Sritten erhöhe bleib er beim Max oder Min nicht stehen sonndern fängt wieder von forne an.
    die Berechnung des delta's ---echt super da bin ich noch Meilen weit weg.
    Gruß
    vom Nils


    ------------------------------------------------
    Wer Rechtschreibfehler findet,darf Sie behalten !

  7. #17
    Registriert seit
    28.11.2008
    Ort
    in der Schweiz
    Beiträge
    40
    Danke
    2
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Hallo Nils

    Freut mich, das bei dir läuft...

    Zu deinem Problem:
    Hast du den FB komplett übernommen.. so wie ich in oben gepostet habe?(Muss ich wissen um dein Problem nachzuvollziehen!)
    Eigentlich solte dies abgefangen werden....unteranderm hier...
    Code:
        IF Istwert < Soll_min THEN                (*Der Istwert ist kleiner als er solte, dann*)
          Steuerspannung := Soll_min;             (*Steuerspannung gleich dem SollWert_Min*)
        ELSIF (Istwert + Delta) < Soll_max THEN   (*Ist der (Istwert + Delta => Überlaufschutz) kleiner als der Maxwert, dann*)
          Steuerspannung := Istwert + Delta;      (*Steuerspannung gleich dem (Istwert + Delta)*)
        ELSE                                      (*sonst*)
          Steuerspannung := Soll_max;             (*Steuerspannung gleich dem SolWert_Max*)
    Das Problem das du hier bringst, ist meist das gleich, und zwar man vergisst das der Datentyp eine Obergrenze hat. Und bei Überschreitung dieswer Grenze fängt er wieder von vorne an.

    Der Int definiert sich ja folgend... (ist aus der TwinCathilfe)
    Typ Untergrenze Obergrenze Speicherplatz
    INT -32768 32767 16 Bit
    Angenommen unser Wert ist im Mom "32760" und wir erhöhen diesen Wert um "10", dann überschreiten wird ja die Obergrenze um "3", und unser Ergebnis ist nun "-32766"

    Daher musst du dies abfangen, ich mache diese oben so...
    In der IF abfrage addierre ich dem zu erhöhenden Wert schon mit dem Delta un frage dan ab, ob dies schon höher als die Obergrenze ist (bei deinem FB, sind ja Obergrenze und Max, des Outputs, dasselbe!) Wenn ja dan wird die IF- anweisung nicht mehr ausgeführt, weill dies ja zum Überlaufen führen würde!

    Code:
        ELSIF (Istwert + Delta) < Soll_max THEN
          Steuerspannung := Istwert + Delta;
        ELSE
    Denke mal, das wird dein Fehler in allen Fb's beheben.
    Zur Sicherheit kannst du ja mal noch einen anderen FB posten....oder auch Exportieren und mir Mailen....... (würde wahrscheinlich am einfachsten gehen!)

    Hoffe konnte dir weiter helfen
    Gruess
    Roman
    Geändert von Brro87 (22.12.2008 um 14:48 Uhr)

  8. #18
    Registriert seit
    16.11.2008
    Beiträge
    51
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi
    hab endlich Zeit gehabt den Fehler zu suchen
    der Wert ist immer über die 32767 hinaus gelaufen... dann -32XXX also auch kleiner hab das dann so gemacht
    ELSIF (Steuerspannung + Delta) < Soll_max AND
    (Steuerspannung + Delta) > Soll_min THEN
    Steuerspannung := Steuerspannung + Delta;
    ELSE
    Steuerspannung := Soll_max;

    Jetz läuft das vom Feinsten !!

    Ach noch was ....Wie baut man son ,,CODE,, Fenster ein ???
    Gruß
    vom Nils


    ------------------------------------------------
    Wer Rechtschreibfehler findet,darf Sie behalten !

  9. #19
    Registriert seit
    13.01.2007
    Beiträge
    304
    Danke
    35
    Erhielt 29 Danke für 25 Beiträge

    Standard

    Ganz einfach, mit

    dem vorvorletzten ICON #
    bzw. dem Schlüsselwort "[kode]" und "[/kode]". Statt k nimmst Du c, kann ich aber nicht machen, da sonst das Code-Fenster kommt.

    LG

  10. #20
    Registriert seit
    16.11.2008
    Beiträge
    51
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo
    Ich hab noch ne Frage zum Ablauf...

    Wenn der Wert auf 3276 runter ist soll die Lampe ganz abschalten.
    Ich hab festgestellt das die ,,Dimmzeit,, nicht als nachlauf reicht.
    bzw Er etwas länger braucht um runter zu tackten als die eingestellte Zeit.
    Ich hab dann nicht mal 60 sondern mal 70 gerechnet.
    Is aber nich so elegant...

    Code:
    FUNCTION_BLOCK Dimmer2
    VAR_INPUT
      Soll_min     : INT;  (* 3276 = 1 V *)
      Soll_max     : INT; (* 32767 = 10 V *)
    
      Dimmzeit     : INT; (*Zeit die der Dimmer braucht / in Minuten*)
    
      An_von_Uhr   : BOOL;
    END_VAR
    VAR_OUTPUT
      Steuerspannung   : INT;
        Lampe              :BOOL;
    END_VAR
    VAR
      Delta        : INT ; (*Um so viel wird jede Sekunde die Regelgrösse erhöht*)
    
      Impuls       : BOOL;
      Flanke       : R_TRIG; (*Detektor für eine ansteigende Flanke, in standard.lib von TwinCat*)
      Impulsglied  : TP;     (*Impulsgeber, in standard.lib von TwinCat*)
      BoolImpuls   : BOOL;   (*Für den Impuls*)
        Nachlauf       :TOF;    (*Nachlauf zum abschalten der Lampe*)
        N_Zeit: TIME;       (*errechnete Nachlaufzeit*)
    END_VAR
    Code:
    (*Berechnung des Delta*)
    
    Delta := ((Soll_max - Soll_min) / (Dimmzeit * 60));
    (* " * 60 * weil wird das Delta pro Sekunde wissen wollen*)
    
    
    (*Impuls erzeugen*)
    IF NOT Impulsglied.Q THEN
      BoolImpuls := NOT BoolImpuls;
      Impulsglied( IN := FALSE );
    END_IF
    Impulsglied( IN := TRUE, PT := T#500ms );     (*PT ist die Hälfte des eigentlichen Impuls*)
    Flanke( CLK := BoolImpuls, Q => Impuls);      (*Erst jetzt haben wir, mit Impuls, einen richtigen Impuls*)
    
    N_Zeit := INT_TO_TIME( Dimmzeit * 1000 );
    Nachlauf ( IN := An_von_Uhr , PT :=N_Zeit*70);
    Lampe:= Nachlauf.Q;
    
    
    IF Impuls THEN                                (*Der Impuls kommt*)
      IF An_von_Uhr THEN                          (*An_von_Uhr ist True*)
        IF Steuerspannung < Soll_min THEN                (*Der Istwert ist kleiner als er solte, dann*)
          Steuerspannung := Soll_min;             (*Steuerspannung gleich dem SollWert_Min*)
         ELSIF (Steuerspannung + Delta) < Soll_max AND   (*Ist der (Istwert + Delta => Überlaufschutz) kleiner als der Maxwert, dann*)
                        (Steuerspannung + Delta) > Soll_min  THEN
           Steuerspannung := Steuerspannung + Delta;      (*Steuerspannung gleich dem (Istwert + Delta)*)
         ELSE                                      (*sonst*)
           Steuerspannung := Soll_max;             (*Steuerspannung gleich dem SolWert_Max*)
        END_IF
        ELSE                                        (*An_von_Uhr ist FALSE*)
        IF (Steuerspannung - Delta) > Soll_min THEN      (*Der (Istwert - Delta => Unterlaufschutz) ist grösser als der Maxwert, dann*)
          Steuerspannung:=Steuerspannung - Delta;       (*Steuerspannung gleich dem (Istwert - Delta)*)
        ELSE                                      (*sonst*)
          Steuerspannung:= Soll_min;              (*Steuerspannung gleich dem SollWert_Min*)
        END_IF
      END_IF
    END_IF
    Danke an alle die bis jetzt mitgeholfen .....
    Gruß
    vom Nils


    ------------------------------------------------
    Wer Rechtschreibfehler findet,darf Sie behalten !

Ähnliche Themen

  1. Einfache Wochenzeitschaltuhr im WinCC?
    Von vision1001 im Forum HMI
    Antworten: 24
    Letzter Beitrag: 24.07.2012, 11:52
  2. Wochenzeitschaltuhr B&R Steuerung
    Von leibi im Forum Sonstige Steuerungen
    Antworten: 6
    Letzter Beitrag: 14.02.2011, 20:23
  3. Wochenzeitschaltuhr S7-300
    Von Temotec im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 03.06.2009, 21:36
  4. Wochenzeitschaltuhr
    Von mitchih im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 24.09.2007, 10:18
  5. S7-200 Wochenzeitschaltuhr ??????
    Von Schmalzl im Forum Sonstige Steuerungen
    Antworten: 4
    Letzter Beitrag: 21.08.2005, 21:49

Lesezeichen

Berechtigungen

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