Особенности присвоения значений переменным 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Особенности присвоения значений переменным



При присвоении значения переменной типа TYPE1 переменной типа TYPE2 нужно учитывать следующее:

присвоение корректно только в том случае, если тип TYPE2 заключает в себе все числа типа TYPE1:

VAR a: REAL:= -1564.343; END_VAR

VAR b: USINT:= 50; END_VAR

a = b; //корректная операция

b = a; //некорректная операция

присвоение корректно, если один из типов – BOOL, а другой – любой численный. Логическое значение TRUE соответствует единице, FALSE – нулю; нуль соответствует FALSE, любое ненулевое значение, в том числе отрицательное, соответствует TRUE:

VAR a: BOOL; END_VAR

VAR b: SINT:= -50; END_VAR

a = b; //a = TRUE, корректная операция

b = a; //b = 1, корректная операция

Операторы

Оператор return

Оператор if-then-else

Оператор case

Оператор while

Оператор repeat

Оператор for

Операторы break и exit

Оператор continue

Операторы определения переменных

Оператор индексирования элементов массива

Оператор goto

Определены следующие операторы, образующие предложения Техно ST:

Return

if

Case

While

Repeat

For

Break

Exit

Continue

операторы определения переменных;

оператор индексирования элементов массива;

Goto

Оператор return

Определены 2 варианта задания данного оператора:

return {выражение}

Действие: выход из функции Техно ST. Значением функции является значение {выражения};

Return

Действие: выход из функции-блока Техно ST.

Пример

RETURN (2 + ARG_000 ** 2);

Оператор if-then-else

Данный оператор начинается с ключевого слова if и заканчивается ключевым словом end_if. Определены 3 варианта задания данного оператора:

Вариант 1

if {выражение} then {последовательность предложений} end_if

Действие: если {выражение} истинно, выполняется {последовательность предложений}, иначе никаких действий не производится.

Вариант 2

if {выражение} then {последовательность предложений1}

else {последовательность предложений2} end_if

Действие: если {выражение1} истинно, выполняется {последовательность предложений1}, иначе выполняется {последовательность предложений2}.

Вариант 3

if {выражение1} then {последовательность предложений1}

elsif {выражение2} then {последовательность предложений2}

elsif {выражениеN} then {последовательность предложенийN}

else {последовательность предложений} end_if

Действие: выполняется первая по порядку {последовательность предложений}, для которой соответствующее {выражение} истинно. Если все {выражения} ложны, выполняется {последовательность предложений}, следующая за ключевым словом else.

Количество блоков " elsif {выражение} then {последовательность предложений}" не ограничено.

Пример

В результате выполнения следующего кода переменной VAR_000 присваивается значение 200. Выполняется только одно, первое по порядку действие, для которого условие истинно, поэтому действие, следующее за конструкцией ELSIF...THEN, выполнено не будет, несмотря на то, что условие VAR_002 < 1 истинно:

VAR VAR_000: INT; END_VAR

VAR VAR_002: REAL:= 0.5; END_VAR

IF VAR_002 < 2 THEN

VAR_000 = 200;

ELSIF VAR_002 < 1 THEN

VAR_000 = 500;

ELSE

VAR_000 = 300;

END_IF;

Оператор case

Определены 2 варианта задания данного оператора.

Вариант 1

case {выражение} of

{список значений}: {последовательность предложений}

...

{список значений}: {последовательность предложений}

end_case

Вариант 2

case {выражение} of

{список значений}: {последовательность предложений}

...

{список значений}: {последовательность предложений}

else {последовательность предложений}

end_case

Список значений представляет собой набор целых чисел или набор диапазонов целых чисел, разделенных запятой. Диапазон задается в виде

{нижняя граница}.. {верхняя граница}

Действие: если результат вычисления {выражения} принадлежит множествам, заданным {списками значений}, выполняется соответствующая {последовательность предложений}. Если результат вычисления {выражения} не принадлежит ни одному из заданных множеств, выполняется {последовательность предложений}, следующая за ключевым словом else.

Пример

В результате выполнения следующего кода VAR_001=500:

VAR VAR_000: INT; END_VAR

VAR VAR_001: INT; END_VAR

CASE VAR_000 + 4 OF

0.. 2: VAR_001 = 200;

3, 4, 5: VAR_001 = 500;

END_CASE;

Оператор while

Синтаксис:

while {выражение} do {последовательность предложений} end_while

Действие: пока {выражение} истинно, выполняется {последовательность предложений}.

Пример

После выполнения следующего кода VAR_001=16:

