Использование библиотеки PascalScada |
22.05.2012 Сергей Иванчиков |
В начале 2012 года появились на нашем предприятии программируемые реле Овен ПР110. Прошу не принять это за рекламу, но изделие лично мне очень понравилось — запрограммировать простую задачу можно буквально за несколько минут и цена весьма привлекательна. Ну и недавно заказывая очередную партию, я увидел, что появился в прайсе модуль ПР-МИ485, позволяющий использовать ПР110 с промышленной шиной RS485 и протоколом Modbus. Появилась идея прикрутить это дело к компьютеру, чтобы удаленно считывать и записывать информацию.
Описывать подробную схему подключения тут я не буду, это можно прочитать в документации на приборы, а схематично это выглядит так:
Реле ПР110 программируется в среде Овен Лоджик.В качестве языка программирования среда использует язык функциональных блоков.
В примере будет показан только один выходной канал реле. Вся программа необходимая для общения по сети представлена на рисунке:
В программе использованы блок входной сетевой переменной с адресом $200 и преобразователь в булевское значение. В сетевых настройках реле выставлена скорость 115200, адрес прибора 1, без бита паритета. На этом настройка реле закончена.
Информации по Modbus в сети предостаточно, например википедия.
Раз протокол достаточно распространен и хорошо описан, значит под него должно быть много библиотек и компонентов. И вот тут я наткнулся на засаду, библиотек для Pascal не было, а та которая была найдена работала только под Windows.
На третий день поисков наткнулся на библиотеку элементов PascalScada. Читаю документацию по нему и вижу — что библиотека кроссплатформенная, поддерживает Windows(32 and 64 bits), Linux (32 and 64 bits), FreeBSD (32 bits) содержит драйвера для последовательных портов, присутвует поддержка Modbus RTU, ModBus TCP и других режимов.
Скачал, пробую установить, установилась. Появились вкладки с дополнительными компонентами:
Переходим на вкладку PascalScada Ports, на этой вкладке находится компонент TserialPortDriver, бросаем его на форму и настраиваем скорость передачи данных (BaudRate), указаваем порт назначения (COMPort), длину байта (DataBits), бит паритета (paridade), количество стоп бит (StopBits). Конкретно для данного примера это будет :
Реле ПР110 поддерживает Modbus RTU и Modbus ASCII и распознает их автоматически. На вкладке PascalScada Protocols выбираем компонент TmodBusRTUDriver бросаем на форму и настраиваем:
Далее добавляем на форму два компонента TPLCTagNumber, находящийся на вкладке PascalScada Tags. Один из них настроим на чтение состояния входов реле, а второй компонент настроим на запись регистра, для управления.
В обоих компонентах TPLCTagNumber будут одинаковые настройки, сначала опишу их:
А теперь разное, для чтения состояния входов будем использовать функцию Modbus 3. Дискретные входы находятся в регистре с адресом $100, поэтому указываем:
Для записи:
Я добавил еще кнопку на форму для управления выходным каналом реле и компонент THMITrackBar, для отображения состояния входов реле. В THMITrackBar нужно выставить свойство PLCTag = PLCTagNumber2.
Код для кнопки:
procedure TForm1.Button2Click(Sender: TObject); begin if PLCTagNumber1.Value = 0 then PLCTagNumber1.Value := 1 else PLCTagNumber1.Value := 0; end;
Собираем проект, все работает.
Выходной канал реле 2 при нажатии на кнопку включается и выключается, при подаче сигнала на вход реле изменяется положение TrackBar.
Вот и все. Назначение некоторых элементов остались для меня непонятными. Надеюсь со временем разберусь и с ними.
Всем удачи.