Цель работы - Институт цветных металлов и материаловедения

advertisement
Институт цветных металлов и золота СФУ
Кафедра автоматизации производственных процессов
ЦМ
Дисциплина “Применение
ЭВМ в СУ”
Красноярск 2007 г.
Лабораторная работа № 4-3
“Программирование МПК Octagon Systems 6050 в среде UltraLogik32”
Цель работы
1. Научиться программировать МК Octagon Systems 6050 в среде UltraLogik32.
2. Выполнить разработку, отладку и компиляцию проекта в UltraLogik32.
3. Переслать полученную исполняемую программу в микроконтроллер и запустить.
ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Программирование микроконтроллера в системе UltraLogik32 состоит из последовательности следующих действий:
1 заполнение таблиц глобальных переменных;
2 конфигурирование контроллера;
3 привязка переменных к входам и выходам контроллера;
4 разработка программ;
5 компиляция;
6 эмуляция и предварительная отладка программ;
7 сетевая отладка программы.
1 Заполнение таблиц глобальных переменных
Переменная – это область памяти, в которой находятся данные, с которыми
оперирует программа.
При заполнении таблицы глобальных переменных для каждой переменной
необходимо ввести данные в следующие поля: Тип, Атрибуты (принадлежность переменной к тем или иным спискам), Имя, Значение (значение при инициализации),
Комментарий (произвольная текстовая строка), Удаленное имя (имя переменной для
удаленного доступа).
Поддерживаются следующие типы переменных:
 BOOLEAN, могут принимать значения – 0 (False) и 1 (True);
 INTEGER – 16-ти разрядное число со знаком, могут принимать целочисленные значения от – 32768 до + 32767;
 SHORTINT – 8-разрядное число со знаком, могут принимать целочисленные
значения от 128 до +127;
 BYTE – 8-разрядное число без знака, могут принимать целочисленные значения от 0 до 255;
 LONGINT – 64-разрядное число со знаком, могут принимать целочисленные
значения от  231 до  231  1 ;
 WORD – 16-разрядное число без знака, могут принимать целочисленные
значения от 0 до 65536;
 DWORD – 32-разрядное число без знака, могут принимать целочисленные
значения от 0 до 4 294 967 296;
 FLOAT, могут принимать значения от  1,18 10-38 до  3,4 1038 ;
 TIMER, принимает значение времени, причем значение переменной не может превышать 248d13h13m56s47, где d - дни, h - часы, m - минуты, s - секунды, 47 сотые доли секунды.
Каждая переменная может иметь один или несколько атрибутов. Атрибут
означает, какое либо свойство переменной независимое от ее типа.
По свойству видимости в проекте переменные могут быть глобальными и локальными. Глобальные переменные доступны (видимы) всем программам в проекте.
Локальная переменная доступна только той программе, внутри которой она объявлена.
Глобальные переменные могут иметь следующие атрибуты:
 константа – число, значение которого не может быть изменено программой;
 входная – переменная, логически соединенная с входом контроллера;
 выходная – переменная, логически соединенная с выходом контроллера;
 сетевая – переменная доступная всем узлам сети;
 удаленная – переменная другого узла сети;
 сохраняемая – переменная сохраняется в энергонезависимой памяти.
Имена переменным присваивают по следующим правилам:
 имя не может содержать более 255 символов;
 первый символ должен быть буквой, или символом подчеркивания, далее
могут следовать цифры, буквы латинского алфавита и символы подчеркивания.
2 Конфигурирование контроллера
Конфигурирование контроллера включает в себя следующие операции:
1 выбор модели контроллера;
2 выбора центрального процессора (ЦПУ);
3 конфигурирование последовательных портов;
4 конфигурирование параллельных портов;
5 привязка переменных.
Процессорный модуль 6050 содержит:
 два последовательных порта;
 параллельный порт LPT1;
 EZ - порт на 24 независимых канала ввода/вывода дискретных сигналов.
 сторожевой таймер.
При выборе последовательных портов COM1, COM2, параллельного порта
LPT1 или дискретного порта ввода/вывода EZ1 система создаёт дополнительные листы, на которых необходимо произвести настройку используемых портов.
Последовательные порты могут быть использованы для различных целей,
например, для построения сетей, связи с другим оборудованием и т.п. Конфигурирование последовательных портов заключается в установке их параметров: Имя, Базовый адрес, Прерывание, Скорость, Использование.
Конфигурирование параллельных портов заключается в установке их параметров: Имя, Базовый адрес, Режим, Использование.
3 Привязка переменных к входам и выходам контроллера
На дополнительном листе с закладкой EZ1 Port необходимо осуществить привязку переменных к устройствам ввода/вывода, расположенным непосредственно на
плате микроконтроллера.
Привязка переменной – это назначение глобальной переменной проекта определенному входу/выходу контроллера. Одна и та же переменная может быть назначена на различные входы/выходы. Привязка переменных производится в окне конфигурирования EZ1 Port.
В поле Базовый адрес в соответствии с положением перемычек, установленных на модуле, необходимо установить базовый адрес EZ-порта. Порядок установки
перемычек изложен в технической документации на модуль.
Списки моделей контроллеров, модулей процессоров и ресурсов процессоров,
списки модулей ввода/вывода, организованы в виде подключаемых динамических
библиотек, и могут изменяться и дополняться.
4 Разработка программ
Программа управления объектом в контроллере представляется как некоторое
логическое устройство, описывающее управление технологическим процессом и операции над переменными величинами этого процесса. Программа может состоять из
множества других программ, находящихся друг с другом в определенных отношениях, образующих иерархическое дерево. Каждая программа может иметь состояние
Start или Stop. Состояние Start означает, что данная программа будет запущена при
включении контроллера. Состояние Stop означает, что данная программа может быть
запущена другими программами при определенных условиях.
При разработке программ могут использоваться следующие языки программирования: FBD, ST, IL, ASSEMBLER.
Основным языком программирования является язык функциональных блоковых диаграмм.
Функциональный блок представляет собой прямоугольник (рисунок 1), внутри
которого имеется обозначение функции, выполняемой блоком. Выход функционального блока может быть соединен связью с другими блоками. Каждая связь является
переменной.
Рисунок 1 – Функциональный блок
Один или несколько функциональных блоков, соединенных связями между
собой, образуют программу на языке FBD. Язык FBD описывает закон преобразования переменных программы.
Имеются следующие формальные правила языка FBD:
 функциональные блоки могут располагаться произвольно в поле программы;
 не может быть свободных (несоединенных) входов и выходов функционального блока;
 любая связь может иметь имя и тип;
 входы и выходы функциональных блоков, присоединенные к связям, имеющим одинаковые имена, считаются соединенными;
 очередность выполнения блоков в программе: сверху вниз, слева направо.
Каждый функциональный блок имеет условную точку привязки, которая
определяет очередность выполнения блока в программе. Точкой привязки является
левый верхний угол блока. Цифры внутри блоков показывают очередность выполнения блоков в программе (рисунок 2).
Рисунок 2 – Очерёдность выполнения блоков в программе
Программа на языке FBD может содержать следующие базовые типы объектов:
 функциональные блоки и связи;
 переходы и метки;
 комментарии.
Связям, присоединяемым к входам и выходам функциональных блоков, ставится в соответствие переменные и константы. Установление соответствия между
связью и именем переменной выполняется в процессе присвоения связям символьных
имен.
На входе FBD блока может быть:
 константное выражение;
 внутренняя или входная переменная;
 выходная переменная.
На выходе FBD блока может быть любая внутренняя или выходная переменная.
Метки и переходы можно использовать для управления процессом выполнения программы. Для этого выход блока соединяют связью с оператором GOTO{имя
метки}. Если переменная, которая формируется на выходе функционального блока,
принимает значение TRUE, то программа продолжается с блока, помеченного меткой.
Если оператор GOTO не соединен с переменной типа BOOLEAN, осуществляется
безусловный переход к метке.
Для завершения программы существует оператор RETURN. Если на входе
оператора RETURN значение переменной принимает значение TRUE, то осуществляется условный переход к следующей программе. Если оператор RETURN не соединен
с переменной типа BOOLEAN, осуществляется безусловный переход к следующей
программе. В случае, когда оператор RETURN встретился внутри библиотечного
блока, управление передается следующему блоку, но не следующей программе.
Базовые функции языка FBD разделены на следующие группы:
 логические функции;
 функции сравнения;
 арифметические функции;
 функции управления программой и таймерами.
