Класс реализует взаимодействие с ПЛК ОВЕН по протоколу Modbus TCP с учетом рекомендаций производителя по обмену данными.
composer require zoviet/owen
- Поддержка списка адресов
- Поддержка единого интерфейса для чтения и записи в регистры
- Поддержка чтения массивов
- Поддержка прямого и обратного порядка бит
- Запись и чтение Coils через байтовые слова
- Поддержка внутренней адресации OWEN
'IP'=>'127.0.0.1', //IP-адрес PLC
'Port'=>502, //Порт
'UnitID'=>1, //ID устройства
'Endianess'=>'LOW_ENDIAN', //Порядок байт по умолчанию: обратный порядок: 'BIG_ENDIAN'
// простой вариант, в этом случае используется адресация Modbus TCP
$owen = new \owen\Connect(); //с настройками коннекта по умолчанию
$owen2 = new \owen\Connect(['IP'=>'192.168.0.4']); //с другим IP устройства
$temp = $owen->pull([4,2,'ReadRegister','REAL']); //считывание переменной типа REAL из четвертого регистра Modbus (2 байта)
$owen->push([6,2,'WriteRegister','REAL',105]); //запись числа 105 в шестой регистр Modbus (2 байта)
$owen->close();
//Вариант с заданием переменных для считывания и записи с адресацией MODBUS (порядок не важен)
$vars = [
'temp'=> [2,2,'ReadRegister','REAL'],
'button_status'=> [0,1,'WriteCoil', 'BOOL','','Сообщение: считано состояние кнопки'], //5-ым элементом можно задать комментарий для логов
'button_push'=> [0,1,'WriteCoil', 'BOOL',true,'Сообщение: нажата кнопка'], //4-ый параметр - передаваемое значение по умолчанию при записи
'data'=>[15,80,'ReadArray','WORD'],
];
$connects = [
'IP'=>'127.0.0.1', //IP-адрес PLC
'Port'=>502, //Порт
'UnitID'=>1, //ID устройства
'Endianess'=>'LOW_ENDIAN', //Порядок байт по умолчанию: обратный порядок: 'BIG_ENDIAN'
];
$connect = new \owen\Connect($connects, $vars);
$temp = $connect->pull('temp'); //получение температуры
$button = $connect->pull('button_status'); //получение статуса кнопки
$connect->push('button_push'); //нажатие кнопки с использованием значения из $vars (true), установленное по умолчанию
$connect->push('button_push',false); //отпускание кнопки, в этом случае значение по умолчанию игнорируется
$data = $connect->pull('data'); //получение массива данных
var_dump($connect::$messages); //сообщения класса
var_dump($connect::$errors); //ошибки класса
$connect->close();
//с адресацией переменных ОВЕН: таблицей адресов, где первое значение массива - внутренняя переменная [var]
$vars2 = [
'Address1'=>[0,1,'WriteCoil', 'BOOL', true],
'Address2'=>[0,2,'WriteCoil','BOOL',true],
'Address3'=>[0,3,'WriteCoil','BOOL',true,'Обнуление массы датчика',],
'Address4'=>[0,8,'WriteCoil','BOOL','FALSE'],
'Address5'=>[0,9,'WriteCoil','BOOL','FALSE'], //конец первого адреса ПЛК
'Address6'=>[1,2,'ReadRegister','REAL'], //занимает 2,3,4 и 5 адреса ПЛК, 1 и 2 адреса модбаса
'Address7'=>[2,2,'ReadRegister','REAL'], //5 на 4 не делится, поэтому стартуем с 8 адреса ПЛК и 4 адреса модбаса, занимает 4 и 5 адреса модбаса и регистры до 0B (11) внутренние, следующий адрес модбаса -6
'Address8'=>[3,2,'ReadRegister','REAL'], //внутренний адрес - 15, адрес модбаса следующий 8
'Address9'=>[4,2,'ReadRegister','DWORD'], //с 16 адреса внутреннего
'Address10'=>[5,1,'WriteRegister','WORD',1],
'Address11'=>[6,1,'WriteRegister','WORD',15],
];
$connect2 = new \owen\Connect($connects, $vars2,true);
var_dump($connect2->vars);
$connect2->close();