커뮤니케이션 아키텍처에서 Modbus TCP는 일반적으로 마스터에 의해 시작되며 슬레이브의 명령에 응답합니다. 이 구조를 통해 마스터 스테이션은 여러 산업 장비의 제어를 효율적으로 중앙 집중화하여 중앙 집중식 데이터 수집 및 원격 제어를 실현할 수 있습니다.
<?php class ModbusTCP { private $socket; public function __construct($ip, $port) { $this-> socket = socket_create (af_inet, sock_stream, sol_tcp); socket_connect ($ this-> socket, $ ip, $ port); } 공개 함수 readRegisters ($ slaveId, $ registerAddress, $ registerCount) { $ buffer = pack ( "nnnn", $ slaveId, 0x03, $ registerAddress, $ RegisterCount); socket_send ($ this-> 소켓, $ 버퍼, strlen ($ buffer), 0); $ response = ''; $ bytes = socket_recv ($ this-> socket, $ response, 2048, msg_waitall); $ registers = 풀 ( "n*", substr ($ response, 9)); 반환 $ 레지스터; } Public Function WriteRegister ($ slaveId, $ registerAddress, $ registerValue) { $ buffer = pack ( "nnn", $ slaveId, 0x06, $ registerAddress, $ registerValue); socket_send ($ this-> 소켓, $ 버퍼, strlen ($ buffer), 0); } 공개 함수 __destruct () { socket_close ($ this-> socket); } } // 예제 $ modbus = new modbustcp ( '192.168.0.1', 502); $ registers = $ modbus-> readRegisters (1, 0, 10); foreach ($ registers as $ asddress => $ value) { Echo "Register $ 주소 : $ value \ n"; } $ modbus-> WriteRegister (1, 0, 100);
이 코드는 기본 ModBustCP 클래스를 보여줍니다.이 클래스는 노예와의 연결을 구현하고 PHP 소켓 기능을 통해 레지스터를 읽고 쓰십시오. 실제로 사용하면 개발자는 클래스 인스턴스를 초기화하고 장치 IP 및 포트를 전달하여 산업 장비의 데이터 상호 작용을 실현하면됩니다.
참조 :
[1] Modbus 응용 프로그램 프로토콜 사양 v1.1b3 - https://modbus.org/docs/modbus_application_protocol_v1_1b3.pdf