Zeitschaltuhr wie mache ich es besser

Tiki
2008-08-17
2008-08-23
  • Tiki - 2008-08-17

    Hallo Zusammen,

    ich bin gerade dran eine kleine Zeitschaltuhr zu Progr.

    das ganze soll für ca. 15 Kanäle sein, jeder Tag sollte 3 Aus und Einschaltzeiten besitzen, das jeweils für Mo-FR und Sa-SO verschiedene.

    habe mal einfach drauf los programmiert. Das ganze funktioniert für 1 Kanal, jetzt meine Frage was kan man besser machen.

    Ich speichere die Schaltzeiten in Array's wie kann mann diese zur laufzeit über die Visu konfortabel ändern ? oder hat einer einen komplett neuen ansatz? bin für alles Dankbar.

    Die Scheduler Lib habe ich gefunden weiß aber nicht ob meine Wago 841 für 15 Känale platz hat, es soll auch noch andere sachen darauf laufen.

    mfg und Danke tiki

    (* @NESTEDCOMMENTS := 'Yes' *)
    (* @PATH := '' *)
    (* @SYMFILEFLAGS := '2048' *)
    PROGRAM Speicher
    VAR
       K01: BOOL;
       Zeit_K01_Mo_Fr: ARRAY [0..5] OF TOD := TOD#06:00:00,TOD#07:00:00,TOD#09:00:00,TOD#10:00:00,TOD#11:00:00,TOD#12:00:00;
       Zeit_K01_Sa_So: ARRAY [0..5] OF TOD := TOD#07:00:00,TOD#22:00:00,TOD#09:00:00,TOD#10:00:00,TOD#11:00:00,TOD#12:00:00;
       wday: INT;
       dat: DATE;
       dt_in: DATE;
       daytime: TOD;
       Echtzeit: DT;
       dummy: BOOL;
       aktuelleZeit: TIME;
    END_VAR
    (* @END_DECLARATION := '0' *)
    Echtzeit:=SysRtcGetTime(dummy);     (* Echtzeit lesen*)
    dat := DT_TO_DATE(Echtzeit);
    daytime := DT_TO_TOD(Echtzeit);
    wday := WEEKDAY(dat);
    CASE wday OF
    1..5:   (* Montags bis  Freitags *)
    IF ((daytime >= Zeit_K01_Mo_Fr[0]) AND( daytime <= Zeit_K01_Mo_Fr[1])) OR ((daytime >= Zeit_K01_Mo_Fr[3]) AND( daytime <= Zeit_K01_Mo_Fr[3])) OR ((daytime >= Zeit_K01_Mo_Fr[4]) AND( daytime <= Zeit_K01_Mo_Fr[5])) THEN                           (* Zeitkanal auswerten und schalten *)
       K01:= TRUE;
    ELSE
        K01:= FALSE;
       END_IF;
    6..7:   (* Samstag und Sonntag*)
    IF ((daytime >= Zeit_K01_Sa_So[0]) AND( daytime <= Zeit_K01_Sa_So[1])) OR ((daytime >= Zeit_K01_Sa_So[3]) AND( daytime <= Zeit_K01_Sa_So[3])) OR ((daytime >= Zeit_K01_Sa_So[4]) AND( daytime <= Zeit_K01_Sa_So[5])) THEN                           (* Zeitkanal auswerten und schalten *)
       K01:= TRUE;
    ELSE
        K01:= FALSE;
       END_IF;
    END_CASE;
    END_PROGRAM
    

    SPEICHER.EXP [1.41 KiB]

     

    Related

    Talk.ru: 1
    Talk.ru: 3
    Talk.ru: 5

  • Speicherzelle - 2008-08-18

    Tiki hat geschrieben:
    Hallo Zusammen,
    ich bin gerade dran eine kleine Zeitschaltuhr zu Progr.
    das ganze soll für ca. 15 Kanäle sein, jeder Tag sollte 3 Aus und Einschaltzeiten besitzen, das jeweils für Mo-FR und Sa-SO verschiedene.
    habe mal einfach drauf los programmiert. Das ganze funktioniert für 1 Kanal, jetzt meine Frage was kan man besser machen.
    Ich speichere die Schaltzeiten in Array's wie kann mann diese zur laufzeit über die Visu konfortabel ändern ? oder hat einer einen komplett neuen ansatz? bin für alles Dankbar.
    Die Scheduler Lib habe ich gefunden weiß aber nicht ob meine Wago 841 für 15 Känale platz hat, es soll auch noch andere sachen darauf laufen.
    mfg und Danke tiki

    (* @NESTEDCOMMENTS := 'Yes' *)
    (* @PATH := '' *)
    (* @SYMFILEFLAGS := '2048' *)
    PROGRAM Speicher
    VAR
       K01: BOOL;
       Zeit_K01_Mo_Fr: ARRAY [0..5] OF TOD := TOD#06:00:00,TOD#07:00:00,TOD#09:00:00,TOD#10:00:00,TOD#11:00:00,TOD#12:00:00;
       Zeit_K01_Sa_So: ARRAY [0..5] OF TOD := TOD#07:00:00,TOD#22:00:00,TOD#09:00:00,TOD#10:00:00,TOD#11:00:00,TOD#12:00:00;
       wday: INT;
       dat: DATE;
       dt_in: DATE;
       daytime: TOD;
       Echtzeit: DT;
       dummy: BOOL;
       aktuelleZeit: TIME;
    END_VAR
    (* @END_DECLARATION := '0' *)
    Echtzeit:=SysRtcGetTime(dummy);     (* Echtzeit lesen*)
    dat := DT_TO_DATE(Echtzeit);
    daytime := DT_TO_TOD(Echtzeit);
    wday := WEEKDAY(dat);
    CASE wday OF
    1..5:   (* Montags bis  Freitags *)
    IF ((daytime >= Zeit_K01_Mo_Fr[0]) AND( daytime <= Zeit_K01_Mo_Fr[1])) OR ((daytime >= Zeit_K01_Mo_Fr[3]) AND( daytime <= Zeit_K01_Mo_Fr[3])) OR ((daytime >= Zeit_K01_Mo_Fr[4]) AND( daytime <= Zeit_K01_Mo_Fr[5])) THEN                           (* Zeitkanal auswerten und schalten *)
       K01:= TRUE;
    ELSE
        K01:= FALSE;
       END_IF;
    6..7:   (* Samstag und Sonntag*)
    IF ((daytime >= Zeit_K01_Sa_So[0]) AND( daytime <= Zeit_K01_Sa_So[1])) OR ((daytime >= Zeit_K01_Sa_So[3]) AND( daytime <= Zeit_K01_Sa_So[3])) OR ((daytime >= Zeit_K01_Sa_So[4]) AND( daytime <= Zeit_K01_Sa_So[5])) THEN                           (* Zeitkanal auswerten und schalten *)
       K01:= TRUE;
    ELSE
        K01:= FALSE;
       END_IF;
    END_CASE;
    END_PROGRAM
    

    Hallöchen,

    habe eine Wochenzeitschaltuhr (Function) programmiert.Du kannst damit soviele

    Ein.-Ausschaltenzeiten programieren wie Du willst oder dein CPU verkraftet.

    Ein FB zum einstellen der CPU Time und Date ist auch dabei

    Wenn Du sie haben möchtest sage Bescheid dann schiecke ich dir die Function in einem Beispiel.

    Du wirst aber verstehen das ich das nicht so schnell machen kann wie Du es möchtest da ich nur eingeschränkt Zeit habe

     
  • hugo - 2008-08-20

    eine universell programmierbare und beliebig kaskadierbare zeitschaltuhr findest du in der oscat lib, auch im source code.

    die kann 16 kanäle und beliebige ein aus zeiten

    du findest die lib unter w www.oscat.de w

    der entsprechende baustein ist der timer_p4

    im manual ist auch beschrieben wie du 4 bausteine kaskadieren musst um einen 16 kanal baustein zu erhalten

     
  • Tiki - 2008-08-22

    Danke, der Timer_p4 sieht sehr gut aus.

    Hast Du auch noch einen Tip wie ich das Array so speichern kann das ich nach einen Download die ganzen Zeiten nicht immer ändern muss?

    evtl. auch wie ich es einfach in eine Visu packe ?

    mfg TIKI

     
  • gravieren - 2008-08-22

    Hi

    Hast du einen Wago 750-841 dann z.b. in eine Datei speichern.

    Diese lässt sich mit dem ftp-Befehle auch sichern.

    Ich denke, dass auch etliche "andere" Steuerungen Datei-zugriff haben.

     
  • Tiki - 2008-08-22

    Ja ich habe eine Wago 841.

    Datei ? hast Du ein vieleicht ein Beispiel ?

    mfg TIKI

     
  • gravieren - 2008-08-22

    Schau doch mal auf meine Homepage.

    Da gibt es Examples.

     
  • hugo - 2008-08-22

    das array kannst du auch als retein abspeichern

    deklariere die variable als var retain persisitent oder nur var retain

     
  • Speicherzelle - 2008-08-23

    Tiki hat geschrieben:
    Danke, der Timer_p4 sieht sehr gut aus.
    Hast Du auch noch einen Tip wie ich das Array so speichern kann das ich nach einen Download die ganzen Zeiten nicht immer ändern muss?
    evtl. auch wie ich es einfach in eine Visu packe ?
    mfg TIKI

    schreibe deine Variable einfach in die Watch und Rezepturverwalter rein dann kannst Du sie schnell online auf die CPU schieben ohne das Du die Variable neu eingeben musst.

    So kannst du die aktuellen Variable auch aus der CPU holen und in der Watchliste speicher.Damit kannst Du die aktuellen Daten immer in die CPU schieben

    siehe Beispiel

    .Jahr_einstellen:=2008

    .Minute_einstellen:=56

    .Monat_einstellen:=5

    .Stunde_einstellen:=8

    .Tag_einstellen:=21

     

Log in to post a comment.