Modbus TCPプロトコルは、産業自動化の分野で広く使用されており、通常、コンピューターネットワークのデバイス間のデータ交換に使用されます。 PHPプログラミングでは、Modbus TCPを使用してデバイスデータの読み取りと書き込みです。ただし、TCP/IPプロトコルに基づくMODBUS TCPは、データ送信中のネットワーク遅延やデータ送信中の通信品質などの要因の影響を受ける可能性があり、伝送効率に影響します。この記事では、MODBUS TCPデータ送信の効率を最適化するためのいくつかのPHPプログラミング手法を共有し、対応するコードの例を提供します。
複数のレジスタからデータの読み取りまたは書き込みにより、通信の数を減らすことができ、それによりModbus TCPの伝送効率が向上します。一般的に使用される関数コードには、16(複数のレジスタの書き込み)と23(複数のレジスタを読み取る)が含まれます。以下は、バッチ書き込み操作を実行する方法を示すPHPコードの例です。
$ ip = "192.168.1.100"; // modbus tcp device $ port = 502のIPアドレス。 // modbus tcpデバイスのポート番号 $量= count($ data); $ socket = socket_create(af_inet、sock_stream、sol_tcp); socket_connect($ socket、$ ip、$ port); //複数のレジスタコマンドを本き込み、modbus tcp device $ request = pack( "nnncn"、0x0000、0x0010、$量、$量 * 2、$量 * 2)に送信します。 foreach($ data as $ value){ $ request。= pack( "n"、$ value); } socket_write($ socket、$ request); $ response = socket_read($ socket、1024); // modbus TCPデバイスSocket_Close($ socket)の応答データを得るします。
適切なタイムアウトを設定することは、ModBus TCP通信を実行するときに効率的なデータ送信を確保するための鍵です。合理的なタイムアウトは、過剰なネットワーク遅延のために全体的な効率に影響を与えることを避けることができます。以下は、タイムアウト時間を設定するPHPコードの例です。
$ ip = "192.168.1.100"; // modbus tcp device $ port = 502のIPアドレス。 // modbus tcpデバイスのポート番号$ Timeout = 2; //タイムアウトを22番に設定します$ socket = socket_create(af_inet、sock_stream、sol_tcp); socket_connect($ socket、$ ip、$ port); socket_set_option($ socket、sol_socket、so_rcvtimeo、array( 'sec' => $ timeout、 'usec' => 0)); //受信タイムアウトタイムソケットsocket_set_option($ socket、sol_socket、so_sndtimeo、array( 'sec' => $ timeout、 'usec' => 0)); //送信タイムアウト時間を設定します// modbus tcpコマンドを送信し、応答socket_close($ socket)を扱うちます。
同時リクエストには、複数のリクエストを同時に送信し、通常はマルチスレッドまたはマルチプロセスを通じて実装される応答を待つことを指します。 Modbus TCP通信では、同時リクエストを使用すると、データ送信効率が大幅に向上する可能性があります。マルチスレッドを使用して同時リクエストを実装するPHPコードの例は次のとおりです。
$ ip = "192.168.1.100"; // modbus tcp device $ port = 502のIPアドレス。 // modbus tcpデバイスのポート番号//複数のスレッドを作成して、modbus tcpコマンド$ threads = array()を送信します。 for($ i = 0; $ i <10; $ i ++){ $ thread = newスレッド(function()use($ ip、$ port){ $ socket = socket_create(af_inet、sock_stream、sol_tcp); socket_connect($ socket、$ ip、$ port); // modbus tcpコマンドを送信し、応答socket_close($ socket)を扱うちます。 }); $ thread-> start(); $スレッド[] = $スレッド; } //すべてのスレッドが終了するのを扱うちます($スレッドとして$スレッド){ $スレッド - > join(); }
上記の最適化手法を実装することにより、ModBus TCPプロトコルを使用するときにPHPのデータ送信効率を効果的に改善できます。ただし、実際のアプリケーションでは、データ伝送の信頼性とセキュリティを確保するために、ネットワークの安定性や通信プロトコルの合理性などの要因を考慮する必要があることに注意してください。