Руководство пользователя по программированию плк в CoDeSys 3
Скачать 5.57 Mb.
|
BITADR BITADR возвращает DWORD смещение переменной от начала сегмента данных. Результат зависит от того, включена или нет опция байтовой адресации. VAR var1 AT %IX2.3:BOOL; bitoffset: DWORD; END_VAR Пример ST: Bitoffset := BITADR(var1); (* Результат 19, если byte addressing=TRUE, или 35, если byte addressing=FALSE*) Пример IL: LD Var1 BITADR Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-14 ST Var2 Косвенный оператор (content) Косвенное обращение через указатель производится путем добавления оператора "^" после имени указателя. Пример ST: pt:POINTER TO INT; var_int1:INT; var_int2:INT; pt := ADR(var_int1); var_int2:=pt^; 10.7 Вспомогательные функции INDEXOF Возвращает внутренний индекс POU. Пример ST: var1 := INDEXOF(POU2); SIZEOF Возвращает размер переменной в байтах. Пример IL: arr1:ARRAY[0..4] OF INT; Var1 INT LD arr1 SIZEOF ST Var 1 (* Результат 10 *) Пример ST: var1 := SIZEOF(arr1); TIME Функция TIME возвращает время в миллисекундах от начала работы системы в формате TIME. Пример IL: TIME ST systime (*Результат, например.: T#35m11s342ms *) Пример ST: systime:=TIME(); Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-15 Пример FBD: INI INI можно использовать для инициализации retain переменных, содержащихся в экземпляре функ- ционального блока. Синтаксис: Пример ST: fbinst экземпляр функционального блока fb, в котором определена retain переменная retvar. Объявление: fbinst:fb; b:bool; Фрагмент реализации: b := INI(fbinst, TRUE); ivar:=fbinst.retvar (* => retvar инициализирована *) Пример IL: LD fbinst INI TRUE ST b Пример FBD: 10.8 Оператор вызова CAL Вызывает функциональный блок или программу. Применяется в IL для вызова экземпляра функционального блока, входные переменные помещаются в скобках вслед за его именем. Пример: Вызов экземпляра функционального блока Inst, где входные переменные Par1 и Par2 равны 0 и TRUE соответственно. CAL INST(PAR1 := 0, PAR2 := TRUE) 10.9 Явное преобразование типов Неявное преобразование данных из ‘большего’ типа в ‘меньший’ запрещено стандартом (например, из INT в BYTE или DINT в WORD). Если подобное преобразование действительно необходимо, оно должно быть выражено явно. Явные преобразования работают практически для всех базовых типов данных. Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-16 Синтаксис: <баз.Тип1>_TO_<баз..Тип2> Преобразования в строку …_TO_STRING используют выравнивание влево. Если строка оказывается слишком короткой, результат будет обрезан. BOOL_TO Преобразование типа BOOL в другой тип: Для числовых типов результат равен 1, когда операнд TRUE, и 0, если операнд FALSE. Для типа STRING результат - это слово TRUE или FALSE. Примеры IL: LD TRUE BOOL_TO_INT ST I (*Результат: 1 *) LD TRUE BOOL_TO_STRING ST str (*Результат: 'TRUE' *) LD TRUE BOOL_TO_TIME ST t (*Результат: T#1ms *) LD TRUE BOOL_TO_TOD ST (*Результат: TOD#00:00:00.001 *) LD FALSE BOOL_TO_DATE ST dat (*Результат: D#1970-01-01 *) LD TRUE BOOL_TO_DT ST dandt (*Результат:DT#1970-01-01-00:00:01 *) Примеры ST: i:=BOOL_TO_INT(TRUE); (* Результат:1 *) str:=BOOL_TO_STRING(TRUE); (* Результат:"TRUE" *) t:=BOOL_TO_TIME(TRUE); (* Результат:T#1ms *) tof:=BOOL_TO_TOD(TRUE); (* Результат:TOD#00:00:00.001 *) dat:=BOOL_TO_DATE(FALSE); (* Результат:D#1970 *) dandt:=BOOL_TO_DT(TRUE); (* Результат:DT#1970-01-01-00:00:01 *) Примеры FBD: Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-17 (*Результат: 1 *) (*Результат: 'TRUE' *) (*Результат: T#1ms *) (*Результат: TOD#00:00:00.001 *) (*Результат: D#1970-01-01 *) (*Результат: DT#1970-01-01-00:00:01 *) TO_BOOL Преобразование других типов в BOOL: Результат TRUE, когда операнд не нулевой, иначе FALSE. Для типа STRING, если строка состоит из слова "TRUE", результат равен TRUE, иначе FALSE. Примеры IL: LD 213 BYTE_TO_BOOL ST b (*Результат: TRUE *) LD 0 INT_TO_BOOL ST b (*Результат: FALSE *) LD T#5ms TIME_TO_BOOL ST b (*Результат: TRUE *) LD 'TRUE' STRING_TO_BOOL ST b (*Результат: TRUE *) Примеры ST: b := BYTE_TO_BOOL(2#11010101); (* Результат: TRUE *) b := INT_TO_BOOL(0); (* Результат: FALSE *) b := TIME_TO_BOOL(T#5ms); (* Результат: TRUE *) b := STRING_TO_BOOL('TRUE'); (* Результат: TRUE *) Примеры FBD: Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-18 (*Результат: TRUE *) (*Результат: FALSE *) (*Результат: TRUE *) (*Результат: TRUE *) Преобразования между целочисленными типами Преобразования из одного целочисленного типа в другой: При преобразовании большего типа в меньший, Вы рискуете потерять информацию. Если число превосходит верхний предел данного типа, старшие байты числа игнорируются. Пример ST: si := INT_TO_SINT(4223); (* Результат: 127 *) Число 4223 (16#107F в шестнадцатеричной форме) сокращается до переменной типа SINT, теряя старший байт, и принимает значение 127 (16#7F в шестнадцатеричной форме). Пример IL: LD 2 INT_TO_REAL MUL 3.5 Пример FBD: REAL_TO-/ LREAL_TO Преобразования типов REAL или LREAL в другие типы: Значение числа будет округлено вверх до целого и преобразовано в нужный тип. За исключением типов STRING, BOOL, REAL и LREAL. При преобразовании большего типа в меньший, вы рискуете потерять информацию. При преобразовании в STRING используется до 16 цифр. Если строка имеет не достаточный размер, результат будет обрезан справа. Пример ST: i := REAL_TO_INT(1.5); (* Результат: 2 *) j := REAL_TO_INT(1.4); (* Результат: 1 *) i := REAL_TO_INT(-1.5); (* Результат: -2 *) j := REAL_TO_INT(-1.4); (* Результат: -1 *) Пример IL: LD 2.7 REAL_TO_INT GE %MW8 Пример FBD: Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-19 TIME_TO/TIME_OF_DAY Преобразования типов TIME или TIME_OF_DAY в другие типы: Физически значение времени сохраняется в переменной типа DWORD, выраженное в миллисекундах (начиная с 0 часов для TIME_OF_DAY). Собственное это число и будет преобразовано. При преобразовании в меньший тип, вы рискуете потерять информацию. При преобразовании в STRING образуется соответствующая МЭК текстовая строка. Примеры IL: LD T#12ms TIME_TO_STRING ST str (*Результат: 'T#12ms' *) LD T#300000ms TIME_TO_DWORD ST dw (*Результат: 300000 *) LD TOD#00:00:00.012 TOD_TO_SINT ST si (*Результат: 12 *) Примеры ST: str :=TIME_TO_STRING(T#12ms); (* Результат: T#12ms *) dw:=TIME_TO_DWORD(T#5m); (* Результат: 300000 *) si:=TOD_TO_SINT(TOD#00:00:00.012); (* Результат: 12 *) Примеры FBD: DATE_TO/DT_TO Преобразования типов DATE или DATE_AND_TIME в другие типы: Физически значение даты сохраняется в переменной типа DWORD, выраженное в секундах начиная с 1 января 1970 г. Это число и будет преобразовано. При преобразовании в меньший тип вы рискуете потерять информацию. При преобразовании в STRING образуется соответствующая МЭК текстовая строка. Примеры IL: Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-20 LD D#1970-01-01 (* Результат FALSE *) DATE_TO_BOOL ST b LD D#1970-01-15 (*Результат 29952 *) DATE_TO_INT ST i LD DT#1970-01-15-05:05:05 (*Результат 129 *) DT_TO_BYTE ST byt LD DT#1998-02-13-14:20 (*Результат 'DT#1998-02-13-14:20' *) DT_TO STRING ST str Примеры ST: b :=DATE_TO_BOOL(D#1970-01-01); (* Результат: FALSE *) i :=DATE_TO_INT(D#1970-01-15); (* Результат: 29952 *) byt :=DT_TO_BYTE(DT#1970-01-15-05:05:05); (* Результат: 129 *) str:=DT_TO_STRING(DT#1998-02-13-14:20); (*Результат:'DT#1998-02-13-14:20' *) Примеры FBD: STRING_TO Преобразования типа STRING в другие типы: Содержимое строки должно соотноситься с желаемым типом данных, в противном случае преобразование дает 0. Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-21 Пример IL: LD 'TRUE' (*Результат: TRUE *) STRING_TO_BOOL ST b LD 'abc34' (*Результат: 0 *) STRING_TO_WORD ST w LD 't#127ms' (*Результат: T#127ms *) STRING_TO_TIME ST t Примеры ST: b :=STRING_TO_BOOL('TRUE'); (* Результат: TRUE *) w :=STRING_TO_WORD('abc34'); (* Результат: 0 *) t :=STRING_TO_TIME('T#127ms'); (* Результат: T#127ms *) Примеры FBD: TRUNC Преобразование из REAL в INT. Используется только целочисленная часть аргумента. При преобразовании в меньший тип вы рискуете потерять информацию. Примеры ST: i:=TRUNC(1.9); (* Результат: 1 *) i:=TRUNC(-1.4); (* Результат: 1 *) LD 2.7 TRUNC GE %MW8 Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-22 10.10 Математические функции ABS Возвращает абсолютное значение числа. Например, ABS(-2) равно 2. Возможны следующие комбинации типов аргумента и результата: Параметр Результат INT INT, REAL, WORD, DWORD, DINT REAL REAL BYTE INT, REAL, BYTE, WORD, DWORD, DINT WORD INT, REAL, WORD, DWORD, DINT DWORD REAL, DWORD, DINT SINT REAL USINT REAL UINT INT, REAL, WORD, DWORD, DINT, UDINT, UINT DINT REAL, DWORD, DINT UDINT REAL, DWORD, DINT, UDINT Пример IL: LD 2 ABS ST i (*Результат: 2 *) Примеры ST: i:=ABS(-2); Пример FBD: SQRT Квадратный корень числа. Аргумент может быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT, UDINT, результат должен быть типа REAL. Пример IL: LD 16 SQRT ST q (*Результат: 4 *) Примеры ST: q:=SQRT(16); Пример FBD: LN Натуральный логарифм числа. Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-23 Аргумент может быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT, UDINT, результат должен быть типа REAL. Пример IL: LD 45 LN ST q (*Результат: 3.80666 *) Примеры ST: q:=LN(45); Пример FBD: LOG Десятичный логарифм числа. Аргумент может быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT, UDINT, результат должен быть типа REAL. Пример IL: LD 314.5 LOG ST q (*Результат: 2.49762 *) Примеры ST: q:=LOG(314.5); Пример FBD: EXP Экспонента. Аргумент может быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT, UDINT, результат должен быть типа REAL. Пример IL: LD 2 EXP ST q (*Результат: 9.7448e+009 *) Примеры ST: q:=EXP(2); Пример FBD: SIN Синус. Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-24 Аргумент может быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT, UDINT, результат должен быть типа REAL. Аргумент измеряется в радианах. Пример IL: LD 0.5 SIN ST q (*Результат: 0.479426 *) Пример ST: q:=SIN(0.5); Пример FBD: COS Косинус. Аргумент может быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT, UDINT, результат должен быть типа REAL. Аргумент измеряется в радианах. Пример IL: LD 0.5 COS ST q (*Результат: 0.877583 *) Пример ST: q:=COS(0.5); Пример FBD: TAN Тангенс. Аргумент может быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT, UDINT, результат должен быть типа REAL. Аргумент измеряется в радианах. Пример IL: LD 0.5 TAN ST q (*Результат: 0.546302 *) Пример ST: q:=TAN(0.5); Пример FBD: ASIN Арксинус. Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-25 Аргумент может быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT, UDINT, результат должен быть типа REAL. Пример IL: LD 0.5 ASIN ST q (*Результат: 0.523599 *) Пример ST: q:=ASIN(0.5); Пример FBD: ACOS Арккосинус. Аргумент может быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT, UDINT, результат должен быть типа REAL. Пример IL: LD 0.5 ABS ST q (*Результат: 1.0472 *) Пример ST: q:=ACOS(0.5); Пример FBD: ATAN Арктангенс. Аргумент может быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT, UDINT, результат должен быть типа REAL. Пример IL: LD 0.5 ABS ST q (*Результат: 0.463648 *) Пример ST: q := ATAN(0.5); Пример FBD: EXPT Число в степени: OUT = IN1 IN2 Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-26 IN1 и IN2 могут быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT, UDINT, OUT должена быть REAL. Пример IL: LD 7 EXPT 2 ST var1 (*Результат: 49 *) Пример ST: var1 := EXPT(7,2); Пример FBD: Приложение В: Операнды в CoDeSys CoDeSys V2.3 10-27 Приложение В: Операнды в CoDeSys В качестве операндов могут выступать константы переменные, адреса и вызовы функций. Константы BOOL BOOL константы могут иметь значение TRUE или FALSE. TIME Константы типа TIME в CoDeSys всегда начинаются с префикса "t" или "T" (длинная форма "time" или "TIME") и знака числа "#". Далее следует собственно время, которое может включать дни "d", часы "h", минуты "m", секунды "s" и миллисекунды "ms". Нет необходимости обязательно опреде- лять все составляющие времени, но присутствующие поля обязаны следовать именно в таком по- рядке (d, затем h, затем m, затем s, затем m, затем ms). Правильные примеры TIME констант в ST: TIME1 := T#14ms; TIME1 := T#100S12ms; (*Старший компонент может выходить за свой предел*) TIME1 := t#12h34m15s; Ошибочные примеры: TIME1 := t#5m68s; (*Младший компонент вышел за предел*) TIME1 := 15ms; (*T# пропущено*) TIME1 := t#4ms13d; (*Ошибочная последовательность*) DATE Константы типа DATE начинаются с префикса "d", "D", "DATE" или "date" и последующего "#". Даты задаются в формате Год-Месяц-День. Примеры: DATE#1996-05-06 d#1972-03-29 См. также 10.14 Переменные типа DATE TIME_OF_DAY Константы типа A TIME_OF_DAY начинаются с префикса "tod#", "TOD#", "TIME_OF_DAY#" или "time_of_day#" и последующего времени в формате: Часы:Минуты:Секунды. Секунды можно задавать в виде десятичной дроби. Примеры: TIME_OF_DAY#15:36:30.123 tod#00:00:00 DATE_AND_TIME Константы типа DATE_AND_TIME начинаются с префикса "dt#", "DT#", "DATE_AND_TIME#" или "date_and_time#". Дата и время приводятся последовательно через дефис. Примеры: DATE_AND_TIME#1996-05-06-15:36:30 dt#1972-03-29-00:00:00 Приложение В: Операнды в CoDeSys CoDeSys V2.3 10-28 Целочисленные константы Числовые значения могут быть представлены в двоичной, восьмеричной, десятичной и шестна- дцатеричной форме. Если число не десятичное, необходимо указать основание числа с префиксом # перед числом. Цифры диапазона 10-15 в шестнадцатеричной форме заменяются литерами A-F. Для удобства чтения в любом месте числа можно вставить подчеркивание. Примеры: 14 (*десятичное число*) 2#1001_0011 (*двоичное число*) 8#67 (*восьмеричное число*) 16#A (*шестнадцатеричное число*) Данные числа могут быть представлены типами BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL и LREAL. Неявное преобразование из "большего" в "младший" тип переменной не производится. Это означает, что нельзя просто использовать DINT как INT пере- менную, необходимо применять преобразование типов (см. раздел «Преобразование типов»). REAL/LREAL REAL и LREAL константы представляются в формате с десятичной точкой либо в экспоненциаль- ном формате. Запятая вместо точки не допускается. Примеры: 7.4 но не 7,4 1.64e+009 но не 1,64e+009 STRING Константы типа STRING представляются в виде набора символов, заключенных в одинарные ка- вычки. Строка может содержать пробелы и специальные символы (например, умляуты). Символы, не имеющие печатного образа, могут быть заданы шестнадцатеричным кодом в виде двух цифр, следующих за знаком доллара ($). Специальные комбинации из двух символов, начинающиеся со знака доллара, интерпретируются следующим образом: $$ Знак доллара $' Одинарная кавычка $L или $l Line feed $N or $n New line $P or $p Page feed $R or $r Line break $T or $t Tab Примеры: 'Полет нормальный' ' Abby and Craig ' ':-)' Типизированные константы Обычно при использовании МЭК констант подразумевается наименьший из возможных типов данных. Если нужно точно указать тип константы, применяется префикс типа: |