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

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

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

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

С впускным трубопроводом дело обстоит немного сложнее. Поток в ней есть только при условии запуска насоса и открытия впускной задвижки. Поэтому в поле Expression/Formula должна быть соответствующая формула. Окно динамического действия для участков входного трубопровода (прямоугольников, наложенных на них) продемонстрировано на рис. 28.

Рис. 28

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

В связи с наличием всплывающих подсказок текстовая информация о статусе насоса и задвижек не представляется необходимой. Сгруппируем эту информацию (выделив необходимые объекты и образовав из них одну группу) и добавим на мнемосхему элемент Check Box (группа Windows Objects), позволяющий отобразить или скрыть ее. Также сгруппируем информацию о текущем уровне. После группировки объектов группы по умолчанию будут названы Group1 и Group 2 для информации о статусе оборудования и информации о текущем уровне соответственно.

Примечание! После группировки текстовых объектов необходимо удалить у каждого из них динамическое действие на изменение свойства видимости/невидимости (отображения на мнемосхеме).

Для объекта Сheck Box нам нужны 2 позиций:

1.Отображать информацию об оборудовании.

2.Отображать информацию об уровне.

31

Изначально же данный элемент демонстрирует нам три позиции, количество которых можно изменить с помощью свойства Geometry Number of Boxes.

Текст каждой позиции можно поменять используя свойства:

Font Index — отвечает за то, какой позиции будет присвоен текст.

Font Text — отвечает непосредственно за текст той или иной позиции.

Теперь необходимо запрограммировать данный объект на изменение выбора позиции. Для этого воспользуемся соответствующим событием (Events

Property Topics Output/Input Selected Box Change), предварительно создав тег shw_inf, имеющий численный формат.

SetTagDouble("shw_inf",value);

if (value&1) SetVisible(lpszPictureName,"Group1",1); else SetVisible(lpszPictureName,"Group1",0);

if (value&2) SetVisible(lpszPictureName,"Group2",1); else SetVisible(lpszPictureName,"Group2",0);

Программа работает следующим образом.

Присваиваем тегу shw_inf значение, соответствующее отмеченным галочкам.

Если галочкой отмечена первая позиция, то отображаем информацию о состоянии оборудования.

В противном случае скрываем данную информацию.

Если галочкой отмечена вторая позиция, то отображаем информацию о текущем уровне в резервуаре.

В противном случае скрываем эту информацию.

Конечно, если галочками будут отмечены обе позиции, то и та, и другая информация будут отображаться на мнемосхеме.

Примечание! Если бы элемент Check Box имел больше позиций, то проверка условия отметки галочкой третье позиции имела бы вид: if (value&4)

Для проверки четвертой позиции условие бы выглядело как if (value&8) … и т.д.

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

double stat=GetTagBit("shw_hd_schm"), //определяем текущее состояние

 

кнопки

shw=GetTagDouble("shw_inf");

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

if (stat)

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

{

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

SetTagDouble("shw_hd_schm",0);

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

 

32

SetVisible(lpszPictureName,"pmp",0);

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

SetVisible(lpszPictureName,"vlv_in",0);

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

SetVisible(lpszPictureName,"vlv_out",0);

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

SetVisible(lpszPictureName,"tnk",0);

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

SetVisible(lpszPictureName,"Group1",0);

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

SetVisible(lpszPictureName,"Group2",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)

 

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

SetVisible(lpszPictureName,"Group2",1);

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

инф. об уровне

 

 

if (shw==3)

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

{

 

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

SetVisible(lpszPictureName,"Group1",1);

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

SetVisible(lpszPictureName,"Group2",1);

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

}

 

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

}

 

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

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

Рассмотрим элемент Option Group (группа Windows Objects). Настроим этот элемент так, чтобы он изменял цвет фона мнемосхемы на один из четырех оттенков (в формате RGB):

Цвет фона №1 — 255, 255, 255;

Цвет фона №2 — 218, 218, 218;

Цвет фона №3 — 182, 182, 182;

Цвет фона №4 — 145, 145, 145.

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

Таким образом, для элемента Option Group нам необходимы 4 позиции:Цвет фона №1.

33

//подпрограмма_выбора
//если выбрана 1-ая позиция, то установить значение тега равным clr 0
//прервать подпрограмму_выбора
//если выбрана 2-ая позиция, то установить значение тега равным clr 1
//прервать подпрограмму_выбора
//если выбрана 3-ья позиция, то установить значение тега равным clr 2
//прервать подпрограмму_выбора
//если выбрана 4-ая позиция, то установить значение тега равным clr 3
//прервать подпрограмму выбора //конец подпрограммы_выбора

