Umwandlung Datentypen

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • marvinp96
    Azubi
    • 19.11.2019
    • 5

    #1

    Umwandlung Datentypen

    Hallo zusammen,

    vielleicht hat jemand ja eine Lösung:

    Ich bekomme per Modbus eine ID die zwei Register breit ist. Allerdings ist diese ID vom Datentyp BCD.
    Der Datenpunkt in Loxone gibt den Wert 588318098 aus.

    Die ID ist allerdings 23110592.

    Das wäre als BCD Code 00100011000100010000010110010010.

    Wenn man den BCD Code dezimal darstellt ergibt das die von Loxone angezeigten 588318098.

    So weit, so gut.

    Aber wie ist es in Loxone jetzt möglich diesen Wert zu 23110592 umrechnen zu lassen?
  • svethi
    Lebende Foren Legende
    • 25.08.2015
    • 6318

    #2
    Das ist alles der selbe Wert. Da muss nichts umgerechnet werden. Binär: 00100011000100010000010110010010; Hexadezimal: 23110592; Dezimal: 588318098
    Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

    Kommentar

    • marvinp96
      Azubi
      • 19.11.2019
      • 5

      #3
      Ja okay, gebe ich dir recht.

      aber wie bekomme ich diesen Wert angezeigt?

      Der Modbus Eingang in Loxone zeigt mir 588318098 an - ich brauche aber den konvertierten Wert 23110592. Mit der Befehlserkennung bekomme ich einen Wert -20……

      Kommentar

      • svethi
        Lebende Foren Legende
        • 25.08.2015
        • 6318

        #4
        Ich wüsste jetzt nicht wie man sich eine Zahl Hexadezimal anzeigen kann. Was willst Du denn damit machen?
        Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

        Kommentar

        • marvinp96
          Azubi
          • 19.11.2019
          • 5

          #5
          Ich lese mehrere Stromzähler aus und eben die ID/SN ist halt das Problem.
          Die ganzen Daten der Stromzähler sollen monatlich protokolliert werden. Und halt auch die Seriennummer, da anhand dieser die Zähler in einer externen Software identifiziert werden.
          Zudem soll überwacht werden, ob die Seriennummer sich ändert.

          Kommentar

          • darkrain
            MS Profi
            • 25.08.2015
            • 555

            #6
            Wenn du das konvertieren willst müsstest du das durch einen Programmbeistein durchschleifen. Dort kannst du dann mit PicoC die Konvertierung vornehmen. Sollte eigentlich mit sprintf(intValue,"%x") gehen. Alternativ kannste auch ioBroker nehmen mit modBus Plugin, NodeRed für die Umrechnung und Überwachung und dann den Kram via HTTP virtuellem Eingang in Loxone ziehen. Ein direkter Weg zur Konvertierung ist mir nicht bekannt.

            Kommentar

            • marvinp96
              Azubi
              • 19.11.2019
              • 5

              #7
              Hat das jemand schon mal so umgesetzt? PicoC bin ich so gar nicht fit und wüsste nicht, wie ich das damit umsetzten könnte…
              Über ioBroker o.ä. wollte ich ungern gehen.

              Handelt sich um aktuell 5 später so 7-8 Zähler.

              Kommentar

              • Tico
                Lox Guru
                • 31.08.2016
                • 1035

                #8
                Versuchen Sie dies in einem Formelblock -

                Code:
                ((INT((INT((I1-INT(I1/2^32)*2^32)/2^24))/16))*10000000)+(((((INT((I1-INT(I1/2^32)*2^32)/2^24))/16)-INT((INT((I1-INT(I1/2^32)*2^32)/2^24))/16))*16)*1000000)+((INT((INT((I1-INT(I1/2^24)*2^24)/2^16))/16))*100000)+(((((INT((I1-INT(I1/2^24)*2^24)/2^16))/16)-INT((INT((I1-INT(I1/2^24)*2^24)/2^16))/16))*16)*10000)+((INT((INT((I1-INT(I1/2^16)*2^16)/2^8))/16))*1000)+(((((INT((I1-INT(I1/2^16)*2^16)/2^8))/16)-INT((INT((I1-INT(I1/2^16)*2^16)/2^8))/16))*16)*100)+((INT((I1-INT(I1/2^8)*2^8)/16))*10)+((((I1-INT(I1/2^8)*2^8)/16)-INT((I1-INT(I1/2^8)*2^8)/16))*16)
                Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Decimal to BCD.png
Ansichten: 209
Größe: 5,7 KB
ID: 401547
                Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.

                Kommentar

                • Prof.Mobilux
                  Supermoderator
                  • 25.08.2015
                  • 4746

                  #9
                  Abgesehen von Deinem konkreten Problem: Bist Du Dir sicher, dass der Miniserver die richtige Plattform für eine zuverlässige Protokollierung ist? Da würde ich eher eine Datenbank o. ä. nehmen, wo mir ein Skript die Daten ausliest und hineinschreibt...
                  🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


                  LoxBerry - Beyond the Limits

                  Kommentar

                  Lädt...