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

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

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

Следовательно, программный код изменения уровня будет выглядеть следующим образом:

double pmp=GetTagBit("pmp"), //задаем переменную pmp и присваиваем ей

 

 

текущее значение тега pmp

vlv_in=GetTagBit("vlv_in"),

//задаем переменную vlv_in и присваиваем

 

 

ей текущее значение тега vlv_in

vlv_out=GetTagBit("vlv_out");

//задаем переменную vlv_out и присваиваем

 

 

ей текущее значение тега vlv_out

if (pmp && vlv_in)

//двойное условие: если текущие состояния

 

 

тегов pmp и vlv_in равны 1, то

{

 

//начало подпрограммы

float lvl=GetTagFloat("lvl");

//задаем переменную lvl и присваиваем ей

 

 

текущее значение тега lvl

if (lvl>=100)

 

//условие: если текущее значение тега lvl

 

 

больше или равно 100, то

{

 

//начало подпрограммы

SetTagFloat("lvl",100);

//задать текущее значение тега lvl равным 100

goto end;

 

//переход на метку end

}

 

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

SetTagFloat("lvl",lvl+0.2);

//увеличиваем текущее значение тега lvl на 0,2

}

 

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

if (vlv_out)

//условие: если текущее значение тега vlv_out равно 1, то

{

 

//начало подпрограммы

float lvl=GetTagFloat("lvl");

//задаем переменную lvl и присваиваем ей

 

 

текущее значение тега lvl

if (lvl<=0)

//условие: если текущее значение тега lvl меньше или равно 0, то

{

 

//начало подпрограммы

SetTagFloat("lvl",0);

//задать текущее значение тега lvl равным 0

goto end;

 

//переход на метку end

}

 

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

SetTagFloat("lvl",lvl-0.1);

//уменьшаем текущее значение тега lvl на 0,1

}

 

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

end:;

 

//метка end: конец программы

Добавленные условия гарантируют, что уровень не будет больше 100 или меньше 0, в чем вы можете убедиться запустив проект.

Работа над мнемосхемой практически завершена, однако, остались не выполненными условия задания 1.1, 1.2, 1.3 и 2.1. Следовательно, необходимо дополнить программные коды насоса, выпускной задвижки и изменения уровня соответствующими условиями.

Конечный код выпускной задвижки:

21

if (stat==0) SetTagDouble("vlv_in",1); if (stat==1)
{
SetTagDouble("vlv_in",0);
SetTagDouble("pmp",0);
}

double vlv=GetTagBit("vlv_out");

float lvl=GetTagFloat("lvl"); if (vlv==0)

{

SetTagDouble("vlv_out",1);

if (lvl>0) SetTagFloat("lvl",lvl-0.1);

if (lvl==0) SetTagDouble("vlv_out",0);

}

if (vlv==1) SetTagDouble("vlv_out",0);

//определяем текущее состояние задвижки //получаем текущее значение уровня

//если задвижка закрыта то //подпрограмма //открыть задвижку

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

Конечный код впускной задвижки:

double stat=GetTagBit("vlv_in"); //определяем текущее положение задвижки

//если задвижка закрыта, то открыть ее //если задвижка открыта, то //подпрограмма //закрыть задвижку //остановить насос //конец подпрограммы

Конечный код насоса:

 

 

double pmp=GetTagBit("pmp"),

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

vlv=GetTagBit("vlv_in");

 

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

float lvl=GetTagFloat("lvl");

 

//получаем текущее значение уровня

if (pmp==0)

 

//если насос остановлен, то

{

 

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

SetTagDouble("pmp",1);

 

//запустить насос

if (vlv==1 && lvl<100)

//если задвижка открыта и резервуар не полон, то

SetTagFloat("lvl",lvl+0.2);

 

//начать налив

if (vlv==0 || lvl==100)

//если задвижка закрыта или резервуар полон, то

SetTagDouble("pmp",0);

 

//остановить насос

}

 

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

if (pmp==1) SetTagDouble("pmp",0); //если насос запущен, остановить его

Конечный код изменения уровня в резервуаре:

double pmp=GetTagBit("pmp"),

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

vlv_in=GetTagBit("vlv_in"),

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

 

задвижки

 

22

vlv_out=GetTagBit("vlv_out");

if (pmp && vlv_in)

{

float lvl=GetTagFloat("lvl"); if (lvl>=100)

{

SetTagFloat("lvl",100);

SetTagDouble("pmp",0); goto end;

}

SetTagFloat("lvl",lvl+0.2);

}

if (vlv_out)

{

float lvl=GetTagFloat("lvl"); if (lvl<=0)

{

SetTagFloat("lvl",0); SetTagDouble("vlv_out",0); goto end;

}

SetTagFloat("lvl",lvl-0.1);

}

end:;

//определяем текущий статус выпускной задвижки //если насос запущен, и впускная

задвижка открыта, то //подпрограмма_налива

//определяем текущий уровень //если резервуар полон, то //подпрограмма_полноты //не осуществлять налив //остановить насос //перейти в конец программы

//конец подпрограммы_полноты //осуществлять налив //конец подпрограммы_налива

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

//конец подпрограммы_пустоты //осуществлять слив //конец подпрограммы_слива //конец программы

Теперь мнемосхема работает верно, в чем вы и сами можете убедиться. Также вы можете добавить на мнемосхему поле ввода вывода, в котором будет отображаться текущий уровень в резервуаре численно. И добавить к нему поясняющую надпись (элемент Static Text). Помимо этого, на мнемосхему могут быть добавлены поясняющие надписи демонстрирующие

текущее состояние насоса и задвижек.

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

