zoviet / owen
Реализация Modbus TCP для ПЛК ОВЕН
dev-master
2021-04-11 16:08 UTC
Requires
This package is auto-updated.
Last update: 2024-10-29 06:06:12 UTC
README
Owen: класс работы с контроллерами OWEN по Modbus TCP
================================
Класс реализует взаимодействие с ПЛК ОВЕН по протоколу 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();