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

Problem mit Raspberry Pi RTS_systimedate

2020-03-08
2020-04-08
<< < 1 2 3 > >> (Page 2 of 3)
  • Chris.O - 2020-03-24

    Ich kanns leider nicht testen, hab kein LCD Display da.
    Aber versuch doch einfach mal statt dem Message Text den Uhrzeit-String drauf zu schreiben.... was macht er dann?

     
  • marcelszameitat - 2020-03-24

    Hatte ich mir so ähnlich gedacht , bekomme aber keine STRING zeit im Ptogramm hin . In der funktion hätte ich diese aber bekomme diese nicht eingefügt.

    Das LCD Programm macht sowas ähnliches, ich tuh es mal hinzufügen . Vielleicht überseh ich etwas.
    VAR
    utcTime : DWORD;
    dwResult : DWORD;
    udiResult : UDINT;
    tCurrentDT : SYSTIMEDATE;
    sDisplayTime : STRING;
    END_VAR

    utcTime:= SysTimeRtcGet(pResult:= dwResult);
    udiResult := SysTimeRtcConvertUtcToDate(dwTimestampUtc:= utcTime, pDate:= tCurrentDT);
    IF LEN(STR:= WORD_TO_STRING(tCurrentDT.wMonth)) = 1 THEN
    sDisplayTime := '0';
    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2 := WORD_TO_STRING(tCurrentDT.wMonth));
    ELSE
    sDisplayTime := WORD_TO_STRING(tCurrentDT.wMonth);
    END_IF

    IF LEN(STR:= WORD_TO_STRING(tCurrentDT.wDay)) = 1 THEN
    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2:= '/0');
    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2:= WORD_TO_STRING(tCurrentDT.wDay));
    ELSE
    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2:= '/');
    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2:= WORD_TO_STRING(tCurrentDT.wDay));
    END_IF

    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2:= '/');
    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2:= WORD_TO_STRING(tCurrentDT.wYear));

    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2:= ' - ');

    IF i_xDalightSavings THEN
    IF tCurrentDT.wHour <= 5 THEN
    tCurrentDT.wHour := 24 - (5 - tCurrentDT.wHour);
    ELSE
    tCurrentDT.wHour := tCurrentDT.wHour - 5;
    END_IF
    ELSE
    IF tCurrentDT.wHour <= 4 THEN
    tCurrentDT.wHour := 24 - (4 - tCurrentDT.wHour);
    ELSE
    tCurrentDT.wHour := tCurrentDT.wHour - 4;
    END_IF
    END_IF

    IF i_xMilitaryTime THEN
    IF tCurrentDT.wHour < 10 THEN
    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2:= '0');
    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2:= WORD_TO_STRING(tCurrentDT.wHour));
    ELSE
    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2:= WORD_TO_STRING(tCurrentDT.wHour));
    END_IF
    ELSE
    IF tCurrentDT.wHour > 12 THEN
    tCurrentDT.wHour := tCurrentDT.wHour - 12;
    END_IF
    IF tCurrentDT.wHour < 10 THEN
    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2:= '0');
    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2:= WORD_TO_STRING(tCurrentDT.wHour));
    ELSE
    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2:= WORD_TO_STRING(tCurrentDT.wHour));
    END_IF
    END_IF
    IF tCurrentDT.wMinute < 10 THEN
    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2:= ':0');
    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2:= WORD_TO_STRING(tCurrentDT.wMinute));
    ELSE
    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2:= ':');
    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2:= WORD_TO_STRING(tCurrentDT.wMinute));
    END_IF
    IF tCurrentDT.wSecond < 10 THEN
    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2:= ':0');
    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2:= WORD_TO_STRING(tCurrentDT.wSecond));
    ELSE
    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2:= ':');
    sDisplayTime := CONCAT(STR1:= sDisplayTime, STR2:= WORD_TO_STRING(tCurrentDT.wSecond));
    END_IF
    FC_GetLocalTime := sDisplayTime;
    RETURN;

     
  • Chris.O - 2020-03-24

    Dann probier doch folgendes:

    Kommentier das hier mal alles aus und füg meinen Code ein.

    Bau dir am Ende meines Codes einen komplett-String mit Datum und Uhrzeit zusammen. Diesen legst du dann auf sDisplay Time.

    Schau mal was passiert...

     
  • marcelszameitat - 2020-03-24

    Klingt jetzt vielleicht blöd, aber selbst da kommen nur "???" . Hab erstmal nur dein programm versucht.

     
  • Chris.O - 2020-03-24

    Naja innerhalb der Funktion ist das klar.. ist ja auch ne Funktion. Gugg doch mal, was dir die Funktion als Rückgabewert bringt.

    Ansonsten mach das ganze als Funktionsbaustein und instanzier diesen in deinem Programm... dann siehst du auch Werte.

     
  • Chris.O - 2020-03-24

    Funktionsbaustein:

    FUNCTION_BLOCK MyTimeFB
    VAR_INPUT
        xEnable:BOOL;
    END_VAR
    VAR_OUTPUT
        sMyTimeAndDate:STRING;
    END_VAR
    VAR
        //Read Time
        Ctrl_DateTime: SYSTIMEDATE;
        GetTimeResult: ULINT;
        sdateYear: STRING(4);
        sdateMonth: STRING(2);
        sdateDay: STRING(2);
        stimeHour: STRING(2);
        stimeMin: STRING(2);
        stimeSec: STRING(2);
        stimeMsec: STRING(3);
    
    END_VAR
    
    IF xEnable THEN
        SysTimeRtcHighResGet(pTimestamp:=GetTimeResult);
        SysTimeRTc.SysTimeRtcConvertHighResToDate(pTimestamp:=GetTimeResult, pDate:=Ctrl_DateTime);
    
        //Verwenden der Zeit z.B. als String. Oder Du lässt Sie halt als Word
            sdateYear := UINT_TO_STRING (Ctrl_DateTime.wYear);
            sdateMonth := UINT_TO_STRING (Ctrl_DateTime.wMonth);
            sdateDay := UINT_TO_STRING (Ctrl_DateTime.wDay);
            stimeHour := UINT_TO_STRING (Ctrl_DateTime.wHour);
            stimeMin := UINT_TO_STRING (Ctrl_DateTime.wMinute);
            stimeSec := UINT_TO_STRING (Ctrl_DateTime.wSecond);
            stimeMsec := UINT_TO_STRING (Ctrl_DateTime.wMilliseconds);
    
    
        //Als ein String ausgeben
        sMyTImeAndDate:=CONCAT(sdateYear, '-');
        sMyTimeAndDAte:=CONCAT(sMyTImeAndDate, sdateMonth);
        sMyTimeAndDAte:=CONCAT(sMyTImeAndDate, '-');
        sMyTimeAndDAte:=CONCAT(sMyTImeAndDate, sdateDay);
        sMyTimeAndDAte:=CONCAT(sMyTImeAndDate, '  ');
        sMyTimeAndDAte:=CONCAT(sMyTImeAndDate, sTImeHour);
        sMyTimeAndDAte:=CONCAT(sMyTImeAndDate, ':');
        sMyTimeAndDAte:=CONCAT(sMyTImeAndDate, sTImeMin);
        sMyTimeAndDAte:=CONCAT(sMyTImeAndDate, ':');
        sMyTimeAndDAte:=CONCAT(sMyTImeAndDate, sTimeSec);
    END_IF
    

    Programm:

    PROGRAM PLC_PRG
    VAR
        NewMyTImeFB:MyTimeFB;
        sMyTimeAndDate: STRING;
        xEnable: BOOL;
    END_VAR
    
    //Read Time and Date
    NewMyTImeFB(xEnable:=xEnable, sMyTimeAndDate=>sMyTimeAndDate);
    

    Jetzt kannst du Werte innerhalb deines FB's sehen und müsstest die aktuelle Zeit mit Datum auf dem String "sMyTimeAndDate" haben.

     
  • marcelszameitat - 2020-03-24

    sehr seltsam ich hab jetzt auch dieses Programm nochmal versucht bringt trotzallem keine werte nicht mal auf sMyTimeAndDate.
    langsam hab ich das gefühl irgendwas vergessen zu haben ein Bibl. oder irgendwas ähnliches.

     
  • Chris.O - 2020-03-24

    Hast du das Programm, in dem du deinen FB drin hast auch in einer Task aufgerufen?

     
  • marcelszameitat - 2020-03-24

    Jup hatte was vergessen, das funktioniert lediglich eine Stunde zurück aber geht . Wenn ich das bei sMessage ausgeben möchte kommt ein Fehler.

     
  • marcelszameitat - 2020-03-24

    Jup hatte was vergessen, das funktioniert lediglich eine Stunde zurück aber geht . Wenn ich das bei sMessage ausgeben möchte kommt ein Fehler.

     
  • Chris.O - 2020-03-24

    Mach doch mal die Initialisierung raus... was passiert dann?

     
  • marcelszameitat - 2020-03-24

    Ohne bringt er nur fehler, mit Var input bringt er das gleiche

     
  • Chris.O - 2020-03-24

    schick mir doch mal das Programm (Projektarchiv bitte)... dann kann ich mal rein schauen... ansonsten brauch ich ne Glaskugel...

     
  • marcelszameitat - 2020-03-24

    Wenn ich jetzt noch wüsste wie , ein Projektarchiv hab ich schon mal nur Hochladen lässt es sich nicht.

     
  • Chris.O - 2020-03-24

    Wenn du hier nen Post schreibst und unten auf Post klickst... darüber gibt es "Add attachments" Hier kannst dus hochladen...

     
  • Chris.O - 2020-03-25

    Kannst du bitte die Bibliotheken mit ins Archiv packen. Ich hab eigentlich keine Lust mir alle LIbs zusammenzusuchen.
    Danke

     
  • Chris.O - 2020-03-25

    Ok,
    Ich hab mal bissl ausgemistet... Denk das müsste so laufen. Prinzipiell hab ich an deinem PRG nix geändert...
    Wenn du ein Archiv hier rein stellst, musst du keine online-Daten mitgeben...Dein Zielsystem hat sowieso keiner.

    Hab leider kein Panel, konnte es deshalb nicht wirklich testen...

     
  • marcelszameitat - 2020-03-25

    Endlich es läuft , lediglich ist die Zeitzone Falsch quasi ist im Programm 1h hinter winterzeit.
    Wie bekomme ich das genau hin das es diese automatisch stellt?
    Seit ich das überarbeitete Programm nutz stürtzt es nach einer zeit einfach ab und bringt mir den Fehler im Bild.

     

    Last edit: marcelszameitat 2020-03-26
  • Chris.O - 2020-03-26

    Vllt hängst du irgendwo in ner Schleife fest?

    Zeitzone kannst du auch mit der gleichen Bibliothek auslesen wie die Uhrzeit in meinem Baustein.
    Die kannst dann entsprechend vor der Konvertierung noch addieren...aber erst in Millisekunden umrechnen!
    Schau mal in der lib wie die Funktion heißt...habs ned im Kopf.

    Gruß Chris

     
  • marcelszameitat - 2020-03-27

    Hab ich alles mal durchgeschaut,hab aber nichts gefunden . das problem tritt erst auf wenn ich MyNewTime in das Display Programm einfüge.
    Der Fehler tritt erst nach mehreren Minuten bis 1h auf.

     
  • Chris.O - 2020-03-27

    Wenn du das Programm ausführst oder wirklich erst wenn dus ins Display schreibst?
    Wenn du auf den Ausnahmefehler Doppelklick machst....wo springt er hin?

     
  • marcelszameitat - 2020-03-27

    Hab mich verschrieben , er tritt auf wenn er die zeit am Display schreibt.
    Hab ich versucht, nur der mittlerer der 3 fehler bringt dass er mich nicht weiterleiten kann da er mit keinem pou verknüpft ist.
    Hatte aber nichts gefunden wie das geht.

     
  • marcelszameitat - 2020-03-28

    OKay hat sich alles erledigt das FC_GetLocalTime hatte eine Rechenoperation durchgefürt und somit die Stunden geändert.
    Für mich zwar noch etwas unverständlich aber läuft jetzt.

     

    Last edit: marcelszameitat 2020-03-29
<< < 1 2 3 > >> (Page 2 of 3)

Log in to post a comment.