>백엔드 개발 >PHP 튜토리얼 >PHP 및 Modbus TCP: 멀티스레드 데이터 전송 애플리케이션 구축

PHP 및 Modbus TCP: 멀티스레드 데이터 전송 애플리케이션 구축

PHPz
PHPz원래의
2023-07-17 15:06:101704검색

PHP 및 Modbus TCP: 다중 스레드 데이터 전송 애플리케이션 구축

Modbus TCP는 서로 다른 장치 간에 데이터를 전송하는 데 일반적으로 사용되는 산업용 통신 프로토콜입니다. PHP에서는 강력한 네트워크 프로그래밍 기능과 멀티스레드 지원을 사용하여 효율적인 멀티스레드 데이터 전송 애플리케이션을 구축할 수 있습니다.

코드 작성을 시작하기 전에 먼저 서버와 클라이언트의 Modbus 장치가 연결되어 있고 네트워크 매개변수가 구성되어 있는지 확인해야 합니다. 다음으로 간단한 Modbus TCP 데이터 전송 애플리케이션을 작성해 보겠습니다.

먼저, 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 장치의 레지스터 데이터를 읽고 쓰기 위해 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();
}

위 코드에서는 두 가지 데이터 전송 작업을 정의합니다. 하나는 0 주소를 읽는 것입니다. 처음 10개 레지스터 다른 하나는 주소 10에 있는 레지스터 데이터를 100으로 쓰는 것입니다. foreach 루프를 사용하여 여러 스레드를 생성하여 동시에 작업을 실행합니다. 각 스레드에서 if 문을 사용하여 작업이 읽기인지 쓰기인지 확인하고 해당 함수를 호출하여 작업을 수행합니다. 마지막으로 Join 메소드를 사용하여 모든 스레드가 실행을 마칠 때까지 기다립니다.

위의 코드 예제를 통해 PHP 및 Modbus TCP 프로토콜을 사용하여 멀티스레드 데이터 전송 애플리케이션을 구축하는 방법을 확인할 수 있습니다. 이 애플리케이션은 동시에 여러 데이터 전송 작업을 처리하여 데이터 전송의 효율성과 응답 속도를 향상시킬 수 있습니다.

요약하자면, PHP와 Modbus TCP의 조합을 사용하면 강력한 산업용 데이터 전송 애플리케이션을 구축할 수 있습니다. PHP의 네트워크 프로그래밍 기능과 멀티스레딩 지원을 활용하여 효율적인 데이터 전송 및 처리를 달성할 수 있습니다. 이 글이 도움이 되셨으면 좋겠습니다. 읽어주셔서 감사합니다!

위 내용은 PHP 및 Modbus TCP: 멀티스레드 데이터 전송 애플리케이션 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.