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 1 of 3)
  • marcelszameitat - 2020-03-08

    Hallo,
    leider hänge ich zur zeit etwas fest.
    Für das LCD Display wird die RTS_systimedate benötigt, nur leider bekomme ich die nirgends aufgelöst oder konvertiert.
    Meine zweite frage wäre wie könnte ich aus einem 2.(einmal Ablaufplan und einmal Strukturiertertext) Projekt einen aktuellen status einfügen ?
    Quasie welche Pumpe gerade läuft oder welche störung zur zeit auftritt.

     
  • marcelszameitat - 2020-03-08
     
  • marcelszameitat - 2020-03-10

    quasie muss ich SysTimeRtc zu systime23 hinzufügen ?
    bzw wie müsste diese aussehen ?

    Die 2. frage wäre mit dem Link beantwortet , vielen dank schonmal .

     

    Last edit: marcelszameitat 2020-03-10
  • i-campbell

    i-campbell - 2020-03-10

    Sie brauchen eine neue Function. z.B. FC_SystemTimeDate_TO_RTS_SYSTIMEDATE
    Das Function werde return ein RTS_SYSTIMEDATE.
    Es hat ein VAR INPUT, das hat SystemTimeDate-Typ.
    Das Function musst einfach kopieren (in FBD, Sie können MOVE benutzen) alle die relevante Mitglieder von SystemTimeDate nach alle die Mitglieder von RTS_SYSTIMEDATE.
    Vielleicht schwierig ist, wenn Sie brauchen die wYday..

     
  • marcelszameitat - 2020-03-11

    so richtig verstehe ich das gerade nicht ganz, hätten sie vielleicht noch ein Bild dazu das ich mir das genauer vorstellen kann ?

     
  • i-campbell

    i-campbell - 2020-03-15

    Bauen Sie ein POU wie:

    FUNCTION SystemTimeDate_TO_RTS_SYSTIMEDATE : RTS_SYSTIMEDATE
    VAR_INPUT
        std : SysTime23.SystemTimeDate;
    END_VAR
    VAR
        N1, N2, N3: REAL;
        N : UINT;
    END_VAR
    _____________________
    SystemTimeDate_TO_RTS_SYSTIMEDATE.wDay := std.Day;
    SystemTimeDate_TO_RTS_SYSTIMEDATE.wDayOfWeek := std.DayOfWeek;
    SystemTimeDate_TO_RTS_SYSTIMEDATE.wHour := std.Hour;
    SystemTimeDate_TO_RTS_SYSTIMEDATE.wMilliseconds := std.Milliseconds;
    SystemTimeDate_TO_RTS_SYSTIMEDATE.wMinute := std.Minute;
    SystemTimeDate_TO_RTS_SYSTIMEDATE.wMonth := std.Month;
    SystemTimeDate_TO_RTS_SYSTIMEDATE.wSecond := std.Second;
    // Thanks to https://astronomy.stackexchange.com/questions/2407/calculate-day-of-the-year-for-a-given-date for the formula
    // Haven't tested.  Don't know limits of whether it survives past year 2100
    // REQUIRES: FloatingPointUtils library
    N1 := FPU.floor(275 * std.Month / 9.0);
    N2 := FPU.floor((std.month + 9) / 12.0);
    N3 := (1 + FPU.floor((std.year - 4 * FPU.floor(std.year / 4.0) + 2) / 3.0));
    N := TO_UINT(N1 - (N2 * N3) + std.day - 30);
    SystemTimeDate_TO_RTS_SYSTIMEDATE.wYday := N;
    SystemTimeDate_TO_RTS_SYSTIMEDATE.wYear := std.Year;
    
     
  • marcelszameitat - 2020-03-16

    hi,
    irgendwie bekomme ich die fehler nicht weg, wenn ich versuche (SystemTimeDate_TO_RTS_SYSTIMEDATE : RTS_SYSTIMEDATE) als Name einzutragen kommt ein fehler das dieser dort nicht passt.

     
  • Chris.O - 2020-03-17

    Versuchs doch mal mit folgender FUnktion aus Bibliothek SysTimeRtc:

    Deklaration:

    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
    

    Programmteil:

    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);
    

    Vllt hilft dir das weiter?

     
  • marcelszameitat - 2020-03-17

    Leider nicht, er bringt zwar kein fehler aber führt das programm nicht aus . zumindest augenscheinlich übernimmt er die zeit nicht.

     
  • Chris.O - 2020-03-18

    Hmh... dann versteh ich jetzt dein Problem gerade nicht.
    Du hast eine Zeit im Format SysTimeDate und willst sie im Format SystemTimeDate und willst sie in RTS_SysTimeDate haben?

    Die willst du dann an dein LCD-Display übergeben?

    Wenn du die Funktion von i-campbell benutzt, bringt er welchen Fehler? Hast du alle Libs eingebunden?

     
  • marcelszameitat - 2020-03-18

    Genau, ich verstehe das problem auch nicht richtig normalerweise müsste es funktionieren. bei deinem passiert garnichts da sind überall nur (") aber kein fehler .

    die Funktion von i-campbell bringt die fehler im Bild.

     
  • Chris.O - 2020-03-18

    Hast du die Bibliothek FloatingPointUtils mit eingefügt?
    Sieht aus als hättest du die vergessen

    MFG Chris

     
  • marcelszameitat - 2020-03-18

    jup gerade gemacht , hatt aber auch nichts gebracht.

     
  • Chris.O - 2020-03-19

    Müsste aber andere Fehlermeldungen bringen oder? Welche?

     
  • Chris.O - 2020-03-19

    Ich häng dir mal ein Projektarchiv an, so wies bei mir klappt.
    Hab natürlich dein Zielsystem nicht bzw. keine Ahnung wie du das weiter verarbeiten willst.. aber Zeit holen und konvertieren klappt.

    Gruß Chris

     
  • marcelszameitat - 2020-03-19

    sehr seltsam , das programm von dir funktioniert , nur wenn ich es kopiere und mal in meins einfüge sind, PLC_PRG und TimeKonvert_FUP leicht grau hinterlegt. und funktioniert nicht.

     
  • Chris.O - 2020-03-20

    Grau hinterlegt bedeutet, dass du das Programm nicht aufrufst.
    Du musst entweder das Programm in einer Task aufrufen, oder das Programm in deinem Programm aufrufen.(Das natürlich vorher auch in einer Task aufgerufen werden muss)

    Gruß Chris

     

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

    stimmt da war die Hand schneller als der Kopf , dass hatte ich schon mal.......
    soweit ist es drinn und läuft aber die zeit schwankt zwischen der jetzt zeit und +6stunden.
    2 Warnungen hab ich noch drauf.
    Und die zeit übernimmt er trotz allem nicht in das Displayprog.

     

    Last edit: marcelszameitat 2020-03-20
  • marcelszameitat - 2020-03-21

    was mich aber mehr verwirrt ist dass das Progrmm das Datum normal ausgibt . Obwohl die zeit gleichzeitig mit geholt wird.....

     
  • marcelszameitat - 2020-03-22

    Was hat es eigentlich mit diesem Haltepunkt aufsich ? evtl wird es deshalb nicht übertragen.
    Bin da noch etwas unerfahren.

     

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

    Also:
    Das mit dem Haltepunkt ist wie folgt...
    Da das ganze eine Funktion ist und die Werte sich ständig ändern, kann er dir nur einen explizierten Wert anzeigen, wenn du einen Haltepunkt setzt. (mal vereinfacht ausgedrückt) => Ein Haltepunkt hält dein Programm an einer bestimmten stelle an. Dann kannst du das Programm schrittweise durchlaufen. Sehr hilfreich bei der Fehlersuche. Da gibts bestimmt auch was im Online-Help

    Zu den Warnungen: Er konvertiert halt eine LREAL Variable nach REAL = somit kann es zu Datenverlusten führen... Wenn du das bewusst machst, ist alles gut... ist ja nur ne Warnung.

    Was genau meinst du mit "Die Zeit schwankt zwischen der Ist-Zeit und +6h

    Dann schreibst du wieder "was mich aber mehr verwirrt ist dass das Progrmm das Datum normal ausgibt . Obwohl die zeit gleichzeitig mit geholt wird....."

    Formuliere doch mal bitte klar dein Problem, sonst kann dir keiner helfen.

    Und warum er dir das nicht in dein Display-Prog übernimmt kann dir auch keiner Sagen, weil keiner dein Programm kennt.
    Bis jetzt bin ich davon ausgegangen, dass du ein Problem damit hattest deine ausgelesene Zeit in ein anderes Format zu konvertieren...das klappt ja jetzt oder?

    Was willst du denn genau machen? Was ist das für ein Display? Wie kommunizierst du damit? Was hast du bis jetzt für ein Programm?

    Gruß Chris

     

    Last edit: Chris.O 2020-03-22
  • marcelszameitat - 2020-03-24

    Sorry hab zur zeit viel stress durch die derzeitige situation.
    Also bei dem Programm handelt es sich um das Adafruit LCD Programm das man sich hier im codesysforum mal runterladen konnte/kann.
    In diesem Programm wird via Systimedate die uhrzeit/Datum geholt EIGENTLICH tut es aber nicht . zumindest die Uhrzeit wird nicht geholt, das Datum hingegen schon. Das ganze wird benötigt um das Datum und die uhrzeit anzuzeigen.
    Zu dem schwanken der Zeit war mein fehler hatte sich irgendwie überlagert.

     
  • Chris.O - 2020-03-24

    Naja wenn du das Projektarichiv runtergeladen hast, sollte das auch laufen ohne, dass du da großartig was ändern musst.

    Das LCD erwartet ja eigentlich auch einen String (hab die Hardware etc. nicht da...sollte aber so sein).
    Wenn die Zeit nicht ausgelesen wird, versuch doch mal die Zeit mit meinem weiter oben beschriebenen Weg. Da bekommst dus als einzelne Strings. Den String baust du dann, wie du in brauchst mit CONCAT zusammen und übergibst ihm dem Panel. Dann sollte das doch Tun. (Programmaufruf nicht vergessen)

    Zeit dir das LCD Display verschiedene Message-Texte an, oder tut sich gar nix?

     
  • marcelszameitat - 2020-03-24

    naja so wie es oben steht hab ich es ja übernommen da eigt es mir die zeit an zumindest in dem Programm, wird aber halt nicht in den Programmteil vom Display übernommen.
    angezeit wird die Zeit was die Message-Texte durchlaufen ( 100ms, 200ms etc) die realtime wird nicht mit ausgegeben da ist alle nur mit "???" und " " " eingetrageb.

     
1 2 3 > >> (Page 1 of 3)

Log in to post a comment.