Codesys (824048), страница 4
Текст из файла (страница 4)
Если поставить скобки, то порядок вычислений изменится:LDMULADD)ST2( 23ERGТеперь значение переменной ERG равно 10.Операция MUL выполняется только тогда, когда программа доходит до ")". В качестве операнда MULиспользует значение 5.2.2.3 Структурированный текст (ST)ST представляет собой набор инструкций высокого уровня, которые могут использоваться в условныхоператорах ("IF…THEN…ELSE") и в циклах (WHILE…DO).Пример:IF value < 7 THENCoDeSys V2.32-11Что есть, что в CoDeSysWHILE value < 8 DOvalue:=value+1;END_WHILE;END_IF;ВыраженияВыражение – это конструкция, возвращающая определенное значение после его вычисления.Выражение состоит из операторов и операндов.
Операндом может быть константа, переменная, функциональный блок или другое выражение.Вычисление выраженийВычисление выражений выполняется согласно правилам приоритета. Оператор с самым высоким приоритетом выполняется первым, оператор с более низким приоритетом – вторым и т.д., пока не будутвыполнены все операторы.Операторы с одинаковым приоритетом выполняются слева направо.В следующей таблице приведен список ST операторов, расположенных в порядке приоритета.ОперацияОбозначениеПриоритетВыражение в скобках(Выражение)Самый высокий.Вызов функцииИмя функции(список параметров)Возведение в степеньEXPTЗамена знаков-Числовое дополнениеNOTУмножение*Деление/Абсолютная величинаMODСложение+Вычитание-Сравнение< , > ,<=, >=Неравенство<>Равенство=Логическое ИANDЛогическое исключающееИЛИ.XORЛогическое ИЛИORСамый низкийНиже приведены примеры использования инструкций ST:Тип инструкцииПрисваиваниеВызов функционального блока ииспользование FB выходаCoDeSys V2.3ПримерA: =B; CV: =CV+1; C: =SIN (X);A: = CMD_TMR.Q2-12Что есть, что в CoDeSysиспользование FB выходаRETURNRETURN;IFD: =B*B;IF D<0.0 THENC: =A;ELSIF D=0.0 THENC: =B;ELSEC: =D;END_IF;CASECASE INT1 OF1: BOOL1: = TRUE;2: BOOL2: = TRUE;ELSEBOOL1: = FALSE;BOOL2END_CASE;J: =101;FOR I: =1 TO 100 BY 2 DOIF ARR [I] = 70 THENJ: =I;EXIT;END_IF;END_FOR;FORWHILEEXITJ: =1;WHILE J<= 100 AND ARR [J] <> 70DOJ: =J+2;END_WHILE;J: =-1;REPEATJ: = J+2;UNTIL J= 101 OR ARR [J] = 70END_REPEAT;EXIT;Пустая инструкция;REPEARTОператор присваиванияПеред оператором присваивания находится операнд (переменная или адрес), которому присваиваетсязначение выражения, стоящего после оператора присваивания.Пример:Var1: = Var2 * 10;После выполнения этой операции Var1 принимает значение в десять раз большее, чем Var2.CoDeSys V2.32-13Что есть, что в CoDeSysВызов функционального блока в STФункциональный блок вызывается с помощью имени экземпляра функционального блока и спискавходных параметров с присваиванием данных в круглых скобках.
В следующем примере вызываетсятаймер с параметрами IN и PT. Значение выходной переменной Q присваивается переменной А.К выходной переменной, как и в IL, можно обратиться с помощью имени экземпляра функциональногоблока, точки, следующей за ним и имени выходной переменной:CMD_TMR (IN: = %IX5, PT: = 300);A: =CMD_TMR.QИнструкция RETURNИнструкция RETURN позволяет выйти из POU, например, в зависимости от условия.Инструкция IFИспользуя инструкцию IF, можно проверить условие, и в зависимости от этого условия выполнить какие-либо действия.Синтаксис:IF <Boolean_expression1> THEN<IF_instructions>{ELSIF <Boolean_expression2> THEN<ELSIF_instructions1>...ELSIF <Boolean_expression n> THEN<ELSIF_instructions n-1>ELSE<ELSE_instructions>}END_IF;Часть конструкции фигурных скобках не обязательна.Если < <Boolean_expression1> возвращает истину, тогда <IF_Instructions> выполняется.В противном случае будут выполняться остальные логические выражения одно за другим, пока одно изних не возвратит истину.
Тогда выполняются инструкции, стоящие после этого логического выражения до следующего ELSIF или ELSE.Если все логические выражения ложны, то выполняются инструкции, стоящие после ELSE.Пример:IF temp < 17THENheating_on: = TRUE;ELSEheating_on: = FALSE;END_IFВ этом примере нагревание (heating) включается, когда температура опустится ниже 17 º градусов, иначе оно останется выключенным.CoDeSys V2.32-14Что есть, что в CoDeSysИнструкция CASEC помощью инструкции CASE можно нескольким различным значениям целочисленной переменнойсопоставить различные инструкции.Синтаксис:CASE <Var1> OF<Value1>:<Instruction 1><Value2>: <Instruction 2><Value3, Value4, Value5>:<Instruction 3><Value6 .. Value10>:<Instruction 4>...<Value n>:<Instruction n>ELSE<ELSE instruction>END_CASE;Инструкция CASE выполняется согласно следующим правилам:•Если переменная <Var1> имеет значение <Value i>, то выполняется инструкция <Instruction i>•Если <Var1> не принимает ни одного из указанных значений, то выполняется <ELSE Instruction>.• Чтобы одна и та же инструкция выполнялась при различных значениях переменной <Var1>, необходимо перечислить эти значения через запятую.• Чтобы одна и та же инструкция выполнялась для целого диапазона значений, необходимо указатьначальное и конечное значения, разделенные двумя точками.Пример:CASE INT1 OF1, 5: BOOL1 : = TRUE;BOOL3 : = FALSE;2: ВОOL2 : = FALSE;BOOL3 : = TRUE;10.
20: BOOL1: = TRUE;BOOL3:= TRUE;ELSEBOOL1 := NOT BOOL1;BOOL2 := BOOL1 OR BOOL2;END_CASE;Цикл FORС помощью FOR можно программировать повторяющиеся процессы.Синтаксис:INT_Var :INT;FOR <INT_Var> := <INIT_VALUE> TO <END_VALUE> {BY <Step size>} DO<Instructions>END_FORЧасть конструкции, заключенная в фигурные скобки, не обязательна.CoDeSys V2.32-15Что есть, что в CoDeSys<Instructions> выполняются, пока счетчик <INT_Var> не больше <END_VALUE>. Это условие проверяется перед выполнением <Instructions>, поэтому раздел <Instructions> не выполняется, если<INIT_VALUE> больше <END_VALUE>.Всякий раз, когда выполняются <Instructions>, значение <INIT_VALUE>, увеличивается на <Step_size>.<Step_ size> может принимать любое целое значение.
По умолчанию шаг устанавливается равным 1.Пример:FOR Counter: =1 TO 5 BY 1 DOVar1: =Var1*2;END_FOR;Erg:=Var1;В этом примере предполагается, что начальное значение Var1 равно 1. После выполнения цикла эта переменная будет равна 32.Замечание: <END_VALUE>: не должно быть равно предельному значению счетчика <INT_VAR>. Например, еслисчетчик является переменной типа SINT и <END_VALUE> равно 127, то цикл становится бесконечным.Цикл WHILEЦикл WHILE может использоваться, как и цикл FOR, с тем лишь различием, что условие выхода определяется логическим выражением. Это означает, цикл выполняется, пока верно заданное условие.Синтаксис:WHILE <Boolean expression><Instructions>END_WHILEРаздел <Instructions> выполняется циклически до тех пор, пока <Boolean_expression> дает TRUE.
Если<Boolean_expression> равно FALSE уже при первой итерации, то раздел <Instructions> не будет выполнен ни разу. Если <Boolean_expression> никогда не примет значение FALSE, то раздел <Instructions>будет выполняться бесконечно.Замечание: Программист должен быть уверен, что цикл не станет бесконечным. Для этого в теле цикла значениевходящей в условие переменной обязательно должно изменяться.
Например, путем инкремента илидекремента счетчика.Пример:WHILE counter<>0 DOVar1: = Var1*2;сounter := сounter-1;END_WHILEЦикл REPEATЦикл REPEAT отличается от цикла WHILE тем, что первая проверка условия выхода из цикла осуществляется, когда цикл уже выполнился 1 раз. Это означает, что независимо от условия выхода цикл выполняется хотя бы один раз.Синтаксис:REPEAT<Instructions>CoDeSys V2.32-16Что есть, что в CoDeSysUNTIL <Boolean expression>END_REPEATРаздел <Instructions> выполняется циклически до тех пор, пока <Boolean_expression> дает TRUE. Если<Boolean_expression> равно FALSE уже при первой итерации, то раздел <Instructions> не будет выполнен один раз.
Если <Boolean_expression> никогда не примет значение FALSE, то раздел <Instructions>будет выполняться бесконечно.Замечание: Программист должен быть уверен, что цикл не станет бесконечным. Для этого в теле цикла значениевходящей в условие переменной обязательно должно изменяться. Например, путем инкремента илидекремента счетчика.Инструкция EXITЕсли EXIT встречается в циклах FOR, WHILE, REPEAT, то цикл заканчивает свою работу независимоот значения условия выхода.CoDeSys V2.32-17Что есть, что в CoDeSys2.2.4 Язык последовательных функциональных схем (SFC)SFC – это графический язык, который позволяет описать хронологическую последовательность различных действий в программе.
Для этого действия связываются с шагами (этапами), а последовательностьработы определяется условиями переходов между шагами.Пример SFC диаграммы:ШагSFC POU состоит из набора шагов, связанных переходами. Существуют 2 вида шагов:• Шаг простого типа (упрощенный SFC) может включать единственное действие. Графический флажок (небольшой треугольник в верхнем углу шага) показывает, пустой шаг или нет.• МЭК шаг (стандартный SFC) связан с произвольным числом действий или логических переменных.Связанные действия располагаются с правой стороны от шага.ДействиеДействие может содержать список инструкций на IL или ST, схемы на FBD или LD, или снова схемы наSFC.При использовании простых шагов действие всегда связывается с этим шагом. Для того, чтобы редактировать действие, необходимо дважды щелкнуть левой клавишей мышки на шаге.