Heim  >  Artikel  >  Backend-Entwicklung  >  PHP und Modbus TCP: Diskussion über Methoden zur verteilten Gerätesteuerung

PHP und Modbus TCP: Diskussion über Methoden zur verteilten Gerätesteuerung

王林
王林Original
2023-07-18 10:25:151355Durchsuche

PHP und Modbus TCP: Diskussion über Methoden zur verteilten Gerätesteuerung

Übersicht:
Mit der rasanten Entwicklung des Internets der Dinge ist die verteilte Gerätesteuerung zu einer wichtigen Herausforderung geworden. In diesem Artikel wird untersucht, wie Sie PHP und das Modbus TCP-Protokoll verwenden, um eine verteilte Gerätesteuerung zu implementieren, und wie Sie Codebeispiele schreiben, um den Lesern ein besseres Verständnis der Methode zu ermöglichen.

  1. Einführung in Modbus TCP:
    Modbus TCP ist eine auf dem Modbus-Protokoll basierende Kommunikationsmethode, die die Kommunikation zwischen Geräten in einem TCP/IP-Netzwerk implementiert. Modbus TCP verwendet Standard-Modbus-Register für den Datenaustausch und unterstützt das Lesen und Schreiben von Daten auf das Gerät.
  2. PHP-Integration mit Modbus TCP:
    PHP ist eine sehr beliebte serverseitige Skriptsprache mit starker Netzwerk- und Datenbankunterstützung. Die Verwendung von PHP zur Kommunikation mit Modbus TCP-Geräten bietet Flexibilität und Benutzerfreundlichkeit.

Vorbereitung:
Bevor wir mit dem Schreiben des Codes beginnen, müssen wir sicherstellen, dass die Modbus TCP-Bibliothek installiert ist. Es kann mit dem folgenden Befehl in einem Linux-System installiert werden:

sudo apt-get install php7.4-mbstring
  1. Verbindung zu einem Modbus-Gerät herstellen:
    Zuerst müssen wir eine Verbindung zum Modbus-Gerät herstellen. Hier ist ein Beispiel einer PHP-Funktion zum Herstellen einer Verbindung mit einem Modbus-Gerät:
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;
}

Bitte stellen Sie sicher, dass die Parameter $ip und $port auf die richtige IP von eingestellt sind die Modbus-Geräteadresse und den Port. $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

    Lesen Sie den Registerwert:
      Sobald wir mit dem Modbus-Gerät verbunden sind, können wir den Registerwert auf dem Gerät mithilfe des Modbus-TCP-Protokolls lesen. Hier ist eine Beispielfunktion zum Lesen des Werts eines Registers:

    1. function disconnectModbusDevice($socket) {
          socket_close($socket);
      }
    2. Bitte stellen Sie sicher, dass Sie den Parameter $registerAddress auf die Adresse des Registers setzen, das Sie lesen möchten.

      Schreiben Sie den Wert des Registers:

      Zusätzlich zum Lesen des Werts des Registers können wir auch das Modbus TCP-Protokoll verwenden, um Daten in das Register des Geräts zu schreiben. Hier ist eine Beispielfunktion zum Schreiben des Werts eines Registers:


      $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);

      Bitte stellen Sie sicher, dass Sie den Parameter $registerAddress auf die Adresse des Registers, in das Sie schreiben möchten, und auf $registerValue setzen Der Parameter code> wird auf den zu schreibenden Wert gesetzt. 🎜🎜🎜Schließen Sie die Verbindung mit dem Modbus-Gerät: 🎜Nach Abschluss der Kommunikation mit dem Modbus-Gerät sollten wir die bestehende Verbindung schließen. Hier ist eine Beispielfunktion zum Schließen der Verbindung: 🎜🎜rrreee🎜Der vollständige Beispielcode lautet wie folgt: 🎜rrreee🎜Zusammenfassung: 🎜In diesem Artikel wird erläutert, wie Sie PHP und das Modbus TCP-Protokoll verwenden, um eine verteilte Gerätesteuerung zu implementieren. Wir bieten Codebeispiele für Schlüsselfunktionen wie das Herstellen einer Verbindung zu einem Modbus-Gerät, das Lesen von Registerwerten, das Schreiben von Registerwerten und das Schließen der Verbindung. Mithilfe dieser Beispiele können Leser PHP und Modbus TCP besser verstehen und nutzen, um eine verteilte Gerätesteuerung zu implementieren. 🎜

Das obige ist der detaillierte Inhalt vonPHP und Modbus TCP: Diskussion über Methoden zur verteilten Gerätesteuerung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn