Visual basic .NET et M580
Visual basic .NET et M580
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
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
Re: Visual basic .NET et M580
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 ?
Arrives tu déjà à communiquer avec ton automate avec un soft genre Modbus doctor ou Ananas ?
Re: Visual basic .NET et M580
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
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!
L'urgence, c'est fait!
L'impossible, c'est en cours!
Pour les miracles, il faut prévoir un délai!
Re: Visual basic .NET et M580
Non, j'utilise uniquement le simulateur de Unity Pro et une appli que j'essaie de coder sur Visual Basic express
Re: Visual basic .NET et M580
' 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)
' ----------------------------------------------------------------
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.
Re: Visual basic .NET et M580
c'est le code que j'utilise pour faire la connxion
Re: Visual basic .NET et M580
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 ?
ç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 ?
Re: Visual basic .NET et M580
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
et oui c'est des %MW que je voudrai lire
Re: Visual basic .NET et M580
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.
On n'imagine que cette classe fonctionne alors ? donc faudrait voir ton programme pour en dire plus.



