German M-Bus Protokoll

D

Deleted member 103

Guest
Hallo Jungs,

eine Frage, wer kennt sich aus mit dem M-Bus Protokoll, hat schon jemanden etwas damit gemacht?

Ich versuche seit einiger Zeit ein Verbrauchsmeßzähler auszulesen, dabei habe ich schon vieles probiert, leider ohne Erfolg.
Ich kriege zwar eine Verbindung zum Verbrauchsmeßzähler, bekomme aber keine Daten wenn ich die Telegramme "SND_NKE" oder "REQ_UD2" sende.
B4X:
Sub go_SendSyncrostring '_sontex
   Dim syncrostring(1000) As Byte
   For i = 0 To 999
      syncrostring(i)=0x55
   Next
   SendStream(syncrostring)
End Sub

Sub go_SteuerkommandoZVEI_even   'Steuerkommando ZVEI IRDA,8,E,1,9600
   Dim b(13) As Byte         'Beim einer aktiven Verbindung
   b(0)=0xFE
   b(1)=0xFE
   b(2)=0xFE
   b(3)=Asc("B")
   b(4)=Asc("L")
   b(5)=Asc("U")
   b(6)=Asc("E")
   b(7)=0x30 'Asc("0")
   b(8)=0x38 'Asc("8")
   b(9)=0x45 'Asc("E")
   b(10)=0x31 'Asc("1")
   b(11)=0x35 'Asc("5")
   b(12)=0xFF
   SendStream(b)
End Sub

Sub go_SND_NKE
   Dim b(5) As Byte
   b(0)=0x10 'Start
   b(1)=0x40 'C-Feld
   b(2)=0x00 '0xFE 'A-Feld
   b(3)=get_Checksumme(b,1,2)  'Checksumme
   b(4)=0x16 'Ende
   SendStream(b)
End Sub

Sub go_REQ_UD2
   Dim b(5) As Byte
   b(0)=0x10 'Start
   b(1)=0x5B 'C-Feld 0x5B / 0x7B
   b(2)=0x00 'A-Feld
   b(3)=get_Checksumme(b,1,2)  'Checksumme
   b(4)=0x16 'Ende
   SendStream(b)
End Sub

Sub SendStream(buffer() As Byte)
   Log("SEND <CAN>: " & BytesToString(buffer, 0, buffer.Length, "US-ASCII")) 'ISO-8859-1
   'AStream.Write(buffer)
   AStream.Write2(buffer,0,buffer.Length)
End Sub

Sub AStream_NewData (Buffer() As Byte)
   Dim str As String
   
   LogMessage("You", BytesToString(Buffer, 0, Buffer.Length,"US-ASCII"))  'ISO-8859-1

   str=bConv.HexFromBytes(Buffer)
   Log(str)
End Sub

Sub LogMessage(From As String, Msg As String)
   txtLog.Text = txtLog.Text & Msg
   txtLog.SelectionStart = txtLog.Text.Length
End Sub

Sub get_Checksumme(buffer() As Byte, Start As Int, Ende As Int) As Byte
   Dim hex(1) As Byte
   Dim byt As Long
   For i = Start To Ende
      byt=byt + buffer(i)
   Next
   hex(0)= byt Mod 256
   Return hex(0) 'bConv.HexFromBytes(hex)
End Sub

Mache ich irgendwo ein Fehler beim senden der Protokolle?

Die Geräte die ich zu verfügung habe:
1) Auslesekopf mit Bluetooth und IRDA
2) Verbrauchsmeßzähler mit IRDA

Es wäre schön wenn mir jemand helfen könnte.
Filippo
 
D

Deleted member 103

Guest
Hallo Creideiki,

danke für die Antwort.

Versuch's mal mit dem IrDA-Modus statt ZVEI.
Das ist ja gerade das Problem. Mit dem IrDA-Modus kann ich den Verbrauchsmeßzähler nur syncronisieren. Um ein M-Bus-Protokoll senden zu könnnen, muss ich die Parität-Parametern ändern, und das geht nur mit dem ZVEI-Modus.
Hast du schon irgendwelche erfahrungen mit solche Geräte gemacht?

Ciao,
Filippo
 

Creideiki

Active Member
Licensed User
Longtime User
Bis jetzt nicht (unter Android), da fange ich gerade erst an.
Nur redet der Adapter im ZVEI-Modus eben nicht IrDA, was ja eigentlich Voraussetzung ist.
Ich hoffe, die Antwort lautet nicht "geht nicht".
 
D

Deleted member 103

Guest
Den ZVEI-Modus brauche ich nur um die Parität zu ändern.
Für die syncronisierung muss die Parität = "N" sein , danach muss die Parität auf "E" eingestellt werden.
Hast du noch ein Tip wie ich weiter gehen kann?
 

Creideiki

Active Member
Licensed User
Longtime User
Hab gerade mit Hydrometer telefoniert. Das IZAR unterstützt keine Parität im IrDA-Modus; es kann sich also nicht mit WHE37 & Co. unterhalten.
 
D

Deleted member 103

Guest
Hab gerade mit Hydrometer telefoniert. Das IZAR unterstützt keine Parität im IrDA-Modus; es kann sich also nicht mit WHE37 & Co. unterhalten.
Danke für die Antwort.
Ich probiere jetzt seriell über USB, mal sehen wie weit ich komme.
 
Top