Логические функции в качестве операндов используют переменные типа
Boolean. Любой вход и выход логических функций может быть проинвертирован. После инициализации программы, переменные на входах и выходах всех функциональных блоков логических функций принимают значение FALSE, кроме тех глобальных
переменных, значения которых при инициализации явно объявлены как TRUE.
Все функции сравнения в качестве операндов могут использовать переменные
типа INTEGER, FLOAT, TIMER. Входные переменные каждой отдельной функции
должны иметь одинаковый тип. На выходах всех функциональных блоков сравнения
по результату операции формируются переменные типа BOOLEAN. После инициализации программы эти переменные принимают значение FALSE, кроме тех глобальных переменных, значение которых при инициализации явно объявлены как TRUE.
Все арифметические функции в качестве операндов могут использовать переменные типа INTEGER, FLOAT, TIMER. Входные переменные каждой отдельной
функции должны иметь одинаковый тип. После инициализации программы, переменные на выходах всех арифметических функциональных блоков принимают значение
0, кроме тех глобальных переменных, значение которых при инициализации явно
объявлены иначе.
Функции управления программой в качестве входных операндов могут использовать переменные типа BOOLEAN.
5 Компиляция
Компилятор создает исполняемые файлы для каждого контроллера отдельно.
Выбор типа компилятора и подключение производиться в режиме конфигурирования контроллера.
Перед компиляцией установите адрес узла сети (контроллера). Напомним, что
адрес контроллера можно установить, если в его конфигурации присутствует коммуникационные порты, назначенные на драйвер PlcNet (MODBUS ASCII), или сетевое
оборудование.
Компилятор проверяет программу и в случае обнаружения ошибок выдает в
список ошибок и замечаний.
Для локализации ошибки в программе сделайте правый щелчок на строке с сообщением об ошибке. Выполните команду Найти контекстного меню. Элементы программы, содержащие ошибку, выделяются красным цветом.
Если в программе нет формальных ошибок, объектный файл обрабатывается
компоновщиком для получения исполняемого кода программы.
6 Эмуляция и предварительная отладка программ
Для отладки в меню Отладчик (Debug) имеются следующие команды:
1 Переменные – просмотр, изменение значений переменных;
2 Осциллограф – осциллографирование, изменение значений переменных;
3 Формат – устанавливает формат чисел для визуализации переменных.
После выбора любой команды система сканирует сеть, и появляется окно выбора сетевого адреса со списком всех узлов сети (рисунок 3). Для установки связи
необходимо выполнить двойной щелчок на строке с выбранным узлом или ввод цифрового адреса узла (в шестнадцатеричном виде) и щелчок на кнопке ОК.
Рисунок 3 – Окно выбора сетевого адреса
Кнопка «Скан» служит повторного сканирования сети.
Система может работать с реальным целевым контроллером или эмулировать
его работу. В обоих случаях для обмена данными между системой исполнения и системой программирования используются сетевые драйверы.
Перед тем, как начать отладку, необходимо активизировать драйвер Ultranet32.
Драйвер может находиться на локальном компьютере или на любом другом в локальной вычислительной сети. Выбор драйвера производится из главного меню. Для этого
выберите строку «Установки сети» меню «Опции». Открывается окно «Местонахождение Ultranet32» (рисунок 4).
Нет – в исполняемом коде программы драйвера нет, отладка невозможна;
Локальный – драйвер находится на локальном компьютере;
Удаленный – драйвер находится на указанном компьютере в локальной сети.
Рисунок 4 – Окно «Местонахождение Ultranet32»
В режиме отладки возможно иметь связь со всеми контроллерами, включенными в сеть, а также отлаживать программу с нескольких компьютеров, на которых
установлена система UltraLogik.
При щелчке на значке UN на панели задач откроется окно Ultranet32 (рисунок 5).
Рисунок 5 – Окно Ultranet32. Раздел «Узлы»
Окно имеет 5 следующих разделов: «Узлы», «Переменные», «Конфигурация»,
«Статистика».
Раздел «Узлы» показывает всех участников сети и содержит следующую информацию:
 Узел – адрес узла в щестнадцатеричном виде;
 Работает – указывает, включен ли узел с данным адресом в сеть;
 Активен – указывает, может ли узел генерировать маркер;
 Маркер – указывает узел, который генерирует маркер в настоящий момент;
 Драйвер – содержит информацию о драйвере узла;
 Переменных – число переменных узла;
 Тип – тип драйвера узла.
Раздел «Переменные» (рисунок 6) содержит информацию по всем переменным
выбранного узла:
 Номер – номер переменной по порядку;
 Имя – имя переменной;
 Значение – значение переменной;
 Тип – тип переменной.
Рисунок 6 – Окно Ultranet32. Раздел «Переменные»
Номер узла выбирается переключателем в верхнем левом углу раздела.
Раздел «Конфигурация» содержит два подраздела – Ultranet (рисунок 7) и
«Драйвера» (рисунок 8).
Рисунок 7 – Окно Ultranet32. Раздел «Конфигурация». Подраздел «Ultranet»
Рисунок 8 – Окно Ultranet32. Раздел «Конфигурация». Подраздел «Драйвера»
Подраздел «Ultranet» предназначен для задания собственных переменных
драйвера Ultranet32, которые видимы всем участникам сети. Через эти переменные
может быть организован обмен информацией между SCADA системами и участниками сети. Манипуляции с переменными осуществляются через команды контекстного
меню. Контекстное меню вызывается правым щелчком и содержит следующие команды:
 Добавить переменную – добавляет переменную в драйвер;
 Редактировать… – редактирует указанную переменную;
 Удалить переменную – удаляет указанную переменную;
 Удалить выбранные – удаляет выбранные переменные;
 Удалить все – удаляет все переменные из драйвера;
 Вверх – выбирает предыдущую строку;
 Вниз – выбирает следующую строку.
Сетевой адрес драйвера UltraNet задается в верхнем левом углу окна, время
обновления переменных в миллисекундах – в верхнем правом углу окна.
Подраздел «Драйвера» предназначен для выбора драйвера порта и настройки
параметров порта. Подраздел имеет следующие поля:
 Драйвер – предназначено для добавления физического драйвера устройства.
Так, например, на различные порты могут быть назначены независимые драйвера.
Могут быть выбраны следующие драйвера: RS485Drv – драйвер, поддерживающий
работу сети PlcNet, Emulator – драйвер эмулятора системы, IPX – драйвер для сетей,
поддерживающий протокол IPX/SPX
 Исключ. – адреса узлов, исключаемые из сетевого обмена;
 Порт – номер порта;
 IRQ – уровень прерывания;
 Скорость – скорость передачи порта;
 Длина – длина пакета данных по сети.
ЯЗЫК ФУНКЦИОНАЛЬНЫХ БЛОКОВЫХ ДИАГРАММ
(FUNCTIONAL BLOCK DIAGRAM, FBD)
FBD – графический язык, в котором используются функциональные блоки.
Алгоритм работы некоторого устройства, выраженный средствами этого языка,
напоминает функциональную схему электронного устройства: элементы типа «логическое И», «логическое ИЛИ» и т.п., соединенные линиями. Каждый функциональный блок графически представляет собой прямоугольник, внутри которого имеется
обозначение функции, выполняемой блоком. Выход функционального блока может
быть соединен связью с другими блоками. Каждая связь является переменной. Один
или несколько функциональных блоков, соединенных связями между собой, образуют программу на языке FBD. Язык FBD описывает закон преобразования переменных
программы.
Имеются следующие правила языка FBD:
 функциональные блоки могут располагаться произвольно в поле программы;
 не может быть свободных (несоединенных) входов и выходов функционального блока;
 любая связь может иметь имя и тип;
 входы и выходы функциональных блоков, присоединенные к связям, имеющим одинаковые имена, считаются соединенными;
 очередность выполнения блоков в программе: сверху вниз, слева направо.
В том случае, когда одну и ту же переменную формируют несколько функциональных блоков, последнее значение переменной будет присвоено тем блоком, который выполняется последним.
Каждый функциональный блок имеет условную точку привязки, которая
определяет очередность выполнения блока в программе. Точкой привязки является
левый верхний угол блока (рисунок 2). В приведенном примере цифры внутри блоков
показывают очередность выполнения блоков в программе.
Программа на языке FBD может содержать следующие базовые типы объектов:
 функциональные блоки и связи;
 переходы и метки;
 комментарии.
Связям, присоединяемым к входам и выходам функциональных блоков, ставятся в соответствие переменные и константы, которые могут иметь атрибуты. Установление соответствия между связью и именем переменной выполняется в процессе
присвоения связям символьных имен.
На входе FBD блока может быть константное выражение или любая переменная. На выходе FBD блока может быть любая переменная.
Метки и переходы можно использовать для управления процессом выполнения программы. Для этого выход блока соединяют связью с оператором GOTO {имя
метки} (рисунок 9). Если переменная, которая формируется на выходе функционального блока, принимает значение TRUE, то программа продолжается с блока, помеченного меткой. Если оператор GOTO не соединен с переменной типа BOOLEAN,
осуществляется безусловный переход к метке.
Рисунок 9 – Использование меток в программе на языке FBD
Для завершения программы существует оператор RETURN. Если на входе
оператора RETURN значение переменной принимает значение TRUE, то осуществляется условный переход к следующей программе. Если оператор RETURN не соединен
с переменной типа BOOLEAN, осуществляется безусловный переход к следующей
программе. В случае, когда оператор RETURN встретился внутри библиотечного
блока, управление передается следующему блоку, но не следующей программе.
Базовые операции языка FBD:
1 Логические операции:
 инвертирование;
 логическое исключающее ИЛИ;
 логическое И;
 детектор фронта;
 логическое ИЛИ;
