Глава 3:Библиотека интерфейсных блок-функций для пакета Driver Toolkit

В этой главе:

Описание библиотеки интерфейсных блок-функций - drivers.lib

Назначение

В состав этой библиотеки входят блок-функции , которые позволяют реализовать интерфейс между стандартными пользовательскими объектами RTWin и драйверами пакета Driver Toolkit .

Состав библиотеки и описание выполняемых функций

После инсталляции Driver Toolkit к перечню библиотек , доступных в редакторе объектов objectedit, добавится библиотека drivers , которая появиться отдельным пунктом в окне выбора типа блок- функций . Механизм работы с блок - функциями описан в [1]. Вид окна выбора блок- функций drivers показан на рисунке .

В состав библиотеки входят следующие блок- функции :

Установка инициативных аналоговых каналов (Proxy_ai)

Назначение :

передает драйверу номера каналов , которым устанавливается статус инициативных и значение proxy .Данное рroxy драйвер должен будет послать клиенту , в случае возникновения события по аналоговому каналу, которому установлен статус инициативного . Подробнее этот механизм будет описан позже .

Параметры :

Driver - имя драйвера ;

Drv_global_name - имя запускаемой копии драйвера.

h_first - номер первого канала группы со статусом инициативный .

h_last - номер последнего канала группы со статусом инициативный .

Входы :

рroxy - значение proxy ,которое нужно передать драйверу

Выходы :

Отсутствуют.

Установка инициативных дискретных каналов ( Proxy_di)

Назначение :

передает драйверу номера дискретных каналов, которым устанавливается статус инициативных и значение proxy . Данное рroxy драйвер должен будет послать клиенту , в случае возникновения события по дискретному каналу, которому определен статус инициативного .

Параметры :

Driver - имя драйвера ;

drv_global_name - имя запускаемой копии драйвера.

h_first - номер первого канала группы со статусом инициативный .

h_last - номер последнего канала группы со статусом инициативный .

Входы :

Proxy - значение proxy , которое нужно передать драйверу .

Выходы :

Отсутствуют .

Механизм инициативных каналов , с использованием proxy , состоит в следующем :

в обычном режиме драйвер передает данные клиенту по запросу последнего . Но в случае , если клиенту необходимо получать данные только при их изменении и сразу по возникновению измненения , то используется механизм с инициативными каналами .

При старте объект должен создать proxy при помощи стандартной блок - функции Proxy , а при помощи блок - функций Proxy_ai и Proxy_di драйверу передается значение proxy_pid и определяются каналы драйвера , которые должны быть инициативными . Тогда сразу же по изменению данных в канале драйвер пошлет proxy объекту и тот запросит данные у драйвера.

Получить данные по одному каналу аналогового ввода (Read_single_AI )

Назначение :

чтение одиночного канала аналогового ввода .

Параметры :

Driver - имя драйвера ;

Driver_copy - имя запускаемой копии драйвера.

Numb_channel - номер канала аналогового канала .

Входы :

Event - инициирует чтение канала .

Выходы :

Data - значение считанного канала

Получить данные по одному каналу дискретного ввода (Read_single_DI )

Назначение :

чтение одиночного канала дискретного ввода .

Параметры :

Driver - имя драйвера ;

Driver_copy - имя запускаемой копии драйвера.

Numb_channel - номер канала дискретного канала .

Входы :

Event - инициирует чтение канала .

Выходы :

Data - значение считанного канала

   Получить данные по группе каналов аналогового ввода (Read_group_AI )

Назначение :

чтение группы каналов аналогового ввода . Количество одновременно считываемых каналов не более 16 .

Параметры :

Driver - имя драйвера ;

Driver_copy - имя запускаемой копии драйвера.

Channel_first - номер первого канала группы .

Channel_last - номер последнего канала группы .

Входы :

Event - инициирует чтение группы каналов .

Выходы :

