ホームページ >バックエンド開発 >PHPチュートリアル >PHP を使用して Modbus TCP データ レポートを解析および表示する方法

PHP を使用して Modbus TCP データ レポートを解析および表示する方法

王林
王林オリジナル
2023-07-17 13:19:391522ブラウズ

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 サイトの他の関連記事を参照してください。

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