2 Операции сравнения:
 равно;
 меньше чем;
 не равно;
 больше или равно;
 больше чем;
 меньше или равно;
3 Арифметические операции:
 сложение;
 максимум;
 вычитание;
 минимум;
 деление;
 присваивание;
 умножение;
 интерполятор;
 ограничитель значения;
 поразрядное отрицание;
4 Операции управления программой и таймерами:
 выход из программы;
 старт программы;
 переход к метке;
 останов программы;
 пуск таймера;
 выполнить программу;
 останов таймера;
 выполнить внешнюю процедуру.
 продолжить счет таймера;
1 Логические операции
Логические операции в качестве операндов используют переменные типа
BOOLEAN, BYTE, SHORTINT, INTEGER, WORD, DWORD, LONGINT.
Операции над переменными производятся поразрядно. На входах и выходах
логических операций должны быть переменные одинаковых типов. После инициализации программы, переменные принимают значение FALSE для переменных типа
BOOLEAN и 0 для других типов переменных, кроме тех глобальных переменных,
значения которых при инициализации явно объявлено иначе.
Любой вход и выход логических блоков может быть проинвертирован.
Таблица 1 – Логические операции
Операция Таблица истинности
Описание
In
Out
Выход блока – поразрядная инверсия значения
 инвертиFALSE
TRUE входной переменной. Блок может использоватьрование
TRUE
FALSE ся без логической инверсии для непосредственной связи входа и выхода, или как элемент задержки в логических операциях.
In1
In2
Out Выход блока – логическое «И» первой и второй
 логичеFALSE FALSE FALSE переменных. Количество входов блока может
ское И
FALSE TRUE FALSE быть от 2 до 32. Вычисление результата произTRUE FALSE FALSE водится сверху вниз. Сначала вычисляется логиTRUE TRUE TRUE ческое «И» первой и второй переменной, затем
вычисляется логическое «И» результата и третьей переменной и т.д.
In1
In2
Out Выход блока – логическое «ИЛИ» первой и вто логичеFALSE FALSE FALSE рой переменных. Количество входов блока моское ИЛИ
FALSE TRUE TRUE жет быть от 2 до 32. Вычисление результата
TRUE FALSE TRUE производится сверху вниз. Сначала вычисляется
TRUE TRUE TRUE логическое «ИЛИ» первой и второй переменной,
затем вычисляется логическое «ИЛИ» результата
и третьей переменной и т.д.
Операция Таблица истинности
In1
In2
Out
 логическое исклю- FALSE FALSE FALSE
чающее ИЛИ FALSE TRUE TRUE
TRUE FALSE TRUE
TRUE TRUE FALSE
 детектор
фронта
 детектор
заднего
фронта
Описание
Выход блока – логическое исключающее «ИЛИ»
первой и второй переменных. Количество входов
блока может быть от 2 до 32. Вычисление результата производится сверху вниз. Сначала вычисляется логическое исключающее «ИЛИ» первой и второй переменной, затем вычисляется логическое исключающее «ИЛИ» результата и третьей переменной и т.д.
Edge – переменная типа BOOLEAN, принимает значение TRUE в течение одного цикла контроллера, если переменная b_var изменила состояние из FALSE в TRUE, FALSE во всех других случаях
Edge – переменная типа BOOLEAN принимает значение TRUE в течение одного цикла контроллера, если переменная b_var изменила состояние из TRUE в FALSE, FALSE во всех других случаях.
2 Операции сравнения
Все операции сравнения в качестве операндов могут использовать переменные
BYTE, SHORTINT, INTEGER, WORD, DWORD, LONGINT, FLOAT, TIMER
Входные переменные каждой отдельной операции должны иметь одинаковый
тип. На выходах всех функциональных блоков сравнения по результату операции
формируются переменные типа BOOLEAN. После инициализации программы эти переменные принимают значение FALSE, кроме тех глобальных переменных, значение
которых при инициализации явно объявлены как TRUE.
Для всех операций сравнения количество операндов может достигать 32. При
этом результат вычисляется попарно сверху вниз, т.е. сначала вычисляется результат
сравнения первой и второй переменной, затем второй и третьей т.д. Результаты всех
промежуточных вычислений объединяются логическим И.
Таблица 2 – Операции сравнения
Операция
Описание
val1 – первая переменная;
 равно
val2 – вторая переменная;
test – переменная типа BOOLEAN, принимает значение TRUE,
если val1 равно val2
val1 – первая переменная;
 не равно
val2 – вторая переменная;
test – переменная типа BOOLEAN, принимает значение TRUE,
если val1 неравно val2
val1 – первая переменная;
 больше чем
val2 – вторая переменная;
test – переменная типа BOOLEAN, принимает значение TRUE,
если val1 больше val2
Операция
 меньше чем
 больше или
равно
 меньше или
равно
Описание
val1 – первая переменная;
val2 – вторая переменная;
test – переменная типа BOOLEAN, принимает значение TRUE,
если val1 меньше val2
val1 – первая переменная;
val2 – вторая переменная;
test – переменная типа BOOLEAN, принимает значение TRUE,
если val1 больше или равно val2
val1 – первая переменная;
val2 – вторая переменная;
test – переменная типа BOOLEAN, принимает значение TRUE,
если val1 меньше или равно val2
3 Арифметические операции
Арифметические операции в качестве операндов могут использовать переменные типов BYTE, SHORTINT, INTEGER, WORD, DWORD, LONGINT, FLOAT,
TIMER. Входные переменные каждой отдельной операции должны иметь одинаковый тип. После инициализации программы, переменные на выходах всех арифметических функциональных блоков принимают значение 0, кроме тех глобальных переменных, значение которых при инициализации явно объявлены иначе.
При арифметических операциях учитывайте ожидаемые диапазоны результатов вычислений, которые не должны выходить из допустимых значений переменных.
В случае возникновения ошибки переполнения результаты операции могут быть различными в зависимости от типа переменных, участвующих в операции и способа выполнения операций над переменными типа FLOAT.
Для арифметических операций с переменными типа FLOAT, выполняемых
способом программной эмуляции, в системе предусмотрены две глобальные переменные с именами ERR_SEG и ERR_OFS, в которых записывается адрес команды
программы, где произошла ошибка. Если эти переменные приняли значение, отличное от нуля (заданное при инициализации), значит произошла ошибка арифметики,
что должно быть учтено в алгоритме управления. Кроме этого на терминал выдается
сообщение об ошибке.
Таблица 3 – Арифметические операции
Операция
Описание
val1 – первая слагаемая переменная
 сложение
val2 – вторая слагаемая переменная
res – знаковая сумма первой и второй переменных
 вычитание
val1 – первая уменьшаемая переменная
val2 – вторая вычитаемая переменная
res – знаковая разность первой и второй переменных
Операция
 деление
Описание
val1 – первая делимая переменная
val2 – вторая переменная – делитель
res – знаковое частное первой и второй переменных
 умножение
val1 – первая умножаемая переменная
val2 – вторая переменная – множитель
res – знаковое произведение первой и второй переменных
 ограничитель
значения
minimum – минимальное заданное значение
value – текущее значение
maximum – минимальное заданное значение
limited – ограниченное значение:
= minimum если value < minimum
= maximum если value > maximum
= value если minimum < value < maximum
val – текущее значение
минимальное значение Out = maxVal
 максимум
 минимум
val – текущее значение
максимальное значение Out = minVal
 присваивание
Присваивает переменной var_out значение переменной var_in.
Вход блока EQU не может быть подсоединен к своему выходу.
Функция преобразования значения входной переменной var_in
выбирается автоматически, исходя из типа переменной var_out
 интерполятор X,Y переменные типа FLOAT
Операция преобразует переменную Х в переменную Y в соответствии законом преобразования Y=f(X). Преобразование осуществляется в соответствии с таблицей, в которой задаются множество точек (x) и соответствующее им множество точек значений физической величины f(x). Точки могут быть заданы вручную или загружены из файла. Интерполяция между точками может осуществляться двумя методами:
1. Метод построения полинома степени N по формуле
f(x)=a0+a1x1+a2x2+a3x3...+ aNxN. Степень полинома в зависимости
от требуемой точности преобразования может выбираться от 1 до
20. Степень полинома не может быть больше количества записей
в таблице минус один.
2. Метод кусочно-линейной интерполяции.
 поразрядное от- Х, Y – переменные типа SHORTINT, WORD, DWORD, INTEGER,
BYTE, LONGINT. Операция производит поразрядное отрицание
рицание
Х и помещает результат в Y.
4 Операции управления программой и таймерами
Операции управления программой в качестве входных операндов могут использовать переменные типа BOOLEAN.
Таблица 4 – Операции управления программой и таймерами
Операция
Описание
 выход из про- Завершает текущую программу и передает управление следующей
за ней программе. Для условного завершения программы оператор
граммы
RETURN может быть соединен с переменной типа BOOLEAN. Если данная переменная примет логическое значение TRUE, программа завершится. В случае, если оператор RETURN встретился
внутри библиотечного блока, то управление перейдет к следующему блоку, но не к следующей программе.
 переход к мет- Prog1 – метка. Оператор GOTO может быть соединен с переменной типа BOOLEAN. Если данная переменная примет логическое
