Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 9 von 9

Thema: Modbus Tcp Verbindung zwischen PC (VB.NET) und Wago 750-342

  1. #1
    Registriert seit
    30.06.2007
    Ort
    Minden (Westf.)
    Beiträge
    178
    Danke
    42
    Erhielt 21 Danke für 21 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi allerseits,

    ich habe eine VB.NET - Anwendung, welche per Modbus Tcp mit einem Wago Ethernet - Koppler (750-342) Kommuniziert. Die Anwendung liest lediglich ein Byte digitale Eingänge und ein Byte digitale Ausgänge. Genutzt habe ich bisher immer die kostenpflichtige DLL: MTB.dll von Wago. Die Ethernetverbindung ist ein Cross-Over Kabel. Genau hier gibt es bei Windows 7 ein Problem: Der Koppler gibt nach einigen Sekunden (das Programm aktualisiert den Status alle 150ms) beim lesen der Eingänge oder beim schreiben der Ausgänge (fertige Prozeduren von Wago) einen Fehler aus. Trennen/Verbinden - und es geht weiter (für ein paar Sekunden). Bislang war das kein Problem, es wurde nur eine Signalampel angesteuert und eine allgemeine Freigabe, jetzt kommt allerdings noch mehr dazu...
    Das interessante dabei ist, frühere Programme liefen auf Windows XP, da gab es kein Problem. Weiter ist interessant, das bei Verwendung eines Netzwerkswitch auch unter Windows 7 kein Problem auftritt.
    Ich habe mittlerweile auch eine Modbus - Opensource-Lib getestet, die Probleme sind unter Windows 7 (ich habe kein XP-Rechner mehr) die gleichen.
    Hat jemand eine Idee was unter W7 so "anders" läuft im "Netzwerk" .. ??

    Gruß
    Danke


    Zitieren Zitieren Modbus Tcp Verbindung zwischen PC (VB.NET) und Wago 750-342  

  2. #2
    Registriert seit
    29.03.2004
    Beiträge
    5.172
    Danke
    129
    Erhielt 1.506 Danke für 1.107 Beiträge

    Standard

    So wie du schreibst muss das ja etwas mit dem Cross-Over Kabel zu tun haben.
    Bei Windows 7 wirst du wohl einen anderen Treiber für die Netzwerkkarte als bei XP haben. Außerdem unterstützt Windows 7 auch IPv6, das wäre auch mal ein Versuch wert IPv6 zu deaktivieren.

    Wenn die Verbindung weg ist, würde ich mal einen Blick in die Verbindungseigenschaften der LAN-Schnittstelle werfen. Z.B. ob die Schnittstelle noch aktiv ist, welche Übertragungsrate eingestellt ist usw.
    Mal Wireshark mitlaufen zu lassen könnte auch hilfreich sein.

  3. #3
    Registriert seit
    02.06.2016
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi StefanK,

    ich weiss der Beitrag ist schon etwas älter. Ich versuche hier auch mein vb.NET Programm mit der WAGO zu verbinden. Habe auch schon die MBT.dll.
    Doch wenn cih auf verbinden klicke, sagt er ist verbunden auch wenn ich die WAGO nicht angeschlossen habe. Ist das normal?
    Dann weiss ich immer noch nicht, wie ich auf das Signal zugreifen kann, dass von der WAGO kommt.
    Kannst du mir vielleicht, dein Programm zur verfügung stellen? ODer mir ein paar Tipps geben. Vielen Dank.

    Mfg

  4. #4
    Registriert seit
    25.02.2010
    Beiträge
    490
    Danke
    27
    Erhielt 96 Danke für 87 Beiträge

    Standard

    Doch wenn cih auf verbinden klicke, sagt er ist verbunden auch wenn ich die WAGO nicht angeschlossen habe. Ist das normal?
    Nein
    Der Aufruf:
    Code:
    HRESULT = MBT.MBTConnect(Server_IP, ModBusPort, TCP_UDP, TimeOut, ModBus_Socket)
    sollte Fehler
    Code:
    &H8007274C  - 'Timeout während des Verbindungsaufbaus
    zurückgeben.


    Code:
    Private Sub btn_ReadRegister_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_ReadRegister.Click
       
            Dim inpVal() As Short
            Dim adr As Short
            Dim Anzahl As Short
            Dim ZWE As Short
            Dim i As Integer
            Anzahl = 10 
            ReDim inpVal(Anzahl - 1)
            adr = 1 
            HRESULT = MBT.MBTReadRegisters(ModBus_Socket, MODBUSTCP_TABLE_OUTPUT_REGISTER, adr, Anzahl, inpVal(0), 0, 0)
            If HRESULT <> 0 Then
                 Ausgabe_Fehlercode(HRESULT, "Register lesen")
                 Exit Sub
                 End If
          
                    For i = 0 To inpVal.GetUpperBound(0)
                        ZWE = MBT.MBTSwapWord(inpVal(i))
                        lb_read.Items.Add("Word " & CStr(adr + i) & " : " & ZWE.ToString)
                    Next
    
       End Sub
    liest 10 Register ab Adresse 1 und schreib diese in eine Listbox.


    Unter DokuNr. m931200 findest du bei Wago die Beschreibung der DLL oder im Verzeichnis "Doc" auf der CD.

    Holger
    Geändert von holgermaik (20.06.2016 um 22:14 Uhr)

  5. #5
    Registriert seit
    02.06.2016
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ist vielleicht meine Funktion falsch?
    Code:
    <DllImport("MBT.dll", SetLastError:=True)>
    Public Shared Function MBTConnect(ByVal szHostAddress As String, ByVal port As Integer, ByVal useTCPorUDP As Long, ByVal requestTimeout As Long, hSocket As Long) As Long
    End Function
    Und was muss ich bei Modbus_Socket setzen?
    Das Doc habe ich auch, aber werde nicht richtig schlau daraus.

    Vielleicht bin ich auch zu doof für diese Verbindung xD

  6. #6
    Registriert seit
    25.02.2010
    Beiträge
    490
    Danke
    27
    Erhielt 96 Danke für 87 Beiträge

    Standard

    Ist vielleicht meine Funktion falsch?
    Ja.

    Deine Übergabeparameter haben das falsche Datenformat. Die MBT.DLL ist eine C++ DLL, Bei C ist ein Integer 16Bit groß und bei VB.Net ist ein Integer 32 Bit groß. (Long: 32Bit /64Bit)
    Die richtige Funktion würde lauten:
    Code:
     <DllImport("MBT.dll", CharSet:=CharSet.Unicode)> _
       Public Shared Function MBTConnect(<MarshalAs(UnmanagedType.LPStr)> ByVal szHostAddress As String, ByVal port As Short, ByVal useTCPorUDP As Boolean, ByVal requestTimeout As Integer, ByRef hSocket As Integer) As Integer
        End Function
    Und was muss ich bei Modbus_Socket setzen?
    Modbus_Socket ist der Rückgabewert der MBTConnect Funktion und ein Zeiger auf die ID der Socketverbindung.

    Ich hänge dir mal die Class MBT mit an.
    MBT.txt

    Holger

  7. #7
    Registriert seit
    02.06.2016
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ok, mein Fehler war noch, dass ich nicht vor jede Funktion den DLLImport Befehl gesetzt hatte.
    Schon mal großes Lob und Danke an dieer Stelle. Bin auf jeden Fall schon weiter. Kriege jetzt eine richtige Verbindung aufgebaut.

    Das mit dem Lesen habe ich aber auch noch nicht ganz verstanden.
    Ich bräuchte eig eine Signalüberwachung. Und zwar kriegen wir hier von der Maschine ein Siganl (Impuls) an die Wago übertragen. Meißtens auf Zählereingang 1.
    Dieses ist aber kein Dauersignal, sondern ein zyklisches. Damit werden bei uns die Teile im BDE System gezählt.
    Jetzt will ich ein Befehl ausführen lassen, wenn kein Signal mehr kommt.

    Das wäre die Ideallösung

  8. #8
    Registriert seit
    02.06.2016
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    hat keiner eine Lösung? Oder eine Idee, wie man es lösen könnte?

    Das mit dem Lesen hat jetzt geklappt, wenn ich ein Dauersignal habe.

    Könnt ihr mir noch ein paar Tipps geben, wie ich korrekt ein Signal von vb aus übergeben kann.
    Welchen Wert muss ich z.B. übergeben, wenn ich dem Zähler 2 ein Signal geben will? Ist das der selbe, wie wenn ich den auslese?
    Und sehe ich das Lämpchen blicnken, wenn ich ein Signal übergebe? Wüsste sonst nicht, wie ich das prüfen kann.

    Vielen Dank.

    mfg

  9. #9
    Registriert seit
    11.12.2010
    Ort
    nähe Bamberg
    Beiträge
    37
    Danke
    1
    Erhielt 3 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo!

    guckst Du hier: https://github.com/NModbus4/NModbus4

    Gruß

Ähnliche Themen

  1. Antworten: 18
    Letzter Beitrag: 01.09.2015, 22:36
  2. Antworten: 1
    Letzter Beitrag: 27.06.2013, 15:02
  3. Wago 750-871 <-> Modbus <-> Wago 750-342
    Von XX5198 im Forum WAGO
    Antworten: 3
    Letzter Beitrag: 11.04.2013, 20:19
  4. Antworten: 7
    Letzter Beitrag: 11.03.2013, 09:39
  5. Verbindung zwischen CP 342-5 und ET200M !
    Von SHendrik im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 15.03.2006, 17:40

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •