Ankündigung

Einklappen
Keine Ankündigung bisher.

Aufbau eines KNXnet IP Telegramms

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #46
    Wiki wieder gesichert über benutzersteuerung. Der Fehler in unserem Programm lag an der Annahme das die cEMI-funktionen des Calimero nach dem E0 paar die 00 mitsendet was sie leider nicht tun... den werte einfach erweitert und schon gehts
    KNXatHOME Supportanfragen /anregungen via PN...

    Kommentar


      #47
      Zitat von shadovv1 Beitrag anzeigen
      Meine Telegramme sehen folgendermaßen aus:

      2B 07 03 01 00 04 02 14 D0 B4 31 64 51 02 E0 00 XX AD
      2B 07 03 01 00 04 02 9E 77 B4 31 64 51 01 E0 00 XX AE

      [...]

      Kann mir bitte wer den ersten Teil des Telegramms erklären [...]

      Danke im voraus

      shadovv1
      2B ist klar (MessageCode, hier: BusmonitorIndication)
      07: Längenangabe für zusätzliche Infos (AddInfos) (oft 0)

      AddInfo-Aufbau:

      1. Gesamtlänge (hier 7)

      2a. Typ der Info (hier 3 für "busmon info")
      2b. Länge der folgenden Daten (hier 1)
      2c. Daten (hier 0 (status ok))

      3a. Typ der Info (hier 4 für "relative timestamp info")
      3b. Länge der folgenden Daten (hier 2)
      3c. Daten (hier 14D0 bzw. 9E77 timestamp)

      Der Status-Wert
      Der Zeitstempel entspricht einem internen Zähler der Schnittstelle.

      Für meine USB-Schnittstelle (GIRA 1070 00) gilt interessanterweise:
      Anzahl der Zyklen = (13 x 52 + 1) x (L + 1), wobei L der Anzahl der Bytes des Telegrammes entspricht. Für die Übertragung eines Bits werden 52 Zyklen des Zählers benötigt. Ein Byte wird ja durch 13 Bits übertragen (Startbit, 8 Datenbits, Parität, Stopbit und 2 Wartebits). Ein Extrazyklus wird für jedes Byte benötigt (keine Ahnung warum). Mit dieser Formel kann für die GIRA-Schnittstelle exakt der Zeitpunkt der Übertragung eines Telegrammes bestimmt werden.

      Für eine andere Schnittstelle muss zumindest der Wert 52 neu bestimmt werden. Das ist aber leicht, wenn man genügend aufgezeichnete Telegramme hat.

      Kommentar


        #48
        Danke für die erklärungen hilft mir weiter!
        KNXatHOME Supportanfragen /anregungen via PN...

        Kommentar


          #49
          KNX/EIB Aufbau eines KNXnet IP Telegramms

          Hallo zusammen,

          ich bin an dem Zerlegen des IP-Telegramms. Soweit sieht das auch garnicht schlecht aus.

          Funktioniert:
          Quelladresse: 1.1.122 Zieladresse: 0/4/38 - Nachricht: 06 10 05 30 00 1F 11 00 BC E0 11 7A 04 26 0F 00 80 30 30 3A 34 35 3A 32 38 20 20 20 20 20 20 00 00 00 00 00

          Fehler:
          Quelladresse: 1.1.4 Zieladresse: 6/B/3 - Nachricht: 06 10 05 30 00 15 29 00 BC D0 11 04 6B 03 05 00 80 41 B7 57 69 35 3A 32 38 20 20 20 20 20 20 00 00 00 00 00 00

          Es sollte eigentlich 13/3/3 als Zieladresse übersetz werden.
          Stattdesen bekomme ich 6/B/3.

          Ich hoffe es kann mir jemand weiterhelfen.

          Gruß Sebastian

          Kommentar


            #50
            So spontan: 6b = 6x16+11=107 und 13x8+3=107.....


            Sent from my iPhone using Tapatalk
            KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

            Kommentar


              #51
              Zitat von szange Beitrag anzeigen
              Es sollte eigentlich 13/3/3 als Zieladresse übersetz werden.
              Stattdesen bekomme ich 6/B/3.

              Ich hoffe es kann mir jemand weiterhelfen.

              Gruß Sebastian
              Dir Bitmasken der Adressen sind nicht nibble-bündig:

              Code:
               
              6B03 = 0110 1011 0000 0011
                     HHHH HMMM SSSS SSSS
                     
              H= 01101=13
              M= 011  =3
              S= 00000011=3
              Gruppenadresse: H/M/S= 13/3/3
              Gruss,
              Gaston

              Kommentar


                #52
                Hallo,

                vielen Dank erstmal für die Hilfe.

                Das heist ich muss aus dem 6B03 erst einen Bit-Code machen und
                dann wieder zurück übersetzen. Leider kommt bei mir in .net VB folgender Bit-Code heraus:

                1000001110011
                Warscheinlich liegt das daran das nicht alles mit 0 aufgefüllt ist.
                BIsher habe ich scheinbar keine brauchbar Routine gefunden die das macht.

                Gruß Sebastian

                Kommentar


                  #53
                  Zitat von szange Beitrag anzeigen
                  Das heist ich muss aus dem 6B03 erst einen Bit-Code machen und
                  dann wieder zurück übersetzen. Leider kommt bei mir in .net VB folgender Bit-Code heraus:

                  1000001110011
                  Warscheinlich liegt das daran das nicht alles mit 0 aufgefüllt ist.
                  BIsher habe ich scheinbar keine brauchbar Routine gefunden die das macht.
                  Du brauchst nicht den Bitcode. Mit ein paar Schiebe-und Und Operationen geht das schon.
                  In c++ z.Bsp so:
                  Code:
                  ostringstream temp;
                  temp << ((addr>>11)&0xf) << "/" << ((addr>>8)&0x7) << "/" << (addr&0xff);

                  Kommentar


                    #54
                    Also eigentlich können auch alle Sprachen sowas wie

                    Hg = int( wert/8)

                    Und

                    Mg = rest( Wert/8)

                    Gruß,

                    Der Jan


                    Sent from my iPhone using Tapatalk
                    KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

                    Kommentar


                      #55
                      Zitat von JNK Beitrag anzeigen
                      Hg = int( wert/8)
                      Mg = rest( Wert/8)
                      Durch 8 teilen ?

                      Richtig (in VB):

                      Dim b AsString
                      Dim d AsInteger
                      Dim Hg AsInteger, Mg AsInteger, Sg AsInteger

                      b =
                      "6B03"
                      d = Val("&H" & b)
                      Hg = Int(d / 2048)
                      d = d
                      Mod 2048
                      Mg = Int(d / 256)
                      Sg = d
                      Mod 256


                      P.S.: In disem Code ist Int() nur als paranoia anzusehen. Wer weis was er tut kann das auch weglassen.

                      Kommentar


                        #56
                        Hallo,

                        vielen Dank für das Beispiel. Sieht soweit auch gut aus.

                        Ich habe nur das Problem, das andere Varianten nicht stimmen.

                        z.B.:
                        20:19:28.3429454 Quelladresse: 2.1.53 Zieladresse: 0/6/83 - Nachricht: 1.1.53 - 6/5/3 - 06 10 05 30 00 11 29 00 BC D0 11 35 65 03 01 00 80 0F 7B 3A 30 38 3A 35 33 20 20 20 20 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

                        Richtig ist: 1.1.53 - 6/5/3

                        Gruß Sebastian

                        Kommentar


                          #57
                          Zitat von szange Beitrag anzeigen
                          z.B.:
                          20:19:28.3429454 Quelladresse: 2.1.53 Zieladresse: 0/6/83 - Nachricht: 1.1.53 - 6/5/3 - 06 10 05 30 00 11 29 00 BC D0 11 35 65 03 01 00 80 0F 7B 3A 30 38 3A 35 33 20 20 20 20 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

                          Richtig ist: 1.1.53 - 6/5/3

                          Gruß Sebastian
                          Meine Erklärung bezog sich lediglich auf die 3-stufigen Gruppenadressen.

                          1135 is 1.1.53
                          BLGG = B=Bereich L=Linie GG=Geräteadresse

                          aber

                          6503 ist nicht 6/5/3 sondern 12/5/3 (=GA) oder 6.5.3 (=PA)

                          Kommentar


                            #58
                            Hallo,

                            ich habe mal wieder etwas Zeit gefunden an meiner .Net-Schnittstelle zu basteln.

                            Es ist richtig das 6503 = 12/5/3 (=GA), aber ich bekomme im 6/5/3 übersetzt.

                            Mit folgendem Code übersetze ich die Byte-Werte:
                            PrivateFunction GetZielAdresse(ByVal p_Byte1 AsByte, ByVal p_Byte2 AsByte) AsString
                            GetZielAdresse = Conversion.Hex(p_Byte1).PadLeft(2, "0").Substring(0, 1) & "/" & Conversion.Hex(p_Byte1).PadLeft(2, "0").Substring(1, 1) & "/" & p_Byte2
                            EndFunction

                            Gruß Sebastian

                            Kommentar


                              #59
                              Dafür braucht man nicht mit Hex und Strings zu hantieren:

                              Code:
                               
                              Public Function Byte2GA(ByVal b1 As Byte, ByVal b2 As Byte) As String
                              Dim HG As Integer, MG As Integer
                                HG = (b1 And 248) \ 8
                                MG = (b1 And 7)
                                Byte2GA = HG & "/" & MG & "/" & b2
                              End Function
                              Gruss,
                              Gaston

                              Kommentar


                                #60
                                Hallo Gaston,

                                vielen Dank für den Tip. Jetzt funktionieren endlich die Adressen. Bei den Werten sieht es auch nicht schlecht aus. Aktuell habe ich noch ein Problem mit dem Typ:

                                Beispiel:
                                - Nachricht: 1.1.27 - 1/0/4 - Typ: 0 - Wert: Neuer Wert: 89 - 6 10 5 30 0 11 29 0 BC D0 11 1B 8 4 1 0 89 C 4C 3A 30 31 3A 30 36 20 20 20 20 20 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

                                Ich hatte gedacht by byte(14) bekomme ich den Typ, aber scheinbar habe ich da auch noch einen Fehler.

                                Gruss Sebastian

                                Kommentar

                                Lädt...
                                X