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

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

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

Настроим наше поле для более удобного отображения информации. Для этого в свойствах объекта выберем вкладку Свойства (Properties). Здесь выберем опцию Шрифт (Font). Зададим 36-й размер шрифта (Font Size 36). Также стилизуем текс, сделаем его жирным курсивом (Bold Yes и Italic Yes). Обеспечим горизонтальное и вертикальное центрирование текста (X Alignment Centered и Y Alignment Centered). А также настроим формат вывода (Properties Output/Input Output Format 9).

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

Кроме того, можно отобразить текущее значение тега текстом. Например, если бы этот тег включал и отключал какое-либо оборудование (0

— отключено, 1 — включено), было бы удобнее наблюдать не текущее значение тега управления оборудованием, а его (оборудования) текущее состояние. Отобразим состояние нашего тега с помощью элемента List Box

(группа Smart Objects).

Добавим данный объект на мнемосхему и настроим его. Во-первых, изменим количество строк с 3 на 1 (Geometry Number of Rows 1). Вовторых, изменим значение выводимого текста в соответствии со значением тега (0 — отключено, 1 — включено). Для этого выберем опцию Miscellaneous и для параметра Selected Text настроим динамическое изменение (ПКМ в поле Dynamic Dynamic Dialog). Перед нами откроется следующее окно (рис. 9).

Рис. 9

Рис. 10

В поле Expression/Formula необходимо выбрать наш тег Tag_1, т.к. в соответствии со значением данного тега и будет демонстрироваться

11

состояние. В поле тип данных (Data Type) необходимо выбрать бинарный (логический) тип (Boolean) и ввести соответствующий каждому значению текст. Настройка показана на рис. 10. По своему желанию вы также можете форматировать текст как вам угодно (опция Font).

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

Добавим также световую индикацию состояния тега. Для этого добавим на мнемосхему прямоугольник (Rectangle) из группы Smart Objects.

В первую очередь, для изменения цвета объекта необходимо отключить глобальную цветовую схему (Effects Global Color Scheme No). Теперь, с помощью Dynamic Dialog как показано на рис. 11 настроим следующее свойство данного прямоугольника: Colors Background Color.

Рис. 11

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

Добавим на мнемосхему слайдер (Slider Object из группы Windows Objects) и настроим его как показано на рис. 12.

12

Также добавим шкалу (Bar из группы Smart Objects) и произведем ее настройку (рис. 13).

И, наконец, добавим еще одно поле ввода/вывода (I/O Field из группы Smart Objects). Настроим его как показано на рис. 14. В плане формата текста вас никто не ограничивает, и вы можете настроить его так, как удобно вам.

Примечание! Тег Tag_2 должен иметь числовой формат.

Рис. 12

Рис. 13

Рис. 14

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

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

Рис. 15

13

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

«Использование языка программирования С (Си) пакете SIMATIC WinCC»

Цели работы:

1.Рассмотреть глобальную библиотеку символов пакета SIMATIC WinCC.

2.Научиться использовать язык С (Си) применительно к пакету SIMATIC WinCC.

3.Создать мнемосхему технологического процесса

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

C-макросы можно использовать для динамизации свойств объекта и для программирования реакций на события. При динамизации свойств объекта значение свойства объекта определяется по возвращаемому значению C- функции. Используйте C-макросы, если, например, вы хотите обработать в одном макросе несколько входных параметров или выполнить условную конструкцию (if ... then ...). Особенно рекомендуется использовать C-макросы, если вы хотите одновременно получить доступ к нескольким тегам системы автоматизации.

C-макросы следует использовать в том случае, если возможности, предоставляемые соединением с тегом или динамическим диалогом, не достаточны для решения вашей задачи.

C-макрос для программирования реакции на событие

Вы можете использовать C-макросы для программирования реакции на событие, произошедшее с графическим объектом. C-макрос следует использовать, если возможности, предоставляемые прямым соединением с тегом, не достаточны для решения вашей задачи.

