easyModbus.ModbusServer und VB.Net (VS2017): Kein Zugriff auf Datenfelder

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von exc-jdbi.

    easyModbus.ModbusServer und VB.Net (VS2017): Kein Zugriff auf Datenfelder

    Hallo, in einer Modbus-TCP-Applikation (vergleichbar mit dem EasyModbusServerSimulator) gelingt es mir nicht, auf die Datenfelder zuzugreifen. Die Verbindung zur Gegenstelle funktioniert, nur den Datenzugriff bekomme ich nicht hin. Siehe Screenshot (Err.png) im Anhang. Die komplette Solution ist ebenfalls im Anhang (VBTest2-TCP.7z).
    Wenn Zeile 16 "Me.MbTcpSlave.discreteInputs.Item(i) = 0" nicht auskommentiert ist, gibt es den Build-Error "error BC31429: 'discreteInputs' is ambiguous because multiple kinds of members with this name exist in class 'ModbusServer'."
    Weiss vielleicht Jemand, was ich falsch mache bzw. wie es richtig gemacht werden muss?

    Vielen Dank im Voraus!

    Quellcode

    1. Imports System.ComponentModel
    2. Imports EasyModbus ' Modbus TCP
    3. Public Class Form1
    4. ' ModbusTcp aus easyModbus (Tools - NuGet Package Manager - Manage NuGet... - Browse - Search "easymodbus" - EasyModbusTCP - Install)
    5. Private MbTcpSlave As New ModbusServer
    6. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    7. Try
    8. 'Dim ip = New Net.IPAddress(New Byte() {127, 0, 0, 1})
    9. Dim ip = New Net.IPAddress(New Byte() {192, 168, 1, 107})
    10. Dim i As Integer
    11. For i = 0 To 512
    12. Me.MbTcpSlave.discreteInputs.Item(i) = 0
    13. Next
    14. Me.MbTcpSlave.LocalIPAddress = ip
    15. Me.MbTcpSlave.Port = 502
    16. Me.MbTcpSlave.Listen()
    17. Catch ex As Exception
    18. MsgBox("ModbusTCP: " & vbCrLf & ex.Message)
    19. Me.MbTcpSlave = Nothing
    20. End Try
    21. End Sub
    22. Private Sub Form1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
    23. If Me.MbTcpSlave IsNot Nothing Then
    24. Me.MbTcpSlave.StopListening()
    25. End If
    26. End Sub
    27. End Class
    Bilder
    • Error.png

      69,93 kB, 1.084×752, 119 mal angesehen
    Dateien
    • VBTest2-TCP.7z

      (296,44 kB, 80 mal heruntergeladen, zuletzt: )
    Willkommen im Forum.

    Jou, das mit der Fehlermeldung ist mies, weil die DLL wohl für C# konzipiert wurde, welches case sensitive ist. Da wird's bei VB.NET doof.
    Laut Mikrosaft und stackoverflow hast Du da keine Chance und es wird vorgeschlagen, erstmal einen in C# geschriebenen Wrapper dazwischen zu schieben, um die Mehrdeutigkeit aufzulösen.
    Naja, notfalls könnte man vielleicht noch was mit Reflection machen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich hätte jetzt gesagt das muss so heissen, es kann aber auch sein, dass ich mich täusche.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ' Ich habe es wieder rausgenommen, hab den Contructor nicht gesehen in den Meta-Übersicht

    C#-Quellcode

    1. ​public ModbusServer()
    2. {
    3. holdingRegisters = new HoldingRegisters(this);
    4. inputRegisters = new InputRegisters(this);
    5. coils = new Coils(this);
    6. discreteInputs = new DiscreteInputs(this);
    7. }



    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „exc-jdbi“ ()