Цвет фона №2.

Цвет фона №3.

Цвет фона №4.

Изначально же данный элемент демонстрирует нам три позиции, количество которых можно изменить с помощью свойства Geometry Number of Boxes.

Текст каждой позиции можно поменять используя свойства:

Font Index — отвечает за то, какой позиции будет присвоен текст.

Font Text — отвечает непосредственно за текст той или иной позиции.

Теперь необходимо запрограммировать данный объект на изменение выбора позиции. Для этого воспользуемся соответствующим событием (Events

Property Topics Output/Input Selected Box Change), предварительно создав тег clr, имеющий численный формат.

switch (value) //определяем какая позиция выбрана

{

case 1: SetTagDouble("clr",0);

break;

case 2: SetTagDouble("clr",1);

break;

case 4: SetTagDouble("clr",2);

break;

case 8: SetTagDouble("clr",3);

break;

}

Теперь необходимо настроить динамическое действие (Dynamic Dialog) для фонового цвета мнемосхемы (Colors Background Color). Цвет будет изменяться в соответствии с текущим значением тега clr:

0 — цвет фона №1 (255, 255, 255);

1 — цвет фона №2 (218, 218, 218);

2 — цвет фона №3 (182, 182, 182);

3 — цвет фона №4 (145, 145, 145).

Настройка динамического действия для цвета фона мнемосхемы продемонстрирована на рис. 29.

34

Рис. 29

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

Добавим на мнемосхему объект Combobox (группа Smart Objects). Данный элемент будет скрывать «Показать/скрыть мнемосхему» и окно выбора цвета фона, или демонстрировать их либо по отдельности, либо вместе.

Элемент Combobox предлагает нам всего три позиции, хотя нам необходимы четыре:

1.Показать все.

2.Показать только кнопку.

3.Показать только окно выбора цвета фона.

4.Скрыть все.

Свойство Geometry Number of Rows поможет настроить количество позиций выбора.

Свойства Font Index и Font Text поможет настроить текст каждой позиции.

Свойство Miscellaneous Selected Box поможет настроить изначально выбранную позицию (рекомендуется выбрать четвертую).

Свойства отображения на мнемосхеме кнопки и окна выбора цвета фона следует установить равным No.

Для объекта Combobox необходимо запрограммировать событие изменения выбранной позиции (Events Property Topics Miscellaneous Selected Box Change).

35

switch (value)

 

//определяем какая позиция выбрана

{

 

//подпрограмма_выбора

case 1:

//если выбрана первая позиция (Показать все), то

SetVisible(lpszPictureName,"Option Group1",1);

//показать окно выбора цвета

 

 

 

фона

SetVisible(lpszPictureName,"Button1",1);

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

break;

 

//прервать подпрограмму_выбора

case 2:

//если выбрана вторая позиция (Показать только кнопку), то

SetVisible(lpszPictureName,"Option Group1",0);

//скрыть окно выбора цвета

 

 

 

фона

SetVisible(lpszPictureName,"Button1",1);

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

break;

 

//прервать подпрограмму_выбора

case 3:

//если выбрана третья позиция (Показать

 

только окно выбора цвета фона), то

SetVisible(lpszPictureName,"Option

//показать окно выбора цвета фона

Group1",1);

 

 

 

SetVisible(lpszPictureName,"Button1",0);

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

break;

 

//прервать подпрограмму_выбора

case 4:

//если выбрана первая позиция (Скрыть все), то

SetVisible(lpszPictureName,"Option Group1",0);

//скрыть окно выбора цвета

 

 

 

фона

SetVisible(lpszPictureName,"Button1",0);

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

break;

 

//прервать подпрограмму_выбора

}

 

//конец подпрограммы_выбора

Настроим цвет фона элемента Combobox с помощью динамического действия в зависимости от выбранного цвета фона (зависит от значения тега clr и настраивается аналогичным образом, как и динамическое действие по изменению цвета фона мнемосхемы).

Примерный вид мнемосхемы продемонстрирован на рис. 30.

36

Рис. 30

37

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

«Диалоговые окна в пакете SIMATIC WinCC»

Цель работы:

1.Научиться использовать диалоговые окна в пакете SIMATIC WinCC.

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

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

Диалоговые окна в пакете SIMATIC WinCC создаются посредством использования функции MessageBox(переменная, «текст сообщения», «заголовок окна», параметр_1|параметр_2|…|парметр_n).

