Mbus 4 bit bcd

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Michi2020
    Dumb Home'r
    • 15.03.2017
    • 27

    #1

    Mbus 4 bit bcd

    Guten Tag Zusammen,

    ich möchte erst mal erklären was ich vorhabe.


    Ich habe an meiner Loxone eine RS232 Extension die an einem MBUS Pegelwandler meinen Wärmemengenzähler Allmess ausliest.

    Ich sende den UDP2 Befehl zur Abfrage dort hin und bekomme auch die Antwort zurück.
    Was bis jetzt funktioniert sind die 16Bit Antworten für z.B. die KWh Gesamt.
    Mein Problem ist aber die 4Bit BCD in Loxone darzustellen. Diese sind ja per Hex direkt sichtbar und zwar in 2 Byte. Als Beispiel Hexerkennung: …….,0A,5A,65,07,….
    Die Zahlen in Rot sind DIF und VIF zur Erkennung und die Zahlen in Blau sind die 2 Byte als 4Bit BCD. Ich brauche ja nur die Hexzahlen nehmen und Darstellen. Dies währe in meinem Beispiel ja 65,07 °C.
    Leider funktioniert bei Loxone die Funktion /h Hexzahl darstellen nicht. Ich habe Loxone schon vor 6 Monaten angeschrieben und dies geschildert. Sie haben auch eingesehen das diese Funktion ein Bug hat. Kann mir hier vielleicht einer helfen diese Funktion mit PicoC oder anders zu lösen?

    Es würde wohl auch gehen wenn ich den Empfangenen String per PicoC auslese und direkt als Hexzahlen rausgebe um ihn anschließend mit der Befehlserkennung rauszufiltern.
    Ich hänge noch ein paar Dokus an damit man sich ein Bild machen kann.

    Hier noch eine Antwort von Loxone. Dort hat es funktioniert, da Sie es direkt als Text eingegeben habe und nicht als richtiger String von RS232.
    Auch davon habe ich ein Bild im Anhang. Deswegen bin ich auf PicoC gekommen.:


    Hallo Herr .........,

    ich habe in den vergangenen Tagen einige Dinge getestet, um an die gewünschten Daten aus den RS232 Protokoll heranzukommen.

    Nachdem diverse Versuche des Umrechnens nicht hingehauen haben, habe ich noch nachfolgenden wenig smarte, aber effektive Methode zur Auswertung gefunden.

    Der \. Operator! Dieser geht einfach durch den kompletten empfangenen Text und überspringt so viele Zeichen wie die Anzahl der Operatoren in der Befehlserkennung hat.
    Zur Verdeutlichung habe ich im Anhang einen Screenshot meines Tests angehängt.




    Vielen Dank!
    Angehängte Dateien
  • Tico
    Lox Guru
    • 31.08.2016
    • 1035

    #2
    Ich glaube, ich habe vielleicht eine Lösung, aber ich brauche etwas Bildung.

    Wie haben Sie die Hex-Werte 28,15,72,00 erhalten, die dem Wert 721528 entsprechen sollten? Ich scheine 727552 zu erhalten, aber meine Arbeit könnte falsch sein?
    Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.

    Kommentar

    • Michi2020
      Dumb Home'r
      • 15.03.2017
      • 27

      #3
      Hallo Tico,

      Ich bekomme diesen Wert aus einem Mbus Wärmemengenzähler als Antwort. Diesen sehe ich auch in den Monitor von Loxone. Ich kann aber den Hexwert nicht in Loxone übernehmen da die Hex Darstellung in Loxone nicht funktioniert. Er zeigt immer eine Null an. Wenn ich ein Byte als Hex zeigen möchte erscheint eine Null.
      Das was ich von Loxone bekommen habe ging wohl weil sie die Werte in eine constate eingegeben haben und nicht aus einem String. Dort ging es bei mir auch. War halt nicht mit einer Rs232.

      Gruß Michael

      Kommentar

      • Tico
        Lox Guru
        • 31.08.2016
        • 1035

        #4
        Versuchen Sie diesen Link im Wiki -

        https://www.loxwiki.eu/pages/viewpag...ageId=80773188

        Ich gehe davon aus, dass Sie vier der '2 x UPPER' Blöcke benötigen, um die 4 Hex-Werte - 28,15,72,00

        Das Ergebnis sind 4 Dezimalwerte für den anwendbaren Hex-Wert.

        x28 = 40 dezimal
        x15 = 21 dezimal
        x72 = 114 dezimal
        x00 = 0 dezimal
        Zuletzt geändert von Tico; 10.12.2020, 07:31.
        Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.

        Kommentar

        • Tico
          Lox Guru
          • 31.08.2016
          • 1035

          #5
          Ich habe BCD noch nie benutzt. Mir ist jetzt klar, dass der Dezimalwert nicht viel nützt. Der Hex-Wert ist wichtig!

          Leider zeigt Loxone nicht die ursprünglichen Hex-Zeichen an. Es gibt eine 16-Bit (big-endian word) Darstellung von zwei ASCII-Zeichen -



          Probieren Sie die angehängte .Loxone-Datei aus, um wieder in BCD-Hex-Werte zu konvertieren.

          Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Hex output.png
Ansichten: 447
Größe: 35,9 KB
ID: 278938
          Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.

          Kommentar

          • Michi2020
            Dumb Home'r
            • 15.03.2017
            • 27

            #6
            Hallo Tico,

            habe es gerade mit der Temperatur probiert. Dies war aber mit dem Upper.
            Erkennung ist jetzt 0A,5E und der wert kommt mit 97,02 an also 97,02 grad.

            Probiere jetzt deine zweite lösung.

            Gruß Michael
            Angehängte Dateien

            Kommentar

            • Christian Fenzl
              Lebende Foren Legende
              • 31.08.2015
              • 11234

              #7
              Zitat von Michi2020
              0A,5A,65,07,….
              Die Zahlen in Rot sind DIF und VIF zur Erkennung und die Zahlen in Blau sind die 2 Byte als 4Bit BCD. Ich brauche ja nur die Hexzahlen nehmen und Darstellen. Dies währe in meinem Beispiel ja 65,07 °C.
              Eins verstehe ich hier aber nicht: Du schreibst ..,..,65,07,... sind 65,07°C. Das ist aber nicht Hex, sondern dezimal. 6507h wäre dezimal 25863.
              Wenn 65,07 rauskommen soll, würde dann nicht einfach
              Code:
              \s[I]xx[/I]\v
              oder
              [COLOR=red]0A,5A[/COLOR],\v
              funktionieren? Die xx stellen die Anzahl der Zeichen dar, die übersprungen werden müssen, um zur Stelle mit 65 zu kommen.
              Zuletzt geändert von Christian Fenzl; 10.12.2020, 10:14.
              Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

              Kommentar

              • Michi2020
                Dumb Home'r
                • 15.03.2017
                • 27

                #8
                Hallo Tico,

                ich muss erst mal sagen das meine Befehlserkennung nur so funktioniert:
                \i\x0A\x5E\i\......

                ist ja nicht schlimm geht aber. Du kannst auf dem Foto erkennen das ich nur die Zahl 80 bekomme obwohl dort 87 steht.
                es müsste einfach decimal zu hex sein. Irgendeine Formel dafür.

                Danke und Gruß Michael
                Angehängte Dateien

                Kommentar

                • Michi2020
                  Dumb Home'r
                  • 15.03.2017
                  • 27

                  #9
                  Hallo Christian,

                  wenn ich mir den wert mit v geben möchte kommt einfach nichts raus. Das gleiche ist auch mit h.
                  Du hast recht wenn ich mir den Ascii als Hex anzeigen lasse möchte ich natürlich die Hexzahl als Ausgabewert haben, da diese ja als 4 Bit BCD richtig als Wert ist.
                  Im Anhang ist ein Bild wie es ankommt!

                  Gruß Michael
                  Angehängte Dateien

                  Kommentar

                  • Christian Fenzl
                    Lebende Foren Legende
                    • 31.08.2015
                    • 11234

                    #10
                    Nimm bite mal meine vorgeschlagenen Befehlserkennungen.
                    Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

                    Kommentar

                    • Michi2020
                      Dumb Home'r
                      • 15.03.2017
                      • 27

                      #11
                      Hallo Christian,

                      habe es probiert aber ohne Erfolg. Ich bekomme nur wie du links im Bild erkennen kannst für das 1 Byte die Decimalzahl mit \1

                      Angehängte Dateien

                      Kommentar

                      • Christian Fenzl
                        Lebende Foren Legende
                        • 31.08.2015
                        • 11234

                        #12
                        Ich seh nichts. Wo ist die Befehlserkennung?
                        EDIT:
                        ​​​​Ah, rechts.
                        Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

                        Kommentar

                        • Michi2020
                          Dumb Home'r
                          • 15.03.2017
                          • 27

                          #13
                          Das komische ist, das ich nur bei der RS232 und 485 die Befehlserkennung nur als \1 auslesen kann. Die Funktion \h oder \v funktioniert dort nicht. Diese kann man bei html Seiten oder aus einer Constante wie es Loxone gemacht hat. Ein Mitarbeiter von Loxone hat dieses Problem per Teamviewer vor 3 Monaten getestet und konnte sich das nicht vorstellen aber es scheint ein Problem in der Software von Loxone zu sein. Es müsste ja bei keinem Funktionieren das man den Hexwert oder den Wert übernehmen kann aus diesen 2 Schnittstellen. Da ich keine Antwort mehr bekommen habe hatte ich gedacht das ich die 2 Byte getrennt mit \1 auslese und in Hex zurück rechnen mit einer Formel wenn dies funktioniert?

                          Gruß Michael

                          Kommentar

                          • Michi2020
                            Dumb Home'r
                            • 15.03.2017
                            • 27

                            #14
                            Ich hatte auch schon mal mit dem Gedanken gespielt mir den Hexstring per PicoC herauszugeben und danach mit der Befehlserkennung zu arbeiten aber ich habe im Anhang ein Bild wo ich schon mal angefangen bin. Ich kenne mich damit aber nicht so aus. Weis den jemand wie ich den String direkt als Hex ausgeben kann?
                            Währe das eine Lösung?

                            Gruß Michael
                            PHP-Code:
                            #define BUFF_SIZE 256
                            
                            STREAM* pRs232Stream = stream_create("/dev/tty/RS232-Extension",0,0);// create rs232 stream
                            char szBuffer[BUFF_SIZE];
                            int nCnt;
                            int nBytesReceived = 0;
                            while(1)
                            {
                            nCnt = stream_read(pRs232Stream,szBuffer,BUFF_SIZE,100); // read stream
                            nBytesReceived += nCnt;
                            setoutput(0,(float)nBytesReceived);
                            setoutputtext(0,szBuffer);
                            sleep(100);
                            } 
                            
                            Angehängte Dateien

                            Kommentar

                            • Tico
                              Lox Guru
                              • 31.08.2016
                              • 1035

                              #15
                              Zurück zur Befehlserkennung -

                              \i\x\0A\x5E\i\1

                              Ich sehe, dass Sie in den Beispielen 137 und 128 zurück in den Miniserver erhalten haben.

                              Für 135 war der gewünschte Wert 87
                              Für 128 war der gewünschte Wert 80

                              Konfig-Ergebnis minus 48 = der gewünschte Wert
                              Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.

                              Kommentar

                              Lädt...