Организация вызова SQL-запросов из узла проекта
I T-6-T-RU БАЗОВЫЙ КУРС РАЗРАБОТКИ АСУТП В TRACE MODE 6
Занятие пятое
Москва, 2010
AdAstra Research Group, Ltd.
ЗАНЯТИЕ ПЯТОЕ
Учебный проект. Создание SQL-запроса для работы с внешней реляционной базой данных
Постановка задачи
Будем разрабатывать SQL -запросы для записи во внешнюю СУБД MS Access реальных значений каналов AI _ om _ WinPAC и AO _ om _ WinPAC в таблицу Tab 1, а также каналов Ain #1… Ain #8 в таблицу Tab 2. Причем, в целях оптимизации количества транзакций запись в Tab 1 БД будет осуществляться по существенным изменениям реальных значений каналов, в свою очередь в Tab 2 – в фоновом режиме в каждом цикле пересчета базы каналов.
Исходным материалом для проектирования служит проект, созданный на предыдущих занятиях и сохраненный с именем regul . prj.
Создание SQL-запросов
Разработку начнем с запуска интегрированной среды разработки TRACE MODE 6. Для создания запроса к СУБД выделим ЛК слой Шаблоны_связей_с_СУБД и по щелчку ПК создадим новый компонент – База_данных#1:
Щелчком ПК на вновь созданном компоненте вызовем его свойства и, перейдя к вкладке Аргументы, приступим к созданию аргументов и их привязке к атрибутам каналов.
Создание аргументов
При создании аргументов будем учитывать то, что тип аргументов для записи в СУБД должен быть определен как IN, а для автоматического формирования имен аргументов по именам соответствующих каналов при осуществлении привязки во вкладке Редактор аргументов настроек ИС установим флажок в пункте Переименовывать аргументы при привязке.
|
|
В Навигаторе проекта откроем слой Система, в ней - узел RTM_2 и выделим ЛК группу компонентов Ai_ om_ WinPAC. Удерживая ЛК нажатой, перетащим канал Ai_ om_ WinPAC в окно табличного редактора аргументов, отпустим ЛК. Те же операции проделаем с каналом AO_ om_ WinPAC, что расположен в группе AO_ om_ WinPAC. В результате выполненных действий будем иметь:
Далее, в Навигаторе проекта выделим группу компонентов I7017#1 и также перетащим ее в окно табличного редактора аргументов шаблона База_данных#1. Получим:
Создадим с помощью иконки еще один аргумент для передачи в СУБД временной отметки, изменим его имя на Time_Mark и определим тип данных как DATE_AND_TIME:
Привязку для данного аргумента выполним позднее. Закроем окно табличного редактора аргументов.
Создание файла базы данных и пользовательского DSN
Двойным щелчком ЛК откроем на редактирование шаблон База_данных#1. В бланке Подключение редактора шаблона
выберем ЛК экранную кнопку Администратор ODBC. В бланке User DSN открывшегося окна Администратора источников данных ODBC
|
|
нажмем экранную кнопку Add… для создания нового источника данных. В нем выберем драйвер Microsoft Access Driver (*.mdb):
и нажмем экранную кнопку Готово. В окне Установка драйвера ODBC для Microsoft Access укажем имя источника данных – regul и в разделе База данных нажмем экранную кнопку Создать…
В диалоге задания имени и расположения создаваемого файла укажем regul. mdb и корневую директорию диска С.
Нажмем ОК. В результате выполненного действия файл будет создан:
В списке пользовательских DSN будет добавлен новый источник данных:
Нажмем OK и вернемся в редактор шаблона База_данных#1. В строке DSN/Строка подключения из выпадающего списка укажем regul. Оставив остальные строки бланка заданными по умолчанию, произведем проверку подключения к вновь созданному источнику, нажав экранную кнопку Проверка…. Результат будем наблюдать в окне Отчет бланка:
Создание таблиц
Создадим в файле regul. mdb две таблицы для записи реальных значений каналов и метки времени. Для этого откроем бланк Запрос редактора шаблона и с помощью иконки создадим новый запрос типа CREATE TABLE, текст запроса введем непосредственно в поле редактора:
Выполним запрос с помощью иконки панели инструментов.
|
|
Создадим второй запрос, используя возможности редактирования – копирования и вставки:
и также выполним его из интегрированной среды разработки.
Далее закроем шаблон запроса и откроем вновь, поскольку необходимо выполнить переподключение к БД. В бланке Схема редактора проверим результат выполненных действий:
Таким образом, подготовительные работы выполнены и переходим к созданию запросов, помещающих реальные значения каналов в соответствующие поля таблиц базы данных. Разработку запросов будем производить с помощью Мастера запросов.
SQL-запрос для заполнения таблицы Tab1
Откроем бланк Мастер и выберем из списка операторов SQL INSERT:
и нажмем клавишу Next. В следующем диалоговом окне необходимо указать таблицу БД, в которую будут помещаться данные, в данном случае Tab1:
при этом в нижнем окне Запрос SQL будет выводиться создаваемый запрос. После нажатия клавиши Next происходит переход к следующему шагу – привязке полей таблицы БД к аргументам шаблона.
Выделяя ЛК столбец БД по нажатию клавиши Привязать открывается окно табличного редактора аргументов в котором также ЛК указывается привязываемый аргумент.
После нажатия клавиши Готово переходим к следующему столбцу БД и т.д. В результате получим:
|
|
Завершим создание запроса нажатием клавиши Finish. Перейдя в бланк Запрос редактора шаблона, наблюдаем, что создан запрос с номером 3:
SQL-запрос для заполнения таблицы Tab2
Аналогичным образом, используя Мастер, создадим следующий запрос:
Организация вызова SQL-запросов из узла проекта
Закроем редактор шаблона запроса к СУБД. Выделим ЛК шаблон База_данных#1 и перетащим его в узел RTM_2.
Для выполнения запроса необходимо в атрибут Входное значение канала класса Вызов База_данных#1 подавать номер запроса. Для заполнения таблицы БД Tab1 – 3, для Tab2 – 4. Исходя из постановки задачи, определим в качестве существенного изменения для реального значения канала AI_ om_ WinPAC величину в 5% полной шкалы, а для AO_ om_ WinPAC – 15%. Реализуем алгоритм путем разработки программы. Создадим новый компонент – программу, переименовав ее в Record:
Откроем компонент Record на редактирование и перейдем к строке Аргументы в структуре программы. Перетащим в окно табличного редактора аргументов каналы AI_ om_ WinPAC и AO_ om_ WinPAC, в результате будут созданы два аргумента программы, привязанные к атрибутам каналов:
С помощью иконки создадим новый аргумент, изменим его Тип на OUT, Тип данных на INT. Выделим ЛК строку, содержащую данный аргумент и перетащим на нее канал класса Вызов База_данных#1. Таким образом, список аргументов программы будет:
Разработку программы выполним на языке Техно FBD. Вид программы будет следующим:
Апертура для каналов AI_ om_ WinPAC и AO_ om_ WinPAC реализуется в программе с помощью функциональных блоков APERT, изменение значений больше установленного порога фиксируется блоками DIFF, а далее с помощью блоков <>0 и блока логического сложения X|| Y производится выбор номера запроса в блоке SEL. Таким образом, если изменения значения каналов AI_ om_ WinPAC и AO_ om_ WinPAC не превышают установленных для них порогов, в каждом цикле пересчета базы каналов выполняется запрос 4, если же значение хоть одного из каналов или обоих одновременно существенно меняются – выполняется запрос 3.
И, наконец, откроем вкладку Аргументы канала класса CALL База_данных#1 и выполним привязку аргумента Time_ Mark к атрибуту Время изменения самого же канала База_данных#1? Полагая тем самым, что в СУБД метка времени будет привязана к моменту исполнения канала класса CALL, вызывающему SQL-запрос.
Сохраним внесенные изменения в проект с помощью иконки и затем выполним процедуру подготовки проекта к запуску в реальном времени – .
Контрольные вопросы
Выберите и отметьте правильный вариант ответа:
Вопрос 1. Пользовательский DSN для файла БД создается:
а. с помощью панели управления Windows; £
б. в редакторе запроса к СУБД; £
в. возможны оба варианта. £
Вопрос 2. Тип аргумента для записи в БД:
а. IN; £
б. OUT; £
в. IN/OUT. £
Вопрос 3. Выполнение запроса в МРВ происходит:
а. при посылке во Входное значение канала, вызывающего шаблон запроса 0; £
б. - 1; £
в. - номера запроса. £
AdAstra Research Group, Ltd
Россия, Москва, 107076, а/я 38
Тел. (495) 771-71-74
Факс (495) 518-98-46
E-mail: adastra@adastra.ru
http://www.adastra.ru
Дата добавления: 2019-11-16; просмотров: 741; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!