Modbus tcp read values

Signaler
Messages postés
7
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
17 janvier 2008
-
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
-
Hellow,

Sorry that i write in English, parce que mon francais n'est pas bon.

I try to make a program that has to read short values from the ethernet.
I put the values on the ethernet with a PLC using the modbus tcp protocol.
Now i want to read the values with vb 2005, and put al that different values on the screen in a windows application.
I also need to safe that values in a SQL database, when i push on a button.
But first i want to put that values on my screen, so i can see every different value.

Does someone has something that i can use for that?

Merci!

14 réponses

Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
156
Bonjour, hello

Ton problème c'est d'afficher les valeurs ou de les écrires dans la base de données ?
Your problem concerning show values or write in database ?

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Messages postés
7
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
17 janvier 2008

Both...
But first I wanna make  a program thaht shows the values on the screen. When i have that, then I'm gonna make the program to save the values.
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
156
Bonjour

Parvient-tu à lire les valeurs désirées par Modbus TCP, où la récupération te pose déjà problème?
Est-ce que tu t'es documenté concernant le protocole de communication.
Ici on est sur un forum en français, ce serais bien que tu mette ton texte en français (tu peux aussi écrire en Anglais comme je le fais, mais au moins une copie en français ce serais bien), car Google n'est pas toujours parfait.

Does you to read the values desired by Modbus TCP, where the recovery is already a problem?
Do you have documented on the communication protocol.

Here we are on a forum in french, it would be good that you put your
french text (you can also write in English as I do, but at least one
copy in french this would be good), because Google is not always
perfect.

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Messages postés
7
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
17 janvier 2008

Je voudrais récuperé les valeurs qui le PLC fait avec le Modbus TCP protocol.


Quand j'ai des valeurs je voudrais utilisé ces valeurs pour monter a l'ecran, dans des textbox.


Ca doit marcher premier, est apres, je vais regarder pour safe des valeurs.


 
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
156
Bonjour

OK, je repose la question, est-ce que tu parviens à communiquer avec le PLC par Modbus ?
Est-ce que tu a déjà commencer à coder la partie Modbus?

Merci pour avoir fait l'effort d'écrire en français.

OK, I is the question, are you able to communicate with the PLC by Modbus?
Do you already start coding part Modbus?

Thank you for having made the effort to write in french.

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Messages postés
7
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
17 janvier 2008

A ce moment, il y a un program ecrit a delphi qui utilit la connection avec modbus tcp et ca marche.
Les valeurs sont a l'ethernet avec le modbus tcp protocol.

Je communiques avec le PLC avec un autre protocol. J' utilise le RS232 connection a le PLC pour change le program etc.


J etait chercher a l'internet pour modbus code.


Par exemple j'ai trouver ces exemples:



http://msdn2.microsoft.com/en-us/library/system.net.sockets.tcpclient.aspx (le vb exemple)
http://www.eggheadcafe.com/articles/20020323.asp
http://www.koders.com/csharp/fid136F90F99E2B81EC409EF465E1564206AED5D1F7.aspx

Mais je n'ai pas faire un program qui marche.
 


 
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
156
Bonjour

Pour les trames Modbus, j'avais fait un pack de classes en .NET2, pour communiquer sur une liaison série (donc vraissemblablement à adapter pour Modbus TCP).

Fichier : ClsModBus.7z

Les commentaires sont en français, mais je pense que ce sera facile à comprendre.
Pour décoder une trame, il faut faire appel à ClsFrameModbusBase.GetClassFromFrame (méthode partagée)

For Modbus frame, I had a pack of .NET2 classes to communicate over a
serial link (and therefore probably to adjust for Modbus TCP).

File: ClsModBus.7z

The comments are french, but I think it will be easy to understand.
To decode a frame, it is necessary to call on ClsFrameModbusBase.GetClassFromFrame (shared method)

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
156
Bonjour

Une erreur de lien (un espace à la fin), utilise celui proposé dans le bloc en français

A mistake to link (a space at the end), use the one proposed in the block french

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Messages postés
7
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
17 janvier 2008

Bonjour,