Использование макросов для определения реакции на изменение свойства объекта влияет на производительность системы исполнения.

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

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

Итак, создадим новый проект и откроем графический дизайнер.

Теперь откроем вкладку библиотеки (Library) и далее следуем по пути Global Library PlantElements. Из данной папки на мнемосхему добавим следующие объекты:

Насос (папка Pumps).

Трубы (папка Pipes – Smart Objects).

Резервуар (папка Tanks).

Задвижки (папка Valves – Smart Objects).

Исоберем из данных элементов схему, аналогичную показанной на рис.

16.

14

Рис. 16

Заставим работать данную мнемосхему по следующему принципу:

1.При открытии впускной задвижки и последующем запуске насоса резервуар заполняется жидкостью.

1.1.Если насос запущен, а впускная задвижка закрывается, то насос отключается.

1.2.Если впускная задвижка закрыта, то насос не включается.

1.3.Если уровень в резервуаре максимальный (100), то насос выключается

ине включается.

2.При открытии выпускной задвижки резервуар опустошается.

2.1.Если уровень в резервуаре минимальный (0), то задвижка закрывается

ине открывается.

3.При одновременном наливе и сливе жидкости, т.е. при запущенном насосе

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

Открытие/закрытие задвижек, а также пуск/останов насоса, происходят по однократному щелчку на них. Кроме того, отключенное состояние характеризуется красным цветом оборудования, а включенное — зеленым. Уровень в резервуаре изменяется динамически. Помимо этого, уровень заполнения демонстрируется динамически изменяющимся цветом:

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

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

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

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

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

Итак, прежде всего, нам необходимо создать 3 битовых (логических) тега и 1 числовой тег, причем, желательно с плавающей точкой:

1.Тег пуска/останова насоса (BOOL);

2.Тег открытия/закрытия впускной задвижки (BOOL);

3.Тег открытия/закрытия выпускной задвижки (BOOL);

4.Тег уровня (FLOAT).

15

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

На вкладке событий объекта (Events) выберем собитие по нажатию кнопки мыши (Mouse Mouse Click) и в поле Action щелкнем ПКМ. В контекстном меню выберем C-Action. Перед нами откроется окно следующего вида (рис. 17).

Рис. 17

В этом окне (рис. 17) мы и будем вводить программный код на языке С (Си). Введем здесь следующий код:

double stat=GetTagBit("pmp"); //задаем переменную stat и присваиваем ей текущее значение тега pmp

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

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

то переключить значение тега в 0

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

Также настроим свойство цвета насоса в соответствии с его состоянием, т.е. если насос остановлен, то его цвет красный, если запущен, то — зеленый. Для этого воспользуемся свойством Colors Background Color данного объекта и функцией Dynamic Dialog для него (по аналогии с прямоугольником в лабораторной работе №1) (рис. 18).

16

Рис. 18

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

Также перейдем на вкладку событий (Events) и выберем событие по нажатию кнопки мыши (Mouse Mouse Click). После открытия окна программирования добавим код, аналогичный тому, который мы записали для насоса.

Примечание! Не стоит обращать внимание на уже имеющийся код в открывшемся окне. Данный код необходимо удалить или закомментировать и добавить нужный нам кусок кода.

double stat=GetTagBit("vlv_in"); //задаем переменную stat и присваиваем ей текущее значение тега vlv_in

if (stat==0) SetTagDouble("vlv_in",1); //если текущее значение тега vlv_in равно

0, то переключить значение тега в 1

if (stat==1) SetTagDouble("vlv_in",0); //если текущее значение тега vlv_in равно

1, то переключить значение тега в 0

Данный код позволяет нам переключать состояние задвижки по аналогии с насосом. Для изменения цвета задвижки необходимо перейти на вкладку свойств объекта и изменить свойство Tag Assignment Toggle. Для этого свойства в поле Dynamic необходимо установить наш тег vlv_in и задать цикл обновления (Update Cycle) по изменению (Upon change) (рис. 19).

