ホームページ  >  記事  >  バックエンド開発  >  PHP と Modbus TCP: 分散デバイス制御を実現する方法についてのディスカッション

PHP と Modbus TCP: 分散デバイス制御を実現する方法についてのディスカッション

王林
王林オリジナル
2023-07-18 10:25:151354ブラウズ

PHP と Modbus TCP: 分散デバイス制御を実現する方法に関する議論

概要:
モノのインターネットの急速な発展に伴い、分散デバイス制御が重要な課題となっています。この記事では、PHP と Modbus TCP プロトコルを使用して分散デバイス制御を実装する方法と、読者がその方法をよりよく理解できるようにコード例を作成する方法について説明します。

  1. Modbus TCP の概要:
    Modbus TCP は、TCP/IP ネットワーク上のデバイス間の通信を実装する、Modbus プロトコルに基づく通信方式です。 Modbus TCP は、データ交換に標準 Modbus レジスタを使用し、デバイスへのデータの読み取りと書き込みをサポートします。
  2. PHP と Modbus TCP の統合:
    PHP は、強力なネットワークとデータベースのサポートを備えた非常に人気のあるサーバーサイド スクリプト言語です。 PHP を使用して Modbus TCP デバイスと通信すると、柔軟性と使いやすさが実現します。

準備:
コードを書き始める前に、Modbus TCP ライブラリがインストールされていることを確認する必要があります。次のコマンドを使用して Linux システムにインストールできます:

sudo apt-get install php7.4-mbstring
  1. Modbus デバイスに接続します:
    まず、Modbus デバイスへの接続を確立する必要があります。以下は、Modbus デバイスに接続するための PHP 関数の例です:
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;
}

$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パラメータは書き込まれる値に設定されます。

  1. Modbus デバイスとの接続を閉じます:
    Modbus デバイスとの通信が完了したら、確立された接続を閉じる必要があります。以下は、接続を閉じるサンプル関数です:
function disconnectModbusDevice($socket) {
    socket_close($socket);
}

完全なサンプル コードは次のとおりです:

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

概要:
この記事では、PHP と Modbus の使用方法を紹介します。分散デバイス制御を実現する TCP プロトコル。 Modbus デバイスへの接続、レジスタ値の読み取り、レジスタ値の書き込み、接続の終了などの主要な機能のコード例を提供します。これらの例を使用することで、読者は PHP と Modbus TCP をよりよく理解し、活用して分散デバイス制御を実装することができます。

以上がPHP と Modbus TCP: 分散デバイス制御を実現する方法についてのディスカッションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。