Befehlserkennung RS485 BMS

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Der_Alex
    Dumb Home'r
    • 23.03.2019
    • 18

    #1

    Befehlserkennung RS485 BMS

    Hallo

    ich brauch hilfe bei der Befehlserkennung ich bekomme es einfach nicht hin ich möchte gerne den Batterie Status von meinem Speicher abrufen.

    und brauch dafür zwei HEX werte das sind nach Position 16 die "09 58"

    hab schon versuch mit \s16\v und auch \s16\h

    wenn ich versuche das mit \s16\v zu erkennen wird nur 958146 erkannt und die 0 wird gekürzt oder wenn ein Buchstabe da ist wird nur von Buchstabe zu Buchstabe erkannt.



    Klicke auf die Grafik für eine vergrößerte Ansicht  Name: Versuch.png Ansichten: 0 Größe: 13,0 KB ID: 386752


    hat jemand vllt noch eine Idee?
    Klicke auf die Grafik für eine vergrößerte Ansicht  Name: Versuch2.png Ansichten: 0 Größe: 17,4 KB ID: 386754

    danke schonmal

    Angehängte Dateien
    Zuletzt geändert von Der_Alex; 09.04.2023, 11:29.
  • romildo
    Lebende Foren Legende
    • 25.08.2015
    • 5144

    #2
    Hallo, ich habe keine RS485 in Loxone eingebunden, daher kann es gut sein, dass mein Lösungsvorschlag viel zu kompliziert ist

    Beispiel:
    Du legst für jede Zahl einen Sensor an, also insgesamt 4 Sensoren.
    Befehlserkennung Sensor 1: \s16\1
    Befehlserkennung Sensor 2: \s17\1
    Befehlserkennung Sensor 3: \s18\1
    Befehlserkennung Sensor 4: \s19\1
    So bekommst Du den ASCII Wert von der entsprechenden Zahl.

    Über die Korrektur im Sensor kannst Du den Wert in die entsprechende Zahl umwandeln.
    Eingangswert 1:48
    Zielwert 1: 0
    Eingangswert 2:57
    Zielwert 2: 09

    Nachtrag:
    Da es sich um HEX Werte handelt, können auch Zeichen von A-F kommen.
    Also müssten ab dem Wert 10 noch​ 7 abgezogen werden. Dies könnte über einen Statusbaustein hinter jedem Sensor gemacht werden.
    Je nachdem was da halt kommt und in Loxone gebraucht wird.
    Zuletzt geändert von romildo; 09.04.2023, 19:38.
    lg Romildo

    Kommentar

    • Tico
      Lox Guru
      • 31.08.2016
      • 1035

      #3
      Es wäre hilfreich zu wissen, was die erwartete Bedeutung der Zeichen 09 58 ist.

      Je nachdem, in welcher Reihenfolge die Bytes gelesen werden (09,58) oder (58,09), ergeben sich unterschiedliche Antworten.

      Ich sehe zwei mögliche dezimale Ergebnisse: 2392 oder 22537. Ist eine dieser Antworten im Zusammenhang mit Ihrem Batteriestatus von Bedeutung?​
      Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Hex Recognition.png
Ansichten: 206
Größe: 12,9 KB
ID: 386851
      Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.

      Kommentar

      • romildo
        Lebende Foren Legende
        • 25.08.2015
        • 5144

        #4
        Der_Alex, sofern als Ergebnis die Dezimalzahl der Bytes gewünscht ist, würde ich eine der Lösungsvorschläge von Tico nehmen.

        Daher hier noch ein paar Details dazu

        Die Befehlserkennung wäre dann
        Code:
        \s16\4\3\2\1
        Die Formel für 0958
        Code:
        (((((INT(I1/2^24))-55)*(INT(LOG((INT((INT(I1/2^24))-48)*0.9+1)))))+(((INT(I1/2^24))-48)*(1-INT(LOG((INT((INT(I1/2^24))-48)*0.9+1))))))*2^12)+(((((INT((I1-INT(I1/2^24)*2^24)/2^16))-55)*(INT(LOG((INT((INT((I1-INT(I1/2^24)*2^24)/2^16))-48)*0.9+1)))))+(((INT((I1-INT(I1/2^24)*2^24)/2^16))-48)*(1-INT(LOG((INT((INT((I1-INT(I1/2^24)*2^24)/2^16))- 48)*0.9+1))))))*2^8)+(((((INT((I1-INT(I1/2^16)*2^16)/2^8))-55)*(INT(LOG((INT((INT((I1-INT(I1/2^16)*2^16)/2^8))-48)*0.9+1)))))+(((INT((I1-INT(I1/2^16)*2^16)/2^8))-48)*(1-INT(LOG((INT((INT((I1-INT(I1/2^16)*2^16)/2^8))-48)*0.9+1))))))*2^4)+((((I1-INT(I1/2^8)*2^8)-55)*(INT(LOG((INT((I1-INT(I1/2^8)*2^8)-48)*0.9+1)))))+(((I1-INT(I1/2^8)*2^8)-48)*(1-INT(LOG((INT((I1-INT(I1/2^8)*2^8)-48)*0.9+1))))))
        Tico hat das hier auch sehr gut beschrieben
        lg Romildo

        Kommentar

        • Der_Alex
          Dumb Home'r
          • 23.03.2019
          • 18

          #5
          danke schonmal für die Hilfe hat mich schon weiter gebracht hab im Moment diesen Ansatz:

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

Name: Versuch3.png
Ansichten: 169
Größe: 53,6 KB
ID: 386899
          hab mir jetzt für jeden einen Sensor Eingang gebaut und Wandel das ganze in Ascii um und von da aus in Dezimal. Musste mir noch was bauen für falsche Werte konnte das aber noch nicht richtig testen.


          Die 0958 ist in HEX und muss von dort aus in Dezimal 2392 und dann noch Multipliziert mit 0,01 ist dann 23,92 Prozent. Vllt ist mein Lösungsansatz etwas kompliziert......



          Kommentar

          • romildo
            Lebende Foren Legende
            • 25.08.2015
            • 5144

            #6
            Zitat von Der_Alex
            ...Die 0958 ist in HEX und muss von dort aus in Dezimal 2392..
            Genau das macht doch das Beispiel in Bild 1 von Post 3 mit den Einstellungen von Post 4
            Wenn Du dann die Formel noch mit dem Faktor 0.01 erweiterst dann ist auch dieser Wunsch erfüllt.
            Angepasste Formel
            Code:
            ((((((INT(I1/2^24))-55)*(INT(LOG((INT((INT(I1/2^24))-48)*0.9+1)))))+(((INT(I1/2^24))-48)*(1-INT(LOG((INT((INT(I1/2^24))-48)*0.9+1))))))*2^12)+(((((INT((I1-INT(I1/2^24)*2^24)/2^16))-55)*(INT(LOG((INT((INT((I1-INT(I1/2^24)*2^24)/2^16))-48)*0.9+1)))))+(((INT((I1-INT(I1/2^24)*2^24)/2^16))-48)*(1-INT(LOG((INT((INT((I1-INT(I1/2^24)*2^24)/2^16))- 48)*0.9+1))))))*2^8)+(((((INT((I1-INT(I1/2^16)*2^16)/2^8))-55)*(INT(LOG((INT((INT((I1-INT(I1/2^16)*2^16)/2^8))-48)*0.9+1)))))+(((INT((I1-INT(I1/2^16)*2^16)/2^8))-48)*(1-INT(LOG((INT((INT((I1-INT(I1/2^16)*2^16)/2^8))-48)*0.9+1))))))*2^4)+((((I1-INT(I1/2^8)*2^8)-55)*(INT(LOG((INT((I1-INT(I1/2^8)*2^8)-48)*0.9+1)))))+(((I1-INT(I1/2^8)*2^8)-48)*(1-INT(LOG((INT((I1-INT(I1/2^8)*2^8)-48)*0.9+1)))))))*0.01
            Klicke auf die Grafik für eine vergrößerte Ansicht

Name: RS485_Hex_Dez.png
Ansichten: 220
Größe: 47,3 KB
ID: 386929



            lg Romildo

            Kommentar

            • Tico
              Lox Guru
              • 31.08.2016
              • 1035

              #7
              romildo erhält das gleiche Ergebnis wie ich mit einer etwas anderen Befehlserkennung.

              Ich habe folgendes für Command Recognition -
              Code:
              \s15\4\3\2\1
              Dies sind die Daten, die ich auf dem Monitor sehe.

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

Name: Text Data.png
Ansichten: 193
Größe: 6,1 KB
ID: 386953
              Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.

              Kommentar


              • romildo
                romildo kommentierte
                Kommentar bearbeiten
                Wenn die Daten so wie im Bild in Loxone ankommen, dann ist deine Befehlserkennung richtig.
                Gemäss Beschreibung bin ich davon ausgegangen, dass der erste Wert an Position 17 kommt, also 16 Zeichen übersprungen werden müssen
            Lädt...