ке
значение TRUE, будет осуществлен переход к указанной метке.
Если оператор GOTO не соединен с переменной типа BOOLEAN,
осуществляется безусловный переход к метке.
 пуск таймера; tm_var – переменная таймерного типа. Операция осуществляет
инициализацию (сброс), и начинается инкрементирование указанной таймерной переменной с периодом 0,01 с до момента выполнения команды TSTOP. Оператор TSTART может быть соединен с
переменной типа BOOLEAN. Если данная переменная примет логическое значение TRUE, оператор будет выполнен. Команда недопустима для сохраняемых таймерных переменных и констант
таймерного типа.
 останов тайме- tm_var – переменная таймеpного типа. Операция останавливает
инкрементирование указанной таймерной переменной, состояние
ра
переменной сохраняется. Оператор TSTOP может быть соединен с
переменной типа BOOLEAN. Если данная переменная примет логическое значение TRUE, оператор будет выполнен. Команда недопустима для сохраняемых таймерных переменных и констант
таймерного типа.
tm_var – переменная таймеpного типа. Операция продолжает ин продолжить
крементирование указанной таймерной переменной, счет которой
счет таймера
был остановлен оператором TSTOP. Оператор TCONTINUE может
быть соединен с переменной типа BOOLEAN. Если данная переменная примет логическое значение TRUE, оператор будет выполнен.
 старт програм- name_prog – имя любой программы проекта. Операция включает
любую программу в цикл контроллера. Начиная с этого момента
мы
программа исполняется в каждом цикле контроллера. Оператор
GSTART может быть соединен с переменной типа BOOLEAN. Если данная переменная примет логическое значение TRUE, оператор будет выполнен.
Операция
 останов программы
Описание
name_prog – имя любой программы проекта. Операция исключает
любую программу из цикла контроллера. Оператор GSTOP может
быть соединен с переменной типа BOOLEAN. Если данная переменная примет логическое значение TRUE, оператор будет выполнен.
name_prog – имя любой программы проекта, которая должна быть
 выполнить
выполнена. Оператор GCALL может быть соединен с переменной
программу
типа BOOLEAN. Если данная переменная примет логическое значение TRUE, оператор будет выполнен.
EXT – внешняя процедура в виде объектного модуля Parametr –
 выполнить
внешнюю проце- переменная любого типа, являющаяся параметром для операции
EXT. Примечания:
дуру
1. Количество входов и выходов функции EXT, их название и
функциональное назначение (Inp, I/O) определяется пользователем
в диалоговом режиме.
2. На выходы операции Out в качестве параметра не могут быть
назначены константы.
РЕДАКТОР ЯЗЫКА FBD
Редактор вызывается при открывании окна с редактируемой программой. Для
этого необходимо сделать щелчок на соответствующей программе в дереве проекта.
Работа осуществляется с помощью мыши и клавиатуры. Изображение курсора
(стрелка, перекрестие) изменяется в зависимости от активности команды редактора.
Если команда выбрана и активна, курсор принимает вид перекрестия.
Если редактор находится в режиме ожидания команды, курсор принимает
изображение стрелки. Напомним, что правый щелчок вызывает контекстное меню
для выбора команды. Когда команда выбрана, ее действие начинается левым щелчком, а прекращается правым. Повторный правый или двойной правый щелчок переводит редактор в режим ожидания команды.
Панель инструментов редактора представляет собой набор кнопок, расположенных на 4-х панелях инструментов, с условными изображениями различных операций редактора. Панели имеют следующие наименования:
 Edit – общие операции редактирования;
 Boolean – логические операции;
 Analog – арифметические операторы;
 Control – операции управления программой.
Панель инструментов Edit (рисунок 10) содержит кнопки для выполнения следующих операций:
 Редактировать – переход в режим редактирования;
 Увеличить – увеличивает размер изображения;
 Уменьшить – уменьшает размер изображения;
 Навигатор – уменьшает изображение до минимального, показывает панораму всех объектов программы, выделяет рамкой последний вид. Передвигая рамку
можно быстро позиционироваться в нужное место.







