German Wechselrichter/Wallbox per ModBus auslesen, System wird sehr träge

spunky1a

Member
Hallo, ich will vier Geräte per ModBus auslesen und steuern, ich benutze dafür die Modbus_B4A_120815-Bibliothek. Im Prinzip funktioniert auch alles wie gewünscht. Von Modbus4 lese ich 5 Register, hier wird das ganze System ausgebremst. Ich habe dann auf die nötigsten 2 Register reduziert und den Rest durch Variablen ersetzt, da lief es schon etwas flüssiger, aber noch immer nicht optimal. Ich kann notfalls auch auf 1 Register reduzieren, dann läuft es fast ohne Probleme.

Edit: die Ladespannung kann ich auch über Modbus1 auslesen, ohne Verzögerung. Den Ladestrom muss ich nicht permanent über Modbus4 auslesen, 1x beim Start reicht.

Aber trotzdem, wie kann man das Problem lösen? Hat jemand eine Idee?

B4X:
    Dim Modbus1 As Modbus_B4A_120815
'...
    Timer1.Initialize("Timer1", 1000)
'...

Sub Timer1_Tick
'    Log(DateTime.Now)
'    Timer1.Enabled = False
    Try
'        Log(Modbus1.isConnect)
'        Log(Modbus2.isConnect)
'        Log(Modbus3.isConnect)
'        Log(Modbus4.isConnect)
        If Modbus1.isConnect = True Then
'            Log("----------")
            netzbezug = Modbus1.TCP_ReadInputRegisters(0, 2).Replace(" ", "").SubString(18) ' 00 03 00 00 00 07 49 04 04 00 00 b1 7d, 0003000000074904040000b17d, 0000b17d
'            netzbezug = "0000b17d"
'            Log(netzbezug)
            einspeisung = Modbus1.TCP_ReadInputRegisters(2, 2).Replace(" ", "").SubString(18) ' 00 36 00 00 00 07 49 04 04 00 00 00 00, 00360000000749040400000000, 00000000
'            einspeisung = "00000000"
'            Log(einspeisung)
            batterie = Modbus2.TCP_ReadMultipleRegisters(582, 1).Replace(" ", "").SubString(18) ' 00 39 00 00 00 05 47 03 02 00 00, 0039000000054703020000, 0000
'            batterie = "0000"
'            Log(batterie)
            pvstring1 = Modbus2.TCP_ReadMultipleRegisters(100, 2).Replace(" ", "").SubString(18) ' 00 15 00 00 00 07 47 03 04 00 00 00 00, 00150000000747030400000000, 00000000
'            pvstring1 = "00000000"
'            Log(pvstring1)
            pvgesamt = Modbus3.TCP_ReadMultipleRegisters(172, 2).Replace(" ", "").SubString(18) ' 02 ce 00 00 00 07 47 03 04 00 00 00 00, 02ce0000000747030400000000, 00000000
'            pvgesamt = "00000000"
'            Log(pvgesamt)
            geladen = Modbus4.TCP_ReadInputRegisters(132, 2).Replace(" ", "").SubString(18) ' 00 63 00 00 00 07 47 04 04 07 13 00 00, 00630000000747040407130000, 07130000
'            geladen = "07130000"
'            Log(geladen)
            ladestrom = Modbus4.TCP_ReadInputRegisters(299, 1).Replace(" ", "").SubString(18) ' 00 09 00 00 00 05 47 04 02 00 06, 0009000000054704020006, 0006, Achtung! Fehler möglich!
'            ladestrom = "0006"
'            Log(ladestrom)
'            ladespannungL1 = Modbus4.TCP_ReadInputRegisters(108, 2).Replace(" ", "").SubString(18) ' 00 0a 00 00 00 07 47 04 04 00 dd 00 00, 000a0000000747040400dd0000, 00dd0000
            ladespannungL1 = "00e40000"
'            Log(ladespannungL1)
'            ladespannungL2 = Modbus4.TCP_ReadInputRegisters(110, 2).Replace(" ", "").SubString(18) ' 00 0b 00 00 00 07 47 04 04 00 e2 00 00, 000b0000000747040400e20000, 00e20000
            ladespannungL2 = "00e40000"
'            Log(ladespannungL2)
'            ladespannungL3 = Modbus4.TCP_ReadInputRegisters(112, 2).Replace(" ", "").SubString(18) ' 00 0c 00 00 00 07 47 04 04 00 df 00 00, 000c0000000747040400df0000, 00df0000
            ladespannungL3 = "00e40000"
'            Log(ladespannungL3)


'
'            weiterer Code...
'

'            DoEvents
            Sleep(0)

        End If
    Catch
        ToastMessageShow("Timer1_Tick: " & LastException.Message, True)
    End Try
'    Timer1.Enabled = True
End Sub
 

DonManfred

Expert
Licensed User
Longtime User
Ich weiss nicht was die Library da im Hintergrund macht wenn Du mehrere Dinge ausliest.
Scheint aber suboptimal zu sein was dort passiert.
Habe allerdings kein Modbus-System auf welches ich zugreifen könnte; von daher hab ich nie mit der Library gearbeitet.
 
Top