Hallo Leute,
ich bin gerade dabei die Werte meines Photovoltaik-Wechselrichters per Modbus TPC auszulesen.
Mit dem entsprechenden Nu-Get Paket (easyModbus) geht das auch relativ einfach:
Mit
In der Tabelle anbei sieht man einige Registeradressen und dann den Datentyp und Quantity.
Leider habe ich keinen Schimmer wie ich die echten Werte (Integer, Double, Long, String) rausbekomme
Möchte ich als Beispiel nun den Register 30000 auslesen, welcher den Namen des Wechselrichters als String enthält - lese ich da 15 Registerstellen als Integer aus und wandle dann die Integerwerte in je ein Zeichen um?
Oder Beispielswiese Register 30075 (Maximum aktive power) ist vom Typ U32 (ich nehme an int32 = Long ?)
Da lese ich 2 Integerwerte aus - wie bekomme ich daraus dann den Longwert.
Und dann gibts Noch I16, Bitfield16, U16, I32, U32 und UINT32 ...
Und ob mit STR und STRING das selbe gemeint ist, ist mir auch nicht klar.
Kann mir da jemand von Euch helfen?
ich bin gerade dabei die Werte meines Photovoltaik-Wechselrichters per Modbus TPC auszulesen.
Mit dem entsprechenden Nu-Get Paket (easyModbus) geht das auch relativ einfach:
VB.NET-Quellcode
-
- Option Strict On
- Imports EasyModbus
- Public Class Form1
- Dim ModClient As New ModbusClient
- Private Sub Button_Connect_Click(sender As Object, e As EventArgs) Handles Button_Connect.Click
- ModClient.IPAddress = TextBox_IP.Text
- ModClient.Port = CInt(TextBox_Port.Text)
- Try
- ModClient.Connect()
- If ModClient.Connected = True Then
- Label_Status.Text = "Connected."
- Button_Connect.Enabled = False
- Button_Disconnect.Enabled = True
- End If
- Catch ex As Exception
- Label_Status.Text = "Error Connection!"
- End Try
- End Sub
- Private Sub Button_Disconnect_Click(sender As Object, e As EventArgs) Handles Button_Disconnect.Click
- ModClient.Disconnect()
- Label_Status.Text = "Disconnected"
- Button_Connect.Enabled = True
- Button_Disconnect.Enabled = False
- End Sub
- Private Sub Button_Read_Click(sender As Object, e As EventArgs) Handles Button_Read.Click
- Try
- Dim RegVals As Integer()
- RegVals = ModClient.ReadHoldingRegisters(CInt(TextBox_StartReg.Text), CInt(TextBox_LengthReg.Text))
- If RegVals.Length > 0 Then
- ListBox_RegValues.Items.Clear()
- For Each value As Integer In RegVals
- ListBox_RegValues.Items.Add(value)
- Next
- End If
- Catch ex As Exception
- End Try
- End Sub
- End Class
Mit
ModClient.ReadHoldingRegisters(start,length)
lese ich Integerwerte pro Register aus.In der Tabelle anbei sieht man einige Registeradressen und dann den Datentyp und Quantity.
Leider habe ich keinen Schimmer wie ich die echten Werte (Integer, Double, Long, String) rausbekomme
Möchte ich als Beispiel nun den Register 30000 auslesen, welcher den Namen des Wechselrichters als String enthält - lese ich da 15 Registerstellen als Integer aus und wandle dann die Integerwerte in je ein Zeichen um?
Oder Beispielswiese Register 30075 (Maximum aktive power) ist vom Typ U32 (ich nehme an int32 = Long ?)
Da lese ich 2 Integerwerte aus - wie bekomme ich daraus dann den Longwert.
Und dann gibts Noch I16, Bitfield16, U16, I32, U32 und UINT32 ...
Und ob mit STR und STRING das selbe gemeint ist, ist mir auch nicht klar.
Kann mir da jemand von Euch helfen?
Liebe Grüße
Roland Berghöfer
Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
Roland Berghöfer
Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at