Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

RTC auslesen

Jan Homann
2006-04-04
2006-05-16
  • Jan Homann - 2006-04-04

    Hallo, ich nochmal.

    Ich möchte von meiner SPS die RTC auslesen aber irgendwie glaubt die, sie hätte den 01.01.1970, ~22Uhr.

    Ich habe die RTC schon über Wago EthernetIP eingestellt. Zur Zeit lese ich sie mit dem Baustein CurTime und CurTimeEx aus der Bibliothek SysLibTime aus. CurTime gibt mir allerdings nur die ~22 Uhr während CurTimeEX garkeine Zeit ausgibt.

    Ich benötige die Zeit in Millisekunden daher wird die SysLibRTC Bibliothek wohl ausfallen oder kann man aus dem DATE_AN_TIME-Format auch die Millisekunden rausziehen?

    Gruss Jan

     
  • Benjamin - 2006-04-05

    1) Die Datumsangabe 1.1.1970 kommt wahrscheinlich daher, dass du die Uhrzeit noch nicht eingestellt hast. http://de.wikipedia.org/wiki/Unixzeit

    2) Und ja, die ms kannst du nicht aus DATE_AND_TIME Variablen auslesen. Bei TIME oder TIME_OF_DAY funktioniert es aber.

    Such doch mal in der Hilfe nach TIME...

    MFG

    Benjamin

     
  • Jan Homann - 2006-04-05

    Hallo,

    die Unixzeit ist mir schon ein begriff. Ich habe mich auch nicht so sehr über den 1.Januar 1970 gewundert sondern mehr darüber, das der Controller anscheinend seine Uhr zurückgesetzt hat. Muss ich die RTC nach jedem betätigen des Resetbuttons am Controller neu setzen?

    Mit TIME() und der SysRtcGetTime() läuft es dann in etwa so, wie ich es mir vorgestellt habe. Wenn ein Messzyklus beginnt nehme ich mit SysRtcGetTime() die aktuelle Uhrzeit und das Datum. Mit Time() berechne ich die Zeit zwischen Start des Messzykluses und jeder einzelnen Messung. Nachher rechne ich diese Verzögerungen wieder auf die Startzeit. So bekomme ich den Start zwar nicht auf die Millisekunde genau aber die Abstände in einem Messzykluss sollten dabei genau genug sein.

    Gruss

    Jan

     
  • Benjamin - 2006-04-05

    Jan Homann hat geschrieben:
    Hallo,
    Muss ich die RTC nach jedem betätigen des Resetbuttons am Controller neu setzen?

    Weiß ich nicht. Dazu musst du in der Beschreibung deiner Hardware nachschauen.

     
  • e-pappy - 2006-05-11

    Wenn Du die Uhrzeit gesetzt hast und anschließend die aktuelle Uhrzeit in eine Variable speicherst, dann mache diese Vaiable "retain" und "persistant". Dann sollte auch ein Reset des Controllers nichts mehr ausmachen.

    Alternativ kannst Du auch, da Du ja anscheinend mt WAGO arbeitest, das WAGO ethernet Setting Tool verwenden, um die Uhrzeit einzustellen, oder per Web-Zugriff, falls es ein 750-842 oder 750-841 ist.

    Aber oben genannter Weg sollte ebenfalls funktionieren, da Du die Uhrzeit ja schon hast!

    mfG

    e-pappy

     
  • uuser - 2006-05-13

    Hallo, da habe ich auch noch ne Frage. Ich versuche gerade per FUP ein Programm zu entwerfen, wo mann aus dem RTC Baustein der ja Datum und Uhrzeit weiter hoch laufen lässt, nur die Uhrzeit abgreifen möchte. (Das brauche ich für eine Rolladensteuerung, die jeden Tag um 20:00 Uhr die Rollade runter fahren und um 8:00 Uhr wieder hoch fahren soll). Ich habe das mit Vergleichern probiert (EQ), aber es funktioniert nicht, dass er sich aus date_time nur time_of_day rauszieht!

    Hat jemand Erfahrungen damit oder weiß Rat?

    MFG

    UUSER

     
  • J Schohaus - 2006-05-15

    Mein beispiel zum isolieren der Zeit aus einer Variablen vom Type TD

    VAR
       TagUhrzeit : DT ;
       Zeit : TOD ;
    END_VAR
    Zeit := DINT_TO_TOD ( ( DT_TO_DINT ( TagUhrzeit ) MOD DT_TO_DINT (dt#1970-01-02-00:00:00 )) * 1000 ) ;
    

    Eigentlich handelt es sich nur um dem Befehl MOD was den Rest einer Division ergibt. ( Rest von Division durch 1 Tag )

    Das ander sind nur Type Konvertierungen.

    Da Type TOD in ms angegeben ist kommt noch eine Multiplikation mit 1000 in der Berechnung.

     
  • e-pappy - 2006-05-16

    Mit DT_TO_TIME (Konvertierung) sollte es ebenfalls kein Problem sein...

     
  • uuser - 2006-05-16

    ...stimmt mit der konvertierung DT_TO_TIME klappts danke für denn Hinweis. Jetzt habe ich noch eine Frage. Ich möchte die dauer der positiven Flanke eines Tasters abrufen und als Konstante TIME oder TOD ausgewertet haben. Mit BOOL_TO_TIME klappt das nicht ergebnis ist 1ms. Kann mann die Flankendauer überhaupt auswerten?

    MFG

    UUSER

     
  • e-pappy - 2006-05-16

    Hab mal ein wenig rumprobiert, und auch wenn es etwas kompliziert erscheint, bin ich auf eine Lösung gstoßen.

    Projekt im Anhang...

    Ich benutze eine Einschaltverzögerung TON, wo ich für var1 die eingehende Flanke anschließe. Die Zeit t#60s kann, falls eine längere Konstante nötig ist, auch angehoben werden. Am Ausgang ist die Variable var2 nicht zu beachten. In der Variable Anzeige wird die Zeit gezählt, allerdings nac abfallen der Flanke wieder genullt! Daher der Programmaufruf "Speicherung", der die Anzeige in eine Variable Zeit speichert!

    Sprich, nachdem die Flanke wieder abgefallen ist, findet man die Dauer in der Variablen Zeit. Durch setzen der Variable var3 = TRUE wird die Variable Zeit wieder zurückgesetzt.

    Ein anderer Weg ist mir jetzt gerade nicht eingefallen, aber das Ding erfüllt seinen Zweck!

    Flankenzaehlwerk.rar [3.64 KiB]

     

Log in to post a comment.