Ankündigung

Einklappen
Keine Ankündigung bisher.

HS Logikbaustein Problem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    HS Logikbaustein Problem

    Guten Morgen,

    Hintergrund des Bausteins:
    Ich habe noch keinen Baustein gefunden, der mir anhand eines Datums (z.B. Müllabfuhrtermin) ein Datum errechnet, welches X-Tage in der Vergangenheit liegt.
    Ist vor allem schwierig wenn es der 1.xx.xxxx ist.
    Wie lang ich für diese paar Zeilen gebraucht habe, darf ich gar nicht sagen... aber er funktioniert immer noch nicht so wie er soll und ich sehe meinen Fehler nicht.
    Hoffe ihr könnt mir weiterhelfen.

    Mein Problem ist, dass er jedesmal neu berechnet wird, wenn an Eingang 2 ein neues Datum eintrifft.
    (Das Datum für die Müllabfuhr hole ich mir jeden Tag aus dem Internet)
    Normalerweise müsste er doch nur neu berechnet werden, wenn der HS initialisiert wird und dann nach dem Timeout von dem Zeitspeicher oder?

    Folgenden Code verwende ich für meinen Baustein:
    Code:
    5000|"Zeit-Funktionen\Datum finden"|0|3|"E1 Trigger Uhrzeit"|"E2 Datum"|"E3 +/- Tage von Datum"|1|"A1 Status"|"v.0.01"
    
    5001|3|1|1|0|1
    
    5002|1|"18:00:00"|1
    5002|2|"17.01.2015"|1
    5002|3|-3|0
    
    5004|1|0|0|1|0
    
    5012|0|"EI==1 or OC[1]"|"((__import__('datetime').datetime.fromtimestamp(__import__('time').mktime(__import__('time').strptime(EN[2],'%d.%m.%Y'))) + __import__('datetime').timedelta(EN[3])).strftime('%d.%m.%Y') == __import__('time').strftime('%d.%m.%Y',__import__('time').localtime())) & (EN[1] == __import__('time').strftime('%H:%M',__import__('time').localtime()))"|"60"|1|1|0|0
    Danke und Gruß
    Florian

    #2
    Berechnet sich alle 60 Sekunden. Da du 60 in den Time Speicher schriebst und mit OC wieder startest.

    Kommentar


      #3
      Ja genau, stimmt er soll alle 60 Sekunden neu berechnen.
      Wenn Eingang 1 == aktuelle Zeit && (Eingang 2 + Eingang 3) == aktuelles Datum, dann Ausgang 1 == 1
      So funktioniert es auch grundsätzlich.

      Leider bekomme ich auch auf Ausgang 1 eine 1 wenn Eingang 1 != aktueller Zeit && (Eingang 2 + Eingang 3) == aktuelles Datum
      Aber nur wenn auf Eingang 2 ein neues Telegramm ankommt.

      Wieso ist die Bedingung erfüllt obwohl die eingegebene Uhrzeit an Eingang 1 nicht mit der aktuellen Zeit übereinstimmt?
      Habe ich irgendwo eine Klammer vergessen?

      Kommentar


        #4
        Du musst auf jedenfall mit EN3 über datetime und timedelta gehen. Das Ergebnis um die Sekunden/Millisekunden kürzen und dann mit den Eingängen vergleichen EN1 und EN2.

        Auch sollte der Intervall niedriger sein und der Ausgang ggf. als SBC. Dann klappt es immer.

        Beispiel für Datetime/Timedelta (zzgl. Import natürlich)
        datetime.datetime.now() + datetime.timedelta(-3)

        Kommentar


          #5
          Zitat von Axel Beitrag anzeigen
          Du musst auf jedenfall mit EN3 über datetime und timedelta gehen.
          Ja, das habe ich ja gemacht.
          Zitat von Axel Beitrag anzeigen
          Das Ergebnis um die Sekunden/Millisekunden kürzen und dann mit den Eingängen vergleichen EN1 und EN2.
          Nicht ganz, ich muss die Summe aus EN3 und EN2 mit dem aktuellen Datum vergleichen.
          EN2 muss ich mit der aktuellen Uhrzeit vergleichen.
          Wenn beide Bedingungen wahr sind, dann kommt am A1 eine 1 raus.

          Zitat von Axel Beitrag anzeigen
          Auch sollte der Intervall niedriger sein und der Ausgang ggf. als SBC. Dann klappt es immer.
          Wenn ich den Intervall niedriger setze setze als 60 Sekunden, dann bekomme ich zweimal innerhalb einer Minute eine 1 auf A1
          Aber du hast recht wenn ich SBC verwenden würde, dann könnte ich den Intervall geringer einstellen.
          Werde ich vielleicht bei Gelegenheit ändern.

          PS: Habe meinen Fehler gefunden, hab tatsächlich eine Klammer vergessen...

          Danke für deine Hilfe

          Gruß
          Florian

          Kommentar

          Lädt...
          X