Maison  >  Article  >  développement back-end  >  PHP et Modbus TCP : discussion sur les méthodes permettant de contrôler les appareils distribués

PHP et Modbus TCP : discussion sur les méthodes permettant de contrôler les appareils distribués

王林
王林original
2023-07-18 10:25:151355parcourir

PHP et Modbus TCP : Discussion sur les méthodes permettant de contrôler les appareils distribués

Vue d'ensemble :
Avec le développement rapide de l'Internet des objets, le contrôle des appareils distribués est devenu un défi important. Cet article explorera comment utiliser PHP et le protocole Modbus TCP pour implémenter le contrôle de périphériques distribués, et comment écrire des exemples de code pour aider les lecteurs à mieux comprendre la méthode.

  1. Introduction à Modbus TCP :
    Modbus TCP est une méthode de communication basée sur le protocole Modbus, qui met en œuvre la communication entre les appareils sur un réseau TCP/IP. Modbus TCP utilise des registres Modbus standard pour l'échange de données, prenant en charge la lecture et l'écriture de données sur l'appareil.
  2. Intégration PHP avec Modbus TCP :
    PHP est un langage de script côté serveur très populaire avec une solide prise en charge du réseau et des bases de données. L'utilisation de PHP pour communiquer avec les appareils Modbus TCP offre flexibilité et facilité d'utilisation.

Préparation :
Avant de commencer à écrire le code, nous devons nous assurer que la bibliothèque Modbus TCP est installée. Il peut être installé sur un système Linux à l'aide de la commande suivante :

sudo apt-get install php7.4-mbstring
  1. Connexion à un appareil Modbus :
    Tout d'abord, nous devons établir une connexion avec l'appareil Modbus. Voici un exemple de fonction PHP pour se connecter à un appareil Modbus :
function connectModbusDevice($ip, $port) {
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($socket === false) {
        die("无法创建套接字");
    }

    $result = socket_connect($socket, $ip, $port);
    if ($result === false) {
        die("无法连接到Modbus设备");
    }

    return $socket;
}

Veuillez vous assurer de définir les paramètres $ip et $port sur la bonne adresse IP de l'adresse et le port de l'appareil Modbus. $ip$port参数设置为正确的Modbus设备的IP地址和端口。

  1. 读取寄存器的值:
    一旦连接到Modbus设备,我们可以使用Modbus TCP协议读取设备上的寄存器值。以下是一个示例函数,用于读取一个寄存器的值:
function readModbusRegister($socket, $registerAddress) {
    $request = "" . 
        pack('n', $registerAddress) . "";
    
    socket_write($socket, $request, strlen($request));
    $response = socket_read($socket, 2048);
    
    // 解析响应数据,获取寄存器的值
    $registerValue = unpack('n', substr($response, 9, 2))[1];
    
    return $registerValue;
}

请确保将$registerAddress参数设置为要读取的寄存器的地址。

  1. 写入寄存器的值:
    除了读取寄存器的值外,我们还可以使用Modbus TCP协议将数据写入设备的寄存器中。以下是一个示例函数,用于写入一个寄存器的值:
function writeModbusRegister($socket, $registerAddress, $registerValue) {
    $request = "" .
        pack('n', $registerAddress) . pack('n', $registerValue);
    
    socket_write($socket, $request, strlen($request));
    $response = socket_read($socket, 2048);
    
    // 解析响应数据,检查写入操作是否成功
    $statusCode = unpack('n', substr($response, 7, 2))[1];
    
    if ($statusCode != 6) {
        die("写入寄存器失败");
    }
}

请确保将$registerAddress参数设置为要写入的寄存器的地址,将$registerValue

    Lire la valeur du registre :
      Une fois connecté à l'appareil Modbus, nous pouvons lire la valeur du registre sur l'appareil en utilisant le protocole Modbus TCP. Voici un exemple de fonction pour lire la valeur d'un registre :

    1. function disconnectModbusDevice($socket) {
          socket_close($socket);
      }
    2. Veuillez vous assurer de définir le paramètre $registerAddress sur l'adresse du registre que vous souhaitez lire.

      Écrire la valeur du registre :

      En plus de lire la valeur du registre, nous pouvons également utiliser le protocole Modbus TCP pour écrire des données dans le registre de l'appareil. Voici un exemple de fonction pour écrire la valeur d'un registre :


      $modbusIp = "192.168.1.100";
      $modbusPort = 502;
      
      $modbusDevice = connectModbusDevice($modbusIp, $modbusPort);
      
      $registerAddress = 100;
      $registerValue = readModbusRegister($modbusDevice, $registerAddress);
      echo "寄存器 $registerAddress 的值为: $registerValue" . PHP_EOL;
      
      $registerAddress = 200;
      $registerValue = 500;
      writeModbusRegister($modbusDevice, $registerAddress, $registerValue);
      echo "成功将值 $registerValue 写入寄存器 $registerAddress" . PHP_EOL;
      
      disconnectModbusDevice($modbusDevice);

      Veuillez vous assurer de définir le paramètre $registerAddress sur l'adresse du registre dans lequel vous souhaitez écrire et $registerValue Le paramètre code> est défini sur la valeur à écrire. 🎜🎜🎜Fermez la connexion avec l'appareil Modbus : 🎜Après avoir terminé la communication avec l'appareil Modbus, nous devons fermer la connexion établie. Voici un exemple de fonction pour fermer la connexion : 🎜🎜rrreee🎜L'exemple de code complet est le suivant : 🎜rrreee🎜Résumé : 🎜Cet article présente comment utiliser le protocole PHP et Modbus TCP pour implémenter le contrôle des appareils distribués. Nous fournissons des exemples de code pour les fonctions clés telles que la connexion à un appareil Modbus, la lecture des valeurs de registre, l'écriture des valeurs de registre et la fermeture de la connexion. En utilisant ces exemples, les lecteurs peuvent mieux comprendre et utiliser PHP et Modbus TCP pour implémenter le contrôle distribué des appareils. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn