MODBUS TCP 프로토콜은 산업 자동화 분야에서 널리 사용되며 일반적으로 컴퓨터 네트워크의 장치 간 데이터 교환에 사용됩니다. PHP 프로그래밍에서 Modbus TCP는 장치 데이터를 읽고 쓰는 데 사용됩니다. 그러나 TCP/IP 프로토콜을 기반으로 한 MODBUS TCP는 데이터 전송 중 네트워크 지연 및 통신 품질과 같은 요소에 의해 영향을받을 수 있으며, 이는 전송 효율에 영향을 미칩니다. 이 기사는 MODBUS TCP 데이터 전송의 효율성을 최적화하고 해당 코드 예제를 제공하기 위해 몇 가지 PHP 프로그래밍 기술을 공유합니다.
여러 레지스터에서 데이터를 배치하거나 쓰면 커뮤니케이션 수가 줄어들어 MODBUS TCP의 전송 효율이 향상됩니다. 일반적으로 사용되는 기능 코드에는 16 (여러 레지스터 쓰기) 및 23 (여러 레지스터 읽기)이 포함됩니다. 다음은 배치 쓰기 작업을 수행하는 방법을 보여주는 PHP 코드 예제입니다.
$ IP = "192.168.1.100"; // modbus tcp 장치의 IP 주소 $ port = 502; // modbus tcp 장치의 포트 번호 // 3 레지스터 데이터의 배치 쓰기 $ data = array (100, 200, 300); $ 수량 = count ($ data); $ socket = socket_create (af_inet, sock_stream, sol_tcp); socket_connect ($ socket, $ ip, $ port); // 여러 레지스터 명령을 작성하여 MODBUS TCP 장치로 보냅니다. $ request = pack ( "nnncn", 0x0000, 0x0010, $ votenity, $ Quantity * 2, $ Quantity * 2); foreach ($ data as $ value) { $ request. = pack ( "n", $ value); } socket_write ($ socket, $ request); $ response = socket_read ($ socket, 1024); // modbus tcp device socket_close ($ socket)의 응답 데이터를 가져옵니다.
Modbus TCP 통신을 수행 할 때 효율적인 데이터 전송을 보장하는 데 적절한 시간 초과를 설정하는 것이 중요합니다. 합리적인 시간 초과는 과도한 네트워크 지연으로 인해 전반적인 효율성에 영향을 미치지 않을 수 있습니다. 다음은 시간 초과 시간을 설정하는 PHP 코드 예제입니다.
$ IP = "192.168.1.100"; // modbus tcp 장치의 IP 주소 $ port = 502; // modbus tcp 장치의 포트 번호 $ timeout = 2; // 타임 아웃을 2 초로 설정 $ 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 통신에서 동시 요청을 사용하면 데이터 전송 효율이 크게 향상 될 수 있습니다. 다음은 Multithreading을 사용하여 동시 요청을 구현하는 PHP 코드 예입니다.
$ IP = "192.168.1.100"; // modbus tcp 장치의 IP 주소 $ port = 502; // MODBUS TCP 장치의 포트 번호 // MODBUS TCP 명령 $ 스레드를 보내기 위해 여러 스레드를 만듭니다. for ($ i = 0; $ i <10; $ i ++) { $ stread = new Thread (function () 사용 ($ ip, $ port) { $ socket = socket_create (af_inet, sock_stream, sol_tcp); socket_connect ($ socket, $ ip, $ port); // modbus tcp 명령을 보내고 응답 socket_close ($ socket)을 기다립니다. }); $ thread-> start (); $ 스레드 [] = $ 스레드; } // 모든 스레드가 foreach ($ 스레드 AS $ 스레드)를 끝내기를 기다립니다. $ stread-> join (); }
위의 최적화 기술을 구현하면 Modbus TCP 프로토콜을 사용할 때 PHP의 데이터 전송 효율을 효과적으로 향상시킬 수 있습니다. 그러나 실제 애플리케이션에서는 데이터 전송의 신뢰성과 보안을 보장하기 위해 네트워크 안정성 및 통신 프로토콜의 합리성과 같은 요소를 고려해야합니다.