Рис. 19

17

Самостоятельно осуществите настройку выпускной задвижки, выполняя аналогичные действия. Учтите, что для выпускной задвижки используется тег vlv_out.

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

Наконец, осуществим настройку уровня в резервуаре.

Для начала настроим тег, который будет изменять текущее значение уровня в резервуаре (тег lvl). Для этого на вкладке свойств объекта выберем свойство Tag Assignment и опцию Process. В поле Dynamic для этой опции установим наш тег lvl и цикл обновления (Update Cycle) по изменению (Upon change). Начальное значение можно изменить на 0 (в поле Static опции

Process).

Теперь настроим цвет уровня резервуара.

Для свойства Color BackColor2 настроим динамическое действие (Dynamic Dialog) в соответствии с заданием (рис. 20).

Рис. 20

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

Изменим код события по нажатию мыши для насоса следующим образом:

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

vlv=GetTagBit("vlv_in"); //задаем переменную vlv и присваиваем ей текущее значение тега vlv_in

18

float lvl=GetTagFloat("lvl"); //задаем

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

 

 

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

if (pmp==0)

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

{

 

 

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

SetTagDouble("pmp",1);

//установить значение тега pmp равным 1

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

 

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

 

 

vlv_in равно 1 И значение тега lvl меньше 100, то

SetTagFloat("lvl",lvl+0.15);

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

}

 

 

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

if (pmp==1) SetTagDouble("pmp",0);

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

 

 

 

равно 1, то переключить его в 0

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

Затем, если насос остановлен, то он запускается и, если при этом открыта задвижка, то происходит налив жидкости (увеличение уровня). Налив жидкости происходит также при условии того, что резервуар не полон.

Если же насос уже был запущен, то он останавливается.

Теперь изменим код выпускной задвижки в соответствии с заданием:

double vlv=GetTagBit("vlv_out");

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

 

 

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

float lvl=GetTagFloat("lvl");

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

 

 

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

if (vlv==0)

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

{

 

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

SetTagDouble("vlv_out",1);

//установить значение тега vlv_out равным 1

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

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

 

 

то уменьшить его на 0,15

}

 

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

if (vlv==1) SetTagDouble("vlv_out",0); //если текущее значение тега vlv_out

равно1, то переключить его в 0

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

Если задвижка была закрыта, то она открывается. И если при этом резервуар не пуст, то происходит слив жидкости (уменьшение уровня).

Если же задвижка была открыта, то она закрывается.

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

19

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

Таким образом, переходим на вкладку событий (Events) резервуара. Здесь выбираем событие по изменению процесса (Property Topics Tag Asignment Process Change) и программируем его следующим образом: 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

SetTagFloat("lvl",lvl+0.2);

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

}

 

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

if (vlv_out)

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

{

 

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

float lvl=GetTagFloat("lvl");

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

 

 

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

SetTagFloat("lvl",lvl-0.1);

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

}

 

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

Данная программа вызывается любым изменением уровня в резервуаре и работает следующим образом.

Сначала мы получаем текущие состояния насоса и обоих задвижек. Затем проверяем запущен ли насос и открыта ли впускная задвижка. Если да, то осуществляется налив жидкости (увеличение уровня) посредством получения текущего значения уровня и увеличения его на определенное значение.

Также мы проверяем открыта ли выпускная линия (выпускная задвижка). Если да, то осуществляется слив жидкости (уменьшение уровня) путем получения текущего значения уровня и уменьшения его на определенное значение.

Теперь вы можете запустить проект и удостовериться в том, что изменение уровня происходит непрерывно при выполнении соответствующих условий. Однако, добавив поле ввода/вывода на мнемосхему (I/O Field), вы можете обнаружить, что уровень может стать как больше 100, так и меньше 0, что не соответствует действительности. В связи с этим необходимо добавить некоторые условия в программный код изменения уровня.

20