Formatierung für Uhrzeit und Datum.

Willkommen Foren LogoControl Formatierung für Uhrzeit und Datum.

9 Beiträge anzeigen - 1 bis 9 (von insgesamt 9)
  • Autor
    Beiträge
  • #3240
    ixo65
    Teilnehmer

    Mal eine Frage an den Admin:
    Bei der LOGO! 0BA8 liegen ja Uhrzeit und Datum in den für den User nicht zugänglich Bereich, können aber mit Logo Control byteweise ausgelesen werden (und auch wieder beschrieben werden). Die Daten liegen ein Mal in Dezimal vor und ein Mal in Hexadezimal.

    Dezimal:
    VB985 = Jahr
    VB986 = Monat
    VB987 = Tag
    VB988 = Stunde
    VB989 = Minute
    VB990 = Sekunde

    Hexadezimal:
    VB991 = Jahr
    VB992 = Monat
    VB993 = Tag
    VB994 = Stunde
    VB995 = Minute
    VB996 = Sekunde

    Kann man da über einen Textkonverter oder/und eine Kalkulation jeweils 3 Byte zusammenfassen mit den entsprechenden Trennzeichen?
    Zum Beispiel:
    Datum = VB987.Vb986.VB985 (TT.MM.JJ)
    Uhrzeit = VB988:VB989:VB990 (hh:mm:ss)

    #3243
    admin
    Administrator

    Hm, knifflige Frage! Also mehrere Attribute in LogoControl zusammenfassen geht schon mal nicht. Einzige Möglichkeit wäre alle 3 Bytes in ein Attribut zu lesen und dann mit irgendwelchen NCalc-Ausdrücken in der Calculation auseinanderzunehmen. Allerdings gibt es keinen Datentyp um 3 Bytes zu lesen, nur 1, 2 oder 4 Bytes und das ist das Hauptproblem!

    Das Datum könnte man als DWord (also 4 Bytes) lesen, indem man bereits 1 Byte früher (bei Adresse 984) anfängt zu lesen. Den Inhalt kann man ja durch Bit-Opterationen verschwinden lassen. In der Doku steht, dass dies ein Diagnosebyte ist, keine Ahnung was da konkret drin steht. Lesen sollte kein Problem sein, allerdings das Schreiben des Attributs. Denn dann wird auch immer Byte 948 mit geschrieben. Und da wir den Wert zuvor durch Bit-Operationen verschwinden liesen, können wir diesen Original-Wert auch nicht mehr schreiben. Ob das ein Problem ist, müsstest du ausprobieren, ich habe keine Logo 8.

    Bei der Uhrzeit sehe ich da ein ähnliches Problem, allerdings macht es meiner Meinung nach wenig Sinn die Sekunden mit in das Attribut aufzunehmen, da dies zu einer dauerhaften Aktualisierungschleife der Weboberfläche führen wurde (jede Sekunden ändert sich ja der Wert). Daher würde ich nur 2 Bytes lesen/schreiben für Stunde und Minute.

    Anbei 2 Calculations für die Konvertierung:

    <calculation id="logo_clock_time">
    	<!-- Logo 8 Dezimal Uhrzeit  (z.B. 2334 zu 09:30) -->
    	<valueToText calculation="{[value]&gt;&gt;8}:{if(([value]&amp;255)&gt;9,'','0')}{[value]&amp;255}" />
    	<textToValue valueParseRegex="(\d+):(\d+)" calculation="{([value1]&lt;&lt;8)+[value2]}" />
    </calculation>
    <calculation id="logo_clock_date">
    	<!-- Logo 8 Dezimal Datum  (z.B. 1114625 zu 01.02.2017.) -->
    	<valueToText calculation="{if(([value]&amp;255)&gt;9,'','0')}{[value]&amp;255}.{if((([value]&gt;&gt;8)&amp;255)&gt;9,'','0')}{([value]&gt;&gt;8)&amp;255}.20{([value]&gt;&gt;16)&amp;255}" />
    	<textToValue valueParseRegex="(\d+).(\d+).20(\d+)" calculation="{[value1]+([value2]&lt;&lt;8)+([value3]&lt;&lt;16)}" />
    </calculation>

    Sieht ziemlich verwirrend aus, da die größer/kleiner-Zeichen und Kaufmannsund-Zeichen in XML escaped werden müssen…

    Einbinden der TextConverter würde so aussehen:

    <device id="uhr" name="LOGO-Uhr">
    	<attribute id="datum" name="Datum" plc="dummy" address="984" datatype="dword" valueTextConverter="logo_clock_date" />
    	<attribute id="uhrzeit" name="Uhrzeit" plc="dummy" address="988" datatype="word" valueTextConverter="logo_clock_time" />
    </device>
    • Diese Antwort wurde vor vor 7 Jahren, 2 Monaten von admin bearbeitet.
    #3247
    ixo65
    Teilnehmer

    Wenn man das Byte 984 in Logo Control nicht verändert, dann wird der Wert doch unverändert zurückgeschrieben, oder sehe ich das verkehrt?

    Und bei der Uhrzeit geht es mir gerade um die Sekunden, weil ich die zum korrekten Stellen der Uhrzeit benötige.

    #3248
    ixo65
    Teilnehmer

    Binde ich calkulation für das Datum ein, erhalte ich folgende Fehlermeldung in Logo Control.

    https://picload.org/image/rolopopa/fehlermeldung.png

    #3249
    admin
    Administrator

    Es werden Byte 984-987 in einen 4byte-Datentyp des LogoControl-Attributs gelesen. Dort wäre also der Wert noch vorhanden. Dieser Wert wird für die Anzeige per ValueText-Converter in Text umgewandelt. Wenn der Benutzer nun aber in der WebUI einen neuen Wert für das Attribut eingibt, so wird dieser eingegebene Text vom ValueTextConverter wieder rückwärts gewandelt in einen 4byte-Wert. Da in der textuellen Repräsentation des Werts jedoch Byte 984 nicht enthalten war, fehlt dem ValueTextConverter diese Information und kann sie folglich auch nicht im 4byte-Wert wiederherstellen.

    Wegen der Uhrzeit: ich dachte dir geht es vorrangig um die Anzeige der Uhrzeit und da hätte ich auf die Anzeige der Sekunden aus oben beschriebenen Performance-Gründen verzichtet. Prinzipiell besteht bei der Uhrzeit aber das gleiche Problem wie beim Datum. Du willst 3 Bytes lesen/schreiben kannst aber nur 4 Bytes lesen/schreiben. Entweder du nimmst also ein viertes Byte mit dazu (davor oder dahinter) mit dem Wissen, dass dieses beim Schreiben des Attributs „genullt“ wird, oder aber du definierst dir einfach 3 einzelne Attribute mit je einem Byte für Stunde, Minute, Sekunde getrennt. Da es dir ja nicht um die Anzeige geht, sondern nur um das Stellen der Uhr, ist es ja nicht so wichtig, dass die Zeit in Form eines kombinierten Textes in Form von hh:mm:ss geschieht.

    Die WebUI wird dann aber trotzdem sekündlich mit Update-Events geflutet, wenn sich der Wert von Sekunde ändert…

    #3250
    ixo65
    Teilnehmer

    Da es dir ja nicht um die Anzeige geht, sondern nur um das Stellen der Uhr, ist es ja nicht so wichtig, dass die Zeit in Form eines kombinierten Textes in Form von hh:mm:ss geschieht.

    Es geht mir eigentlich um beides, Anzeigen und Stellen.
    Aber wenn es nicht geht, geht es halt eben nicht.

    #3254
    admin
    Administrator

    Zu deinem Fehler oben: das liegt an einer Beschränkung der von mir verwendeten Biblothek NCalc, welche für Bitoperationen nur 16 bit unterstützt. Diese Beschränkung habe ich in meiner Entwicklerversion schon vor einigen Monaten aufgehoben, so dass künftig mit 32bit gerechnet wird. Daher trat der Fehler bei mir gar nicht auf und ich hatte leider nicht mehr daran gedacht, dass die aktuell veröffentlichte Version 0.5.2 noch dieses Problem hat. Im nächsten Release von LogoControl wird jedenfalls auch die gepatchte Version von NCalc enthalten sein, so dass die obigen ValueTextConverter funktionieren sollten. Sorry…

    #3255
    ixo65
    Teilnehmer

    Danke für die Info.

    #3927
    flopius
    Teilnehmer

    Einen wunderschönen guten Morgen!

    bin auch gerade an dem Punkt mit der falschen Datums-Calculation. Wäre es möglich, eine Vorab-Version ohne die entsprechende Begrenzung zu erhalten?

    Ansonsten muss ich sagen, vielen vielen Dank für die tolle Arbeit! Mit LogoControl konnte ich ganz super lustige Dinge realisieren, die sonst unmöglich gewesen wären!

    Viele Grüße und Gesundheit in dieser Zeit,
    Flo

9 Beiträge anzeigen - 1 bis 9 (von insgesamt 9)
  • Du musst angemeldet sein, um zu diesem Thema eine Antwort verfassen zu können.