Du partage vient l’abondance.

Accueil > Modbus > Serveur Modbus/TCP

Serveur Modbus/TCP

mardi 17 avril 2012, par l.lefebvre

Ci-joint le script d’un petit serveur Modbus gérant les connexions multiples à l’aide de la fonction fork.

Il nécessite le privilège d’exécution "root" afin d’ouvrir le port TCP 502 en écoute ce qui est nécessaire au service Modbus.

Quelques explications sur les grandes étapes du flux d’exécution du programme, pas à pas :

1. Vérification du niveau d’exécution "root".

2. Transformation du process en démon
Le processus se duplique, le premier process qui reste accroché au terminal se termine en retournant la valeur 0. Le second continue sont exécution indépendamment du terminal qui la lancé.

3. Mise en place des gestionnaires de signaux
Pour plus de détail : Documentation sur la gestion des signaux en Perl

signal POSIX SIGTERM


signal POSIX SIGCHLD
En affectant IGNORE comme gestionnaire du signal SICHLD on évite l’apparition de processus Zombie (c’est à dire terminé mais qui ne libère pas leurs ressources systèmes). Plus d’information.


5. Initialisation de la socket.


6. Boucle de traitement des demande de connexion
On lance un nouveau process pour chaque demande de connexion. Ainsi dans le cas d’une connexion de 3 clients simultanément sur le serveur on retrouve 4 process "mbserverd" dans le gestionnaire système : 1 par connexions + 1 gérant l’écoute des demandes de connexion.


7. Traitement des connexions Modbus/TCP

  • Le projet est maintenant présent sur github à l’adresse https://github.com/sourceperl/mbserverd. Il est possible d’obtenir la dernière version du script en utilisant Git. Pour cloner le dépôt github depuis Linux, à l’aide du logiciel git :