Codesys (824048), страница 61
Текст из файла (страница 61)
На выходеCDT. Если EN перейдет в FALSE, CDT сбросится в начальное значение DT#1970-01-01-00-00:00:00.Обратите внимание, что установка времени PDT происходит по фронту.10.17 Библиотека UTIL.LIBДанная библиотека содержит дополнительный набор различных функций и функциональных блоков,применяемых для BCD и бит/байт преобразований, дополнительных математических функций, а также регуляторов, генераторов и преобразований аналоговых сигналов.Специальная версия этой библиотеки UTIL_NO_REAL не содержит функций и функциональных блоков, использующих переменные типа REAL.10.17.1 BCD преобразованияБайт, представленный в формате BCD, содержит числа от 0 до 99.
Каждый десятичный знак занимает4 бита. Биты 4-7 содержат первую цифру – число десятков. Формат BCD подобен шестнадцатеричному представлению с ограничением диапазона чисел 0..99 вместо 0.. FF.Например: Преобразуем число 51 в BCD формат. 5 - это двоичное 0101, 1 - это 0001. В результате получается байт 0101_0001.BCD_TO_INTФункция преобразует байт формата BCD в число типа INT.Входной параметр функции типа BYTE и выход типа INT. Если входное значение не укладывается вформат BCD, функция возвращает -1.Примеры ST:i:=BCD_TO_INT(73);(* Результат 49 *)k:=BCD_TO_INT(151); (*Результат 97 *)l:=BCD_TO_INT(15);(* -1, потому что F0 не BCD формат*)INT_TO_BCDФункция преобразует INTEGER число в байт формата BCD.Входной параметр функции типа INT и выход типа BYTE.CoDeSys V2.310-56Приложение D: Библиотеки CoDeSysЕсли INTEGER число не может быть представлено в BCD формате, то функция возвращает значение255.Примеры ST:i:= INT_TO_BCD(49); (*Результат 73 *)k:=INT_TO_BCD (97); (*Результат 151 *)l:= INT_TO_BCD (100); (* Ошибка! Выход: 255 *)10.17.2 Бит/байт функцииEXTRACTПараметры функции: DWORD X и BYTE N.
Выход типа BOOL, отражает значение бита N в числе X.Биты нумеруются с 0.Примеры ST:FLAG:=EXTRACT(X:=81,N:=4); (* Результат: TRUE, 81 это 1010001, 4й бит 1 *)FLAG:=EXTRACT(X:=33, N:=0); (* Результат: TRUE, 33 это 100001,бит ‘0’ это 1 *)PACKФункция сворачивает восемь параметров B0, B1, ..., B7 типа BOOL в один BYTE.Функциональный блок UNPACK выполняет обратную распаковку.PUTBITПараметры функции: DWORD X, BYTE N и BOOL B.PUTBIT устанавливает N-й бит числа X в состояние, заданное B. Биты нумеруются с 0.Примеры ST:A:=38;(* двоичное 100110 *)B:=PUTBIT(A,4,TRUE);(* Результат : 54 = 2#110110 *)C:=PUTBIT(A,1,FALSE);(* Результат : 36 = 2#100100 *)UNPACKUNPACK преобразует вход B типа BYTE в 8 выходов B0,...,B7 типа BOOL.Обратная упаковка производится с помощью PACK.Пример FBD:CoDeSys V2.310-57Приложение D: Библиотеки CoDeSys10.17.3 Дополнительные математические функцииDERIVATIVEФункциональный блок выполняет численное дифференцирование.Аналоговый вход IN и выход OUT типа REAL.
Вход TM задает время дифференцирования (как правило, в миллисекундах) имеет тип DWORD. В процессе сброса (RESET = TRUE) выход OUT равеннулю.Алгоритм DERIVATIVE проводит аппроксимацию по четырем точкам, что снижает ошибки при наличии шума во входном сигнале.Блок FBD:Пример дифференцирования треугольных импульсов:INTEGRALФункциональный блок выполняет численное интегрирование.Аналоговый вход IN типа REAL.
Вход TM типа DWORD задает длительность интегрирования (какправило, в миллисекундах). Вход RESET типа BOOL запускает интегрирование при установке вTRUE. Выход OUT типа REAL.Алгоритм вычисления использует классический двухточечный метод трапеций.Блок FBD: пример интегрирования линейной функции:LIN_TRAFOДанный функциональный блок (util.lib) преобразует значение переменной REAL, принадлежащее одному интервалу в пропорциональное значение, принадлежащее другому интервалу. Интервалы определяются минимальным и максимальным значением.
Алгоритм преобразования опирается на следующее равенство:(IN - IN_MIN) : (IN_MAX - IN) = (OUT - OUT_MIN) : (OUT_MAX - OUT)CoDeSys V2.310-58Приложение D: Библиотеки CoDeSysВходные переменные:ПеременнаяТип данныхОписаниеINREALВходное значениеIN_MINREALНижнее значение входного диапазонаIN_MAXREALВерхнее значение входного диапазонаOUT_MINREALНижнее значение выходного диапазонаOUT_MAXREALВерхнее значение выходного диапазонаВыходные переменные:ПеременнаяТип данныхОписаниеOUTREALВыходное значениеERRORBOOLПризнак ошибки: TRUE, если IN_MIN = IN_MAXили если значение IN вышло за пределы входногодиапазонаПример использования:Допустим, датчик температуры выдает некоторое напряжение в вольтах (вход IN). Нам необходимопреобразовать полученное значение в градусы по Цельсию (выход OUT).
Входной диапазон (в Вольтах) определяется пределами IN_MIN=0 и IN_MAX=10. Выходной диапазон (в градусах Цельсия) определяется соответствующими пределами OUT_MIN=-20 и OUT_MAX=40.Так, при входном значении 5 Вольт, мы получим на выходе 10 градусов по Цельсию.STATISTICS_INTФункциональный блок определяет минимальное, максимальное и среднее значения входной величины.Аналоговый вход IN типа INT. По входу RESET типа BOOL все переменные инициализируются заново. Выход MN дает минимальное, выход MX максимальное и выход AVG среднее значения входныхданных IN. Все три выхода типа INT.Блок FBD:CoDeSys V2.310-59Приложение D: Библиотеки CoDeSysSTATISTICS_REALФункциональный блок, аналогичный STATISTICS_INT. Вход IN и выходы MN, MX, AVG имеют типREAL.VARIANCEФункциональный блок вычисляет дисперсию входных данных.Вход IN типа REAL, вход RESET типа BOOL и выход OUT типа REAL.
Сброс вычисления производится по входу RESET=TRUE.Среднеквадратичное отклонение может быть получено как квадратный корень VARIANCE.10.17.4 РегуляторыPDФункциональный блок реализует ПД закон регулирования:de(t ) Y = Y _ OFFSET + KP e (t ) + TVdt где Y_OFFSET – стационарное значение, KP – коэффициент передачи, TV – постоянная дифференцирования (ms), e(t) - сигнал ошибки (SET_POINT-ACTUAL).Входы ACTUAL, SET_POINT, KP, Y_OFFSET, Y_MIN Y_MAX типа REAL. Вход TV типа DWORD,RESET и MANUAL типа BOOL.Выходы Y – REAL, LIMITS_ACTVE типа BOOL.Значение выхода Y ограничено Y_MIN и Y_MAX.
При достижении Y границ ограничения, выходLIMITS_ACTVE, (BOOL) принимает значение TRUE. Если ограничение выхода не требуется, Y_MINи Y_MAX должны быть равны 0.Если MANUAL равен TRUE, то регулирование выключено, значение Y автоматически не изменяется.При переходе значения MANUAL в FALSE происходит рестарт регулятора.P-регулятор получается из PD установкой TV в 0.Пример FBD:CoDeSys V2.310-60Приложение D: Библиотеки CoDeSysPIDФункциональный блок реализует ПИД закон регулирования:1 TNde(t ) Y = Y _ OFFSET + KP e(t ) +e(t ) + TV∫TNdt0где Y_OFFSET – стационарное значение, KP – коэффициент передачи, TN – постоянная интегрирования (ms), TV – постоянная дифференцирования (ms), e(t) - сигнал ошибки (SET_POINT-ACTUAL).Входы ACTUAL, SET_POINT, KP, Y_OFFSET, Y_MIN Y_MAX типа REAL. Входы TN и TV типаDWORD, RESET и MANUAL типа BOOL.Выходы Y – REAL, LIMITS_ACTVE и OVERFLOW типа BOOL.Механизм ограничения выхода PID аналогичен PD регулятору.Неправильная настройка регулятора может вызвать неограниченный рост интегральной составляющей.
Для обнаружения такой ситуации предназначен выход OVERFLOW. При переполнении он принимает значение TRUE, одновременно останавливается работа регулятора. Для его включения необходимо использовать рестарт.Пример FBD:PID_FIXCYCLEФункциональный блок PID_FIXCYCLE.CoDeSys V2.310-61Приложение D: Библиотеки CoDeSysОтличается от PID тем, что время цикла не измеряется автоматически встроенным таймером, а задается дополнительной переменной CYCLE, в секундах.10.17.5 Генераторы сигналовBLINKФункциональный блок ‘генератор прямоугольных импульсов’Входы: ENABLE типа BOOL, TIMELOW и TIMEHIGH типа TIME.
Выход OUT типа BOOL.Генератор запускается по входу ENABLE = TRUE. Длительность импульса задается TIMEHIGH, длительность паузы TIMELOW.Пример CFC:FREQ_MEASUREДанный функциональный блок измеряет (усредненную) частоту (в Герцах) входного сигнала типаBOOL. Вы можете задать количество периодов для усреднения. Под периодом понимается время между двумя передними фронтами сигнала.CoDeSys V2.310-62Приложение D: Библиотеки CoDeSysВходные переменные:ПеременнаяТип данныхОписаниеINBOOLВходной сигналPERIODSINTЧисло периодов усреднения. Допустимое значение от 1до 10.RESETBOOLСбросВыходные переменные:ПеременнаяТип данныхОписаниеOUTREALРезультат, частота в ГерцахVALIDBOOLFALSE до окончания первого замера, либо период >3*OUT (признак ошибки по входам)GENФункциональный блок ‘функциональный генератор’Входы: перечисление MODE предопределенного типа GEN_MODE, BASE типа BOOL, PERIOD типаTIME, CYCLES и AMPLITUDE типа INT и RESET типа BOOL.
Выход OUT типа INT.Вход MODE задает вид генерируемой функции. Перечисление включает следующие значения: TRIANGLE и TRIANGLE_POS - треугольники, SAWTOOTH_RISE и SAWTOOTH_FALL – пила, RECTANGLE – прямоугольники, SINE и COSINE – синусоиды:TRIANGLE:TRIANGLE_POS:SAWTOOTH_RISE:SAWTOOTH_FALL:RECTANGLE:SINUS:COSINUS:CoDeSys V2.310-63Приложение D: Библиотеки CoDeSysBASE определяет представление единиц периода по времени (BASE=TRUE) или по числу циклов, т.е.по количеству вызовов функционального блока (BASE=FALSE).Входы PERIOD или CYCLES определяют период выходного сигнала.
Вход AMPLITUDE задает амплитуду сигнала.Сброс генератора происходит при установке RESET=TRUE.Пример FBD:10.17.6 Преобразования аналоговых сигналовCHARCURVEФункциональный блок осуществляет пересчет входных данных по заданной переходной функции- путем кусочно-линейной аппроксимации.Вход IN типа INT принимает исходные данные. Вход N типа BYTE определяет количество точек задающих передаточную функцию. Передаточная функция задается массивом точек ARRAY P[0..10],где P - это точка, определенная как структура типа POINT, состоящая из двух переменных INT X и Y.Выход OUT типа INT, выходные данные. Выход ERR типа BYTE, индикатор ошибки.Точки P[0]..P[N-1] массива ARRAY должны быть отсортированы по X в порядке возрастания, в противном случае ERR получает значение 1. Если вход IN не лежит в пределах от P[0].X до P[N-1].X, генерируется ошибка ERR=2 и выход OUT приобретает значение соответствующего предела P[0].X илиP[N-1].X.Число N должно быть в пределах от 2 до 11, иначе возникает ошибка ERR=4.Пример ST:Прежде всего определим массив ARRAY P:VAR...CoDeSys V2.310-64Приложение D: Библиотеки CoDeSysCHARACTERISTIC_LINE:CHARCURVE;KL:ARRAY[0..10] OF POINT:= (X:=0,Y:=0), (X:=250,Y:=50), (X:=500,Y:=150),(X:=750,Y:=400), 7((X:=1000,Y:=1000));COUNTER:INT;...END_VARДалее вызываем CHARCURVE для линейно возрастающих значений:COUNTER:=COUNTER+10;CHARACTERISTIC_LINE(IN:=COUNTER,N:=5,P:=KL);Последующая трассировка иллюстрирует полученный эффект:RAMP_INTФункциональный блок RAMP_INT ограничивает скорость нарастания и спада сигнала.Три входа имеют тип INT: IN, входные данные, ASCEND и DESCEND, максимальное нарастание испад за интервал, заданный TIMEBASE типа TIME.