Tia Portal — язык программирования SCL. Часть3

2021-09-20 Промышленное  Один комментарий

В этой части рассмотрим такой часто применяемый в языке SCL оператор, как IF...THEN...ELSE, который позволяет выполнить какие-либо действия, в зависимости от определенных условий, например от исходных данных или промежуточных результатов.

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

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

IF <выражение>

THEN<инструкция 1>

ELSE <инструкция 2>

END_IF

Если <выражение> имеет значение True, то есть истина, то выполняется условие после THEN <инструкция 1>. Если же логическое выражение имеет значение False, то есть ложный результат, то выполняется условие ELSE <инструкция 2>. Если ELSE отсутствует, то в этом случае не выполняется ничего.

При помощи выражения ELSIF можно задать дополнительные условия. Например, если <выражение> имеет значение False, то программа переходит к проверке условия после ELSIF. Если <выражение 1> равно TRUE, то будет выполняться <инструкция 2>.

IF <выражение>

THEN <инструкция 1>

ELSIF <выражение 1>

THEN <инструкция 2>

ELSE <инструкция 3>

END_IF

В программе может быть использовано любое количество ELSIF операторов.

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

В отличии от предыдущих примеров, где мы для сравнения сначала создавали программу на LAD, а затем аналогичную на SCL, в этот раз писать будем сразу на SCL.

Создадим в Tia Portal новый функциональный блок, не забываем выбрать необходимый нам язык программирования.

Tia Portal SCL

Далее добавляем в программу переменные.

SCL variable

И пишем саму программу. Конструкцию IF...THEN...ELSE мы можем перетащить мышью из библиотеки базовых инструкций, либо просто напишем вручную.

SCL library

Tia Portal SCL

Логика работы программы такая — Если поступает команда на запуск и если значение с датчика меньше, чем заданная уставка, то включается обогрев.

Если же измеренное фактическое значение температуры больше или равно значению уставки плюс значение гистерезиса, то нагреватель выключен.

Если значение переменной Pusk имеет значение False, то есть команда на запуск не приходит, то нагреватель не работает.

Вообще, примеров реализации самых различных задач при помощи данного оператора, можно привести очень много, но остановимся еще на одном. На этот раз это будет блок двухканального ШИМ генератора.

Tia Portal PWM

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//Зона нечувствительности для входного сигнала.
IF ((DBMIN<DutyCucle)AND(DutyCucle<DBMAX)) THEN Percent:=0.0; ELSE Percent:=DutyCucle; END_IF; //Амплитудный ограничитель входного сигнала от -100% до 100%. IF (Percent>=100.0) THEN
Percent:=100.0;
END_IF;
IF (Percent<=-100.0) THEN Percent:=-100.0; END_IF; //Формирование импульсов на открытие. IF (Percent>0.0) THEN 
PWMNEG:=FALSE;
TimerNegative:=0.0;
TimePulsePositive:=PeriodPositive*Percent*0.01;
IF (TimerPositive<=TimePulsePositive) THEN PWMPOS:=TRUE; ELSE PWMPOS:=FALSE; END_IF; TimerPositive:=TimerPositive+Ts; IF (TimerPositive>=PeriodPositive) THEN
TimerPositive:=0.0;
END_IF;
END_IF;
 
//Формирование импульсов на закрытие.
IF (Percent<0.0) THEN
PWMPOS:=FALSE;
TimerPositive:=0.0;
TimePulseNegative:=PeriodNegative*Percent*(-0.01);
IF (TimerNegative<=TimePulseNegative) THEN PWMNEG:=TRUE; ELSE PWMNEG:=FALSE; END_IF; TimerNegative:=TimerNegative+Ts; IF (TimerNegative>=PeriodNegative) THEN
TimerNegative:=0.0;
END_IF;
END_IF;
 
//Нет импульсов.
IF (Percent=0.0) THEN
PWMPOS:=FALSE;
PWMNEG:=FALSE;
TimerPositive:=0.0;
TimerNegative:=0.0;
END_IF;

Помимо IF...THEN...ELSE, при написании программ на SCL часто используются и другие типы операторов (выбора, цикла, программные переходы), такие как CASE, FOR, WHILE-DO, REPEAT-UNTIL и другие, которые мы также будем рассматривать в дальнейшем, а пока на этом заканчиваем.

Поделиться в соц. сетях

Опубликовать в LiveJournal
Опубликовать в Яндекс

  • Виктор says:

    Отличный материал, спасибо.

Комментарии

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>