Руководство пользователя по программированию плк в CoDeSys 3
Скачать 5.57 Mb.
|
Редактирование лицензионной информации ' ( Edit Licensing Information ) • Общая информация ( General information ): Наименование ( Name ): введите имя модуля, так как оно должно отображаться в Менеджере ли- цензирования. Заполнение этих полей обязательно. Менеджер лицензирования CoDeSys CoDeSys V2.3 9-2 ID ( Vendor-ID ): идентификатор поставщика, определяется специфическим инструментом лицензи- рования изготовителя. Без лицензии ( License free mode ): активируйте эту опцию, если данный модуль должен иметь воз- можность работы без лицензии, в демонстрационном режиме. Введите число дней (days), в течение которых допускается работа без лицензии. Число дней автоматически округляется вверх до десят- ков (10, 20, 30 ...). Если модуль можно использовать без ограничения по времени, то укажите здесь слово “unlimited”, доступное в списке. Платформы ( Targets ): введите идентификационные номера (ID) целевых систем, для которых дей- ствительна лицензия. Номера должны быть перечислены через запятую или точку с запятой. • Контакт ( Contact ): Лицензирование по телефону ( Licensing via phone ): / Лицензирование по почте ( Licensing per via mail ): номер телефона и e-mail поставщика лицензии. Заполнение этих полей обязательно. • Дополнительная информация ( Optional information ): В правом окне вы можете задать дополнительные сведения по пунктам списка, перечисленным в левой части окна: Описание ( Description ), Изготовитель ( Manufacturer ), Поставщик ( Vendor ), Цены ( Pricing information ). Обратите внимание: Ели вы требуете лицензирования библиотеки, есть смысл защитить ее от модификации паролем. Лицензионная информация 3S сохраняется внутри файлов библиотек и регистрируется на компьютере автома- тически, при включении библиотеки в проект. Лицензионная информация для модулей других по- ставщиков должна быть записана в отдельном XML файле. Подробнее см. документ 3S License Manager. 10 Приложения Приложение A: Операторы и функции МЭК CoDeSys поддерживает все МЭК операторы. В отличие от стандартных функций (см. приложение D, Стандартная библиотека) данные операторы и функции не требуют подключения библиотек. Сверх требований МЭК CoDeSys поддерживает следующие дополнительные операторы, не вклю- ченные в стандарт: INDEXOF и SIZEOF (см. Арифметические операторы), ADR и BITADR (см. Ад- ресные операторы). Обратите внимание, что операторы могут принимать неявную форму. Так оператор сложения (ADD) в языке ST выражается знаком «+». Внимание: поддержка выполнения операций с плавающей запятой зависит от целевой платформы. o Арифметические операторы o Битовые операторы o Операторы сдвига o Операторы выборки o Операторы сравнения o Адресные операторы o Оператор вызова o Преобразования типов o Математические функции 10.1 Арифметические операторы ADD Сложение переменных типов: BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL и LREAL. Две переменных типа TIME можно складывать (напр. t#45s + t#50s = t#1m35s). Результат имеет тип TIME. Пример IL: LD 7 ADD 2,4,7 ST Var 1 Пример ST: var1 := 7+2+4+7; Пример FBD: MUL Перемножение значений переменных типов: BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL и LREAL. Пример IL: Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-2 LD 7 MUL 2,4,7 ST Var 1 Пример ST: var1 := 7*2*4*7; Пример FBD: SUB Вычитание значений переменных типов: BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL и LREAL. Переменной TIME можно присвоить результат вычитания двух других переменных типа TIME. От- рицательное время не определено. Пример IL: LD 7 SUB 2 ST Var 1 Пример ST: var1 := 7-2; Пример FBD: DIV Деление значений переменных типов: BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL и LREAL. Пример IL: LD 8 DIV 2 ST Var 1 (* Результат равен 4 *) Пример ST: var1 := 7-2; Пример FBD: Примечание: Определив в своем проекте функции с именами CheckDivByte, CheckDivWord, CheckDivDWord и CheckDivReal вы сможете контролировать делитель и обрабатывать, например, деление на 0. Внимание: Результат деления на 0 может отличаться на разных целевых платформах. Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-3 Рассмотрим простейший пример применения CheckDivReal. Пример функции CheckDivReal: FUNCTION CheckDivReal : REAL VAR_INPUT divisor:REAL; END_VAR IF divisor = 0 THEN CheckDivReal := 1; ELSE CheckDivReal:=divisor; END_IF; Оператор DIV использует выход функции CheckDivReal как делитель. В следующей программе этот прием предотвращает деление на 0, делитель (d) заменяется с 0 на 1. В итоге получается ре- зультат 799. PROGRAM PLC_PRG VAR erg:REAL; v1:REAL := 799; d:REAL; END_VAR erg:= v1 / d; Внимание: CheckDiv-функции, содержащиеся в библиотеке Check.Lib, представляют собой примеры их реа- лизации. Прежде чем использовать эту библиотеку, убедитесь, что она работает так, как нужно в вашем случае, либо создайте собственные функции непосредственно в вашем проекте. MOD Остаток от деления значений переменных типов: BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT. Результат всегда целое число. Пример IL: LD 9 MOD 2 ST Var 1 (* Результат 1 *) Пример ST: var1 := 9 MOD 2; Пример FBD: Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-4 MOVE Присвоение значения одной переменной другой соответствующего типа. В графических редакторах CFC и LD существует возможность управлять разрешением работы блока (разрешать или запре- щать операцию) с помощью входов EN/EN0. В FBD этого делать нельзя. Пример применения EN/EN0 в CFC: Только если значение en_i равно TRUE, значение переменной var1 будет присвоено var2. Пример IL: LD ivar1 MOVE ivar2 ST ivar2 (! Аналогичный результат дает: LD ivar1 ST ivar2 ) Пример ST: ivar2 := MOVE(ivar1); ( ! Аналогичный результат дает: ivar2 := ivar1; ) 10.2 Битовые операторы AND Побитное И. Операция применима к типам BOOL, BYTE, WORD или DWORD. Пример IL: Var1 BYTE LD 2#1001_0011 AND 2#1000_1010 ST Var 1 (* Результат 2#1000_0010 *) Пример ST: var1 := 2#1001_0011 AND 2#1000_1010 Пример FBD: Внимание: В логических выражениях нельзя гарантировать присваивание промежуточных результатов. На- пример, если условие SFS перехода выглядит так: Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-5 то, значение переменной z может быть не присвоено. Это происходит по причине оптимизации вычислений компилятором. Если значения x и y FALSE, то конечный результат очевиден и остаток выражения вычислять не нужно. OR Побитное ИЛИ. Операция применима к типам BOOL, BYTE, WORD или DWORD. Пример IL: var1 :BYTE; LD 2#1001_0011 OR 2#1000_1010 ST var1 (* Результат 2#1001_1011 *) Пример ST: Var1 := 2#1001_0011 OR 2#1000_1010 Пример FBD: Внимание: См. примечание к AND. XOR Побитное исключающее ИЛИ. Операция применима к типам BOOL, BYTE, WORD или DWORD. Пример IL: Var1 :BYTE; LD 2#1001_0011 XOR 2#1000_1010 ST Var1 (* Результат 2#0001_1001 *) Пример ST: Var1 := 2#1001_0011 XOR 2#1000_1010 Пример FBD: Внимание: Допускается расширяемая форма, т.е. XOR имеет более двух входов. В этом случае входы обраба- тываются попарно, затем к результатам опять применяется XOR. Такой алгоритм определен стандартом. NOT Побитное НЕ. Операция применима к типам BOOL, BYTE, WORD или DWORD. Пример IL: Var1 :BYTE; LD 2#1001_0011 NOT ST Var1 (* Результат 2#0110_1100 *) Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-6 Пример ST: Var1 := NOT 2#1001_0011 Пример FBD: 10.3 Операторы сдвига Внимание: Количество бит, задействованных в данных операциях, определяется типом входной переменной! Тип переменной результата не влияет на процесс вычисления. (См. ST примеры ниже). Если вход- ная переменная представлена константой, выбирается наиболее компактный из возможных типов данных. SHL res:=SHL(in,n) Побитный сдвиг операнда in влево на n бит с дополнением нулями справа. Входные переменные и результат должны быть типа BYTE, WORD или DWORD. В следующем примере представлены различные результаты res_byte и res_word в зависимости от типа входной переменной (BYTE и WORD), хотя числовые их значения равны. Пример ST: PROGRAM shl_st VAR in_byte:BYTE:=16#45; in_word:WORD:=16#45; res_byte:BYTE; res_word:WORD; n:BYTE:=2; END_VAR res_byte:=SHL(in_byte,n); (* Результат 16#14 *) res_word:=SHL(in_word,n); (* Результат 16#0114 *) Пример FBD: Пример IL: LD 16#45 SHL 2 ST res_byte SHR res:= SHR(in,n) Побитный сдвиг операнда in вправо на n бит с дополнением нулями слева. Входные переменные и результат должны быть типа BYTE, WORD или DWORD. Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-7 Следующий пример подчеркивает зависимость результата от типа входной переменной (см. приме- чание выше): Пример ST: PROGRAM shr_st VAR in_byte:BYTE:=16#45; in_word:WORD:=16#45; res_byte:BYTE; res_word:WORD; n:BYTE:=2; END_VAR res_byte:=SHR(in_byte,n); (* Результат 16#11 *) res_word:=SHR(in_word,n); (* Результат 16#0011 *) Пример FBD: Пример IL: LD 16#45 SHR 2 ST res_byte ROL res:=ROL(in,n) Циклический сдвиг операнда in влево на n бит, младшие биты последовательно за- полняются старшими. Входные переменные и результат должны быть типа BYTE, WORD или DWORD. В следующем примере представлены различные результаты res_byte и res_word в зависимости от типа входной переменной (BYTE и WORD), хотя числовые их значения равны. Пример ST: PROGRAM rol_st VAR in_byte:BYTE:=16#45; in_word:WORD:=16#45; res_byte:BYTE; res_word:WORD; n:BYTE:=2; END_VAR res_byte:=ROL(in_byte,n); (* Результат 16#15 *) res_word:=ROL(in_word,n); (* Результат 16#0114 *) Пример FBD: Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-8 Пример IL: LD 16#45 ROL 2 ST res_byte ROR res:=ROR(in,n) Циклический сдвиг операнда in вправо на n бит, младшие биты последовательно заменяют старшие. Входные переменные и результат должны быть типа BYTE, WORD или DWORD. Следующий пример подчеркивает зависимость результата от типа входной переменной (см. примечание выше): Пример ST: PROGRAM ror_st VAR in_byte:BYTE:=16#45; in_word:WORD:=16#45; res_byte:BYTE; res_word:WORD; n:BYTE:=2; END_VAR res_byte:=ROR(in_byte,n); (* Результат 16#51 *) res_word:=ROR(in_word,n); (* Результат 16#4011 *) Пример FBD: Пример IL: LD 16#45 ROR 2 ST res_byte 10.4 Операторы выборки Константы в примерах этого раздела используются исключительно для наглядности. Все операции можно вы- полнять и с переменными. SEL Бинарный выбор. OUT:= SEL(G, IN0, IN1) означает OUT:= IN0 если G=FALSE; OUT:= IN1 если G=TRUE. IN0, IN1 и OUT могут быть любого типа, G должно быть типа BOOL. Бинарный выбор возвращает одно из двух: IN0, если G ЛОЖЬ, или IN1, если G ИСТИНА. Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-9 Пример IL: LD FALSE SEL 3,4 ST Var1 (* Результат - 3 *) Пример FBD: Внимание: Выражение, стоящее перед IN0 или IN1 может не вычисляться, если соответствующий вход не вы- бран, что определяется значением G. MAX Функция максимум возвращает наибольшее из двух значений. OUT := MAX(IN0, IN1) IN0, IN1 и OUT могут быть любого типа. Пример IL: LD 90 MAX 30 MAX 40 MAX 77 ST Var1 (* Результат - 90 *) Пример FBD: MIN Функция минимум возвращает наименьшее из двух значений. OUT := MIN(IN0, IN1) IN0, IN1 и OUT могут быть любого типа. Пример IL: LD 90 MIN 30 MIN 40 MIN 77 ST Var1 (* Результат 30 *) Пример FBD: Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-10 LIMIT Ограничитель OUT := LIMIT(Min, IN, Max) означает: OUT := MIN (MAX (IN, Min), Max) Max задает верхнюю и Min нижнюю границы ограничителя. Если IN больше верхнего или меньше нижнего пределов, результат ‘обрезается’ соответственно до Max или Min. IN и OUT могут быть любого типа. Пример IL: LD 90 LIMIT 30,80 ST Var 1 (* Результат - 80 *) MUX Мультиплексор. Возвращает K-е значение из входных переменных. OUT := MUX(K, IN0,...,INn) означает: OUT := INK. IN0, ...,INn и OUT могут быть любого типа. Переменная K должна быть BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT или UDINT. Пример IL: LD 0 MUX 30,40,50,60,70,80 ST Var 1 (* Результат - 30 *) Внимание: В результате оптимизации выражение, стоящее перед входом, может не вычисляться, если соот- ветствующий вход не выбран. В режиме эмуляции все выражения вычисляются. 10.5 Операторы сравнения GT Больше Двоичный оператор возвращает TRUE, если значение первого параметра больше второго. Операнды могут быть типов BOOL, BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL, LREAL, TIME, DATE, TIME_OF_DAY, DATE_AND_TIME и STRING. Пример IL: LD 20 GT 30 ST Var 1 (*Результат - ЛОЖЬ*) Пример ST: VAR1 := 20 > 30 > 40 > 50 > 60 > 70; Пример FBD: Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-11 LT Меньше Двоичный оператор возвращает TRUE, если значение первого параметра меньше второго. Операнды могут быть типов BOOL, BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL, LREAL, TIME, DATE, TIME_OF_DAY, DATE_AND_TIME и STRING. Пример IL: LD 20 LT 30 ST Var 1 (*Результат - ИСТИНА*) Пример ST: VAR1 := 20 < 30; Пример FBD: LE Меньше или равно Двоичный оператор возвращает TRUE, если значение первого параметра меньше или равно второму. Операнды могут быть типов BOOL, BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL, LREAL, TIME, DATE, TIME_OF_DAY, DATE_AND_TIME и STRING. Пример IL: LD 20 LE 30 ST Var 1 (*Результат - ИСТИНА*) Пример ST: VAR1 := 20 <= 30; Пример FBD: GE Больше или равно Двоичный оператор возвращает TRUE, если значение первого параметра больше или равно второму. Операнды могут быть типов BOOL, BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL, LREAL, TIME, DATE, TIME_OF_DAY, DATE_AND_TIME и STRING. Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-12 Пример IL: LD 60 GE 40 ST Var 1 (*Результат - ИСТИНА*) Пример ST: VAR1 := 60 >= 40; Пример FBD: EQ Равно Двоичный оператор возвращает TRUE, если значение первого параметра равно второму. Операнды могут быть типов BOOL, BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL, LREAL, TIME, DATE, TIME_OF_DAY, DATE_AND_TIME и STRING. Пример IL: LD 40 EQ 40 ST Var 1 (*Результат - ИСТИНА*) Пример ST: VAR1 := 40 = 40; Пример FBD: NE Не равно Двоичный оператор возвращает TRUE, если значение первого параметра не равно второму. Операнды могут быть типов BOOL, BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL, LREAL, TIME, DATE, TIME_OF_DAY, DATE_AND_TIME и STRING. Пример IL: LD 40 NE 40 ST Var 1 (*Результат - FALSE*) Пример ST: VAR1 := 40 <> 40; Пример FBD: Приложение A: Операторы и функции МЭК CoDeSys V2.3 10-13 10.6 Адресные операторы Внимание: При онлайн коррекции кода, адреса переменных могут измениться. Не забывайте о такой вероят- ности, используя указатели. Описанные в этом разделе операторы и функции не предписаны стандартом МЭК. ADR Функция адрес ADR возвращает адрес аргумента в формате DWORD. Полученный адрес может быть передан функции в качестве аргумента или присвоен переменной типа указатель. Пример IL: LD Var 1 ADR ST Var 2 man_fun1 ADRINST При вызове функции ADRINST из экземпляра функционального блока она возвращает адрес экземпляра в DWORD. Данный адрес можно передавать в функции и использовать как указатель, либо его можно непосредственно присвоить переменной проекта типа указатель. Пример ST (внутри экземпляра функционального блока): dvar:=ADRINST(); (* Присваивание адреса экземпляра переменной dvar *) fun(a:=ADRINST()); (* Адрес экземпляра как аргумент функции *) Пример IL: ADRINST ST dvar ADRINST fun |