VAR VAR_000: INT:= 10; END_VAR

VAR VAR_001: INT; END_VAR

WHILE VAR_000 > 2 DO VAR_000 = VAR_000 - 1;

VAR_001 = VAR_001 + 2;

END_WHILE;

Оператор repeat

Синтаксис:

repeat {последовательность предложений} until {выражение} end_repeat

Действие: пока {выражение} истинно, выполняется {последовательность предложений}. Если {выражение} ложно, {последовательность предложений} выполняется 1 раз.

Пример

После выполнения следующего кода VAR_001=20:

VAR VAR_000: INT:=10; END_VAR

VAR VAR_001: INT; END_VAR

REPEAT VAR_001 = VAR_001 + 2; VAR_000 = VAR_000 + 1; UNTIL VAR_000 < 20 END_REPEAT;

Оператор for

Синтаксис:

for {инициализация переменной цикла} to {выражение1} by {выражение2} do {последовательность предложений}

end_for

Инициализация переменной цикла имеет вид:

{имя переменной}:={выражение}

Действие: пока значение переменной цикла меньше или равно значению {выражения1} выполняется {последовательность предложений}. По завершении каждого цикла к переменной цикла прибавляется значение {выражения2}; если оно не задано, прибавляется 1.

С помощью оператора for нельзя построить цикл с убывающим счетчиком. Для создания таких циклов нужно использовать операторы while и repeat.

Пример

После выполнения следующего кода VAR_001=22:

VAR VAR_000: INT:=10; END_VAR

VAR VAR_001: INT; END_VAR

FOR VAR_000 = 10 TO 20 DO VAR_001 = VAR_001 + 2; END_FOR;

Операторы break и exit

Операторы break и exit эквивалентны.

Синтаксис:

Break

Exit

Действие: выход за пределы цикла. В случае вложенных циклов выход осуществляется только из текущего цикла и не затрагивает внешние.

Оператор continue

Синтаксис:

Continue

Действие: переход в конец цикла, т.е. выражения, следующие за оператором continue до конца цикла, не выполняются.

Операторы определения переменных

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

В языке ST определены следующие операторы данного типа:

Var

{определение переменной}

...

{определение переменной}

end_var

 

var_global

{определение переменной}

...

{определение переменной}

end_var

 

var_arg

{определение переменной}

...

{определение переменной}

end_var

 

var_input

{определение переменной}

...

{определение переменной}

end_var

 

var_output

{определение переменной}

...

{определение переменной}

end_var

 

var_inout

{определение переменной}

...

{определение переменной}

end_var

После ключевого слова end_var точка с запятой не ставится.

Действие: определяет новую переменную. При использовании совместно с constant задает константу.

Оператор var... end_var используется для создания локальных переменных и структур; может использоваться в основной программе или ее компоненте (функции).

Оператор var_global... end_var используется для создания глобальных переменных; может использоваться вне основной программы и ее компонентов (функций).

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

Оператор var_output(var_inout)... end_var используется для определения аргументов (основной программы или ее функций), передаваемых по ссылке. Определение аргумента с помощью оператора var_output...end_var равнозначно заданию в табличном редакторе аргумента типа выход, а определение аргумента с помощью оператора var_inout...end_var равнозначно заданию аргумента типа вход/выход.

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

Выражение {определение переменной} имеет вид:

{имя переменной}: {тип переменной};

{имя переменной}: {тип переменной}:={выражение};

{имя переменной}: array [] of {тип переменной};

{имя переменной}: array [{размерности массива}] of {тип переменной};

{имя переменной}: array [{размерности массива}] of {тип переменной}:={начальные значения};

Выражения {размерности массива} задаются в виде диапазонов изменения индексов массива, разделенных запятой.

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

{нижняя граница}.. {верхняя граница}

или

{размер массива}

обозначающий диапазон от 0 до {размер массива}-1. В случае, если размерность массива не указана, он считается пустым и ожидается его инициализация в ходе выполнения программы.

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

{целочисленная константа} ({выражение})

где {целочисленная константа} задает количество элементов, которым присваивается это значение. При присвоении начальных значений элементам массива первым изменяется последний индекс массива.

Область действия имени переменной определяется по следующим правилам:

глобальные переменные действуют в рамках программы и сохраняют свое значение между вызовами программы. В частности, глобальными являются переменные FBD- и LD-блоков;

локальные переменные и аргументы действуют в рамках объекта (программы, функции, структуры), в котором определены.

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



Поделиться:


Последнее изменение этой страницы: 2016-08-10; просмотров: 251; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.186.92 (0.045 с.)