Serveur modbus tcp

Soyez le premier à donner votre avis sur cette source.

Vue 29 016 fois - Téléchargée 3 342 fois

Description

Le serveur ModBus simule un équipement (device) avec port(s) ModBus TCP intégré. L'utilisateur doit configurer au moins 1 device en lui donnant un nom et une adresse ModBus (index). Chaque device configuré possède 8000 registres du type 4x (usage général). Ensuite, le soft liste les ports ethernet dispo sur le PC et y ouvre (en mode Asynchrone) le port 502 en écoute. Lorsqu'une requête ModBus est envoyée vers le PC qui roule le soft (requête = lecture ou écriture), le soft exécute la requête et répond à la device qui a initié la requête (comme dans un échange ModBus standard).

Il est possible de visualiser la table (valeurs) des 8000 registres dans les différents formats populaires (Hexa, U16, S16, U32, S32 et float (IEEE)).

Source / Exemple :


Voir le zip.

Conclusion :


Mes connaissances étaient bonnes en VB5 mais ce programme est mon tout premier en .NET et le passage de WINSOCK à .NET (socket) est assez chiant.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
4
Date d'inscription
lundi 7 décembre 2009
Statut
Membre
Dernière intervention
7 décembre 2009

J'ai finalement cherché à comprendre plus en détail le protocole ModBus et j'ai développé mon propre serveur en C#.
J'ai déposé les sources à l'adresse : http://www.csharpfr.com/codes/SERVEUR-ESCLAVE-MODBUS-TCP-IP_50946.aspx
Peut-être que cela aidera quelqu'un d'autre.
Messages postés
13
Date d'inscription
mercredi 25 octobre 2006
Statut
Membre
Dernière intervention
6 janvier 2011

Ça fonctionne pour moi, j'utilise 7zip pour décompresser au lieu du WinZip payant. (www.7zip.org pour download)
Messages postés
1
Date d'inscription
mardi 14 mars 2006
Statut
Membre
Dernière intervention
18 novembre 2009

Bonjour,

Est ce normal que je ne puisse pas extraire ton archive ?

Merci d'avance pour ta réponse
Messages postés
3
Date d'inscription
mercredi 4 mars 2009
Statut
Membre
Dernière intervention
16 septembre 2009

Bonjour,
Désolé pour le retard du post…, mais mieux vaut tard que jamais (on se rattrape à ce que l’on peu :p).
Voici les sources du rajout de fonction que j'ai effectué :

--------------------------------------------------------------------------------
Case 4 'Lecture Multiples Registre avec la fonction 4
ReDim RetTrame(9 + Trame(MB_Def.NbDataLSB) * 2 - 1)
Array.ConstrainedCopy(Trame, 0, RetTrame, 0, 5)
RetTrame(5) = 4 + Trame(MB_Def.NbDataLSB) * 2
RetTrame(6) = Trame(MB_Def.Index)
RetTrame(7) = Trame(MB_Def.Fonction)
RetTrame(8) = Trame(MB_Def.NbDataLSB) * 2

Adresse = Trame(MB_Def.AddrMSB) * &H100 + Trame(MB_Def.AddrLSB)

For j = 0 To RetTrame(8) - 2 Step 2
RetTrame(9 + j) = ServeurMB.Item(i + 1).RegTable(j / 2 + Adresse) \ &H100
RetTrame(10 + j) = ServeurMB.Item(i + 1).RegTable(j / 2 + Adresse) And &HFF
Next

ServeurMB.Item(i + 1).NbLectures += 1
ServeurMB.Item(i + 1).NbMots += (BytesReceived + RetTrame.Length + 56) / 1000 '56 représente le nombre de mot d'entête par trames IP (28*2)

ClientMB.Item(ClientIndex).NbLectures += 1
ClientMB.Item(ClientIndex).NbMots += (BytesReceived + RetTrame.Length + 56) / 1000 '56 représente le nombre de mot d'entête par trames IP (28*2)
--------------------------------------------------------------------------------

Voila pour les infos !
J'espère que cela vous apportera de l’aide.

Bonne réception
Cordialement
JC
Messages postés
6
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
4 mai 2009

C'est le but de ce site :-)
Afficher les 22 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.