ホームページ  >  記事  >  バックエンド開発  >  PHP および Modbus TCP: マルチスレッド データ転送アプリケーションの構築

PHP および Modbus TCP: マルチスレッド データ転送アプリケーションの構築

PHPz
PHPzオリジナル
2023-07-17 15:06:101671ブラウズ

PHP と Modbus TCP: マルチスレッド データ転送アプリケーションの構築

Modbus TCP は、さまざまなデバイス間でデータを転送するために一般的に使用される産業用通信プロトコルです。 PHP では、その強力なネットワーク プログラミング機能とマルチスレッド サポートを使用して、効率的なマルチスレッド データ転送アプリケーションを構築できます。

コードを書き始める前に、まずサーバーとクライアントの Modbus デバイスが接続され、ネットワーク パラメーターが設定されていることを確認する必要があります。次に、簡単な Modbus TCP データ送信アプリケーションを作成してみましょう。

まず、composer を使用して modbusphp ライブラリをインストールする必要があります。コマンド ライン ターミナルを開き、プロジェクト ディレクトリに切り替えて、次のコマンドを実行します:

composer require evilnapsis/modbusphp

次に、Modbus ライブラリを PHP コードに導入します。新しいファイル modbus.php を作成できます:

<?php
require 'vendor/autoload.php';

use ModbusModbusTcpClient;

$host = '192.168.1.100'; // Modbus设备的IP地址
$port = 502; // Modbus设备的端口号

$client = new ModbusTcpClient($host, $port);

// 读取寄存器数据
function readRegisters($startAddress, $quantity)
{
  global $client;
  $response = $client->readHoldingRegisters($startAddress, $quantity);
  if ($response->isSuccess()) {
    return $response->getData();
  } else {
    return false;
  }
}

// 写入寄存器数据
function writeRegister($address, $value)
{
  global $client;
  $response = $client->writeSingleRegister($address, $value);
  return $response->isSuccess();
}

上記のコードでは、Modbus ライブラリを導入し、ModbusTcpClient インスタンスを作成しました。また、Modbus デバイスのレジスタ データを読み書きするための 2 つの関数 readRegisters と writeRegister も定義しました。

次に、同じファイル内に data_transfer.php という名前のマルチスレッド データ転送アプリケーションの例を作成できます。

<?php
require 'modbus.php';

// 定义多个线程的数据传输任务
$tasks = [
  [
    'startAddress' => 0,
    'quantity' => 10,
    'callback' => function ($data) {
      // 处理读取到的数据
      var_dump($data);
    }
  ],
  [
    'address' => 10,
    'value' => 100,
    'callback' => function ($success) {
      // 处理写入结果
      var_dump($success);
    }
  ]
];

// 创建多个线程并发执行任务
$threads = [];
foreach ($tasks as $task) {
  $thread = new Threaded();
  $thread['task'] = $task;
  $threads[] = $thread;
}

// 执行数据传输任务
foreach ($threads as $thread) {
  $task = $thread['task'];
  if (isset($task['startAddress'])) {
    $data = readRegisters($task['startAddress'], $task['quantity']);
    $task['callback']($data);
  } else if (isset($task['address'])) {
    $success = writeRegister($task['address'], $task['value']);
    $task['callback']($success);
  }
}

// 等待所有线程执行完毕
foreach ($threads as $thread) {
  $thread->join();
}

上のコードでは、2 つのデータ転送を定義します。1 つのタスクは読み取りです。 0 番地から 10 個のレジスタデータを書き込む方法と、10 番地から 100 番地までのレジスタデータを書き込む方法です。 foreach ループを使用して複数のスレッドを作成し、タスクを同時に実行します。各スレッドでは、if ステートメントを使用してタスクが読み取りか書き込みかを判断し、対応する関数を呼び出してタスクを実行します。最後に、join メソッドを使用して、すべてのスレッドの実行が完了するのを待ちます。

上記のコード例を通じて、PHP と Modbus TCP プロトコルを使用してマルチスレッド データ送信アプリケーションを構築する方法を確認できます。このアプリケーションは複数のデータ送信タスクを同時に処理できるため、データ送信の効率と応答速度が向上します。

要約すると、PHP と Modbus TCP を組み合わせて使用​​すると、強力な産業用データ送信アプリケーションを構築できます。 PHP のネットワーク プログラミング機能とマルチスレッド サポートを活用することで、効率的なデータ送信と処理を実現できます。この記事があなたのお役に立てば幸いです、読んでいただきありがとうございます!

以上がPHP および Modbus TCP: マルチスレッド データ転送アプリケーションの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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