Codesys (824048), страница 56
Текст из файла (страница 56)
Результат зависит оттого, включена или нет опция байтовой адресации.VARvar1 AT %IX2.3:BOOL;bitoffset: DWORD;END_VARПример ST:Bitoffset := BITADR(var1); (* Результат 19, если byte addressing=TRUE, или 35, еслиbyte addressing=FALSE*)Пример IL:LD Var1BITADRST Var2Косвенный оператор (content)Косвенное обращение через указатель производится путем добавления оператора "^" после имениуказателя.Пример ST:CoDeSys V2.310-14Приложение A: Операторы и функции МЭКpt:POINTER TO INT;var_int1:INT;var_int2:INT;pt := ADR(var_int1);var_int2:=pt^;Вспомогательные функцииINDEXOFВозвращает внутренний индекс POU.Пример ST:var1 := INDEXOF(POU2);SIZEOFВозвращает размер переменной в байтах.Пример IL:arr1:ARRAY[0..4] OF INT;Var1 INTLDarr1SIZEOFSTVar 1(* Результат 10 *)Пример ST:var1 := SIZEOF(arr1);TIMEФункция TIME возвращает время в миллисекундах от начала работы системы в формате TIME.Пример IL:TIMEST systime (*Результат, например.: T#35m11s342ms *)Пример ST:systime:=TIME();Пример FBD:CoDeSys V2.310-15Приложение A: Операторы и функции МЭКINIINI можно использовать для инициализации retain переменных, содержащихся в экземпляре функционального блока.Синтаксис: <bool-Variable> := INI(<FB-instance, TRUE|FALSE)Если второй операнд равен TRUE, то все энергонезависимые переменные, определенные в функциональном блоке FB, будут инициализироваться.Пример ST: fbinst экземпляр функционального блока fb, в котором определена retain переменная retvar.Объявление:fbinst:fb;b:bool;Фрагмент реализации:b := INI(fbinst, TRUE);ivar:=fbinst.retvar (* => retvar инициализирована *)Пример IL:LD fbinstINI TRUEST bПример FBD:10.7 Оператор вызоваCALВызывает функциональный блок или программу.Применяется в IL для вызова экземпляра функционального блока, входные переменные помещаются вскобках вслед за его именем.Пример: Вызов экземпляра функционального блока Inst, где входные переменные Par1 и Par2 равны 0 иTRUE соответственно.CAL INST(PAR1 := 0, PAR2 := TRUE)10.8 Явное преобразование типовНеявное преобразование данных из ‘большего’ типа в ‘меньший’ запрещено стандартом (например, изINT в BYTE или DINT в WORD).
Если подобное преобразование действительно необходимо, онодолжно быть выражено явно. Явные преобразования работают практически для всех базовых типовданных.Синтаксис:CoDeSys V2.310-16Приложение A: Операторы и функции МЭК<баз.Тип1>_TO_<баз..Тип2>Преобразования в строку …_TO_STRING используют выравнивание влево. Если строка оказываетсяслишком короткой, результат будет обрезан.BOOL_TOПреобразование типа BOOL в другой тип:Для числовых типов результат равен 1, когда операнд TRUE, и 0, если операнд FALSE.Для типа STRING результат - это слово TRUE или FALSE.Примеры IL:LDTRUEBOOL_TO_INTSTILDTRUE(*Результат: 1 *)BOOL_TO_STRINGSTstrLDTRUE(*Результат: 'TRUE' *)BOOL_TO_TIMESTtLDTRUE(*Результат: T#1ms *)BOOL_TO_TODSTLD(*Результат: TOD#00:00:00.001 *)FALSEBOOL_TO_DATESTdatLDTRUE(*Результат: D#1970-01-01 *)BOOL_TO_DTSTdandt(*Результат:DT#1970-01-01-00:00:01 *)Примеры ST:CoDeSys V2.3i:=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 *)10-17Приложение A: Операторы и функции МЭКdandt:=BOOL_TO_DT(TRUE);(* Результат:DT#1970-01-01-00:00:01 *)Примеры FBD:(*Результат: 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:LD213BYTE_TO_BOOLSTbLD0(*Результат: TRUE *)INT_TO_BOOLSTbLDT#5ms(*Результат: FALSE *)TIME_TO_BOOLSTbLD'TRUE'(*Результат: TRUE *)STRING_TO_BOOLSTb(*Результат: TRUE *)Примеры ST:CoDeSys V2.310-18Приложение A: Операторы и функции МЭК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:(*Результат: TRUE *)(*Результат: FALSE *)(*Результат: TRUE *)(*Результат: TRUE *)Преобразования между целочисленными типамиПреобразования из одного целочисленного типа в другой:При преобразовании большего типа в меньший, Вы рискуете потерять информацию.
Если числопревосходит верхний предел данного типа, старшие байты числа игнорируются.Пример ST:si := INT_TO_SINT(4223);(* Результат: 127 *)Число 4223 (16#107F в шестнадцатеричной форме) сокращается до переменной типа SINT, теряястарший байт, и принимает значение 127 (16#7F в шестнадцатеричной форме).Пример IL:LD2INT_TO_REALMUL 3.5Пример FBD:REAL_TO-/ LREAL_TOПреобразования типов REAL или LREAL в другие типы:Значение числа будет округлено вверх до целого и преобразовано в нужный тип.
За исключением типовSTRING, BOOL, REAL и LREAL. При преобразовании большего типа в меньший, вы рискуете потерятьинформацию.При преобразовании в STRING используется до 16 цифр. Если строка имеет не достаточный размер,результат будет обрезан справа.Пример ST:i := REAL_TO_INT(1.5);CoDeSys V2.3(* Результат: 2 *)10-19Приложение A: Операторы и функции МЭКj := REAL_TO_INT(1.4);(* Результат: 1 *)i := REAL_TO_INT(-1.5);(* Результат: -2 *)j := REAL_TO_INT(-1.4);(* Результат: -1 *)Пример IL:LD2.7REAL_TO_INTGE%MW8Пример FBD:TIME_TO/TIME_OF_DAYПреобразования типов TIME или TIME_OF_DAY в другие типы:Физически значение времени сохраняется в переменной типа DWORD, выраженное в миллисекундах(начиная с 0 часов для TIME_OF_DAY). Собственное это число и будет преобразовано.
Припреобразовании в меньший тип, вы рискуете потерять информацию.При преобразовании в STRING образуется соответствующая МЭК текстовая строка.Примеры IL:LDT#12msTIME_TO_STRINGSTstrLDT#300000ms(*Результат: 'T#12ms' *)TIME_TO_DWORDSTdwLDTOD#00:00:00.012(*Результат: 300000 *)TOD_TO_SINTSTsi(*Результат: 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:CoDeSys V2.310-20Приложение A: Операторы и функции МЭКDATE_TO/DT_TOПреобразования типов DATE или DATE_AND_TIME в другие типы:Физически значение даты сохраняется в переменной типа DWORD, выраженное в секундах начиная с1 января 1970 г.
Это число и будет преобразовано. При преобразовании в меньший тип вы рискуетепотерять информацию.При преобразовании в STRING образуется соответствующая МЭК текстовая строка.Примеры IL:LD D#1970-01-01(* Результат FALSE *)DATE_TO_BOOLST bLD D#1970-01-15(*Результат 29952 *)DATE_TO_INTST iLD DT#1970-01-15-05:05:05(*Результат 129 *)DT_TO_BYTEST bytLD DT#1998-02-13-14:20(*Результат 'DT#1998-02-13-14:20' *)DT_TO STRINGST 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:CoDeSys V2.310-21Приложение A: Операторы и функции МЭКSTRING_TOПреобразования типа STRING в другие типы:Содержимое строки должно соотноситься с желаемым типом данных, в противном случаепреобразование дает 0.Пример IL:LD 'TRUE'(*Результат: TRUE *)STRING_TO_BOOLST bLD 'abc34'(*Результат: 0 *)STRING_TO_WORDST wLD 't#127ms'(*Результат: T#127ms *)STRING_TO_TIMEST tПримеры ST:b :=STRING_TO_BOOL('TRUE');(* Результат: TRUE *)w :=STRING_TO_WORD('abc34');(* Результат: 0 *)t :=STRING_TO_TIME('T#127ms');(* Результат: T#127ms *)Примеры FBD:CoDeSys V2.310-22Приложение A: Операторы и функции МЭКTRUNCПреобразование из REAL в INT.
Используется только целочисленная часть аргумента.При преобразовании в меньший тип вы рискуете потерять информацию.Примеры ST:i:=TRUNC(1.9);(* Результат: 1 *)i:=TRUNC(-1.4);(* Результат: 1 *)LD2.7TRUNCGE%MW810.9 Математические функцииABSВозвращает абсолютное значение числа.