Руководство пользователя по программированию плк в CoDeSys 3
Скачать 5.57 Mb.
|
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 *) Приложение D: Библиотеки CoDeSys CoDeSys V2.3 10-54 l:=BCD_TO_INT(15); (* -1, потому что F0 не BCD формат*) INT_TO_BCD Функция преобразует INTEGER число в байт формата BCD. Входной параметр функции типа INT и выход типа BYTE. Если INTEGER число не может быть представлено в BCD формате, то функция возвращает значе- ние 255. Примеры ST: i:= INT_TO_BCD(49); (*Результат 73 *) k:=INT_TO_BCD (97); (*Результат 151 *) l:= INT_TO_BCD (100); (* Ошибка! Выход: 255 *) Бит/байт функции 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 *) UNPACK UNPACK преобразует вход B типа BYTE в 8 выходов B0,...,B7 типа BOOL. Обратная упаковка производится с помощью PACK. Пример FBD: Приложение D: Библиотеки CoDeSys CoDeSys V2.3 10-55 Дополнительные математические функции DERIVATIVE Функциональный блок выполняет численное дифференцирование. Аналоговый вход IN и выход OUT типа REAL. Вход TM задает время дифференцирования (как правило, в миллисекундах) имеет тип DWORD. В процессе сброса (RESET = TRUE) выход OUT равен нулю. Алгоритм DERIVATIVE проводит аппроксимацию по четырем точкам, что снижает ошибки при наличии шума во входном сигнале. Блок FBD: Пример дифференцирования треугольных импульсов: INTEGRAL Функциональный блок выполняет численное интегрирование. Аналоговый вход IN типа REAL. Вход TM типа DWORD задает длительность интегрирования (как правило, в миллисекундах). Вход RESET типа BOOL запускает интегрирование при установ- ке в TRUE. Выход OUT типа REAL. Алгоритм вычисления использует классический двухточечный метод трапеций. Блок FBD: пример интегрирования линейной функции: Приложение D: Библиотеки CoDeSys CoDeSys V2.3 10-56 LIN_TRAFO Данный функциональный блок (util.lib) преобразует значение переменной REAL, принадлежащее одному интервалу в пропорциональное значение, принадлежащее другому интервалу. Интервалы определяются минимальным и максимальным значением. Алгоритм преобразования опирается на следующее равенство: (IN - IN_MIN) : (IN_MAX - IN) = (OUT - OUT_MIN) : (OUT_MAX - OUT) Входные переменные: Переменная Тип дан- ных Описание IN REAL Входное значение IN_MIN REAL Нижнее значение входного диапазона IN_MAX REAL Верхнее значение входного диапазона OUT_MIN REAL Нижнее значение выходного диапазона OUT_MAX REAL Верхнее значение выходного диапазона Выходные переменные: Переменная Тип дан- ных Описание OUT REAL Выходное значение ERROR BOOL Признак ошибки: TRUE, если IN_MIN = IN_MAX или если значение IN вышло за преде- лы входного диапазона Пример использования: Допустим, датчик температуры выдает некоторое напряжение в вольтах (вход IN). Нам необходи- мо преобразовать полученное значение в градусы по Цельсию (выход OUT). Входной диапазон (в Вольтах) определяется пределами IN_MIN=0 и IN_MAX=10. Выходной диапазон (в градусах Цельсия) определяется соответствующими пределами OUT_MIN=-20 и OUT_MAX=40. Так, при входном значении 5 Вольт, мы получим на выходе 10 градусов по Цельсию. STATISTICS_INT Функциональный блок определяет минимальное, максимальное и среднее значения входной вели- чины. Приложение D: Библиотеки CoDeSys CoDeSys V2.3 10-57 Аналоговый вход IN типа INT. По входу RESET типа BOOL все переменные инициализируются заново. Выход MN дает минимальное, выход MX максимальное и выход AVG среднее значения входных данных IN. Все три выхода типа INT. Блок FBD: STATISTICS_REAL Функциональный блок, аналогичный STATISTICS_INT. Вход IN и выходы MN, MX, AVG имеют тип REAL. VARIANCE Функциональный блок вычисляет дисперсию входных данных. Вход IN типа REAL, вход RESET типа BOOL и выход OUT типа REAL. Сброс вычисления произ- водится по входу RESET=TRUE. Среднеквадратичное отклонение может быть получено как квадратный корень VARIANCE. Регуляторы PD Функциональный блок реализует ПД закон регулирования: + + = dt t de TV t e KP OFFSET Y Y ) ( ) ( _ где Y_OFFSET – стационарное значение, KP – коэффициент передачи, TV – постоянная диффе- ренцирования, e(t) - сигнал ошибки (SET_POINT-ACTUAL). Входы функционального блока: Наименование Тип Описание ACTUAL REAL Текущее значение контролируемой переменной. SET_POINT REAL Задание. KP REAL Коэффициент передачи. TV REAL Постоянная дифференцирования, в секундах ( т.е. "0.5" для 500 мс). Y_MANUAL REAL Определяет значение выхода Y, если MANUAL = TRUE. Y_OFFSET REAL Стационарное значение Y. Y_MIN, Y_MAX REAL Значение выхода Y ограничено Y_MIN и Y_MAX. При достижении Y границ ограничения, выход LIMITS_ACTVE, (BOOL) принимает значение TRUE. Ограничение работает только при Y_MIN < Y_MAX. MANUAL BOOL Значение TRUE, включает режим ручного регулирования по входу Y_MANUAL. Приложение D: Библиотеки CoDeSys CoDeSys V2.3 10-58 RESET BOOL TRUE сбрасывает регулятор; в это время Y = Y_OFFSET Входы функционального блока: Наименование Тип Описание Y REAL Выход регулятора LIMITS_ACTIVE BOOL TRUE означает что Y ограничивается пределами (Y_MIN, Y_MAX). Y_OFFSET, Y_MIN и Y_MAX используются при необходимости ограничения допустимого диапа- зона значений выхода. Если ограничение выхода не требуется, Y_MIN и Y_MAX должны быть равны 0. P-регулятор получается из PD установкой TV в 0. Пример FBD: PID Функциональный блок реализует ПИД закон регулирования: + + + = ∫ TN dt t de TV t e TN t e KP OFFSET Y Y 0 ) ( ) ( 1 ) ( _ где Y_OFFSET – стационарное значение, KP – коэффициент передачи, TN – постоянная интегри- рования, TV – постоянная дифференцирования, e(t) - сигнал ошибки (SET_POINT-ACTUAL). Входы функционального блока: Наименование Тип Описание ACTUAL REAL Текущее значение контролируемой переменной. SET_POINT REAL Задание. KP REAL Коэффициент передачи. TN REAL Постоянная интегрирования, в секундах ( т.е. "0.5" для 500 мс). TV REAL Постоянная дифференцирования, в секундах ( т.е. "0.5" для 500 мс). Y_MANUAL REAL Определяет значение выхода Y, если MANUAL = TRUE. Y_OFFSET REAL Стационарное значение Y. Y_MIN, Y_MAX REAL Значение выхода Y ограничено Y_MIN и Y_MAX. При достижении Y границ ограничения, выход LIMITS_ACTVE, Приложение D: Библиотеки CoDeSys CoDeSys V2.3 10-59 Y_MAX (BOOL) принимает значение TRUE. Ограничение работает только при Y_MIN < Y_MAX. MANUAL BOOL Значение TRUE, включает режим ручного регулирования по входу Y_MANUAL. RESET BOOL TRUE сбрасывает регулятор; в это время Y = Y_OFFSET Входы функционального блока: Наименование Тип Описание Y REAL Выход регулятора LIMITS_ACTIVE BOOL TRUE означает что Y ограничивается пределами (Y_MIN, Y_MAX). OVERFLOW BOOL TRUE – признак переполнения. Механизм ограничения выхода PID аналогичен PD регулятору. Неправильная настройка регулятора может вызвать неограниченный рост интегральной состав- ляющей. Для обнаружения такой ситуации предназначен выход OVERFLOW. При переполнении он принимает значение TRUE, одновременно останавливается работа регулятора. Для его включе- ния необходимо использовать рестарт. Пример FBD: PID_FIXCYCLE Функциональный блок PID_FIXCYCLE. Отличается от PID тем, что время цикла не измеряется автоматически встроенным таймером, а за- дается дополнительной переменной CYCLE, в секундах. Приложение D: Библиотеки CoDeSys CoDeSys V2.3 10-60 Генераторы сигналов BLINK Функциональный блок ‘генератор прямоугольных импульсов’ Входы: ENABLE типа BOOL, TIMELOW и TIMEHIGH типа TIME. Выход OUT типа BOOL. Генератор запускается по входу ENABLE = TRUE. Длительность импульса задается TIMEHIGH, длительность паузы TIMELOW. При переходе ENABLE в FALSE, выход OUT остается в том состоянии, в котором он был в этот момент. Если вам необходимо чтобы выходная переменная сбрасывалась в FALSE при ENABLE равном FALSE, то используйте выражение "OUT AND ENABLE" на выходе (т.е. добавьте блок AND на выход и на второй вход подайте ENABLE). Пример CFC: FREQ_MEASURE Данный функциональный блок измеряет (усредненную) частоту (в Герцах) входного сигнала типа BOOL. Вы можете задать количество периодов для усреднения. Под периодом понимается время между двумя передними фронтами сигнала. Входные переменные: Переменная Тип данных Описание IN BOOL Входной сигнал PERIODS INT Число периодов усреднения. Допустимое значение от 1 до 10. RESET BOOL Сброс Выходные переменные: Переменная Тип данных Описание OUT REAL Результат, частота в Герцах Приложение D: Библиотеки CoDeSys CoDeSys V2.3 10-61 VALID BOOL FALSE до окончания первого замера, либо период > 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: BASE определяет представление единиц периода по времени (BASE=TRUE) или по числу циклов, т.е. по количеству вызовов функционального блока (BASE=FALSE). Входы PERIOD или CYCLES определяют период выходного сигнала. Вход AMPLITUDE задает амплитуду сигнала. Сброс генератора происходит при установке RESET=TRUE. Пример FBD: Приложение D: Библиотеки CoDeSys CoDeSys V2.3 10-62 Преобразования аналоговых сигналов 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 CHARACTERISTIC_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 ограничивает скорость нарастания и спада сигнала. Приложение D: Библиотеки CoDeSys CoDeSys V2.3 10-63 Три входа имеют тип INT: IN, входные данные, ASCEND и DESCEND, максимальное нарастание и спад за интервал, заданный TIMEBASE типа TIME. Установка двоичного входа RESET в TRUE вызывает сброс RAMP_INT в начальное состояние. Выход OUT типа INT, выходные данные. Если TIMEBASE равен t#0s, ASCEND и DESCEND задают ограничение изменения за один цикл (вызов блока) безотносительно времени. Пример FBD: RAMP_REAL RAMP_REAL аналогичен RAMP_INT, за исключением того, что входы IN, ASCEND, DESCEND и выход OUT типа REAL. Аналоговые компараторы HYSTERESIS Аналоговый компаратор с гистерезисом. Входы IN, HIGH и LOW типа INT. Выход OUT типа BOOL. Если вход IN принимает значение, меньшее LOW, выход OUT устанавливается в TRUE. Если вход IN принимает значение, большее HIGH, то выход равен FALSE. В пределах от LOW до HIGH зна- чение выхода не изменяется. Пояснительная иллюстрация: LIMITALARM Функциональный блок, контролирует принадлежность значения входа IN заданному диапазону. Входы LOW и HIGH задают границу диапазона.. Приложение D: Библиотеки CoDeSys CoDeSys V2.3 10-64 Входы IN, HIGH и LOW типа INT, выходы O, U и IL типа BOOL. Если значение на входе IN: превышает предел HIGH выход O = TRUE меньше предела LOW выход U = TRUE лежит в пределах между LOW и HIGH (включительно) выход IL = TRUE Пример FBD: Библиотека AnalyzationNew.lib Данная библиотека содержит модули для анализа выражений в SFC. Если сложное выражение да- ет FALSE, то библиотека позволяет уточнить, какие компоненты условного выражения дали такой результат. Существует специальный флаг SFCErrorAnalyzationTable, механизм его работы неявно использует данные функции для анализа условий переходов. Пример условного выражения: b OR NOT(y < x) OR NOT (NOT d AND e) Во всех модулях используются следующие переменные: InputExpr: BOOL, анализируемое выражение DoAnalyze: BOOL, TRUE запускает анализ ExpResult: BOOL, текущее значение выражения Функции: AnalyzeExpression возвращает строку, содержащую компоненты выражения, дающие в итоге зна- чение FALSE. Для этого служит вспомогательная функция AppendErrorString добавляющая ком- поненты, разделенные символом "|". Выходная строка OutString (тип STRING) содержит результат (например: y < x | d). Функция AnalyseExpressionTable записывает компоненты выражения, дающие в итоге значение FALSE, в массив. Для каждого компонента заполняется структура ExpressionResult, содержащая наименование, адрес, комментарий и текущее значение. OutTable: ARRAY [0..15] OF ExpressionResult; Например: AnalyseExpressionCombined совмещает функции AnalyzeExpression и AnalyseExpressionTable. Приложение D: Библиотеки CoDeSys CoDeSys V2.3 10-65 Системные библиотеки CoDeSys Системные библиотеки дают доступ к специализированным и низкоуровневым функциям кон- троллера. Набор доступных библиотек зависит от аппаратной платформы. Общий состав и назна- чение системных библиотек приведено в документе SysLibs_Overview_RU.pdf. Подробно функции каждой из системных библиотек описаны в соответствующих документах: SysLib…_RU.pdf. Приложение E: Краткий справочник по операторам и компонентам библиотек CoDeSys V2.3 10-66 Приложение E: Краткий справочник по операторам и компонентам библиотек Приведенные ниже таблицы кратко представляют операторы CoDeSys и компоненты библиотек Standard.lib и Util.lib. Даны нотации для языков ST и IL. Для IL указаны допустимые модифика- торы. Обратите внимание, что для IL инструкций первый операнд должен быть загружен заранее (на- пример, командой LD). Непосредственно в строке за «IL» командой вводятся второй и после- дующие (если они есть) операнды. Столбец «Мод.» содержит допустимые IL модификаторы: C Команда выполняется только в случае, если результат предыдущей операции TRUE. |