Je ne sais pas que je dois faire avec le program parce que je ne sais pas que tu vois dire. Sorry.
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
156
Bonjour

Les classes (ClsFrameModbus*.vb) que je t'ai proposé sont dédiées à l'encodage et au décodage des trames modbus (fonction 3, 4 et 16). Il faut les inclure dans ton projet et les utiliser. Car d'après ce que j'ai compris, tu ne décode ni encode les trames actuellement.

Es-tu parvenu à te connecter au PLC avec le protocole TCP ?

Classes (ClsFrameModbus *. vb), which I proposed t'ai are dedicated to
encoding and decoding frames modbus (position 3, 4 and 16). They should
be included in your project and use them. Because from what I
understand, you do not encode or decode packets now.

Are you able to connect to you PLC with TCP?

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Messages postés
7
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
17 janvier 2008

Non, ce n'st pas possible connecter le PLC...
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
156
Bonjour

Pour te connecter au serveur Modbus, il te faut l'adresse IP du PLC, et le numéro du port (de mémoire c'est 502 par défaut).
Ensuite utilises la classe System.net.Socket.TcpClient pour te connecter (voir l'aide MSDN).

For you Modbus connect to the server, you need the IP address of the PLC, and the port number (502, memory, is the default).
Then the class System.net.Socket.TcpClient used to connect (see using MSDN).

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Messages postés
7
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
17 janvier 2008

J'ai faire cela:
(mais il y a une erreur: Error 1 'Sub Main' was not found in 'ConsoleApplication2.Module1'. )


Imports System.Net.Sockets



Module



Module1


Sub
Connect(

ByVal
server

As
[String],

ByVal
message

As
[String])


Try






' Create a TcpClient.






' Note, for this client to work you need to have a TcpServer






' connected to the same address as specified by the server, port






' combination.






Dim
port

As
Int32 = 502


Dim
client

As



New
TcpClient(

"192.168.131.44"
, port)


' Translate the passed message into ASCII and store it as a Byte array.






Dim
data

As
[Byte]() = System.Text.Encoding.ASCII.GetBytes(message)


' Get a client stream for reading and writing.






' Stream stream = client.GetStream();






Dim
stream

As
NetworkStream = client.GetStream()


' Send the message to the connected TcpServer.

stream.Write(data, 0, data.Length)


Console.WriteLine(




"Sent: {0}"
, message)


' Receive the TcpServer.response.






' Buffer to store the response bytes.

data =




New
[Byte](256) {}


' String to store the response ASCII representation.






Dim
responseData

As
[String] = [String].Empty


' Read the first batch of the TcpServer response bytes.






Dim
bytes

As
Int32 stream.Read(data, 0, data.Length)responseData System.Text.Encoding.ASCII.GetString(data, 0, bytes)

Console.WriteLine(


"Received: {0}"
, responseData)


' Close everything.

stream.Close()


client.Close()







Catch
e

As
ArgumentNullExceptionConsole.WriteLine(


"ArgumentNullException: {0}"
, e)


Catch
e

As
SocketExceptionConsole.WriteLine(


"SocketException: {0}"
, e)


End



Try

Console.WriteLine(ControlChars.Cr +




" Press Enter to continue..."
)Console.Read()


End



Sub



'Connect

End






Module
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
156
Bonjour

Ton projet doit posséder une form de démarage ou une Sub Main, voici les 3 déclaration possibles :

Public Sub Main()
Public Function Main() as integer
Public function Main(pParams as string())

Dans ton code pourquoi utiliser [Byte], [String], sans les crochets ça marche aussi et c'est plus lisible (Byte=[Byte])

Tu envoie une chaine avec ta fonction, et tu attend en retour une chaine de 256 octets (donc si ta réponse est de 10 octets, tu attendra un moment avant de continuer ton code.

Your project must have a starter form or Sub Main, the following 3 possible statements:

Public Sub Main ()
Public Main () Function as integer
Public function Main (pParams as string ())

In your code to use [Byte], [String] it works without the brackets and it is more readable (Byte = [Byte])


You send a string with your fucntion, and expects you to return a string
of 256 bytes (so if your answer is 10 bytes, you will wait a while
before continuing your code.

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1