>백엔드 개발 >PHP 튜토리얼 >PHP 및 Modbus TCP: 분산 장치 제어를 달성하는 방법에 대한 토론

PHP 및 Modbus TCP: 분산 장치 제어를 달성하는 방법에 대한 토론

王林
王林원래의
2023-07-18 10:25:151365검색

PHP 및 Modbus TCP: 분산 장치 제어를 달성하는 방법에 대한 논의

개요:
사물 인터넷의 급속한 발전으로 분산 장치 제어가 중요한 과제가 되었습니다. 이 기사에서는 PHP 및 Modbus TCP 프로토콜을 사용하여 분산 장치 제어를 구현하는 방법과 독자가 방법을 더 잘 이해할 수 있도록 코드 예제를 작성하는 방법을 살펴봅니다.

  1. Modbus TCP 소개:
    Modbus TCP는 TCP/IP 네트워크의 장치 간 통신을 구현하는 Modbus 프로토콜을 기반으로 하는 통신 방법입니다. Modbus TCP는 데이터 교환을 위해 표준 Modbus 레지스터를 사용하여 장치에 대한 데이터 읽기 및 쓰기를 지원합니다.
  2. Modbus TCP와 PHP 통합:
    PHP는 강력한 네트워크 및 데이터베이스 지원을 갖춘 매우 널리 사용되는 서버 측 스크립팅 언어입니다. PHP를 사용하여 Modbus TCP 장치와 통신하면 유연성과 사용 편의성이 제공됩니다.

준비:
코드 작성을 시작하기 전에 Modbus TCP 라이브러리가 설치되어 있는지 확인해야 합니다. 다음 명령을 사용하여 Linux 시스템에 설치할 수 있습니다:

sudo apt-get install php7.4-mbstring
  1. Modbus 장치에 연결:
    먼저 Modbus 장치에 대한 연결을 설정해야 합니다. 다음은 Modbus 장치에 연결하기 위한 PHP 함수의 예입니다.
function connectModbusDevice($ip, $port) {
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($socket === false) {
        die("无法创建套接字");
    }

    $result = socket_connect($socket, $ip, $port);
    if ($result === false) {
        die("无法连接到Modbus设备");
    }

    return $socket;
}

$ip$port 매개변수를 올바른 IP로 설정했는지 확인하세요. Modbus 장치 주소 및 포트. $ip$port参数设置为正确的Modbus设备的IP地址和端口。

  1. 读取寄存器的值:
    一旦连接到Modbus设备,我们可以使用Modbus TCP协议读取设备上的寄存器值。以下是一个示例函数,用于读取一个寄存器的值:
function readModbusRegister($socket, $registerAddress) {
    $request = "" . 
        pack('n', $registerAddress) . "";
    
    socket_write($socket, $request, strlen($request));
    $response = socket_read($socket, 2048);
    
    // 解析响应数据,获取寄存器的值
    $registerValue = unpack('n', substr($response, 9, 2))[1];
    
    return $registerValue;
}

请确保将$registerAddress参数设置为要读取的寄存器的地址。

  1. 写入寄存器的值:
    除了读取寄存器的值外,我们还可以使用Modbus TCP协议将数据写入设备的寄存器中。以下是一个示例函数,用于写入一个寄存器的值:
function writeModbusRegister($socket, $registerAddress, $registerValue) {
    $request = "" .
        pack('n', $registerAddress) . pack('n', $registerValue);
    
    socket_write($socket, $request, strlen($request));
    $response = socket_read($socket, 2048);
    
    // 解析响应数据,检查写入操作是否成功
    $statusCode = unpack('n', substr($response, 7, 2))[1];
    
    if ($statusCode != 6) {
        die("写入寄存器失败");
    }
}

请确保将$registerAddress参数设置为要写入的寄存器的地址,将$registerValue

    레지스터 값 읽기:
      Modbus 장치에 연결되면 Modbus TCP 프로토콜을 사용하여 장치의 레지스터 값을 읽을 수 있습니다. 다음은 레지스터 값을 읽는 함수의 예입니다.

    1. function disconnectModbusDevice($socket) {
          socket_close($socket);
      }
    2. $registerAddress 매개변수를 읽으려는 레지스터의 주소로 설정했는지 확인하세요.

      레지스터 값 쓰기:

      레지스터 값을 읽는 것 외에도 Modbus TCP 프로토콜을 사용하여 장치 레지스터에 데이터를 쓸 수도 있습니다. 다음은 레지스터 값을 쓰는 함수의 예입니다.


      $modbusIp = "192.168.1.100";
      $modbusPort = 502;
      
      $modbusDevice = connectModbusDevice($modbusIp, $modbusPort);
      
      $registerAddress = 100;
      $registerValue = readModbusRegister($modbusDevice, $registerAddress);
      echo "寄存器 $registerAddress 的值为: $registerValue" . PHP_EOL;
      
      $registerAddress = 200;
      $registerValue = 500;
      writeModbusRegister($modbusDevice, $registerAddress, $registerValue);
      echo "成功将值 $registerValue 写入寄存器 $registerAddress" . PHP_EOL;
      
      disconnectModbusDevice($modbusDevice);

      $registerAddress 매개변수를 쓰려는 레지스터의 주소로 설정하고 $registerValue를 설정했는지 확인하세요. code> 매개변수는 작성하려는 값으로 설정됩니다. 🎜🎜🎜Modbus 장치와의 연결 종료: 🎜Modbus 장치와의 통신이 완료되면 설정된 연결을 종료해야 합니다. 연결을 끊는 샘플 함수는 다음과 같습니다. 🎜🎜rrreee🎜전체 샘플 코드는 다음과 같습니다. 🎜rrreee🎜요약: 🎜이 글에서는 PHP와 Modbus TCP 프로토콜을 사용하여 분산 장치 제어를 구현하는 방법을 소개합니다. Modbus 장치 연결, 레지스터 값 읽기, 레지스터 값 쓰기, 연결 닫기 등 주요 기능에 대한 코드 예제를 제공합니다. 이러한 예제를 사용하면 독자는 PHP 및 Modbus TCP를 더 잘 이해하고 활용하여 분산 장치 제어를 구현할 수 있습니다. 🎜

위 내용은 PHP 및 Modbus TCP: 분산 장치 제어를 달성하는 방법에 대한 토론의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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