Инвертировать – инвертирует выделенные объекты;
Удалить – удаляет выделенные объекты;
Отменить – отменить предыдущую операцию;
Вернуть – вернуть предыдущую операцию;
Создать связь – создать (рисовать связь);
Комментарий – ввести комментарий в программу;
Библиотека – вызвать библиотеку проекта.
Рисунок 10 – Панель инструментов Edit
Контекстные меню содержат наиболее употребительные команды для выбранного объекта. Кроме этого в контекстных меню содержатся команды для изменения
размера используемых шрифтов, размера функциональных блоков, изменения количества входов блоков, редактирования имен и типов связей, получение справки по
указанному объекту.
Для установки функциональных блоков на панели групп операций (Boolean,
Analog, Control) необходимо выбрать операцию в группе. Изображение функционального блока появится в рабочем поле, и будет следовать за курсором. Положение
блока фиксируется на рабочем поле щелчком. Размещая блоки на поле, необходимо
помнить, что выполнение программы на языке FBD производится слева направо,
сверху вниз.
Для установки логических, арифметических блоков и блоков сравнения используется панель инструментов для вызова логических операций (рисунок 11).
Рисунок 11 – Панель инструментов для вызова логических операций
Для логических и арифметических функциональных блоков количество входов
задается перед установкой блока кнопкой «Переключатель количества входов»
(рисунок 12).
Рисунок 12 – Панель инструментов для вызова арифметических операций
Для логических функциональных блоков, а также блоков сравнения можно
применять операцию инверсии. Для этого нужно выбрать команду «Логическая инверсия сигнала» и сделать щелчок на инвертируемом выводе блока. Изменять количество входов и производить операции инверсии можно непосредственно в поле редактора командами контекстного меню.
Для установки функциональных блоков управления программой используется
панель инструментов операций управления программой (рисунок 13).
Рисунок 13 – Панель инструментов операций управления программой
Для соединения блоков необходимо сделать щелчок правой кнопкой мыши в
поле программы и в появившемся контекстное меню выбрать команду меню «Рисовать связь» («Draw wire») (курсор примет изображение перекрестья). Эта команда используется для создания связей между входами и выходами функциональных блоков.
Фактически связь является графическим изображением переменной, и для функциональных блоков ее наличие является обязательным условием. Компилятор выдает сообщение об ошибке, если обнаруживает несоединенный вход или выход. Соединение
изображается отрезками, концы которых фиксируются щелчком. Соединительная линия будет продолжаться до тех пор, пока не сделаете правый щелчок. Повторный
правый щелчок переводит редактор в режим ожидания команды. Нельзя соединять
связи, имеющие разные типы.
Для именования связей используется команда для присвоения связи имени переменной. Если нескольким различным связям присвоить одно и тоже имя, компилятор будет считать их одной связью с одним именем. Двойным щелчком на какой либо
связи вызывается окно ввода имени (рисунок 14).
Рисунок 14 – Окно ввода имени связи
Вы можете ввести имя связи двумя способами: с помощью клавиатуры или
выбрать имя из списка «Показать переменные».
ПРИЁМЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ FBD
В системе исполнения реализуется режим многозадачности. Работа системы
исполнения имеет циклический характер. Весь контролируемый технологический
процесс разбивается на ряд формальных независимых задач, каждая из которых обслуживается отдельной программой. Программы выполняются поочередно с одинаковым приоритетом. Если время одного цикла системы исполнения существенно
меньше скорости изменения реального процесса, можно считать, что все программы
выполняются параллельно, т.е. одновременно.
Идеология программирования на языке FBD подразумевает, что время исполнения каждой программы должно быть вполне определенным, т.е. детерминированным. Другими словами ни одна программа не имеет права зациклиться на неопределенное время, например на ожидании какого-либо события. Данное правило является
«хорошим тоном» в программировании многозадачных процессов и гарантирует, что
никакая программа не приостановит исполнение других программ. Такой подход
обеспечивает простоту и прозрачность для понимания. Так как нет прерываний, система полностью детерминирована. Задачи вызываются в одной и той же последовательности, что позволяет достаточно просто произвести анализ «наихудшего случая»
и вычислить максимальную задержку.
Рассмотрим некоторые приемы программирования на языке FBD:
1 установка функциональных блоков в программе;
2 секция инициализации;
3 ветвление по нескольким условиям;
4 циклы;
5 ожидание события;
6
7
8
9
10
11
подсчет событий;
таймеры;
нормализаторы и преобразователи сигналов;
фильтрация сигналов;
регуляторы;
моделирование объектов управления.
1 установка функциональных блоков в программе
При установке функциональных блоков необходимо помнить правило, что
очередность выполнения блоков в программе: сверху вниз, слева направо, а точка
привязки – левый верхний угол блока.
Типичной ошибкой при установке блоков является то, что программу на языке
FBD отождествляют с электрической схемой, забывая о порядке выполнения блоков.
Например, необходимо сложить переменные A, B (тип FLOAT), привести сумму к
типу INTEGER, сравнить с переменной С (тип INTEGER) и результат поместить в
переменную D. В программе (рисунок 15) алгоритм реализован неправильно. Блок
EQU будет выполнен последним, т.к. его точка привязки расположена ниже точки
привязки блока CMP (порядок выполнения блоков указан цифрами внутри блоков).
Рисунок 15 – Неправильная установка блоков
а)
б)
Рисунок 16 – Варианты правильной установки блоков
В примере программы детектора фронтов логического сигнала (рисунок 17)
выход Q будет принимать значение TRUE на один цикл системы исполнения, при изменении состояния переменной IN на противоположное. То есть на выходе Q будет
формироваться импульс длительностью в один цикл контроллера при изменении полярности входного сигнала.
Рисунок 17 – Детектор фронта
Подробно рассмотрим работу программы. Начальное значение всех переменных равно FALSE. Первым выполняется блок XOR, так как его точка привязки выше,
чем у блока EQU. Значения переменных IN и A на входа блока XOR равны FALSE,
поэтому на выходе Q будет FALSE. После выполнения блока EQU значения переменных не меняются. Так будет до тех пор, пока значение переменной IN не изменится.
Если переменная IN станет равна TRUE, то на выходе блока XOR будет TRUE, так
как IN=TRUE, A=FALSE. После блока XOR выполнится блок EQU, который присвоит переменной А значение TRUE. В следующем цикле на входах блока XOR обе пе-
ременные будут равны TRUE и значение переменной Q станет равно FALSE. Аналогично программа будет работать при изменении значения переменной IN из состояния TRUE в FALSE.
2 секция инициализации
Используя особенности порядка исполнения блоков, можно легко организовать в программе секцию инициализации, т.е. такую секцию, которая выполняется
один раз при первом проходе (рисунок 18).
Рисунок 18 – Пример организации секции инициализации
Оператор GOTO расположен выше блока EQU, поэтому выполняется первым.
При первом проходе программы, значение переменной на входе оператора GOTO
равно FALSE (значение по умолчанию), поэтому переход на метку MAIN не выполнится и будет исполнена секция между метками INIT и MAIN. На втором и последующих циклах значение переменной на входе GOTO будет равно TRUE и выполнится
переход на метку MAIN (т.е. будет пропущена секция инициализации).
3 ветвление по нескольким условиям
Рассмотрим пример программы в которой выполняются различные процедуры, в зависимости от значения переменной SW, т.е. эквивалент оператора Switch в Си
или Case в Паскале. Фрагмент программы на языке Паскаль:
case SW of
1: Prog1;
2: Prog2;
3: Prog3;
end;
Программа на языке FBD будет выглядеть, как показано на рисунке 19.
Рисунок 19 – Эквивалентная программа на языке FBD
Если процедуры расположены внутри данной программы, то вместо GCALL
необходимо использовать операторы GOTO (рисунок 20).
Рисунок 20 – Эквивалентная программа на языке FBD
4 циклы
Существует два принципиальных подхода к организации циклов:
a) организация «непрозрачного» цикла;
б) организация «прозрачного» цикла.
Во время «прозрачного» цикла в данной программе другие программы системы исполнения также выполняются. Во время «непрозрачного» цикла – ожидают его
окончания. Рассмотрим эти подходы на следующих примерах:
Фрагмент программы на языке СИ.
while(i==false){
a+=a;
//тело цикла
}
Цикл выполняется, пока переменная i (тип BOOLEAN) имеет значение false.
Эквивалент программы на языке FBD, в которой организован «непрозрачный»
цикл (рисунок 21, а) будет исполняться непрерывно за один цикл контроллера до тех
пор, пока переменная i не примет значение true. Все остальные программы системы
исполнения будут ожидать окончания цикла.
Эквивалент программы на языке FBD, в которой организован «прозрачный»
цикл (рисунок 21, б) будет исполняться один раз в каждом полном цикле системы исполнения, пока переменная i имеет значение false. Выполнение других программ не
зависит от окончания цикла.
а)
б)
а) «непрозрачный цикл; б) прозрачный цикл.
Рисунок 21 – Эквивалентная программа на языке FBD
Очевидно, что подход, реализованный в примере «б», не мешает работе других
программ и является предпочтительным. Напротив, организация «непрозрачных»
циклов может существенно снизить быстродействие системы исполнения и привести
к потере управления процессом.
5 ожидание события
Задача ожидания события также организуется как «прозрачный» цикл. Условием выполнения программы является наступления события. Пример программы,
ожидающей событие, когда переменная i примет значение 5:
Рисунок 22 – Программа, ожидающая события
Таким же образом можно решить задачу выполнения программы через строго
определенные промежутки времени. Пример программы, которая выполняется один
раз в 10 секунд:
Рисунок 23 – Программа, выполняющаяся один раз в 10 секунд
Пока таймерная переменная t меньше 10S, исполняется оператор RETURN и
выполнение тела программы не происходит. При достижении переменной t значения
10S оператор RETURN игнорируется, и программа выполняется полностью. Обратите
внимание, что сразу после блока CMP стоит оператор TSTART. Чтобы обеспечить
правильные промежутки времени между выполнениями программы, нужно инициализировать таймерную переменную t сразу после блока сравнения, а не в конце тела
программы.
6 подсчет событий
Для реализации счетчика событий достаточно блока ADD. На нем можно реализовать схему, ведущую счет как в положительную, так и в отрицательную стороны
с произвольным шагом (рисунок 24).
а)
б)
а) инкремент; б) декремент.
Рисунок 24 – Реализация счётчика событий
Эти функции можно реализовать и блоком SUB, а также с переменным шагом,
если вместо константы применить переменную.
В примере () переменная S увеличивает свое значение на +1, когда переменная
tick изменит свое состояние из FALSE в TRUE. Переменная M увеличивает свое значение на +1, когда значение переменной S достигнет значения 60. По умолчанию все
переменные равны нулю.
Рисунок 25 – Пример программы реализации подсчёта событий
7 таймеры
Таймерные переменные являются простым инструментальным средством, позволяющим организовать счет времени, элементы задержки, селекторы длительности и
т.п. Таймерную переменную можно сравнить с секундомером, который запускается
командой TSTART, а останавливается командой TSTOP. Количество таймерных переменных, как и переменных других типов, ограничено лишь ресурсами системы исполнения. Один из примеров использования таймерных переменных – программа, в
которой реализован селектор импульсов по длительности (рисунок 26).
Рисунок 26 – Программа реализации селектора импульсов по длительности
Переменная Out примет значение переменной Inp только в том случае, если
переменная Inp не изменит свое состояние в течение 1S. В секции INIT происходит
начальное задание значения переменной Out (на выход копируется состояние входа) и
инициализируется таймерная переменная Т. Далее, в секции MAIN любое изменение
значение Inp приводит к перезапуску таймерной переменной Т. Значение переменной
Т сравнивается с константой =1S. Если Т больше 1S, то значение переменной Inp копируется в Out. Таким образом осуществляется «подавление дребезга» сигнала Inp.
Время cелекции можно сделать любым, если вместо константы =1S использовать
таймерную переменную или другую константу.
Рисунок 27 – Временная диаграмма работы программы
В библиотеке REGULATION элемент HYST реализован по аналогичному алгоритму и предназначен для исключения случайных сбоев от помех или дребезга контактов у дискретных датчиков.
8 нормализаторы и преобразователи сигналов
Задача преобразования значений переменных по определенным законам является типовой в прикладных программах. Преобразование требуется для приведения
соответствия измеренного кода с величиной физического параметра, приведения размерности, калибровки измерительных каналов и т.п. Ниже рассмотрены некоторые
характерные примеры таких преобразований.
В программе преобразования для управления приводом с цифро-аналоговым
преобразователем (ЦАП) сигнал управления Inp выражает положение привода в процентах, а выходная переменная Out – в кодах ЦАП (рисунок 28).
Рисунок 28 – Пример программы преобразования
Значение переменной MAX задает максимальный код ЦАП. На выходе блока
DIV будет значение количества кодов ЦАП на 1%. Блок LIM ограничивает входной
сигнал диапазоном от 0% до 100%. Значение переменной Out, выраженное в кодах
ЦАП, будет эквивалентно значению Inp, выраженному в процентах.
Следующий пример программы реализует преобразование значения сигнала,
которое приходит в кодах АЦП, в физическую величину, измеряемую датчиком
(рисунок 29). В примере приведены данные модуля 5710 Analog I/O Card и датчика
температуры AD22100. Датчик выдает напряжение пропорционально температуре.
При изменении температуры на +1°С напряжение изменяется на +22.5 мВ. Температуре 0°С соответствует напряжение 1.375В. Диапазон датчика от -50°С до +150°С.
Модуль 5710 имеет три коэффициента усиления (х1, х10, х100), диапазон входного
напряжения 10В и 12-ти разрядный АЦП.
Рисунок 29 – Пример программы преобразования
Формула преобразования:
Degr=((Code-2048)(MaxV/Gain/MaxC)-1.375)/dC,
где Degr – значение измеренной температуры в °С;
Code – код сигнала измеренного АЦП;
2048 – поправка для смещения диапазона АЦП в пределы от -2048...+2047;
MaxV – диапазон входного сигнала АЦП (10 В);
Gain – коэффициент усиления модуля 5710 (1, 10 или 100);
MaxC – максимальный код АЦП (4095);
1.375 – напряжение на датчике при 0°С;
dC
– приращение напряжение на датчике на 1°С (0.0225 В/°C).
После расчета температуры по приведенной формуле, значение переменной
Degr ограничивается диапазоном от -50 до +150, т.е. областью достоверных показаний датчика температуры AD22100.
9 фильтрация сигналов
Фильтрация сигналов является одной из наиболее важных задач, решаемых в
большинстве измерительных систем. Реальные сигналы от объектов содержат флюктуации в виде шума, сетевых наводок, случайных выбросов.
Для фильтрации высокочастотной помехи применяется ФНЧ (рисунок 30).
Значение переменной K должно быть в пределах [0,1] и определяет частоту среза
фильтра. Чем меньше значение переменной К, тем ниже частота среза. Для получения
более крутой характеристики, фильтры нужно соединить последовательно (рисунок
31). Подробное описание блока LPF находится в FBD библиотеке Emulator.
Рисунок 30 – ФНЧ
Рисунок 31 – Последовательное соединение фильтров
Для устранения помехи, имеющей нормальное распределение, в качестве
фильтра, можно применить блок AVR (рисунок 32), который вычисляет среднее
арифметическое выборки. Чем больше размер выборки, тем меньше влияние помехи.
Однако следует иметь ввиду, что с увеличением размера выборки увеличивается время установления выходного значения фильтра Out. Поэтому для быстропеременных
процессов размер выборки не следует делать слишком большим.
Рисунок 32 – Блок вычисления среднего арифметического выборки
Для борьбы со случайной помехой можно использовать различные варианты
алгоритмов. Самый простой способ состоит в использовании блока LIM (рисунок 33),
чтобы исключить из расчетов заведомо ложные показания, когда измеренное значение сигнала выходит за границы диапазона измерения датчика.
Рисунок 33 – Использование блока LIM для борьбы со случайной помехой
Если известен характер поведения измеряемого сигнала, например сигнал не
может быстро измениться за короткий промежуток времени, то можно применять
различные ограничители скорости нарастания сигналов (рисунок 34). Переменная Out
стремится к значению переменной Inp, но за 1S не может изменить свое значение
больше чем на 15. Блок LinLIM находится в FBD библиотеке Regulation-Регуляторы.
Рисунок 34 – Линейный ограничитель скорости нарастания сигналов
В примере логарифмического ограничителя скорости нарастания сигнала ()
переменная Out стремится к значению переменной Inp, но за 1S не может изменить
свое значение больше чем на |Out-Inp|*0.1. Величина приращения выходного сигнала
Out определяется динамически, то есть шаг приращения зависит от величины рассогласования входного и выходного значения. Блок LogLIM находится в FBD библиотеке Regulation-Регуляторы.
Рисунок 35 – Логарифмический ограничитель скорости нарастания сигналов
Для лучшей фильтрации можно применять комбинированные фильтры.
Например, сначала определить диапазон входного сигнала блоком Lim, потом ограничить скорость изменения блоком LinLIM или LogLIM, а затем усреднить выборку
блоком AVR ().
Рисунок 36 – Пример применения комбинированных фильтров
10 регуляторы
Назначение регуляторов состоит в том, чтобы устанавливать и поддерживать
на заданном уровне W (задающий параметр) определенную физическую величину Х
(регулируемую величину) (рисунок 37).
Рисунок 37 – Блок-схема простого контура регулирования
Регулятор влияет на регулируемую величину Х с помощью регулирующего
воздействия Y так, чтобы рассогласование регулирования W-X было возможно
меньшим. Воздействующее на объект регулирования возмущение формально можно
представить величиной помехи Z, адитивно накладывающейся на заданный параметр.
Простейшим примером такого регулятора является П-регулятор (рисунок 38)
Рисунок 38 – П-регулятор
Если регулируемая величина Х не равна заданному значению W, появляется
рассогласование W-X. Благодаря этому регулирующее воздействие Y изменяется на
величину (W-X)*Kp. Это изменение компенсирует разность W-X. В установившемся
режиме остаточное рассогласование будет меньше при большем коэффициенте пропорциональности регулятора Kp. Однако следует учитывать, что коэффициент усиления в цепи обратной связи не может быть сколь угодно большим, так как сдвиг фазы
в контуре регулирования приведет к возникновению колебаний. Чтобы обеспечить
возможно меньшую погрешность регулирования и нужную переходную характеристику, к П-регулятору добавляют интегратор и дифференциатор, получая ПИ- или
ПИД-регулятор.
11 моделирование объектов управления
Практическая отладка программы управления сложным объектом является достаточно трудоемким процессом и сопряжена с опасностью непредвиденной реакции
реального объекта на управляющие воздействия. Избежать подобной ситуации, а
также произвести предварительную отладку программы с подбором управляющих
воздействий позволяет моделирование объекта управления.
Модель объекта управления представляет собой отдельную программу или
набор программ. Эти программы принимают от управляющей программы сигналы
управления в виде переменных и эмулируют поведение объекта в виде детерминированной реакции переменных процесса, как заданные функциональные зависимости.
Функциональная зависимость поведения переменных процесса определяется разработчиком. Чем точнее и детальнее описана эта функциональная зависимость, тем
точнее модель эмулирует реальный процесс. Программа эмуляции объекта вставляется в список программ системы исполнения (на этапе отладки) и работает в цикле с
программой регулирования ().
Рисунок 39 – Взаимодействие программ управления и эмуляции объекта
Рассмотрим модель абстрактного процесса в виде резервуара, уровень жидкости в котором (значение параметра регулирования) определяется соотношением объема втекающей и вытекающей из него жидкости (рисунок 40).
Рисунок 40 – Резервуар с жидкостью
Обозначим количество воды, втекающее в резервуар за единицу времени – Inp,
а количество воды, вытекающее из резервуара в единицу времени – Out. Уровень воды в резервуаре – Val, максимально возможный уровень – Max.
Программа, реализующая данную модель объекта:
Рисунок 41 – Программа-модель резервуара
Рисунок 42 – Программа-модель резервуара в виде библиотечного блока
Реальные объекты всегда имеют фазовый сдвиг между регулирующим воздействием и реакцией объекта, обусловленный инерционностью физических процессов.
Смоделируем этот сдвиг посредством ограничителя скорости нарастания сигнала,
имеющего логарифмическую характеристику:
Рисунок 43 – Программа модели объекта
Рисунок 44 – Модель объекта в виде библиотечного блока
Таким образом, мы получили обобщенную модель объекта, где Y – регулирующее воздействие, Z – внешнее возмущение; X – состояние объекта (обратная связь);
K – коэффициент реакции объекта.
Данная модель с определенной степенью приближения эмулирует такие физические процессы, как изменение температуры объекта, давления, объема и некоторые
другие. Так в случае моделирования процесса нагревания, Y – количество тепла, передаваемое объекту, Z – тепловые потери, K – теплоемкость объекта.
Предположим, необходимо исследовать поведение программы стабилизации
параметра:
Рисунок 45 – Модель объекта в виде библиотечного блока
Для этого исследуемая программа должна быть замкнута с программой модели
через общие глобальные переменные (рисунок 46).
Рисунок 46 – Контур регулирования
Контур регулирования состоит из объекта регулирования и регулятора. На
объект воздействует два фактора: управляющее действие регулятора и случайная
внешняя помеха, которая вносит искажения в управляющий сигнал. От объекта к регулятору идет обратная связь, характеризующая состояние объекта. Коэффициент K
определяет время реакции объекта на управляющее воздействие.
Примеры эмуляторов объектов находятся в библиотеке Emulator. В демонстрационном проекте Regul.plc приведен пример программы регулирования, замкнутой с программой эмуляции объекта. Данный проект может быть использован в целях
обучения, а также исследования влияния коэффициентов ПИД-регулятора на переходную характеристику объекта регулирования.
МЕТОДИКА ВЫПОЛНЕНИЯ РАБОТЫ
В процессе выполнения работы необходимо выполнять действия, выделенные
в тексте жёлтым цветом.
Этапы выполнения работы:
I Создание и компиляция проекта в среде UltraLogik32:
1 создание проекта;
2 конфигурирование контроллера;
3 заполнение таблиц глобальных переменных;
4 привязка переменных к входам и выходам контроллера;
5 разработка программы;
6 компиляция;
II Загрузка исполняемого кода в микропроцессорный контроллер 6050:
1 сборка лабораторного стенда;
2 передача файла svetofor.exe на flash-память контроллера;
III Запуск на выполнение переданного файла svetofor.exe.
UltraLogik32
I Создание и компиляция проекта в среде UltraLogik32
Запустить систему UltraLogik32 двойным щелчком левой кнопки
мыши на ярлыке, расположенном на рабочем столе или одним щелчком
левой кнопки мыши на значке при зажатой клавише Ctrl.
В результате запуска появится главное окно среды (рисунок 14).
Рисунок 47 – Главное окно среды UltraLogik32
1 создание проекта
Командой Проект\Новый (Project\New) создать новый проект. В результате
появится окно менеджера проектов (рисунок 48).
Рисунок 48 – Менеджер проекта
В правой части менеджера проекта ввести имя проекта и имя файла для его
сохранения (рисунок 49).
Рисунок 49 – Сохранение проекта в файл
2 конфигурирование контроллера
Произвести конфигурацию контроллера. Для этого необходимо ввести имя
контроллера (произвольное, может содержать цифры, буквы русского и латинского
алфавита, спецсимволы и пробелы), выбрать модель (IBM-PC compatible controller),
тип компилятора (на время разработки и отладки – Emulator) и ввести имя выходного
файла (рисунок 50).
Рисунок 50 – Конфигурация контроллера
Произвести выбор модели процессорной платы контроллера (рисунок 51).
Рисунок 51 – Конфигурация контроллера
Конфигурация процессорной платы включает выбор используемых компонентов и базового адреса порта дискретного ввода-вывода (рисунок 52) – отметить пункт
WDT (Watchdog Timer) (сторожевой таймер) и 140h.
Рисунок 52 – Конфигурация процессорной платы контроллера
Так как данная версия UltraLogik32 не позволяет устанавливать связь с более
чем четырьмя линиями ввода-вывода на одну плату, необходимо в список установленных плат добавить две платы Micro PC EZ Port. Для этого в дереве проекта выбрать «Список установленных плат» (Installed card List). Далее в правой части вызвать
контекстное меню щелчком правой кнопки мыши и выбрать команду «Добавить новую плату» (Add new card). Появится список доступных для добавления плат
(рисунок 53). Выбрать «Micro PC EZ Port» и нажать Ok. Затем добавить ещё одну такую же плату.
Рисунок 53 – Окно выбора установленных плат
Для каждой из плат необходимо выбрать базовый адрес (Base Address). Для
этого в списке установленных плат для каждой платы выбрать базовый адрес 0140
(рисунок 54).
Рисунок 54 – Изменение базового адреса порта ввода-вывода
Также для каждой из этих плат необходимо сконфигурировать порт B на вывод. Для этого необходимо выбрать все линии этого порта (№ 09(B0)-16(B7)) и щелчком правой кнопки мыши по ним вызвать контекстное меню. В этом меню выбрать
команду Output (рисунок 55).
Рисунок 55 – Конфигурация порта B на вывод
3 заполнение таблиц глобальных переменных
Для управления светофором необходимы выходные переменные и переменная,
определяющая время, прошедшее в текущем периоде (таблица 5). Для добавления переменных необходимо в дереве проекта выбрать «Переменные» (Variables). Далее в
правой части вызвать контекстное меню щелчком правой кнопки мыши и выбрать
команду «New» (Новая) (рисунок 56).
Рисунок 56 – Добавление переменной в проект
В результате появится окно добавления переменной (рисунок 57). В нём ввести имя первой переменной, тип, начальное значение (если необходимо), установить
атрибуты, ввести комментарии и нажать Ok.
Рисунок 57 – Окно добавления переменной
Далее добавить остальные необходимые переменные (таблица 5).
Таблица 5 – Список необходимых переменных для всех вариантов заданий
Начальное знаИмя переменной
Тип
Атрибуты
Комментарии
чение
DO09
BOOLEAN
O
Горит зелёная 2.2
DO10
BOOLEAN
O
Горит зелёная 2.1
DO11
BOOLEAN
O
Горит красная 1
DO12
BOOLEAN
O
Горит жёлтая 2
DO13
BOOLEAN
O
Горит зелёная 1.2
DO14
BOOLEAN
O
Горит зелёная 1.1
DO15
BOOLEAN
O
Горит жёлтая 1
DO16
BOOLEAN
O
Горит красная 2
T
TIMER
P
0
Время текущего периода
Для определения списка констант в соответствии с вариантом задания необходимо подсчитать количество состояний объекта (светофора) в общем цикле работы.
Для варианта № 0 это будет 8 состояний, следовательно, для этого варианта необходимо 8 таймерных констант. Они будут характеризовать моменты переключения состояний. Для своего варианта удобно создать список констант с указанием их значений (таблица 6).
Таблица 6 – Список необходимых констант для варианта № 0
Имя переАтрибу- Начальное
Тип
Комментарии
менной
ты
значение
S0_1
TIMER
C
5s
Переход из состояния 0 в состояние 1
S1_2
TIMER
C
6s
Переход из состояния 1 в состояние 2
S2_3
TIMER
C
11s
Переход из состояния 2 в состояние 3
S3_4
TIMER
C
11s50
Переход из состояния 3 в состояние 4
S4_5
TIMER
C
12s
Переход из состояния 4 в состояние 5
S5_6
TIMER
C
12s50
Переход из состояния 5 в состояние 6
S6_7
TIMER
C
13s
Переход из состояния 6 в состояние 7
S7_8
TIMER
C
14s
Переход из состояния 7 в состояние 8
Из полученного списка добавить все константы в проект.
Таким образом будет заполнена таблица глобальных переменных (рисунок
58).
Рисунок 58 – Список глобальных переменных
4 привязка переменных к входам и выходам контроллера
В данном проекте будет использоваться только вывод. Для привязки переменных необходимо выбрать в дереве менеджера проектов первый Micro PC EZ Port и в
правой части двойным щелчком по линии вывода № 09 вызвать окно выбора переменной (рисунок 59). Выбор переменной, используемой для линии вывода, должен
происходить автоматически, т.е. для линии № 09 будет выбрана переменная DO09.
Для подтверждения нажать Ok. То же проделать с линиями № 10, 11 и 12 данного Micro PC EZ Port и линиями № 13-16 другого Micro PC EZ Port (рисунок 60).
Рисунок 59 – Окно выбора переменной для связи с линией вывода
Рисунок 60 – Списки связей для двух Micro PC EZ Port
5 разработка программы
Создание программы производится в списке программ (Program List). Для создания программы выбрать в дереве менеджера проекта список программ. Вызвать
контекстное меню щелчком правой кнопки мыши в правой части менеджера проекта
и выбрать команду «Новая программа» (New program) (рисунок 61).
Рисунок 61 – Добавление новой программы в проект
В результате появится окно выбора языка программирования, с помощью которого будет формироваться логика программы (рисунок 62). Выбрать Functional
Block Diagram (IEC-1131.3) и нажать кнопку Ok, задать имя программы и опять
нажать Ok.
Рисунок 62 – Выбор языка программирования
Далее с помощью языка FBD необходимо разработать программу управления
светофором в соответствии с вариантом задания. В начале программы необходимо
поместить секцию инициализации. Она будет выполнять инициализацию (сброс)
таймерной переменной T. В конце каждого периода работы светофора эта переменная
должна будет сбрасываться, поэтому перед ней необходимо вставить метку перехода
(рисунок 63). Вставить секцию инициализации в программу.
Рисунок 63 – Секция инициализации программы управления светофором
Ниже секции инициализации должна следовать секция условий, определяющих состояния светофора в различные моменты времени. Наиболее простой подход –
сравнивать значение переменной T с константами, определяющими моменты переключения, с помощью операции сравнения «меньше чем». Обязательными условиями
такого подхода являются: а) размещение операций сравнения по мере возрастания
констант; б) в случае истинности обеспечение перехода за пределы секции условий.
Таким образом, секция условий состоит из блоков сравнения, выход которых соединён с блоком перехода (GOTO) (рисунок 64), количество которых определяется количеством состояний светофора за период. Для варианта № 0 их количество будет равно
8, конечно же, с разными константами для сравнения и разными метками перехода
(рисунок 65). В конце секции перехода размещается ещё один элемент, обеспечивающий конец периода. Он осуществляет переход в секцию инициализации, где происходит сброс таймерной переменной T и период начинается сначала.
Рисунок 64 – Элемент секции условий
Рисунок 65 – Секция условий для варианта № 0
Для своего варианта создать секцию условий по аналогии.
Следующая секция – это секция вывода. Она состоит из элементов, описывающих каждое состояние светофора (рисунок 66). Вертикальный порядок размещения
элементов секции вывода не имеет значения. Элемент секции состоит из следующих
операций:
 метка перехода – в блоке условий на неё ссылается операция перехода GOTO, выполняющаяся в случае выполнения условия включения описываемого в данном элементе состояния светофора;
 операции присваивания – для задания соответствующих значений переменным, определяющим состояние светофора; количество операций определяется количеством переменных, определяющих состояния светофора (для варианта № 0 их три,
потому что три переменных – DO11, DO14 и DO15 полностью определяют состояние
светофора); присваиваемое значение должно быть TRUE, если связанный с этой переменной светодиод должен светиться и FALSE в ином случае;
 операция выхода за пределы секции вывода – необходима для предотвращения выполнения других элементов секции вывода.
