Dans une architecture de communication, Modbus TCP est généralement initié par le maître et a répondu à la commande par l'esclave. Cette structure permet à la station maître de centraliser efficacement le contrôle de plusieurs équipements industriels, réalisant ainsi l'acquisition centralisée de données et la télécommande.
<?php class ModbusTCP { private $socket; public function __construct($ip, $port) { $this-> socket = socket_create (af_inet, sock_stream, sol_tcp); socket_connect ($ this-> socket, $ ip, $ port); } Fonction publique ReadRegisters ($ slaveid, $ regrinsAddress, $ registerCount) { $ buffer = pack ("nnnn", $ slaveid, 0x03, $ regrinsAddress, $ registerCount); socket_send ($ this-> socket, $ buffer, strlen ($ buffer), 0); $ réponse = ''; $ bytes = socket_recv ($ this-> socket, $ réponse, 2048, msg_waitall); $ registres = déball ("n *", substr ($ réponse, 9)); retour $ registres; } fonction publique WriteRegister ($ slaveid, $ regrinsAddress, $ registervalue) { $ buffer = pack ("nnn", $ slaveid, 0x06, $ regrinsAddress, $ registerValue); socket_send ($ this-> socket, $ buffer, strlen ($ buffer), 0); } Fonction publique __Drestruct () { socket_close ($ this-> socket); } } // Utilisez l'exemple $ modbus = new ModBustCP ('192.168.0.1', 502); $ registres = $ modbus-> readregisters (1, 0, 10); foreach ($ registres as $ adresse => $ value) { echo "enregistrez $ adresse: $ valeur \ n"; } $ modbus-> writeRegister (1, 0, 100);
Ce code montre une classe ModBustCP de base, qui implémente la connexion avec les esclaves, les registres de lecture et d'écriture via la fonction de socket php. En usage réel, les développeurs n'ont qu'à initialiser l'instance de classe et à transmettre le périphérique IP et le port pour réaliser l'interaction des données de l'équipement industriel.
Références:
[1] Spécification du protocole d'application Modbus V1.1b3 - https://modbus.org/docs/Modbus_Application_Protocol_V1_1b3.pdf