Visual basic .NET et M580

Forum traitant des automates industriels de marque Schneider - Telemecanique
Répondre
Lelouch01
Apprend le binaire
Apprend le binaire
Messages : 5
Enregistré le : 06 juin 2017, 16:22

Visual basic .NET et M580

Message par Lelouch01 »

Bonjour à tous!
Je suis sur un projet qui consiste à récupérer des données d'un automate schneider M580 via une application Visual Basic .NET.
Je travaille actuellement sur le protocole ModBus TCP, avec le simulateur de Unity Pro.
J'arrive toujours pas à communiquer avec l'automate et encore moins lire des valeurs.
Mes recherches restent encore vaines et je me tourne vers vous pour de l'aide.
Merci d'avance
Avatar du membre
Schul
Forcené des structures
Forcené des structures
Messages : 179
Enregistré le : 28 mai 2017, 16:55
Localisation : reims

Re: Visual basic .NET et M580

Message par Schul »

Slt, Il existe une tonne de DLL pour communiquer en Modbus TCP en .net, tu utilises quoi ?

Arrives tu déjà à communiquer avec ton automate avec un soft genre Modbus doctor ou Ananas ?
Avatar du membre
Mantysse
Dieu du process
Dieu du process
Messages : 757
Enregistré le : 20 oct. 2015, 08:17
Localisation : MiP

Re: Visual basic .NET et M580

Message par Mantysse »

Bonjour,

Auriez vous une capture de trame réalisé avec Wireshark?
ça permettrai de savoir
1) s'il y a bien une trame qui sort du port
2) S'il n'y a pas un code défaut dans une des trames retour

Bonne journée
"Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément." Nicolas Boileau

L'urgence, c'est fait!
L'impossible, c'est en cours!
Pour les miracles, il faut prévoir un délai!
Lelouch01
Apprend le binaire
Apprend le binaire
Messages : 5
Enregistré le : 06 juin 2017, 16:22

Re: Visual basic .NET et M580

Message par Lelouch01 »

Non, j'utilise uniquement le simulateur de Unity Pro et une appli que j'essaie de coder sur Visual Basic express
Lelouch01
Apprend le binaire
Apprend le binaire
Messages : 5
Enregistré le : 06 juin 2017, 16:22

Re: Visual basic .NET et M580

Message par Lelouch01 »

' Constants for access
Private Const fctReadCoil As Byte = 1
Private Const fctReadDiscreteInputs As Byte = 2
Private Const fctReadHoldingRegister As Byte = 3
Private Const fctReadInputRegister As Byte = 4
Private Const fctWriteSingleCoil As Byte = 5
Private Const fctWriteSingleRegister As Byte = 6
Private Const fctWriteMultipleCoils As Byte = 15
Private Const fctWriteMultipleRegister As Byte = 16
Private Const fctReadWriteMultipleRegister As Byte = 23

''' <summary>Constant for exception illegal function.</summary>
Public Const excIllegalFunction As Byte = 1
''' <summary>Constant for exception illegal data address.</summary>
Public Const excIllegalDataAdr As Byte = 2
''' <summary>Constant for exception illegal data value.</summary>
Public Const excIllegalDataVal As Byte = 3
''' <summary>Constant for exception slave device failure.</summary>
Public Const excSlaveDeviceFailure As Byte = 4
''' <summary>Constant for exception acknowledge.</summary>
Public Const excAck As Byte = 5
''' <summary>Constant for exception slave is busy/booting up.</summary>
Public Const excSlaveIsBusy As Byte = 6
''' <summary>Constant for exception gate path unavailable.</summary>
Public Const excGatePathUnavailable As Byte = 10
''' <summary>Constant for exception not connected.</summary>
Public Const excExceptionNotConnected As Byte = 253
''' <summary>Constant for exception connection lost.</summary>
Public Const excExceptionConnectionLost As Byte = 254
''' <summary>Constant for exception response timeout.</summary>
Public Const excExceptionTimeout As Byte = 255
''' <summary>Constant for exception wrong offset.</summary>
Private Const excExceptionOffset As Byte = 128
''' <summary>Constant for exception send failt.</summary>
Private Const excSendFailt As Byte = 100

' ------------------------------------------------------------------------
' Private declarations
Private Shared _timeout As UShort = 500
Private Shared _refresh As UShort = 10
Private Shared _connected As Boolean = False

Private tcpAsyCl As Socket
Private tcpAsyClBuffer As Byte() = New Byte(2047) {}

Private tcpSynCl As Socket
Private tcpSynClBuffer As Byte() = New Byte(2047) {}