Рисунок 66 – Элемент секции вывода для варианта № 0
Рисунок 67 – Секция вывода для варианта № 0
Для своего варианта по аналогии создать секцию вывода по аналогии.
6 компиляция
В дереве менеджера проекта выбрать контроллер (Controller). В правой части
выбрать тип компилятора – 80x86-compatible compiler (рисунок 68).
Рисунок 68 – Выбор компилятора
Выполнить компиляцию нажатием кнопки «Компиляция проекта» (Compile
project) в главном окне среды UltraLogik32 (рисунок 69).
Рисунок 69 – Компиляция проекта
В результате компиляции получится исполняемый exe-файл, имя которого было указано при конфигурации контроллера (рисунок 50).
II Загрузка исполняемого кода в микропроцессорный контроллер 6050
1 сборка лабораторного стенда
Для соединения с PC присоединить 10-контактную розетку кабеля VTC-9F к
соединителю порта COM1 микроконтроллера, имеющему позиционное обозначение
J3 (рисунок 70).
J1
J3
Рисунок 70 – Микроконтроллер с присоединенными шлейфами к последовательному
порту COM1 и порту дискретного ввода/вывода
Для управления светофором присоединить 26-контактную розетку кабеля
CMA-26 к соединителю порта дискретного ввода/вывода микроконтроллера, имеющему позиционное обозначение J1 (рисунок 70).
Установить в стандартный конструктив Micro PC плату микроконтроллера,
при этом необходимо обязательно убедиться в том, что питание конструктива ОТКЛЮЧЕНО (выключатель блока питания находится в положении «O»).
Установка платы осуществляется таким образом, чтобы элементный слой платы микроконтроллера, в котором расположена ИС ПЗУ с надписью ROM-DOS, находился слева (рисунок 71).
Рисунок 71 – Расположение платы МК в конструктиве Micro PC
После установки платы необходимо присоединить 9-контактную розетку кабеля VTC-9F к последовательному порту COM1 ПЭВМ. При этом нужно обязательно
убедиться, что компьютер выключен.
2 передача файла svetofor.exe на flash-память контроллера
Для передачи файлов используется пакет терминального программного обеспечения PC SmartLINK. Запуск пакета осуществляется выполнением файла
C:\MPC\sl.exe. Далее подать питание на прибор «Светофор» и на МК. В окне
SmartLINK появится загрузочное сообщение:
PhoenixBIOS (TM) A386 Version x.xx
Copyright (C) 1985-1992 Phoenix Technologies, Ltd.
All Rights Reserved
Octagon Systems Corp. 40 MHz 60xx CPU
Release vx.xx - mm/dd/yy
Ali 386SX-V8T processor detected operating at 40 MHz
640K Base Memory, 1024K Extended
INT 17h BIOS extension vx.xx
Copyright (c) 1995-97 Octagon Systems Corporation
PICO Flash Array
Copyright (c) 1996,Phoenix Technologies Ltd.
Resident Flash (RFA) OEM Layer
Phoenix PICO Flash Array (TM)
Copyright (c) 1996
Phoenix Technologies LTD
Octagon Systems vx.xx
First drive of size 896K is installed in SSD0 (AMD 1MB flash)
Second drive of size 128K is installed in SSD2 (128K SRAM)
RS-485 support BIOS extension vx.xx
Copyright (c) 1996, Octagon Systems
Starting ROM-DOS...
HIMEM v6.22 (Revision x.xx)
Copyright (c) 1989-1995 Datalight, Inc.
VDISK v6.22 (Revision x.xx)
Copyright (c) 1989-1995 Datalight, Inc.
Extended Memory Present
VDISK v6.22 (Revision x.xx)
Copyright (c) 1989-1995 Datalight, Inc.
Formatting 1024K XMS memory as drive E:
60xx C:\>
С помощью команды transfer e:\svetofor.exe МПК переводится в режим
получения исполняемого кода через порт COM1. Нажатием комбинации клавиш
<Alt>+<D> на экран монитора выводится диалог обмена файлами PC SmartLINK (рисунок 4.18). В поле Filename диалога обмена ввести имя файла, предназначенного для
передачи – svetofor.exe. При вводе имени файла следует указать полный путь к
файлу, по которому он расположен, например, D:\svetofor.exe.
Нажатием кнопки Start начинается передача файла на накопитель в МПК.
III Запуск на выполнение переданного файла svetofor.exe
После окончания передачи и возврата в основное окно PC SmartLINK (нажатием <Esc> дважды) можно запустить полученный исполняемый файл командой
e:\svetofor.exe.
С помощью прибора имитации работы светофора проверить правильность работы программы и соответствие варианту задания.
ВАРИАНТЫ ЗАДАНИЙ
№ линии EZ-порта
№ ва- Используемые
используемых сверианта светодиоды
тодиодов
Красный 1
11
0
Зелёный 1.1
14
Жёлтый 1
15
Циклограмма работы светодиодов
11
14
15
t
0
1
Красный 2
Зелёный 2.1
Жёлтый 2
16
10
12
Красный 1
Зелёный 1.1
Зелёный 1.2
Жёлтый 1
11
14
13
15
Красный 1
Зелёный 1.1
Жёлтый 1
Красный 2
Зелёный 2.1
Жёлтый 2
11
14
15
16
10
12
Красный 2
Зелёный 2.1
Зелёный 2.2
Жёлтый 2
16
10
09
12
5
10
15
11
14
13
15
t
5
10
15
11
14
15
16
10
12
0
4
15
t
0
3
10
16
10
12
0
2
5
t
5
10
15
16
10
09
12
0
t
5
10
15
№ линии EZ-порта
№ ва- Используемые
используемых сверианта светодиоды
тодиодов
Красный 1
11
5
Зелёный 1.1
14
Жёлтый 1
15
Красный 2
16
Зелёный 2.1
10
Зелёный 2.2
09
Жёлтый 2
12
Циклограмма работы светодиодов
11
14
15
16
09
10
12
t
0
6
Красный 1
Зелёный 1.1
Жёлтый 1
11
14
15
Красный 2
Зелёный 2.1
Жёлтый 2
16
10
12
Красный 1
Зелёный 1.1
Зелёный 1.2
Жёлтый 1
11
14
13
15
Красный 1
Зелёный 1.1
Жёлтый 1
Красный 2
Зелёный 2.1
Жёлтый 2
11
14
15
16
10
12
10
20
30
16
10
12
t
10
20
30
11
14
13
15
0
9
15
t
0
8
10
11
14
15
0
7
5
t
10
20
30
11
14
15
16
10
12
0
t
10
20
30
№ линии EZ-порта
№ ва- Используемые
используемых сверианта светодиоды
тодиодов
Красный 2
16
10
Зелёный 2.1
10
Зелёный 2.2
09
Жёлтый 2
12
Циклограмма работы светодиодов
16
10
09
12
0
11
Красный 1
Зелёный 1.1
Жёлтый 1
Красный 2
Зелёный 2.1
Зелёный 2.2
Жёлтый 2
11
14
15
16
10
09
12
Красный 1
Зелёный 1.1
Жёлтый 1
Красный 2
Зелёный 2.1
Зелёный 2.2
Жёлтый 2
11
14
15
16
10
09
12
Красный 1
Зелёный 1.1
Жёлтый 1
Красный 2
Зелёный 2.1
Зелёный 2.2
Жёлтый 2
11
14
15
16
10
09
12
20
30
t
10
20
30
11
14
15
16
09
10
12
0
13
10
11
14
15
16
09
10
12
0
12
t
t
5
10
15
11
14
15
16
09
10
12
0
t
10
20
30
№ линии EZ-порта
№ ва- Используемые
используемых сверианта светодиоды
тодиодов
Красный 1
11
14
Зелёный 1.1
14
Зелёный 1.2
13
Жёлтый 1
15
Красный 2
16
Зелёный 2.1
10
Жёлтый 2
12
Циклограмма работы светодиодов
11
14
13
15
16
09
12
0
15
Красный 1
Зелёный 1.1
Зелёный 1.2
Жёлтый 1
Красный 2
Зелёный 2.1
Жёлтый 2
11
14
13
15
16
10
12
t
5
10
15
11
14
13
15
16
09
12
0
t
10
20
30
КОНТРОЛЬНЫЕ ВОПРОСЫ
1 Назначение и основные характеристики среды UltraLogik32.
2 Алгоритм разработки проекта в UltraLogik32.
3 Заполнение списка переменных.
4 Разработка программ.
5 Конфигурирование микроконтроллера.
6 В чем заключается компиляция проекта, какие компиляторы используются
системой?
7 Для чего используется режим Эмуляции?
8 В каких режимах работает отладчик и каково назначение этих режимов?
9 Как производится привязка переменных?
10 Установка статуса программы.
11 «Прозрачный» и «непрозрачный» циклы.
12 Назначение таймерных переменных.
ЛИТЕРАТУРА
1 Справка системы UltraLogik32.
2 Octagon Systems Embedded PCs For Extreme Environments, 6000 Series User’s
Manual.
Download