Je travaille actuellement sur une application qui communique avec les périphériques utilisant série Modbus. L'application est écrite en C#.Conversion d'application Modbus série vers Modbus TCP/IP C#
Nos appareils ont été modifiés pour utiliser Ethernet et moi avons maintenant été chargés de convertir cette application pour utiliser Modbus TCP/IP.
J'ai d'abord pensé que ce serait très simple, et ne nécessiterait changer la connexion série à une connexion TCP Client et Listener.
J'ai lu la documentation sur Modbus TCP/IP
https://www.prosoft-technology.com/kb/assets/intro_modbustcp.pdf https://www.honeywellprocess.com/library/support/Public/Documents/51-52-25-121.pdf
Bien que je sens que je peux encore être absent quelques différences essentielles.
D'après ce que je comprends, c'est ce qui doit être fait.
- Introduisez un nouvel en-tête MBAP à la place de la section Adresse supplémentaire au début d'un paquet.
- Supprime la somme de contrôle du paquet Modbus car elle est gérée par TCP/IP.
- Ouvrir la connexion avec chaque périphérique à l'aide de la classe
Socket
. Pour ouvrir ces connexions, j'ai maintenant besoin de stocker chaque IP de périphérique dans ma configuration client/maître. Ils seront à l'écoute sur le port par défaut 502 et la connexion doit être ouverte à partir d'un port disponible aléatoire> 1024. La connexion doit également rester ouverte, donc je vais maintenir unArray
deTcpClient
objets. Ou devrais-je simplement fermer la connexion après avoir reçu une réponse? Aurai-je besoin d'avoir un thread pour chaque serveur/esclave?
Donc, pour être sûr de bien comprendre, est-ce que j'initialiserais une connexion socket pour chaque esclave, puis bouclerais chaque socket sur une minuterie et vérifierais que les données soient lues? –
Oui, vous ouvrez une connexion TCP à chaque esclave. Vous n'avez pas besoin d'une minuterie, vous pouvez créer une liste de sockets à attendre et utiliser la méthode Socket.Select. (https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.socket.select?view=netframework-4.7.1). Je ne suis en aucun cas un expert. NET, donc s'il vous plaît vérifier s'il y a une meilleure/plus facile d'attendre. – Ronaldo