23

Рис. 21

24

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

«Всплывающие подсказки и включение/отключение отображения элементов мнемосхемы в пакете SIMATIC WinCC»

Цели работы:

1.Научиться использовать свойство видимости/невидимости объектов (отображения объектов на мнемосхеме) в пакете SIMATIC WinCC.

2.Научиться использовать всплывающие подсказки в пакете SIMATIC WinCC.

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

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

Всплывающие подсказки (Tooltip) задаются в свойствах объекта Miscellaneous Tooltip Text и отображаются в RunTime при наведении курсора мыши на объект. Их можно менять динамически.

Примечание! Не все объекты обладают данным свойством. Отображение элементов на экране в RunTime задается в свойствах

объекта Miscellaneous Display или Miscellaneous Visible. Их можно менять динамически.

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

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

Добавим на мнемосхему кнопку, которая будет скрывать или демонстрировать нашу мнемосхему. Предварительно переименуем следующие объекты (свойство Object Name):

насос — pmp;

впускная задвижка — vlv_in;

выпускная задвижка — vlv_out;

резервуар —tnk.

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

кнопка будет фиксирующейся, т.е. остается в нажатом положении;

текст на кнопке изменяется в зависимости от ее состояния.

Для того, чтобы задать кнопку с фиксацией необходимо изменить параметр No свойства Styles Latch Down на параметр Yes.

Изменения текста на кнопке можно добиться посредством добавления динамического действия (Dynamic Dialog) на свойство кнопки Font Text. Назначим на это действие бинарный тег shw_hd_schm (рис. 22). Также этот тег будет отвечать за сокрытие или демонстрацию объектов мнемосхемы.

25

Рис. 22

Итак, имеются 2 способа изменить свойство видимости/невидимости объекта:

1.прописать в программном коде конкретное свойство конкретного объекта;

2.назначить тег на конкретное свойство объекта.

Рассмотрим оба способа.

Необходимо запрограммировать нашу новую кнопку на нажатие. Для этого перейдем во вкладку событий (Events) и настроим действие по нажатию

(Mouse Mouse Click):

double stat=GetTagBit("shw_hd_schm");

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

 

кнопки

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);

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

}

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

if (!stat)

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

{

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

SetTagDouble("shw_hd_schm",1);

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

SetVisible(lpszPictureName,"pmp",1);

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

 

26

SetVisible(lpszPictureName,"vlv_in",1);

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

SetVisible(lpszPictureName,"vlv_out",1);

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

SetVisible(lpszPictureName,"tnk",1);

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

}

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

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

Свойство видимости/невидимости остальных объектов будем изменять посредством тега shw_hd_schm. Для этого будем настраивать динамическое действие (Dynamic Dialog) для свойства (Miscellaneous Display или Visible)

следующим образом:

если текущее значение тега равно 1, то отображать;

если текущее значение тега равно 0, то скрыть.

Примечание! Статическое значение (поле Static) для свойства видимости/невидимости всех объектов (Miscellaneous Display или Visible) необходимо установить равным No, для того, чтобы изначально скрыть данные объекты с мнемосхемы.

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

Настройте свойство видимости/невидимости всех объектов по первому или второму способу самостоятельно.

Перейдем к вопросу о всплывающих подсказках.

Стоит отметить, что способность выводить всплывающие подсказки по наведению на них указателя мыши имеют далеко не все объекты. Например, из задействованных на нашей мнемосхеме объектов таким свойством обладают только насос, кнопка и текстовые поля, отображающие состояние насоса, задвижек и уровень в резервуаре. В связи с этим предлагается накладывать прозрачный прямоугольник поверх объектов, не имеющих свойства всплывающей подсказки, и настраивать подсказку для этого прямоугольника.

Итак, наложим прозрачные прямоугольники на следующие объекты:

участок трубопровода от насоса до впускной задвижки;

впускная задвижка;

участок трубопровода от впускной задвижки до резервуара;

резервуар;

участок трубопровода от резервуара до выпускной задвижки;

участок трубопровода от выпускной задвижки.

27

Примечание! Прямоугольник делается прозрачным посредством изменения свойства прозрачности (Transparency) цвета фоновой заливки (BackGround Color) и цвета границы (Border Color) прямоугольника. Предварительно необходимо отключить глобальную цветовую схему для добавляемых прямоугольников. Также вам необходимо настроить свойство видимости/невидимости добавленных прямоугольников.

Перейдем, непосредственно, к настройке всплывающих подсказок для наших объектов.

Для начала настроим насос. Настроим динамическое действие (Dynamic Dialog) для свойства Miscellaneous Tooltip Text (рис. 23).

Рис. 23

Настроим всплывающую подсказку для задвижек, точнее, для прозрачных прямоугольников, наложенных на них, т.к. сами задвижки не имеют свойства всплывающей подсказки. На рис. 24 и 25 показаны настройки для впускной и выпускной задвижек соответственно.

28

Рис. 24

Рис. 25

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

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

Настроим резервуар таким образом, чтобы всплывающая подсказка отображала статус уровня:

0 ÷ 10 — аварийно-низкий уровень;

11 ÷ 25 — предельно низкий уровень;

26 ÷ 75 — нормальный уровень;

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

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

Настройка всплывающей подсказки резервуара (прямоугольника, наложенного на него) показана на рис. 26.

29

Рис. 26

Настроим выходной трубопровод так, чтобы при наведении на него указателя мыши всплывала подсказка о том, есть ли в трубопроводе поток или нет. Настройка участков выходного трубопровода (прямоугольников, наложенных поверх них) показана на рис. 27.

Рис. 27

30