1) Надо бы обновится хотя бы до 2.05
2) Надо поставить DECODE_FLOAT или хотя бы до вызова регулятора проверку диапазона входной величины (+-300 градусов)
3) Можно и самому декодировать. Из первого байта извлекаете младшую тетраду при старшей =0xF
1) А что, на 2.02 есть проблемы с ПИД функцией?
2) DECODE_FLOAT, то стоит только на DEF_VALUE пусто. А значения регулируемой переменной в норме.
3) Значит на _ERR я вижу только старший байт? В описании ..._ERR: BYTE; – код ошибки, расшифровка которой:.... Так ошибка в младшем байте?
В программе без ног.
Отдельное ипользование встроенных процедур ФБ как-то сомнительно. Я воспользовался этим только потому, что в CFC проще добавить действие написанное на ST для каких то операций, чем то же самое писать на CFC, те совместное использование 2х и более языков.
А так вполне вероятно различное восприятие чего либо разными людьми.
вроде бы никаких серьезных проблем на 2.02 нет. подозреваю, что у вас стоит ограничение интеграла -100..+100, нужно -1..1. в результате интеграл очень долго не рассасывается. к сожалению в старой версии документации на библиотеку есть такая досадная ошибка.
Опять не понял. Делаю так:
1) Создаю ФБ FUNCTION_BLOCK со входами VAR_INPUT и выходами VAR_OUTPUT. В него добавляю действия.
2) Создаю программу PROGRAM со входами VAR_INPUT и выходами VAR_OUTPUT. В него добавляю действия.
3) В PLC_PRG на CFC вставляю действия экземпляра ФБ и программы. Все вставляется с ногами. Совершенно правильно так и должно быть.
Могу выдумать только одну чудесную ситуацию: делаем ФБ или программу с действиями, но без входов и выходов (секции VAR_INPUT и VAR_OUTPUT пусты). Тогда естественно действия будут вставляться без ног (их просто нет), что в программу что в ФБ.
Типичное использование действий: нужно добавить в ФБ некие особые процедуры, например: сброс, удержание, стоп, настройка, переключение в другой режим и др. Классически по МЭК нужно добавлять в ФБ дополнительные входы и по ним делать эти процедуры. Это плохо тем, что сложные ФБ обрастают выводами как ежики и сам блок внутри усложняется. Поэтому в CoDeSys придуманы действия. Их очень даже удобно использовать извне. Ноги тут необходимы. ФБ с действиями – это как класс с методами в С++.
Действительно чудесно! Вы совершенно правы - нет в prg, моей, входов и выходов, поэтому и возникла некоторая сумятица в голове. Вопрос снят. Спасибо.
Ограничение интеграла стоит от -1 до +1, но отрицательных величин выходная переменная не получает, хотя интеграл 1 в отрицательную сторону растет. За что овечает Integral1 и Integral2? У меня Integral2 =0, изменяется только первый.
Интеграл - это сумма (sp-pv) - рассогласований. Все правильно, изменяется только первая - вторая для внутренних нужд.
Посмотрел по коду - Выход регулятора ограничен -1..1
Вопрос - а зачем вам выход меньше 0 - чем управляете?
Последний раз редактировалось Малышев Олег; 21.04.2009 в 13:21.
От -1 до 1 стоит в главном регуляторе температуры в приточно-вытяжной установке, работающей по "вытяжке". От 0 до -1 в регуляторе чиллера (охлаждение). Да и суть то не в этом. До недавнего момента все было нолрмально - функция выдавала как отрицательные так и положительные значения. А библиотека с ПИД регуляторами обновлялась?
Кстати, разобрал FLOAT при ошибке термосопративления. В p^+3 обе тетрады при любой ошибке равны 15. Где истина? Судя по всему DECODE_FLOAT показывает именно, то чего ему приходит, а приходит ему не то что написано в документации по библиотеке. Похоже косяк в модуле RTD sensor.