В этой главе:
В состав этой библиотеки входят блок-функции , которые позволяют реализовать интерфейс между стандартными пользовательскими объектами 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 - инициирует выполнение функции .
Выходы :
Отсутствует .
Для использования готовых драйверов пакета Driver Toolkit в проекте CACSD RTWin ( при условии , что пакет инсталлирован ) необходимо :
В примере будет по шагам описано создание проекта , в котором необходимо получать данные от датчиков через многофункциональную плату УСО PCL-818L фирмы Advantech и подавать управляющие воздействия на исполнительные механизмы через выходы этой же платы .
Опрос ведется по 6 аналоговым входам ; 6 - дискретным входам , с отображением данных на информационной панели оператора .
Управляющие воздействия с операторской панели управления подаются на 1 аналоговый выход и 6 дискретных выходов .
Метод опрос аналоговых входов выбран через механизм прерываний , номер прерывания 5 , дискретные каналы опрашиваются по внутреннему таймеру драйвера с частотой 1/c .
Дополнительно определяем пятый канал дискретного ввода , как инициативный .
Базовый адрес платы - 300h.
Интерфейсная панель оператора показана на рисунке .
Открыв новый проект 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 - для осуществления периодичного опроса драйвера .
Структура объекта показана на рисунке .
Теперь , исходя из требования , что дискретный канал номер 5 - должен быть инициативным , необходимо ввести в объект стандартную блок-функцию Proxy и блок-функцию Proxy_di .
Значение с выхода proxy_pid блока Proxy подать на вход proxy блока Proxy_di .
В параметрах функции Proxy_di необходимо установить значения показанные на рисунке .
Для чтения 5 дискретных каналов
вводим блок-функцию read_group_DI
.
Для чтения одного инициативного
канала вводим блок-функцию read_single_DI .
Для чтения 6 аналоговых входов вводим блок-функцию read_group_AI
Параметры функций задаются однотипно , отличие только в номерах каналов .
Вход функций группового чтения trigger соединяем с выходом timer_event блока Timer , а вход trigger функции чтения одного дискретного канала N 5 соединяем с выходом proxy_event блока Proxy . Таким образом первая будут запрашивать данные у драйвера по таймеру , а последняя - по приходу proxy .
Выходы блок- функций опроса драйвера соединяем с соответствующими каналами выходных блоков .
Рисунок показывает фрагмент конфигурирования .
Для передачи управляющих сигналов драйверу вводим шесть блок-функций записи в дискретный канал write_DO и одну блок-функцию записи в аналоговый канал write_AO
Параметры функций устанавливаются аналогично блок- функциям чтения . Входы функций соединяем с выходами соответствующих блок-функций типа Input .
Пример показан на рисунке .
После определения всех связей в объекте ObjDrv выполняется операция make build и далее результаты редактирования сохраняюся .
Шаг 7:Описание панели визуализации
Для реализации интерфейсной части проекта необходимо создать в
Application Builder объект Picture , в котором разместим :
После сохранения созданного интерфейсного окна , вид которого показан в начале главы , можно сконфигурировать в RTWin объект типа cpanel с именем DemoPaneDrv .
Вызвав редактор ресурсов контрольной панели Control Panel Editor , импортируем картинку созданную в Application Builder и описываем необходимые входные и выходные каналы , в соответствии с требованиями нашего проекта .
Для этого в окне редактора панелей вводим :
После этого в редакторе панелей
привязываем каналы к ресурсам
виджетов панели , устанавливая
однозначное соответствие между
значениями данных в канале и
соответствующими ресурсами панели
отображения для входных каналов и -
наоборот для
выходных каналов .
Рисунок показан ниже.
Шаг 9:Конфигурирование проекта
После создания объекта ObjDrv и панели отображения DemoPaneDrv - надо вставить их в схему проекта при помощи редактора схем и создать все необходимые связи между объектами , что и показано на рисунке .
Необходимо выполнить в редакторе схем пункт Make Application для завершения создания демо - проекта . При успешном выполнении этого шага - проект готов к запуску на выполнение .
Запускаем на выполнение демо - проект прямо из редактора схем , открыв меню Application и выбрав пункт Run .
![]() |
В случае отсутствия платы УСО
PCL-818L можно использовать эмулятор
драйвера drvemul . Для этого в
конфигурационном файле
Rtstart.cfg в строке на запуск драйвера надо заменить 818L на drvemul . Пример : |
После запуска на выполнение демо-проекта на мониторе появятся два окна . Одно - это панель управления проекта , а второе - окно универсального графического эмулятора драйвера .
Несколько различных комбинаций изображения на мониторе эмулятора и панели управления показаны ниже .
Окно эмулятора драйвера в режиме эмуляции выходного аналогового канала платы PCL-818L .
Окно эмулятора драйвера в режиме эмуляции входных дискретных каналов платы PCL-818L .
Режимы эмулятора выбираются посредством закладок .
Проект DemoDrv поставляется в составе пакета Driver Toolkit и может служить примером создания пользователем собственных приложений .