Публикации Разное

Использование библиотеки 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). Конкретно для данного примера это будет :

  • BaudRate = 115200
  • COMPort = ttyS4
  • DataBits = db8
  • paridade = none
  • StopBit = sb1
  • Active = true

Реле ПР110 поддерживает Modbus RTU и Modbus ASCII и распознает их автоматически. На вкладке PascalScada Protocols выбираем компонент TmodBusRTUDriver бросаем на форму и настраиваем:

  • CommunicationPort = SerialPortDriver1

Далее добавляем на форму два компонента TPLCTagNumber, находящийся на вкладке PascalScada Tags. Один из них настроим на чтение состояния входов реле, а второй компонент настроим на запись регистра, для управления.

В обоих компонентах TPLCTagNumber будут одинаковые настройки, сначала опишу их:

  • ProtocolDriver = ModBusRTUDriver1
  • PLCStation = 1 (адрес реле в сети)

А теперь разное, для чтения состояния входов будем использовать функцию Modbus 3. Дискретные входы находятся в регистре с адресом $100, поэтому указываем:

  • memAdress = 256 ($100)
  • memReadFunction = 3

Для записи:

  • memAdress = 512 ($200)
  • memWriteFunction = 6

Я добавил еще кнопку на форму для управления выходным каналом реле и компонент 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.

Вот и все. Назначение некоторых элементов остались для меня непонятными. Надеюсь со временем разберусь и с ними.

Всем удачи.

Актуальные версии
FPC3.0.0release
Lazarus1.6release
MSE4.2release
fpGUI1.4.1release
наши спонсоры ;)