Modbus TCP와 통신 할 때 예외 응답을 경험하는 것은 일반적인 과제입니다. 데이터 전송의 안정성과 정확성을 보장하기 위해 개발자는 PHP에서 이러한 예외 응답을 올바르게 처리해야합니다. 이 기사는 PHP를 통해 Modbus TCP 예외 응답을 효과적으로 캡처하고 처리하여 원활한 커뮤니케이션을 보장하는 방법을 안내합니다.
Modbus TCP 프로토콜은 산업 자동화 분야에서 널리 사용됩니다. TCP/IP 프로토콜을 기반으로하며 종종 PLC와 컴퓨터 간의 통신에 사용됩니다. 프로토콜 자체의 특성으로 인해 MODBUS TCP는 시간 초과, 유효하지 않은 기능 코드 또는 데이터 주소와 같은 다양한 예외 응답에 직면 할 수 있습니다. 이러한 문제는 시스템의 안정성에 영향을 미치지 않도록 프로그래밍을 통해 개발자가 처리해야합니다.
PHP에서 Modbus TCP 예외 응답을 처리하려면 먼저 MODBUS 장치와 TCP/IP 연결을 설정해야합니다. PHP의 내장 소켓 기능을 통해 네트워크 통신을 완료 할 수 있습니다. 다음은 Modbus 장치에 연결하는 샘플 코드입니다.
$ip = "192.168.0.1"; $port = 502; $timeout = 5; $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0)); $result = socket_connect($socket, $ip, $port);
위의 코드에서는 실제 상황에 따라 $ IP 및 $ 포트를 수정해야합니다. $ 타임 아웃은 연결의 시간 초과입니다.
Modbus 장치와의 연결을 설정 한 후 특정 기능 코드를 통해 데이터를 읽고 쓸 수 있습니다. MODBUS 장치는 응답 데이터를 반환합니다. 응답에 예외 정보가 포함 된 경우 응답의 오류 코드를 기반으로 판단해야합니다. 예외 응답을 처리하기위한 샘플 코드는 다음과 같습니다.
$functionCode = 0x03; $address = 0; $length = 10; $request = pack("nnnn", 0, $functionCode, $address, $length); socket_write($socket, $request, strlen($request)); $response = socket_read($socket, 1024); if ($response !== false) { $data = unpack("ntransactionId/nprotocol/nlength/CunitCode/CfunctionCode/data", $response); $errorCode = ord($data['data'][0]); if ($errorCode != 0) { echo "Modbus TCP exception: " . $errorCode; } else { $values = array_slice($data['data'], 1); } } else { echo "Failed to read Modbus TCP response"; }
이 코드에서 요청을 전송 한 후 Modbus 장치의 응답 데이터는 Socket_read 함수를 통해 읽습니다. 응답 데이터에서 오류 코드 ErrorCode를 구문 분석하면 예외가 발생하는지 여부를 결정합니다. 오류 코드가 0이 아닌 경우 예외가 발생했음을 의미합니다.
위의 예를 통해 Modbus TCP의 예외 응답을 유연하게 처리하여 요청을 보장하는 것과 같은 오류가 발생할 때 적시에 조치를 취할 수 있습니다. MODBUS 통신의 안정성과 데이터의 정확성을 보장하기 위해 올바른 예외 처리 방법이 중요합니다.
일반적으로 PHP의 소켓 기능은 Modbus TCP 통신에 대한 안정적인 네트워크 지원을 제공합니다. 반환 된 응답 데이터를 분석하고 오류 코드를 기반으로 적절한 처리를함으로써 통신의 신뢰성과 시스템의 전반적인 성능을 효과적으로 개선 할 수 있습니다.