В данном пункте будет описано представление изменяющегося уровня в резервуаре. Для этого следует копировать изображение разреза в стенке резервуара. Одно из этих изображений следует перекрасить в чёрный цвет для эффекта пустоты в резервуаре. Изображение чёрного цвета нужно поместить на задний план, а поверх его наложить его копию синего цвета для эффекта заполнения резервуара. Затем к этому изображению применяется динамика изменения размера. В поле источника данных заведётся переменная ~~tank~~, значение которой будет определять степень заполнения резервуара.
6.3 Создание имитации наполнения/опустошения резервуара
Ниже будет описана настройка динамического действия для графического объекта Switch On создаваемой мнемосхемы. Как следует из названия, данный графический объект представляет переключатель с двумя фиксируемыми положениями и служит для запуска дискретно-непрерывного процесса. После выполнения однократного щелчка левой клавишей мыши над объектом Switch on (переключатель зелёного цвета), переключатель перейдёт во включённое положение и будет происходить загрузка значений в локальную переменную ~~tank~~.
Данный алгоритм будет иметь следующие свойства:
уровень в резервуаре будет установлен в 0, если значение переменной ~~tank~~ станет меньше 0;
если уровень в резервуаре больше либо равен 0, при одновременном равенстве 1 сигнала запуска процесса то уровень в резервуаре будет представляться следующей формулой:
Уровень = Текущий уровень + ICONICS. Simulator.1\diplom. dip. bool. out1 + ICONICS. Simulator.1\diplom. dip. bool. out2 - отгрузка, где: ICONICS. Simulator.1\diplom. dip. bool. out1 = 1, если задвижка ValveA (расположена слева от резервуара) открыта (CompA поступает в резервуар)
ICONICS. Simulator.1\diplom. dip. bool. out1 = 0, если задвижка ValveA (расположена слева от резервуара) закрыта (CompA не поступает в резервуар)
ICONICS. Simulator.1\diplom. dip. bool. out2 = 1, если задвижка ValveB (расположена справа от резервуара) открыта (CompB поступает в резервуар)
ICONICS. Simulator.1\diplom. dip. bool. out2 = 0, если задвижка ValveB (расположена справа от резервуара) закрыта (CompB не поступает в резервуар)
Отгрузка = 1, если отгрузочный насос включён; Отгрузка = 0, если отгрузочный насос выключен.
Для реализации построенного алгоритма необходимо завести нужные переменные, приведённые ниже в табл.3:
Табл.3 Описание переменных, необходимых для создания дискретно-непрерывного процесса
Имя переменной | Тип | Описание |
ICONICS. Simulator.1\diplom. dip. start | Boolean | Сигнал запуска процесса |
~~tank~~ | Double | Уровень в резервуаре (в диапазоне от 0 до 1000см) |
ICONICS. Simulator.1\diplom. dip. bool. out1 | Boolean | Положение задвижки ValveA |
ICONICS. Simulator.1\diplom. dip. bool. out2 | Boolean | Положение задвижки ValveB |
~~disch~~ | Boolean | Положение отгрузочного насоса |
Для создания этих переменных будет использоваться OPC-сервер имитации сигналов OPC Simulator из программной группы ICONICS Genesis-32. Для данной мнемосхемы будет создана отдельная группа тегов, названная diplom. dip. В нужной группе создаются нужные теги и конфигурируются на усмотрение пользователю.
Рис.12 Добавление набора тегов в OPC-сервере имитации сигналов
Теперь, когда есть нужные переменные можно перейти непосредственно к созданию имитации заполнения/опустошения резервуара. Для этого нужно выделить изображение Swtich On и в панели “Динамика" выбрать свойство “Указание и щелчок мышью". После чего на экран монитора будет выведена диалоговая панель “Инспектор свойств" с выбранной закладкой “Указание и щелчок". В выпадающем списке “Операция " следует выбрать действие “Передать значение".
Рис.13 Внешний вид страницы “Указание и щелчок” диалоговой панели “Инспектор свойств" после выбора операции “Передать значение”
В выпадающем списке “Тип” следует выбрать “ С фиксацией”. Если выбрать тип без фиксации, тогда элемент Switch On будет подавать 1 (или True) на зависимые от него переменные (под словом зависимые следует понимать то, что элемент Switch on управляет всей моделью, то есть если он включен, то процесс может работать, а если выключен то процесс остановится) только при нажатии левой кнопкой мыши. Получается, что весь процесс будет работать лишь в момент нажатия клавишей мышью Switch On. Поэтому следует выбрать тип “С фиксацией" (фиксация позволяет зафиксировать положение/значение элемента до тех пор, пока пользователь не изменит положение/значение этого элемента). Теперь если нажать левой клавишей мыши на элемент Switch On, то он станет 1 (или True) до тех пор, пока пользователь не остановит процесс, тем самым изменив True на False. В группе параметров “Порядок выполнения” отмечается флажок “Пока нажато”, после чего в поле “Интервал" устанавливается значение 50 мс (это значит, что в переменную будет записываться значение раз в 50 мс). Источником данных будет являться локальная переменная ~~tank~~. После настройки параметров остаётся ввести выражение, которое будет отображать описанный ваше алгоритм. Для этого в инспекторе свойств есть меню “Редактор выражений”.
При вызове редактора выражений будет выведена диалоговая панель, в которую и будет введёно выражение. Выражение выглядит так: X= (if (~~tank~~>1000,1000,~~tank~~ +
{{ICONICS. Simulator.1\diplom. dip. start}}*{{ICONICS. Simulator.1\diplom. dip. bool. out1}}+{{ ICONICS. Simulator.1\diplom. dip. start}}*
{{ICONICS. Simulator.1\diplom. dip. bool. out2}} - {{ICONICS. Simulator.1\diplom. dip. start}} * ~~disch~~)) * (if (~~tank~~<0, 0,1))
Далее следует установить соединение между положением переключателя Switch On и переменной ICONICS. Simulator.1\diplom. dip. start. Для этого необходимо выбрать инструмент “Указание и щелчок мышью". В появившейся диалоговой панели, в списке “Операция" нужно выбрать “Передать значение” и в поле “Значение" поставить 1. Далее переключатель Switch On будет настроен таким образом, что в режиме исполнения он будет видимым только в случае, если дискретно-непрерывный процесс остановлен. Для этого нужно выделить элемент Switch On и выбрать инструмент “Скрыть/блокировать" в панели “Динамика”. На экран будет выведена диалоговая панель, которой в качестве источника данных будет переменная ICONICS. Simulator.1\diplom. dip. start и указываем параметр “Скрыть/блокировать, если true”. Получается, что если переменная ICONICS. Simulator.1\diplom. dip. start будет равна 1, то объект Switch On не будет видимым в режиме исполнения. Теперь, когда настроен элемент Switch On, нужно настроить другой элемент - Switch Off, который предназначен для остановки процесса. Переключатель Switch Off должен быть видимым только в случае, если процесс запущен. В то же время щелчок левой клавишей мыши на данном переключателе должен приводить к сбросу в 0 значение переменной ~~tank~~.
Выделяем объект Switch Off и используем инструмент “Указание и щелчок мышью" в панели “Динамика”. В появившемся окне нужно выбрать операцию Передать значение и в поле Порядок выполнения необходимо указать Если отпущено. Источником данных будет переменная ICONICS. Simulator.1\diplom. dip. start и в поле значение указываем 0. Снова выделяем объект Switch Off и выбираем инструмент “Скрыть/блокировать" в инструментальной панели “Динамика”. В инспекторе свойств с выбранной закладкой “Скрыть" нужно выполнить нужную настройку. Источником данных выбираем ICONICS. Simulator.1\diplom. dip. start и выбираем опцию “Скрыть/блокировать, если False". Теперь когда все настройки с элементами Switch On и Switch Off, следует наложить их друг на друга для динамического эффекта.