PHP を使用して Modbus TCP データ レポートを解析および表示する方法
産業用制御システムでは、Modbus TCP はデバイス間のデータ交換に一般的に使用される通信プロトコルです。アプリケーションを開発する場合、Modbus TCP データ レポートを解析して表示することは非常に重要なタスクです。この記事では、PHP プログラミング言語を使用して Modbus TCP データ レポートを解析および表示する方法をコード例とともに紹介します。
1. 準備
始める前に、PHP がインストールされていて、基本的な開発環境があることを確認する必要があります。同時に、Modbus TCP サーバーの IP アドレスとポート番号をパラメーターとしてスクリプトに提供する必要があります。
2. 接続してデータを読み取る
まず、PHP のソケット関数を使用して Modbus TCP サーバーとの接続を確立し、データを読み取るリクエストを送信する必要があります。以下は簡単なサンプル コードです。
<?php // Modbus TCP服务器的IP地址和端口号 $server_ip = '192.168.1.100'; $server_port = 502; // 创建一个socket连接 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket === false) { die("无法创建socket连接: " . socket_strerror(socket_last_error()) . " "); } // 连接到Modbus TCP服务器 $result = socket_connect($socket, $server_ip, $server_port); if ($result === false) { die("无法连接到Modbus TCP服务器: " . socket_strerror(socket_last_error($socket)) . " "); } // 向服务器发送读取数据的请求 $result = socket_write($socket, $request, strlen($request)); if ($result === false) { die("无法发送请求到Modbus TCP服务器: " . socket_strerror(socket_last_error($socket)) . " "); } // 读取服务器返回的数据 $response = socket_read($socket, 1024); if ($response === false) { die("无法从Modbus TCP服务器读取数据: " . socket_strerror(socket_last_error($socket)) . " "); } // 关闭socket连接 socket_close($socket); // 解析并展示数据 $data = unpack('C*', $response); foreach ($data as $value) { echo $value . ' '; } ?>
上記のコードは、PHP のソケット関連関数を使用して、Modbus TCP サーバーに接続し、そこからデータを読み取ります。リクエストとレスポンスのデータはバイナリ形式で送受信されるため、解析して特定の値を取得するには unpack 関数を使用する必要があることに注意してください。
3. データの解析と表示
Modbus TCP サーバーから返されたデータを取得した後、それを解析し、特定の形式でユーザーに表示する必要があります。以下に簡単なサンプル コードを示します。
<?php // 假设Modbus TCP服务器返回的数据为: $data = array(1, 0, 2, 0, 3, 0, 4, 0, 5, 0); // 解析并展示数据 for ($i = 0; $i < count($data) - 1; $i += 2) { $value = ($data[$i] << 8) + $data[$i+1]; echo "寄存器 " . ($i / 2 + 1) . ": " . $value . " "; } ?>
上記のコードは、受信したデータを符号なし 16 ビット整数に変換し、レジスタ順に表示します。
4. 完全なプログラムの例
接続コードと解析コードを組み合わせると、Modbus TCP データ レポートを解析して表示する完全なプログラムを作成できます。以下は簡単な例です:
<?php // Modbus TCP服务器的IP地址和端口号 $server_ip = '192.168.1.100'; $server_port = 502; // 创建一个socket连接 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket === false) { die("无法创建socket连接: " . socket_strerror(socket_last_error()) . " "); } // 连接到Modbus TCP服务器 $result = socket_connect($socket, $server_ip, $server_port); if ($result === false) { die("无法连接到Modbus TCP服务器: " . socket_strerror(socket_last_error($socket)) . " "); } // 向服务器发送读取数据的请求 $result = socket_write($socket, $request, strlen($request)); if ($result === false) { die("无法发送请求到Modbus TCP服务器: " . socket_strerror(socket_last_error($socket)) . " "); } // 读取服务器返回的数据 $response = socket_read($socket, 1024); if ($response === false) { die("无法从Modbus TCP服务器读取数据: " . socket_strerror(socket_last_error($socket)) . " "); } // 关闭socket连接 socket_close($socket); // 解析并展示数据 $data = unpack('C*', $response); for ($i = 0; $i < count($data) - 1; $i += 2) { $value = ($data[$i] << 8) + $data[$i+1]; echo "寄存器 " . ($i / 2 + 1) . ": " . $value . " "; } ?>
上記のコードを使用すると、Modbus TCP サーバーに接続し、そこにあるデータ レポートを読み取って表示できます。
概要
PHP を使用して Modbus TCP データ レポートを解析および表示するには、接続、データの読み取り、解析という 3 つの手順が必要です。この記事では、読者の役に立つ簡単なサンプル コードを紹介します。実際のアプリケーションでは、特定の要件やデータ形式に応じて、さらに多くの処理や調整が必要になる場合があります。
以上がPHP を使用して Modbus TCP データ レポートを解析および表示する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。