' ------------------------------------------------------------------------
''' <summary>Response data event. This event is called when new data arrives</summary>
Public Delegate Sub ResponseData(ByVal id As UShort, ByVal unit As Byte, ByVal [function] As Byte, ByVal data As Byte())
''' <summary>Response data event. This event is called when new data arrives</summary>
Public Event OnResponseData As ResponseData
''' <summary>Exception data event. This event is called when the data is incorrect</summary>
Public Delegate Sub ExceptionData(ByVal id As UShort, ByVal unit As Byte, ByVal [function] As Byte, ByVal exception As Byte)
''' <summary>Exception data event. This event is called when the data is incorrect</summary>
Public Event OnException As ExceptionData

' ------------------------------------------------------------------------
''' <summary>Response timeout. If the slave didn't answers within in this time an exception is called.</summary>
''' <value>The default value is 500ms.</value>
Public Property timeout() As UShort
Get
Return _timeout
End Get
Set(ByVal value As UShort)
_timeout = value
End Set
End Property

' ------------------------------------------------------------------------
''' <summary>Refresh timer for slave answer. The class is polling for answer every X ms.</summary>
''' <value>The default value is 10ms.</value>
Public Property refresh() As UShort
Get
Return _refresh
End Get
Set(ByVal value As UShort)
_refresh = value
End Set
End Property

' ------------------------------------------------------------------------
''' <summary>Shows if a connection is active.</summary>
Public ReadOnly Property connected() As Boolean
Get
Return _connected
End Get
End Property

' ------------------------------------------------------------------------
''' <summary>Create master instance without parameters.</summary>
Public Sub New()
End Sub

' ------------------------------------------------------------------------
''' <summary>Create master instance with parameters.</summary>
''' <param name="ip">IP adress of modbus slave.</param>
''' <param name="port">Port number of modbus slave. Usually port 502 is used.</param>
Public Sub New(ByVal ip As String, ByVal port As UShort)
connect(ip, port)
End Sub

' ------------------------------------------------------------------------
''' <summary>Start connection to slave.</summary>
''' <param name="ip">IP adress of modbus slave.</param>
''' <param name="port">Port number of modbus slave. Usually port 502 is used.</param>
Public Sub connect(ByVal ip As String, ByVal port As UShort)
Try
Dim _ip As IPAddress
If IPAddress.TryParse(ip, _ip) = False Then
Dim hst As IPHostEntry = Dns.GetHostEntry(ip)
ip = hst.AddressList(0).ToString()
End If
' ----------------------------------------------------------------
' Connect asynchronous client
tcpAsyCl = New Socket(IPAddress.Parse(ip).AddressFamily, SocketType.Stream, ProtocolType.Tcp)
tcpAsyCl.Connect(New IPEndPoint(IPAddress.Parse(ip), port))
tcpAsyCl.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, _timeout)
tcpAsyCl.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, _timeout)
tcpAsyCl.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.NoDelay, 1)
' ----------------------------------------------------------------
Modifié en dernier par Lelouch01 le 07 juin 2017, 09:38, modifié 1 fois.
Lelouch01
Apprend le binaire
Apprend le binaire
Messages : 5
Enregistré le : 06 juin 2017, 16:22

Re: Visual basic .NET et M580

Message par Lelouch01 »

c'est le code que j'utilise pour faire la connxion
Avatar du membre
Cyril93
Maître du binaire
Maître du binaire
Messages : 484
Enregistré le : 29 oct. 2015, 14:22
Localisation : IDF

Re: Visual basic .NET et M580

Message par Cyril93 »

Salut,

ça c'est la classe que tu utilises. Mais on ne voit pas comment elle est implémentée dans ton programme.
cette classe c'est toi qui l'as écrit ?? D’où elle vient
tu veux lire quoi dans le M580 des %MW ?
Lelouch01
Apprend le binaire
Apprend le binaire
Messages : 5
Enregistré le : 06 juin 2017, 16:22

Re: Visual basic .NET et M580

Message par Lelouch01 »

Non c'est pas moi qui l'ai implémenté, on me l'a donnée comme support.
et oui c'est des %MW que je voudrai lire
Avatar du membre
Cyril93
Maître du binaire
Maître du binaire
Messages : 484
Enregistré le : 29 oct. 2015, 14:22
Localisation : IDF

Re: Visual basic .NET et M580

Message par Cyril93 »

Pourquoi t'as viré la moitié du code que t'avait posté !!!
On n'imagine que cette classe fonctionne alors ? donc faudrait voir ton programme pour en dire plus.
Répondre