Разработка верхнего уровня АСУТП в среде SCADA-системы Citect 6.0, страница 7

- «rp_01, rp_02, rp_03, rp_04, rp_05» – расход пульпы в вертикальные аппараты №1, №2, №3, №4 и №5 соответственно;

- «rgv_01, rgv_02, rgv_03, rgv_04, rgv_05» – расход горячей (промывной) воды в аппараты №1, №2, №3, №4 и №5 соответственно;

- «rasrastv_01, rasrastv_02, rasrastv_03, rasrastv_04, rasrastv_05» – расход раствора на выходе из аппаратов №1, №2, №3, №4 и №5 соответственно;

- «Lev_01, Lev_02, Lev_03, Lev_04, Lev_05» – отклонение в аппаратах №1, №2, №3, №4 и №5 соответственно.

Текст основной программы, моделирующей автоматическую стабилизацию уровня раствора в аппарате №1 (для аппаратов №2, №3, №4 и №5 реализовано аналогично):

if vklpom and vkl then rp_01=1000+300*sin(SysTime()/10000.0) else rp_01=1000 end

/*

Моделирование синусоидальных помех, влияющих на величину расхода пульпы в аппарат

*/

Lev_01_old=Lev_01

Lev_01=Lev_01+0.3183*(rp_01+rgv_01-rasrastv_01)/3600

/*

Моделирование изменения отклонения уровня в аппарате, где:

- «0.3183» – отношение скорости изменения уровня в аппарате к расходу раствора на выходе из аппарата;

- «3600» - количество секунд в одном часе;

- «Lev_01_old» - предыдущее значении переменной «Lev_01»

*/

if vstr=1 then rgv_01=243 end

if vstr=0 then rgv_01=0 end

if vklpom then

   rgv_01=rgv_01+3*sin(SysTime()/1000)

   if rgv_01<0 then rgv_01=0 end

end

if (SysTime()-time_01)>=5000 then

   time_01=SysTime()

   vstr=1-vstr

end

/*программная реализация импульсной подачи промывной воды в аппарат с промежутком в 5 секунд*, где:

- «3*sin(sysTime()/1000)» - реализация синусоидальных помех, влияющих на расход горячей воды в аппарат;

- «SysTime» - функция Cicode, возвращающая значение величины времени, прошедшего от начала работы проекта (режима исполнения)

*/

if vkl=0 then

  Lev_01=0

  rasrastv_01=1136.5

  rgv_01=121.5

end

/*

 Реализация установки номинального значения расхода раствора на выходе из аппарата, номинального уровня в аппарате и номинального расхода горячей воды в аппарат

*/

if vkl1=1 and vkl=1 then rasrastv_01=rasrastv_011 else I_01=I_01+Lev_01*ki_01*5/32000

rarastv_01=1136.5+Lev_01*kp_01*200/32000+I_01+kd_01* *10/32000*(Lev_01-Lev_01_old) end

/*

Реализация ПИД - закона регулирования уровня раствора в аппарате, где:

- «kp_01» - пропорциональная составляющая закона регулирования;

- «I_01» - интегральная составляющая закона регулирования;

- «kd_01» - дифференциальная составляющая закона регулирования;

- «1136.5» - номинальный расход раствора на выходе из аппарата при отсутствии помех;

- «32000» - выходное значение сигнала устройства ввода/вывода;

*/

После определения всех переменных тэгов задаются тэги, используемые при построении трендов (TrendTags). Для этого в меню «Tags» редактора проектов выбирается пункт «TrendTags». В появившемся окне (рисунок 11) заполняются поля:

- «TrendTagName» – имя тэга;

- «Expression» – выражение (регистрируемое значение);

- «Trigger» – выражение Cicode, либо название тэга, запускающее регистрацию данных (для  тэга «Lev_01» (рисунок 11) регистрация данных будет производиться, когда значение тэга находится в области от -1 до +1);

- «SamplePeriod» – интервал опроса;

- «FileName» – путь доступа к файлу, в котором будут храниться данные тренда;

«StorageMethod» – метод сохранения данных (для тэга «Lev_01» на сохранение отводится восемь бай);

- «EngUnits» – единица измерения регистрируемых значений переменных или выражения, которые так же отображаются вдоль координатной оси и на графике тренда;

- «Format» – формат вывода значения тренда в графическом окне.

Так же можно заполнить следующие поля:

- «Time» – время суток, в которое начнется запись в архивный файл (в формате «ЧЧ:ММ:СС»);

- «Period» – периодичность записи в архивный файл;

- «Privilege» – привилегии, которыми должен обладать оператор для вывода данных на тренд;

- «Area» – название зоны, к которой принадлежит данный тренд.

По окончании заполнения полей нажимается кнопка «Add».

Рисунок 11-Окно определения свойств «TrendTags»