Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методические_указания_WinCC_(зашифрован)

.pdf
Скачиваний:
299
Добавлен:
29.05.2015
Размер:
2.33 Mб
Скачать

//вывод на передний план окна с иконкой вопроса, заголовком «Внимание!», сообщением «Открыть задвижку?» и двумя кнопками «Да» и «Нет», и если нажата кнопка «Да», то открыть задвижку

if (stat==1) //если задвижка открыта, то

if (MessageBox(handle, "Закрыть задвижку?","Внимание!", MB_YESNO| MB_ICONQUESTION|MB_SETFOREGROUND)==IDNO) goto end;

//вывод на передний план окна с иконкой вопроса, заголовком «Внимание!», сообщением «Закрыть задвижку?» и двумя кнопками «Да» и «Нет», и если нажата кнопка «Нет», то переход в конец программы

if (GetTagBit("pmp")) //если насос запущен, то

if (MessageBox(handle, "Закрытие задвижки приведет к останову насоса!

Продолжить?","Внимание!", MB_OKCANCEL|MB_ICONEXCLAMATION| MB_SETFOREGROUND)==IDOK)

//вывод на передний план окна с иконкой восклицания, заголовком «Внимание!», сообщением «Закрытие задвижки приведет к останову насоса! Продолжить?» и двумя кнопками «ОК» и «Отмена», и если нажата кнопка «ОК», то

{ //подпрограмма

SetTagDouble("vlv_in",0); //закрыть задвижку SetTagDouble("pmp",0); //останов насоса

} //конец подпрограммы

end:; //конец программы, возврат на мнемосхему

Программный код для выпускной задвижки:

HWND handle=NULL; //описание переменной – хендла окна RunTime WinCC double vlv=GetTagBit("vlv_out"); //определяем текущее состояние выпускной задвижки

float lvl=GetTagFloat("lvl"); //получаем текущее значение уровня handle=FindWindow(NULL, "WinCC-Runtime - "); //поиск окна проекта if (vlv==0) //если задвижка закрыта, то

if (MessageBox(handle, "Открыть задвижку?", "Внимание!", MB_YESNO| MB_ICONQUESTION|MB_SETFOREGROUND)==IDNO) goto end;

//вывод на передний план окна с иконкой вопроса, заголовком «Внимание!», сообщением «Открыть задвижку?» и двумя кнопками «Да» и «Нет», и если нажата кнопка «Нет», то переход в конец программы

{//подпрограмма_открытия

SetTagDouble("vlv_out",1); //открыть задвижку

if (lvl>0) SetTagFloat("lvl",lvl-0.1); //если резервуар не пуст, то начать слив if (lvl==0) //если резервуар пуст, то

{//подпрограмма_пустого_резерувара

41

MessageBox(handle, "Нельзя открыть задвижку", "Резервуар пуст!", MB_OK| MB_ICONSTOP|MB_SETFOREGROUND); //вывод на передний план окна с кнопкой «ОК», заголовком «Резервуар пуст!», сообщением «Нельзя открыть задвижку!» и конкой стоп, нажатие на кнопку возвращает вас на мнемосхему и продолжает выполнение программы

SetTagDouble("vlv_out",0); //закрыть задвижку goto end; //переход в конец программы

}конец подпрограммы_пустого_резервуара

}конец подпрограммы_открытия

if (vlv==1) //если задвижка открыта, то

if (MessageBox(handle, "Закрыть задвижку?", "Внимание!", MB_YESNO| MB_ICONQUESTION|MB_SETFOREGROUND)==IDYES) SetTagDouble("vlv_out",0); //вывод на передний план окна с иконкой вопроса, заголовком «Внимание!», сообщением «Закрыть задвижку?» и двумя кнопками «Да» и «Нет», и если нажата кнопка «Да», то закрыть задвижку

end:; //конец программы, возврат на мнемосхему

Запустите проект и убедитесь в полной работоспособности мнемосхемы. Примерный вид мнемосхемы представлен на рис. 31.

Рис. 31

42

Лабораторная работа №5

«Использование элементов ActiveX в пакете SIMATIC WinCC»

Цель работы:

1.Рассмотреть в рамках лабораторной работы простейшие ActiveX- элементы пакета SIMATIC WinCC и научиться использовать их.

2.Дополнить мнемосхему новыми элементами.

Теоретическая часть

ActiveX — фреймворк для определения программных компонентов, пригодных к использованию из программ, написанных на разных языках программирования. Программное обеспечение может собираться из одного или более таких компонентов, чтобы использовать их функционал.

В рамках данной лабораторной работы будут рассмотрены простейшие ActiveX-элементы:

кнопка WinCC Push Button Control;

слайдер WinCC Slider Control;

окно трендов WinCC OnlineTrendControl.

Объект Active-X "WinCC Online Trend Control" (также WinCC OTC)

используется для отображения данных процесса в виде графика. Объект OTC позволяет добиться высокой гибкости при конфигурировании, поскольку всё конфигурирование выполняется исключительно в редакторе Graphics Designer (дизайнер). Чтобы можно было обратиться к тегам, которые будут отображаться, они должны быть сконфигурированы либо в WinCC Explorer, либо в архиве значений процесса.

Практическая часть

Возьмем за основу проект, созданный в ходе выполнения лабораторной работы №4, и продублируем мнемосхему.

Первый ActiveX-элемент, который мы рассмотрим WinCC OnlineTrendControl. Добавим его на мнемосхему и осуществим его настройку.

На вкладке Trends осуществим настройку, как показано на рис. 32 и 33. Примечание! Предварительно необходимо создать тег sldr_lvl, имеющий числовой формат. Данный тег будет использован для слайдера WinCC Slider Control, который будет добавлен позже. Для тегов время цикла

(Cycle Time) устанавливать равным 250 мс.

43

Рис. 32

Рис. 33

На вкладке General осуществим настройку, как показано на рис. 34. Примечание! Делаем это для того, чтобы вы случайно не закрыли окно

трендов (свойство Closable), сохраняя при этом возможность передвигать окно по экрану (свойство Movable) и изменять его размер (свойство Sizable). Окно будет скрываться/демонстрироваться по нажатию кнопки WinCC Push Button Control, которая будет добавлена позже.

Рис. 34

44

На вкладках Time Axis и Value Axis произведем настройку, как показано на рис. 35 и 36.

Рис. 35

Рис. 36

На этом настройка окна трендов практически завершена. Осталось только настроить свойство отображения данного окна на экране. Изначально, данное окно не должно отображаться на экране, поэтому необходимо начальное значение свойства Miscellaneous Display данного объекта установить равным No. Необходимо также переименовать данный объект в Trend, воспользовавшись свойством Object Name.

Теперь добавим на мнемосхему кнопку WinCC Push Button Control, которая будет отображать или скрывать окно трендов.

Настроим текст на кнопке (Properties Control Properties Caption)

таким образом, чтобы этот текст изменялся при ее нажатии. Используем для этого динамическое действие (Dynamic Dialog) (рис. 37).

45

Рис. 37

Теперь настроим событие по нажатию кнопки (Events Object Events Click) так, чтобы осуществлялось отображение или скрытие окна трендов. double stat=GetVisible(lpszPictureName,"Trend");

//определяем текущий статус окна трендов (отображено или скрыто) if (stat) SetVisible(lpszPictureName,"Trend",0);

//если окно трендов отображено, то скрываем его if (!stat) SetVisible(lpszPictureName,"Trend",1);

//если окно трендов скрыто, то отображаем его

Отнесем данную кнопку к классу информации об уровне. Тогда нам необходимо настроить свойство отображения данной кнопки на экране. Осуществим это программным методом.

Во-первых, за отображение информации об уровне отвечает элемент Combobox, в связи с чем необходимо изменить его программный код (Events

46

Property Topics Output/Input Selected Box Change) следующим образом.

Примечание! Предварительно необходимо изменить имя нашей кнопки

(свойство Object Name) на trnd_btn.

 

 

 

 

SetTagDouble("shw_inf",value); //присвоить

тегу

shw_inf

значение,

 

соответствующее отмеченным

галочками

 

позициям

 

 

 

if (value&1)

 

//если 1-ая позиция отмечена

SetVisible(lpszPictureName,"Group1",1);

галочкой,

то показать

инф. об

оборудовании

 

 

 

 

else

 

//иначе скрыть информацию об

SetVisible(lpszPictureName,"Group1",0);

оборудовании

 

 

 

 

 

if (value&2)

//если 2-ая позиция отмечена галочкой, то

{

 

//подпрограмма_отметка_2

SetVisible(lpszPictureName,"Group2",1);

//показать информацию об уровне

SetVisible(lpszPictureName,"trnd_btn",1);

//показать кнопку

 

}

 

//конец подпрограммы_отметка_2

else

 

//иначе

 

 

{

 

//подпрограмма_нет_отметки_2

SetVisible(lpszPictureName,"Group2",0);

//скрыть информацию об уровне

SetVisible(lpszPictureName,"trnd_btn",0);

//скрыть кнопку

 

}

//конец подпрограммы_нет_отметки_2

У вас мог возникнуть вопрос: «А не проще ли было перегруппировать объект Group2 так, чтобы в эту группа входила и кнопка?»

Это, конечно же, проще, но данная кнопка не может быть сгруппирована с другими объектами. Поэтому продолжаем.

Во-вторых, для правильной работы мнемосхемы нам также необходимо изменить программный код кнопки «Показать/скрыть мнемосхему» (Events Mouse Mouse Click) следующим образом:

double stat=GetTagBit("shw_hd_schm"),

//определяем текущее состояние

 

 

кнопки

shw=GetTagDouble("shw_inf");

//определяем какие галочки поставлены

if (stat)

 

//если кнопка нажата, то

{

 

//подпрограмма_спуска

SetTagDouble("shw_hd_schm",0);

 

//спустить кнопку

SetVisible(lpszPictureName,"pmp",0);

 

//скрыть насос

SetVisible(lpszPictureName,"vlv_in",0);

 

//скрыть впускную задвижку

SetVisible(lpszPictureName,"vlv_out",0);

//скрыть выпускную задвижку

SetVisible(lpszPictureName,"tnk",0);

 

//скрыть резервуар

SetVisible(lpszPictureName,"Group1",0);

//скрыть инф. об оборудовании

47

SetVisible(lpszPictureName,"Group2",0);

//скрыть инф. об уровне

SetVisible(lpszPictureName,"trnd_btn",0);

//скрыть кнопку

}

 

//конец подпрограммы_спуска

if (!stat)

 

//если кнопка не нажата, то

{

 

//подпрограмма_нажатия

SetTagDouble("shw_hd_schm",1);

//нажать кнопку

SetVisible(lpszPictureName,"pmp",1);

//отобразить насос

SetVisible(lpszPictureName,"vlv_in",1);

//отобразить впускную задвижку

SetVisible(lpszPictureName,"vlv_out",1);

//отобразить выпускную задвижку

SetVisible(lpszPictureName,"tnk",1);

//отобразить резервуар

if (shw==1)

 

//если поставлена галочка только

SetVisible(lpszPictureName,"Group1",1);

на первой позиции, то отобразить

инф. об оборудовании

 

 

if (shw==2)

//если поставлена галочка только на второй позиции, то

{

 

//подпрограмма_отметка_2

SetVisible(lpszPictureName,"Group2",1);

//отобразить инф. об уровне

SetVisible(lpszPictureName,"trnd_btn",1);

//отобразить кнопку

}

 

//конец подпрограммы_отметка_2

if (shw==3)

//если поставлены галочки на обоих позициях, то

{

 

//подпрограмма_все_отметки

SetVisible(lpszPictureName,"Group1",1);

//отобразить инф. об оборудовании

SetVisible(lpszPictureName,"Group2",1);

//отобразить инф. об уровне

SetVisible(lpszPictureName,"trnd_btn",1);

//отобразить кнопку

}

//конец подпрограммы_все_отметки

}

 

//конец подпрограммы_нажатия

Теперь мнемосхема работает верно, в чем вы можете убедиться запустив проект.

Если вы помните, в окне трендов помимо уровня в резервуаре мы собирались отображать уровень слайдера (рис. 2). Делаем мы это просто для наглядности. Для этого добавим на мнемосхему слайдер WinCC Slider Control

ипроизведем его настройку.

Вокне трендов отображаются тренды изменения значений тегов (для уровня в резервуаре отображается тег lvl — синий цвет, для уровня слайдера отображается тег sldr_lvl — красный цвет). Поэтому, изменение положения бегунка слайдера должно передаваться в тег sldr_lvl.

Для организации этой связи настроим для слайдера событие по изменению положения бегунка (Events Property Topics Control Properties

Position Change). Настроим для этого действия прямую связь (Direct Connection) между положением бегунка и значение тега sldr_lvl (рис. 38).

48

Рис. 38

Примечание! Начальное значение свойства Control Properties Position рекомендуется установить равны 0, чтобы бегунок был в самом низу.

На свое усмотрение вы можете изменить текст SIMATIC на любую другую надпись (Control Properties Caption). Кроме того, вы можете поменять сам шрифт, его размер и цвет, размер шрифта шкалы, его размер и цвет и т.д. (разберитесь сами).

Настроим динамическое действие (Dynamic Dialog) на изменение цвета заливки шкалы (Control Properties BarFillColor) по такому же принципу, что и изменение цвета заполнения резервуара, т.е.:

0 ÷ 10 — аварийно-низкий уровень (красный цвет);

11 ÷ 25 — предельно низкий уровень (желтый цвет);

26 ÷ 75 — нормальный уровень (синий цвет);

76 ÷ 90 — предельно-высокий уровень (желтый цвет);

91 ÷ 100 — аварийно-высокий уровень (красный цвет).

Настройка продемонстрирована на рис. 39.

49

Рис. 39

Настроим также отображение данного объекта на мнемосхеме. Будем отображать его вместе с окном трендов. Для этого необходимо поменять программный код кнопки «Показать/скрыть окно трендов» (Events Object Events Click) следующим образом.

Примечание! Предварительно необходимо изменить имя слайдера (свойство Object Name) на sldr и установить начальное значение (Static)

равным No для свойства Miscellaneous Display. double stat_1=GetVisible(lpszPictureName,"Trend"),

//определяем текущий статус окна трендов (отображено или скрыто) stat_2=GetVisible(lpszPictureName,"sldr");

//определяем текущий статус слайдера (отображен или скрыт) if (stat_1) SetVisible(lpszPictureName,"Trend",0);

//если окно трендов отображено, то скрываем его if (stat_2) SetVisible(lpszPictureName,"sldr",0);

//если слайдер отображен, то скрываем его

50