ホームページ >バックエンド開発 >PHPチュートリアル >PHP経由でModbus TCPの一括読み書きを実装する方法

PHP経由でModbus TCPの一括読み書きを実装する方法

王林
王林オリジナル
2023-07-17 15:54:121894ブラウズ

PHP を介して Modbus TCP のバッチ読み取りおよび書き込みを実現する方法

1. Modbus TCP の概要
Modbus TCP は、TCP/IP プロトコルに基づいた産業用通信プロトコルであり、一般的に使用されています。産業用制御機器通信分野。 Modbus TCPプロトコルを利用することで、機器間でのデータの読み書きを実現します。この記事では、PHP 言語を使用して Modbus TCP のバッチ読み取りおよび書き込みを実装する方法を紹介し、対応するコード例を添付します。

2. 環境の準備
PHP コードの作成を開始する前に、対応する PHP 拡張機能と環​​境をインストールする必要があります。 PHP および Modbus TCP 関連の拡張機能がサーバーにインストールされていることを確認してください。インストールが完了したら、phpinfo() 関数を使用して、PHP が正常に実行されているかどうか、および Modbus TCP 拡張機能がロードされているかどうかを確認できます。

3. Modbus TCP 接続と通信
PHP では、modbus_new_tcp() 関数を使用して Modbus TCP 接続を作成できます。この関数は 2 つのパラメーターを受け入れます。最初のパラメーターは Modbus TCP サーバーの IP アドレス、2 番目のパラメーターは Modbus TCP サーバーのポート番号です。以下はサンプル コードです:

$modbus = modbus_new_tcp("192.168.1.10", 502);
if (!$modbus) {
    die('Failed to create Modbus TCP connection');
}

作成が成功したら、modbus_read_input_registers() 関数を使用してデータを読み取ることができます。この関数は 4 つのパラメータ、つまり Modbus TCP 接続、スレーブ アドレス、レジスタ アドレス、およびその数を受け入れます。読みます。以下に入力レジスタを読み出すサンプルコードを示します。

$data = modbus_read_input_registers($modbus, 1, 0, 10);
if ($data === false) {
    die('Failed to read input registers');
}
print_r($data);

上記のコードにより、スレーブアドレス 1 のデバイスのレジスタ 0 から 10 個のレジスタのデータを読み出し、結果を出力することができます。

デバイスに書き込む必要がある場合は、modbus_write_single_register() 関数を使用できます。この関数は、Modbus TCP 接続、スレーブ アドレス、レジスタ アドレス、および書き込むデータの 4 つのパラメータを受け取ります。以下は、単一のレジスタに書き込むためのサンプル コードです。

$success = modbus_write_single_register($modbus, 1, 0, 100);
if (!$success) {
    die('Failed to write single register');
}

上記のコードでは、データ 100 をスレーブ アドレス 1 のデバイスのレジスタ 0 に書き込むことができます。

4. バッチ読み取りおよび一括書き込み
実際のプロジェクトでは、複数のデバイスに対して同時にデータを読み取りおよび書き込みする必要がある場合があります。 modbus_read_input_registers_batch() 関数と modbus_write_single_register_batch() 関数を使用して、バッチ操作を実装できます。

modbus_read_input_registers_batch() 関数は、Modbus TCP 接続、デバイス アドレス、およびレジスタ アドレスの配列の 3 つのパラメータを受け入れます。以下は、入力レジスタのバッチ読み取りのサンプル コードです。

$addresses = [0, 1, 2, 3, 4];
$data = modbus_read_input_registers_batch($modbus, 1, $addresses);
if (!$data) {
    die('Failed to read input registers batch');
}
print_r($data);

modbus_write_single_register_batch() 関数は、Modbus TCP 接続、デバイス アドレス、レジスタとデータの配列の 3 つのパラメータを受け取ります。以下は、単一レジスタへのバッチ書き込みのサンプル コードです。

$registersAndData = [
    [0, 100],
    [1, 200],
    [2, 300],
    [3, 400],
];
$success = modbus_write_single_register_batch($modbus, 1, $registersAndData);
if (!$success) {
    die('Failed to write single register batch');
}

上記のコードを使用すると、デバイスのグループのレジスタを同時に読み書きできます。

5. 概要
上記の紹介とサンプル コードを通じて、PHP 言語を使用して Modbus TCP のバッチ読み取りおよび書き込みを実装するのが比較的簡単であることがわかります。対応する環境を用意し、Modbus TCP関連のPHP拡張機能を利用するだけで、機器間の通信やデータ操作を簡単に実現できます。

以上がPHP経由でModbus TCPの一括読み書きを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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