
Методические_указания_WinCC_(зашифрован)
.pdf
Здесь все достаточно просто, и для понимания в том числе. Поток есть, когда течет жидкость, а она, в свою очередь течет, когда открыта выпускная задвижка. Поэтому для отображения действительной подсказки достаточно одного тега выпускной задвижки.
С впускным трубопроводом дело обстоит немного сложнее. Поток в ней есть только при условии запуска насоса и открытия впускной задвижки. Поэтому в поле 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
Цвет фона №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