ModBus TCPは、TCP/IPプロトコルに基づく産業通信プロトコルであり、産業制御の分野で、特にデバイス間のデータ送信で広く使用されています。 ModBus TCPプロトコルを使用することにより、デバイス間のリアルタイムデータの読み取りと書き込みを実現できます。この記事では、PHP言語を使用してModbus TCPのバッチ読み取り操作を実装し、関連するコードの例を添付して、開発者が関連する機能を迅速に実装できるようにする方法を詳細に紹介します。
PHPコードの作成を開始する前に、関連するPHP拡張機能と環境がインストールされていることを確認する必要があります。サーバーにPHPがインストールされており、ModBus TCPプロトコルの拡張機能をサポートしていることを確認してください。インストールが完了した後、PHPの実行ステータスと、PHPINFO()関数を使用して関連する拡張機能がロードされるかどうかを確認できます。
PHPでは、modbus TCP接続の作成は通常、modbus_new_tcp()関数を使用します。この関数には、ModBus TCPサーバーのIPアドレスとポート番号の2つのパラメーターが必要です。接続を作成するためのサンプルコードは次のとおりです。
$modbus = modbus_new_tcp("192.168.1.10", 502);
if (!$modbus) {
die('Failed to create Modbus TCP connection');
}
接続を正常に作成した後、データ読み取りにmodbus_read_input_registers()関数を使用できます。この関数には、Modbus TCP接続、スレーブアドレス、登録アドレス、および読み取り数の4つのパラメーターが必要です。入力レジスタの読み取り例は次のとおりです。
$data = modbus_read_input_registers($modbus, 1, 0, 10);
if ($data === false) {
die('Failed to read input registers');
}
print_r($data);
上記のコードを介して、マシンアドレス1のデバイスのレジスタ0から始まる10のレジスタのデータを読み取り、結果を出力できます。
実際のアプリケーションでは、複数のデバイスを同時に読み取りまたは書き込む必要がある場合があります。この目的のために、PHPはmodbus_read_input_registers_batch()関数とmodbus_single_register_batch()関数を提供します。これはバッチ操作をサポートします。入力レジスタのバッチ読み取りのための例コードは次のとおりです。
$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');
}
これらのコードを通じて、複数のデバイスで操作を読み取りおよび書き込むことができ、データ操作の効率を大幅に改善できます。
上記の紹介とサンプルコードを通じて、PHP言語を介してModbus TCPのバッチ読み取り操作を実装することが非常にシンプルで効率的であることがわかります。関連する開発環境を準備し、適切なPHP拡張機能を使用する限り、デバイス間の通信およびデータ操作を正常に達成できます。この記事が、Modbus TCPプロトコルをよりよく理解し、使用して、産業制御システムのデータ処理能力を改善できることを願っています。