Data[01 - Data[16] - значения считанных аналоговых данных по группе каналов .

Получить данные по группе каналов дискретного ввода (Read_group_DI )

Назначение :

чтение группы каналов дискретного ввода . Количество одновременно считываемых каналов не более 16 .

Параметры :

Driver - имя драйвера ;

Driver_copy - имя запускаемой копии драйвера.

Channel_first - номер первого канала группы .

Channel_last - номер последнего канала группы .

Входы :

Event - инициирует чтение группы каналов .

Выходы :

Data[01 - Data[15] - значения считанных дискретных данных по группе каналов .

Получить данные по группе счетно -импульсных каналов (Read_CNT )

Назначение :

чтение группы счетно-импульсных каналов . Количество одновременно считываемых каналов не более 16 .

Параметры :

Driver - имя драйвера ;

Driver_copy - имя запускаемой копии драйвера.

Channel_first - номер первого канала группы .

Channel_last - номер последнего канала группы .

Входы :

Event - инициирует чтение группы каналов .

Выходы :

Data[n11 - Data[n2] - значения считанных счетно-импульсных данных по группе каналов .

Поcлать данные в канал аналогового вывода ( Write_AO )

Назначение :

передача значения в канал аналогового выхода .

Параметры :

Driver - имя драйвера ;

Driver_copy - имя запускаемой копии драйвера.

Numb_channel - номер канала аналогового вывода .

Входы :

Datat - значение которое нужно передать на аналоговый выход .

Выходы :

kod - значение кода операции передачи данных .

  Поcлать данные в канал дискретного вывода (Write_DO)

Назначение :

передача значения в канал дискретного выхода .

Параметры :

Driver - имя драйвера ;

Driver_copy - имя запускаемой копии драйвера.

Numb_channel - номер канала дискретного вывода .

Входы :

Datat - значение которое нужно передать на дискретный выход .

Выходы :

kod - значение кода операции передачи данных .

  Получить адрес области данных с результатами преобразований (GetDMAbuffer)

Назначение :

функция возвращает адрес буфера , в котором хранятся данные считывания каналов в режиме DMA.

Параметры :

Driver - имя драйвера ;

Driver_copy - имя запускаемой копии драйвера.

Входы :

Event - инициирует выполнение функции .

Выходы :

buffer - указатель на область разделяемой памяти .

Завершение работы драйвера (Term_drv )

Назначение :

это вспомогательная функция , которая позволяет по завершению работы объекта снимать драйвера .

Параметры :

Driver - имя драйвера ;

Driver_copy - имя запускаемой копии драйвера.

Входы :

Event - инициирует выполнение функции .

Выходы :

Отсутствует .

Пример проекта c использованием интерфейсных блок-функций в CACSD RTWin

 

Для использования готовых драйверов пакета Driver Toolkit в проекте CACSD RTWin ( при условии , что пакет инсталлирован ) необходимо :

Общее описание демо-проекта

 В примере будет по шагам описано создание проекта , в котором необходимо получать данные от датчиков через многофункциональную плату УСО PCL-818L фирмы Advantech и подавать управляющие воздействия на исполнительные механизмы через выходы этой же платы .

Опрос ведется по 6 аналоговым входам ; 6 - дискретным входам , с отображением данных на информационной панели оператора .

Управляющие воздействия с операторской панели управления подаются на 1 аналоговый выход и 6 дискретных выходов .

Метод опрос аналоговых входов выбран через механизм прерываний , номер прерывания 5 , дискретные каналы опрашиваются по внутреннему таймеру драйвера с частотой 1/c .

Дополнительно определяем пятый канал дискретного ввода , как инициативный .

Базовый адрес платы - 300h.

Интерфейсная панель оператора показана на рисунке .

Порядок создания проекта

Шаг 1:Конфигурирование драйверов

Открыв новый проект DemoDrv в окне схемного редактора , как это описано в [1] , через меню Edit вызываем редактор drvedit для конфигурирования драйверов . В окне редактора выбираем драйвер 818L и нажимаем кнопку Insert . В диалоговом окне вводится имя копии драйвера , по которому драйвер можно идентифицировать в проекте . Это значение используется в большинстве блок - функций в качестве второго параметра.

Вид интерфейсного окна показан на рисунке .

В нашем примере это единственный драйвер , поэтому дальше можно переходить к конфигурированию драйвера под проект .

Выбираем копию драйвера с именем 818L_1 и нажимаем кнопку

Edit , чтобы попасть в окно конфигурирования драйвера .

Конфигурационный файл разбит на секции , которые отображены в окне в виде вершин дерева , а конкретные Параметры находяться внутри секций и доступны , если шелкнуть курсором на имя
секции .

Для начала выберем секцию Base и введем значение базового адреса , а затем определим таким же образом остальные Параметры . Интерфейс показан на рисунке .

Интерес в плане редактирования параметров представляет секция
Channel , в которой перечислены все каналы и описаны их Параметры . Интерфейсное окно отличается тем , что редактируются Параметры канала группой . Типичными параметрами для каналов являются значения шкал , которые необходимы для приведения данных к физической величине .

В нашем примере мы выберем :

Шкалу датчиков : 0 - 5 мА ;

Шкалу платы : 0 - 5 В ;

Физическую : 0 - 100 %С .

Окно редактирования показано на рисунке .

Для завершения работы с сохранением результатов редактирования нажмите кнопку Done , для отказа - Cancel .

После редактирования в файле rtstart.cfg проекта DemoDrv появится строка для запуска драйвера 818L .

818L -p DemoDrv -n 818L_1 -t 818L

А конфигурация для данного драйвера находится в конфигурационном файле : /usr/rtw/apps/DemoDrv/drv/818L/818L_1/driver.inf

Шаг 2:Создание объекта RTWin для связи с драйвером

 .На этом этапе надо создать объект RTWin , который бы получал данные от драйвера и передавал бы дальше другим объектам проекта , в частности в панель визуализации . А также принимал данные с панели управления и посылал драйверу . Для этого необходимо вызвать редактор объектов objectedit и создать новый объект ( в нашем примере ObjDrv ) .

Для получения данных с панели управления вводим в объект семь
блок- функций типа Input , шесть с типом type_byte для дискретных сигналов и один с типом type_float для аналогового выхода .

Для передачи полученных данных от драйвера в другие объекты вводим в объект ObjDrv блок-функцию OutPut ( типа array type_byte[16 ] ) - для дискретных входов и блок -функцию OutPut (типа array type_float [16] ) - для аналоговых входов . Использование выходов с типом данных в виде массива не обязательно и введено для компактности . Можно на каждый канал ввести свою блок - функцию OutPut .

Введем также стандартные блок - функции Initialize - для выполнения инициализационных действий при старте объекта и Time r - для осуществления периодичного опроса драйвера .

Структура объекта показана на рисунке .

Шаг 3

Теперь , исходя из требования , что дискретный канал номер 5 - должен быть инициативным , необходимо ввести в объект стандартную блок-функцию Proxy и блок-функцию Proxy_di .

Значение с выхода proxy_pid блока Proxy подать на вход proxy блока Proxy_di .

В параметрах функции Proxy_di необходимо установить значения показанные на рисунке .

Шаг 4

Для чтения 5 дискретных каналов вводим блок-функцию read_group_DI .
Для чтения одного инициативного канала вводим блок-функцию read_single_DI .

Для чтения 6 аналоговых входов вводим блок-функцию read_group_AI

Параметры функций задаются однотипно , отличие только в номерах каналов .

Вход функций группового чтения trigger соединяем с выходом timer_event блока Timer , а вход trigger функции чтения одного дискретного канала N 5 соединяем с выходом proxy_event блока Proxy . Таким образом первая будут запрашивать данные у драйвера по таймеру , а последняя - по приходу proxy .

Выходы блок- функций опроса драйвера соединяем с соответствующими каналами выходных блоков .

Рисунок показывает фрагмент конфигурирования .

Шаг 5

Для передачи управляющих сигналов драйверу вводим шесть блок-функций записи в дискретный канал write_DO и одну блок-функцию записи в аналоговый канал write_AO

Параметры функций устанавливаются аналогично блок- функциям чтения . Входы функций соединяем с выходами соответствующих блок-функций типа Input .

Пример показан на рисунке .

Шаг 6

После определения всех связей в объекте ObjDrv выполняется операция make build и далее результаты редактирования сохраняюся .

Шаг 7:Описание панели визуализации

 Для реализации интерфейсной части проекта необходимо создать в

Application Builder объект Picture , в котором разместим :

После сохранения созданного интерфейсного окна , вид которого показан в начале главы , можно сконфигурировать в RTWin объект типа cpanel с именем DemoPaneDrv .

Шаг 8

Вызвав редактор ресурсов контрольной панели Control Panel Editor , импортируем картинку созданную в Application Builder и описываем необходимые входные и выходные каналы , в соответствии с требованиями нашего проекта .

Для этого в окне редактора панелей вводим :

После этого в редакторе панелей привязываем каналы к ресурсам виджетов панели , устанавливая однозначное соответствие между значениями данных в канале и соответствующими ресурсами панели отображения для входных каналов и - наоборот для
выходных каналов .
Рисунок показан ниже.

Шаг 9:Конфигурирование проекта

 После создания объекта ObjDrv и панели отображения DemoPaneDrv - надо вставить их в схему проекта при помощи редактора схем и создать все необходимые связи между объектами , что и показано на рисунке .

Шаг 10

 Необходимо выполнить в редакторе схем пункт Make Application для завершения создания демо - проекта . При успешном выполнении этого шага - проект готов к запуску на выполнение .

  

Шаг 11

 Запускаем на выполнение демо - проект прямо из редактора схем , открыв меню Application и выбрав пункт Run .

В случае отсутствия платы УСО PCL-818L можно использовать эмулятор драйвера drvemul . Для этого в конфигурационном файле

Rtstart.cfg в строке на запуск драйвера надо заменить 818L на drvemul .

Пример :
drvemul -p DemoDrv -n 818L_1 -t 818L

Пример выполнения демо - проекта

 После запуска на выполнение демо-проекта на мониторе появятся два окна . Одно - это панель управления проекта , а второе - окно универсального графического эмулятора драйвера .

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

Окно эмулятора драйвера в режиме эмуляции выходного аналогового канала платы PCL-818L .

Окно эмулятора драйвера в режиме эмуляции входных дискретных каналов платы PCL-818L .

Режимы эмулятора выбираются посредством закладок .

Проект DemoDrv поставляется в составе пакета Driver Toolkit и может служить примером создания пользователем собственных приложений .