Обычно, переменной является хендл окна RunTime (в рамках данной работы мы будем рассматривать только такой случай). Таким образом, код описания переменной будет следующий:

HWND handle=NULL; //описание переменной – хендла окна RunTime WinCC handle=FindWindow(NULL, "WinCC-Runtime - "); //поиск окна проекта

Параметры функции MessageBox:

1.Типы MessageBox:

a.MB_OK — диалоговое окно содержит кнопку «ОК»;

b.MB_YESNO — диалоговое окно содержит кнопки «Да», «Нет»;

c.MB_OKCANCEL — диалоговое окно содержит кнопки «ОК», «Отмена»;

d.MB_YESNOCANCEL — диалоговое окно содержит кнопки «Да», «Нет», «Отмена»;

e.MB_RETRYCANCEL — диалоговое окно содержит кнопки «Повторить», «Отмена»;

f.MB_ABORTRETRYIGNORE — диалоговое окно содержит кнопки «Прервать», «Повторить», «Пропустить».

2.Иконки MessageBox:

a.MB_ICONSTOP — диалоговое окно содержит иконку «Стоп»;

b.MB_ICONQUESTION — диалоговое окно содержит иконку «Вопрос»;

c.MB_ICONINFORMATION — диалоговое окно содержит иконку «Информация» («Справка»);

d.MB_ICONEXCLAMATION (MB_ICONWARNING) — диалоговое окно содержит иконку «Внимание» («Восклицательный знак»).

3.Кнопки MessageBox, выбранные по умолчанию:

a.MB_DEFBUTTON1 — первая кнопка выбрана по умолчанию (первая кнопка всегда выбирается по умолчанию, если не прописана другая команда);

b.MB_DEFBUTTON2 — вторая кнопка выбрана по умолчанию;

c.MB_DEFBUTTON3 — третья кнопка выбрана по умолчанию;

d.MB_DEFBUTTON4 — четвертая кнопка выбрана по умолчанию.

4.Возвращаемые значения по нажатию кнопок MessageBox:

38

a.IDOK — была нажата кнопка «ОК»;

b.IDNO — была нажата кнопка «Нет»;

c.IDYES — была нажата кнопка «Да»;

d.IDRETRY — была нажата кнопка «Повторить»;

e.IDABORT — была нажата кнопка «Прервать»;

f.IDIGNORE — была нажата кнопка «Пропустить»;

g.IDCANCEL — была нажата кнопка «Отмена».

Для получения больших объемов информации рекомендуется воспользоваться ссылкой

https://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm

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

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

Добавим на мнемосхему круглую кнопку «Выход», которая будет закрывать проект.

Запрограммируем эту кнопку следующим образом:

HWND handle=NULL; //описание переменной – хендла окна RunTime WinCC handle=FindWindow(NULL, "WinCC-Runtime - "); //поиск окна проекта

if (MessageBox(handle, "Вы уверены?", "Внимание!", MB_YESNO |MB_ICONQUESTION|MB_SETFOREGROUND)==IDNO) return;

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

DeactivateRTProject(); //иначе проект закрывается

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

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

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

if (MessageBox(handle, "Запустить насос?", "Внимание!",MB_YESNO| MB_ICONQUESTION|MB_SETFOREGROUND)==IDNO) goto end;

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

else //иначе

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

39

SetTagDouble("pmp",1); //пуск насоса

if (vlv==1 && lvl<100) //если задвижка открыта и резервуар не полон, то

SetTagFloat("lvl",lvl+0.2); //начать налив if (vlv==0) //если задвижка закрыта, то

{ подпрограмма_закрытой_задвижки

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

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

SetTagDouble("pmp",0); //останов насоса goto end; //переход в конец программы

} конец подпрограммы_закрытой_задвижки if (lvl==100) //если резервуар полон

{ //подпрограмма_полного_резервуара

MessageBox(handle, "Нельзя запустить насос!", "Резервуар полон!",

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

SetTagDouble("pmp",0); //останов насоса goto end; //переход в конец программы

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

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

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

if (MessageBox(handle, "Остановить насос?", "Внимание!", MB_YESNO| MB_ICONQUESTION|MB_SETFOREGROUND)==IDYES) SetTagDouble("pmp",0);

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

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

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

HWND handle=NULL; //описание переменной – хендла окна RunTime WinCC double stat=GetTagBit("vlv_in"); //определяем текущее состояние вх. задвижки handle=FindWindow(NULL, "WinCC-Runtime - "); //поиск окна проекта

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

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

40