Исходя из вышесказанного, можно перечислить все имеющиеся в RTWin типы модулей. Модули, в зависимости от своего функционального назначения, могут быть одного из следующих типов:
Объект - модуль проекта, реализующий заданный пользователем алгоритм функционирования СКУ. Объект это наиболее универсальный тип модуля. Он позволяет решить широкий спектр задач, среди которых: математические модели процессов, работа с устройствами ввода/вывода и файлами, подготовка данных для отображения, организация связи с другими программами и т.д. На схеме СКУ объект показывается синим цветом.
Как уже упоминалось выше, каждый объект СКУ в системе RTWin реализован как самостоятельный загружаемый и исполняемый программный модуль (задача) в среде многозадачной операционной системы QNX. Следует особо отметить, что для каждого объекта генерируется полный исходный текст на языке программирования Си.
Для каждого объекта, создаваемого в редакторе, генерируются следующие файлы в директории src/ проекта:
init_[ИмяОбъекта].c | процедура инициализации объекта |
handler_[ИмяОбъекта].c | процедура обработки объекта |
tdef_[ИмяОбъекта].h | объявления типов данных |
import_[ИмяОбъекта].h | объявления глобальных переменных как внешних (extern) |
vars_[ИмяОбъекта].h | объявления глобальных переменных |
Для каждой копии объекта на объектной схеме генерируются следующие файлы в директории src/ проекта:
main_[ИмяКопии].c | запуск и цикл обработки |
[ИмяКопии].mk | для использования утилитой make |
Для каждой копии объекта на объектной схеме создается файл загружаемого модуля в директории проекта:
ИмяКопии | исполняемая программа |
RTWin предоставляет интерактивные средства для полного цикла создания объекта, начиная от описания алгоритма функционирования в виде последовательности блок-функций до генерации C-кода и компиляции готового модуля. Инструментальным средством для создания объектов в RTWin является редактор объектов. С помощью редактора объектов создается описание определенного типа объекта. Затем в редакторе схем объекты размещаются на модульной схеме проекта.
![]() | Модульная схема проекта может содержать несколько копий объекта данного типа, каждой из которых присваивается уникальное имя. |
Окно редактора объектов выглядит следующим образом:
Реализуемый объектом алгоритм представляется в виде совокупности блок-функций (блоков), имеющих входы/выходы и связанных между собой.
Выход блока может быть соединен с любым, имеющим соответствующий тип данных, входом блока. Количество связей для одного входа или выхода не ограничено. Входы/выходы блоков, для которых заданы связи, выделяются цветом.
Примерный цикл разработки объекта включает следующие основные этапы:
Все блок-функции объединены в библиотеки. Библиотека системных блоков (System ) является внутренней библиотекой редактора. Эта библиотека не может быть изменена пользователем. Все остальные библиотеки являются внешними по отношению к редактору объектов и полностью открыты для пользователя. Пользователь может добавлять или удалять блоки в существующих библиотеках, а также создавать новые блоки и библиотеки. Внешние библиотеки блок-функций находятся в директории /usr/rtw/lib/fblib . Список библиотек блок-функций, которые открываются при запуске редактора объектов, содержится в файле LibList . Перечень поставляемых библиотек приведен в Приложении А.
Каждому из имеющихся на модульной схеме проекта объектов соответствует в итоге отдельная программа (загружаемый модуль). После запуска программы :
Последовательность выполнения блок-функций определяется их взаимным расположением в ячейках. Возможны два варианта:
Последовательность выполнения блок-функций задается для каждого объекта в отдельности. У пользователя существуют следующие возможности изменить порядок обработки:
В область цикла попадают все блоки, расположенные между блоком начала цикла (Loop, Repeat или While) и блоком, ограничивающим область цикла (Next).
Если в объекте задано несколько циклов, то их области обработки не должны пересекаться. Вложенные циклы разрешаются. Если блок Next отсутствует, то область цикла ограничена последней ячейкой объекта.
В область выполнения по условию попадают блоки, расположенные между блоком If и блоком ElseIf или EndIf. При наличии блока ElseIf блоки, расположенные между ним и блоком EndIf, выполняются, если условие ложно.
Связи между блоками не
влияют на порядок их обработки
Последовательно для каждого из блоков выполняются следующие действия :
Блок С-функция позволяет реализовать любую процедуру обработки данных. Для данного блока пользователь может задать произвольный набор входов, выходов, параметров и функции инициализации и обработки. Для адресации входов и выходов блока внутри функций используется ряд специальных макроопределений:
RIC(имя_входа) | кол-во элементов массива (если задан массив входов) |
RID(имя_входа) | значение входа |
RIF(имя_входа) | признак прихода данных |
ROC(имя_выхода) | кол-во элементов массива (если задан массив выходов) |
ROD(имя_выхода) | значение выхода |
ROF(имя_выхода) | признак передачи данных |
Рассмотрим простейший пример блока данного вида, реализующего функцию определения максимального из значений на входах. Пусть оператор имеет имя c_code_3_B, массив входов in и выход out .
Исходный текст данной функции будет выглядеть так:
void Max(__Max *ts_ptr) { short i; ROD(out) = RID(in)[0]; for(i=1; i < RIC(in); i++) ROD(out) = max(RID(in)[i],ROD(out)); ROF(out) = 1; }
Кроме того, в RTWin предусмотрена возможность создания на основе блока С-функция новых библиотек блоков в интерактивном режиме. Для создания нового блока необходимо описать требуемую функцию преобразования данных в виде исходного текста на языке программирования Си (пример такого описания был рассмотрен выше), и определить для вновь создаваемого блока уникальное имя и пиктограмму. После этого полученный новый блок может быть добавлен в меню, содержащее перечень всех блоков, и может быть использован для описания объекта наравне с блоками из системной библиотеки. Таким образом, может быть создан расширенный набор блоков, что позволяет адаптировать систему RTWin для решения определенного класса задач в какой-либо специальной области, а также существенно ускорить и облегчить процесс описания объекта.
Блок Сообщение от устройства (Proxy) позволяет организовать работу с внешними устройствами и устройствами ввода-вывода, или внешними программами, по событию (прерыванию). Для этого используется предоставляемый ОС QNX особый вид сообщения - прокси (proxy). Приход этого сообщения сигнализирует о наступлении события (прерывания). По приходу прокси выставляется 1 на соответствующем выходе блока Proxy, и объект может отреагировать на событие.
Панели управления предназначены для:
На схеме СКУ панель управления показывается зеленым цветом.
Инструментальными средствами для создания панелей управления служат входящий в RTWin редактор панелей управления. Панели управления создаются в два этапа. Сначала создается внешний вид панели управления. Изображение создается с использованием графических примитивов. Каждый графический примитив (widget) имеет определенный набор ресурсов. К таким ресурсам относятся: цвет, координаты, размеры, форма курсора, текстовая строка и т. д. В зависимости от типа графического примитива этот набор может меняться. Используя возможности, предоставляемые редактором панелей управления, можно с различными уровнями абстракции изобразить любой технологический процесс или агрегат. Ниже приведен пример внешнего вида панели управления, созданной на Молдавском металлургическом заводе :
На втором этапе в редакторе панелей управления производится привязка ресурсов графических примитивов к входам и выходам панели управления. Сначала для панели управления создаются необходимые входы и выходы. Затем в редактор загружается ранее созданная картинка - файлы описания окон формата .wgtp , .wgtd и .wgtw. Редактор панелей управления позволяет задать связь ресурсов графических примитивов с данными, поступающими на вход панели управления. Таким образом, любое изменение состояния управляемого процесса или механизма может быть отображено посредством изменения тех или иных ресурсов. Т.о. изменение данных на входе приводит к динамическому изменению картинки. В картинке могут меняться: текст, цвет, позиция и размеры виджетов, что позволяет получить эффект анимации. Кроме того, могут открываться или закрываться дополнительные окна, выдаваться сообщения. Поступающие на вход данные можно представить в виде графиков и диаграмм. На панели управления могут быть размещены различные органы управления: кнопки, сдвижки (слайдеры), кнопки с фиксированным положением и т.п.
Для каждого органа управления может быть задан уровень доступа - некоторое числовое значение в диапазоне от 0 до 100. В этом случае, только операторы, уровень доступа которых не ниже заданного, смогут использовать эти органы управления. Наряду с указанием уровня доступа, для каждого органа управления может быть задан запрос пароля. Воздействие оператора на органы управления приводит к посылке данных в выходные каналы панели управления и далее в систему.
Как дополнительные средства для организации интерфейса с оператором, редактор панелей управления предоставляет возможность организовать всплывающие окна, меню, окна модального диалога и т.п. Таким образом, с помощью редактора панелей управления может быть описан сценарий работы с оператором.
Изменению данных, получаемых от других модулей, может быть поставлено в соответствие изменение ресурсов графических примитивов. Изменению состояния органов управления может, в свою очередь, быть поставлено в соответствие изменение значения данных, посылаемых другим модулям системы. Так, например, нажатие кнопки на панели управления, или нажатие "горячих клавишФ клавиатуры, можно связать с записью определенных данных в выходные каналы панели управления. С помощью этого механизма в RTWin реализованы воздействия оператора на ход управляемого процесса.
На модульной схеме такой модуль показывается серым цветом и рассматривается как объект особого типа.
Как и другие объекты, он имеет входы и выходы и может быть соединен с другими модулями проекта. Для задания входов и выходов объекта-PhAB приложения используется редактор объектов.
Система RTWin предоставляет возможность передавать данные между одновременно работающими проектами. Для этой цели используются специальные модули - шлюзы (Gate), которые определяют типы данных и имена внешних входов/выходов проекта, а также файлы конфигурации, где указано как внешние входы и выходы различных проектов связаны между собой. На модульной схеме шлюзы изображаются в виде прямоугольников малинового цвета.
Файл конфигурации описывает связь только между двумя проектами. На текущий момент нет никакого интерактивного инструмента для создания файла описания связей. Структура файла конфигурации очень проста :
PROJECT_1 prj1_name INSTANCE_NAME_1 prj1_inst_name PROJECT_2 prj2_name INSTANCE_NAME_2 prj2_inst_name LINKS type prj1_point_name1 prj2_point_name1 . . . type prj1_point_nameN prj2_point_nameN END_LINKS
Здесь PROJECT_1 и PROJECT_2 - ключевые слова, указывающие на следующие за ними имена связанных проектов, INSTANCE_NAME_1 и INSTANCE_NAME_2 - ключевые слова, указывающие на уникальные имена копий проектов, LINKS и END_LINKS - ключевые слова, ограничивающие блок описания связей.
Слово type может иметь 2 значения - INPUT и OUTPUT, и указывает на тип модуля связи (вход или выход) 1-го проекта, что определяет тип связи :
Слова prj1_name и prj2_name являются именами проектов, prj1_inst_name и prj2_inst_name -уникальными именами копии проекта, prj1_point_name1 и prj1_point_nameN -имена модулей связи 1-го проекта, prj2_point_name1 и prj2_point_nameN -имена модулей связи 2-го проекта.
Пример написания файла:
PROJECT_1 Prj1 |Имя 1-го проекта INSTANCE_NAME_1 i1 |Уникальное имя 1-го проекта PROJECT_2 Prj2 |Имя 2-го проекта INSTANCE_NAME_2 |Уникальное имя 2-го проекта LINKS |Блок описания связей ##Тип модуля связи |Имя модуля связи |Имя модуля связи ##1-го проекта |1-го проекта |2-го проекта OUTPUT out_gate1 In_gate1 OUTPUT str_gate_out in_type_5 INPUT In_gate1 out_gate1 INPUT str_gate out_type_5 INPUT time time END_LINKS |Конец блока описания связей