Вход

Просмотр полной версии : Зависание ПИД регулятора



Назаров Александр
14.04.2009, 22:10
Сегодня был на объекте где давно установлен ПЛК управляющий центральным кондиционером. Оказалось, что в регуляторах (ПИД функции) не изменяется интеграл, т.е. можно задать любое другое значение, а оно не пытается меняться. Кроме того на функциях работающих в отрицательных значениях (холодильник) выходное значение функции >=0. Интеграл растет в отрицательную сторону, а выходное значение равно 0. Что за фигня? может кто пояснит?:(

Ygor
15.04.2009, 07:26
Выложите ваш проект. Причин может быть несколько.

Назаров Александр
15.04.2009, 08:37
И еще. Столкнулся с такой проблемой, когда к ФБ на CFC прописываешь "действие" (процедуру на ST), то при попытке вставить "действие" в свой ФБ вставляется не действие, весь ФБ, хотя название этого элемента совпадает с наименованием "действия". Чудеса!?

Назаров Александр
17.04.2009, 08:26
Неужели никто несталкивался с подобными проблемами? А поддержке это совершенно не интересно? Или авась рассосется?:mad:

Николаев Андрей
17.04.2009, 08:34
Александр, техподдержка тоже не может, да и не должна знать все функции CoDeSys. К сожалению на это просто не хватает человеческого ресурса. У нас в том числе на форуме есть представитель компании Пролог (CoDeSys).

Лично я не совсем понял что Вы понимаете под прописывание действия.
А проект Вы не выложили.

Назаров Александр
17.04.2009, 10:01
Дело в том что ПИД функция из библиотеки Овен. Платформа CodeSys для ПЛК, поэтому резонно обращаться не в Пролог, а Овен.
Действие - это поддпрограмма в ФБ. (токой перевод в среде программирования на русс. яз. - "Дабавить действие" )

Игорь Петров
17.04.2009, 10:20
Если я правильно понял вопрос: есть функциональный блок с действиями. Задача: из CFC вызвать действие.

Как это отобразить графически?
Я думаю так:
Действия не имеют своих собственных входных/выходных переменных. Они используют входы/выходы функционального блока. Поэтому цеплять действие в диаграмме FBD/CFC надо за что? – Правильно за входы самого ФБ, больше не за что. Вставлять в диаграмму надо какую картинку? – ФБ целиком. Внутри прямоугольника вызываемого экземпляра ФБ через точку пишем действие: ИМЯ_ЭКЗ_ФБ.ИМЯ_ДЕЙСТВИЯ
Получаем вызов нужного действия. Все согласно мануалу.
Могло ли быть как-то иначе?

Назаров Александр
17.04.2009, 10:43
Прилагаю остаток программы, где выкинуто все что возможно. Действие (подпрограмма) с именем StartEH к ФБ Regulator_WH01_2 отображается как весь ФБ. ПЛК150УМ таргет 2,03

Малышев Олег
17.04.2009, 10:44
1) Вопрос прошивка какой версии?
2) На входе регулятора стоит DECODE_FLOAT - т.е. при ошибке измерителя что подается на вход регулятора?

Назаров Александр
17.04.2009, 11:01
Вроде бы нашел. В PRG это действие в CFC отображается как блок с именем действия без входов и выходов. А в ФБ со всеми ногами. А они кому нужны?
Подпрограмма и так видит все пременные своего ФБ. Кроме того требует описания этого "действия" как перменной. Масло масляное, с загроможднием алгоритма. Надо сделать как для PRG. Тут все логично:) .
А про ПИДы кто нибудь, что нибудь скажет?

Назаров Александр
17.04.2009, 11:24
1) Вопрос прошивка какой версии?
2) На входе регулятора стоит DECODE_FLOAT - т.е. при ошибке измерителя что подается на вход регулятора?

1) 2.02.8, target 2.02
2) В данном проекте ничего, но и ошибок датчиков нет.
А кстати, почему на выходе ошибки DECODE_FLOAT при любой ошибке датчика, чего только не пробовал и к.з. и обрыв, показывает только 15 ошику?

Малышев Олег
17.04.2009, 11:42
1) Надо бы обновится хотя бы до 2.05
2) Надо поставить DECODE_FLOAT или хотя бы до вызова регулятора проверку диапазона входной величины (+-300 градусов)
3) Можно и самому декодировать. Из первого байта извлекаете младшую тетраду при старшей =0xF

Назаров Александр
17.04.2009, 12:06
1) Надо бы обновится хотя бы до 2.05
2) Надо поставить DECODE_FLOAT или хотя бы до вызова регулятора проверку диапазона входной величины (+-300 градусов)
3) Можно и самому декодировать. Из первого байта извлекаете младшую тетраду при старшей =0xF
1) А что, на 2.02 есть проблемы с ПИД функцией?
2) DECODE_FLOAT, то стоит только на DEF_VALUE пусто. А значения регулируемой переменной в норме.
3) Значит на _ERR я вижу только старший байт? В описании ..._ERR: BYTE; – код ошибки, расшифровка которой:.... Так ошибка в младшем байте?

Игорь Петров
17.04.2009, 12:49
Вроде бы нашел. В PRG это действие в CFC отображается как блок с именем действия без входов и выходов. А в ФБ со всеми ногами. А они кому нужны?
Где получается без ног? Должно быть везде с ногами. Может же быть вызов действий вложенных ФБ. Тогда без ног тяжело. Вызов своих – это частный случай.

Назаров Александр
17.04.2009, 13:46
Где получается без ног? Должно быть везде с ногами. Может же быть вызов действий вложенных ФБ. Тогда без ног тяжело. Вызов своих – это частный случай.

В программе без ног.
Отдельное ипользование встроенных процедур ФБ как-то сомнительно. Я воспользовался этим только потому, что в CFC проще добавить действие написанное на ST для каких то операций, чем то же самое писать на CFC, те совместное использование 2х и более языков.
А так вполне вероятно различное восприятие чего либо разными людьми.

Малышев Олег
21.04.2009, 08:46
вроде бы никаких серьезных проблем на 2.02 нет. подозреваю, что у вас стоит ограничение интеграла -100..+100, нужно -1..1. в результате интеграл очень долго не рассасывается. к сожалению в старой версии документации на библиотеку есть такая досадная ошибка.

Игорь Петров
21.04.2009, 10:08
В программе без ног. Отдельное ипользование встроенных процедур ФБ как-то сомнительно...
Опять не понял. Делаю так:
1) Создаю ФБ FUNCTION_BLOCK со входами VAR_INPUT и выходами VAR_OUTPUT. В него добавляю действия.
2) Создаю программу PROGRAM со входами VAR_INPUT и выходами VAR_OUTPUT. В него добавляю действия.
3) В PLC_PRG на CFC вставляю действия экземпляра ФБ и программы. Все вставляется с ногами. Совершенно правильно так и должно быть.

Могу выдумать только одну чудесную ситуацию: делаем ФБ или программу с действиями, но без входов и выходов (секции VAR_INPUT и VAR_OUTPUT пусты). Тогда естественно действия будут вставляться без ног (их просто нет), что в программу что в ФБ.

Типичное использование действий: нужно добавить в ФБ некие особые процедуры, например: сброс, удержание, стоп, настройка, переключение в другой режим и др. Классически по МЭК нужно добавлять в ФБ дополнительные входы и по ним делать эти процедуры. Это плохо тем, что сложные ФБ обрастают выводами как ежики и сам блок внутри усложняется. Поэтому в CoDeSys придуманы действия. Их очень даже удобно использовать извне. Ноги тут необходимы. ФБ с действиями – это как класс с методами в С++.

Назаров Александр
21.04.2009, 11:36
Опять не понял. Делаю так:
Могу выдумать только одну чудесную ситуацию: делаем ФБ или программу с действиями, но без входов и выходов (секции VAR_INPUT и VAR_OUTPUT пусты). Тогда естественно действия будут вставляться без ног (их просто нет), что в программу что в ФБ.


Действительно чудесно! Вы совершенно правы - нет в prg, моей, входов и выходов, поэтому и возникла некоторая сумятица в голове:) . Вопрос снят. Спасибо.


вроде бы никаких серьезных проблем на 2.02 нет. подозреваю, что у вас стоит ограничение интеграла -100..+100, нужно -1..1. в результате интеграл очень долго не рассасывается. к сожалению в старой версии документации на библиотеку есть такая досадная ошибка.
Ограничение интеграла стоит от -1 до +1, но отрицательных величин выходная переменная не получает, хотя интеграл 1 в отрицательную сторону растет. За что овечает Integral1 и Integral2? У меня Integral2 =0, изменяется только первый.

Малышев Олег
21.04.2009, 12:14
Интеграл - это сумма (sp-pv) - рассогласований. Все правильно, изменяется только первая - вторая для внутренних нужд.
Посмотрел по коду - Выход регулятора ограничен -1..1

Вопрос - а зачем вам выход меньше 0 - чем управляете?

Назаров Александр
21.04.2009, 13:34
.... Вопрос - а зачем вам выход меньше 0 - чем управляете?
От -1 до 1 стоит в главном регуляторе температуры в приточно-вытяжной установке, работающей по "вытяжке". От 0 до -1 в регуляторе чиллера (охлаждение). Да и суть то не в этом. До недавнего момента все было нолрмально - функция выдавала как отрицательные так и положительные значения. А библиотека с ПИД регуляторами обновлялась?
Кстати, разобрал FLOAT при ошибке термосопративления. В p^+3 обе тетрады при любой ошибке равны 15. Где истина? Судя по всему DECODE_FLOAT показывает именно, то чего ему приходит, а приходит ему не то что написано в документации по библиотеке. Похоже косяк в модуле RTD sensor.

Малышев Олег
21.04.2009, 14:55
забавно, я кончено, профан в вентиляции, зря думал что для охлаждения и нагрева нужны разные к-ты и р-ры. хотя порядок ти будет примерно один... но вроде надо два регулятора... или вы используете доп к-т на охлаждение?
посмотрел изменения с 2.02 на текущую - основное изменение - при восстановлении из Retain и старте с ошибкой измерения интеграл не обнуляется. остальное по вроде бы несущественно...

Назаров Александр
21.04.2009, 15:55
регулятор на самом деле один, а пид функций - 7, работают в зависимости от сезона и наружных температур. практически все однополярные, за исключением регулятора вытяжного воздуха, т.к. его можно охлаждать и нагревать в любой период года.:)

Малышев Олег
22.04.2009, 07:45
Не совсем понятно что нужно делать с вытяжным воздухом - у вас именно вентиляция? Обычно всех волнует приточка, или у вас система с рекуперацией/рециркуляцией?
У Вас версия библиотеки соответствует прошивке ПЛК? http://www.owen.ru/device/88206764

Назаров Александр
22.04.2009, 08:49
1.вообщето это центральный кондиционер с рециркуляцией. просто если установка обслуживает большое помещение, в котором работают практически одни женщины, в данном случае зал юрлиц в сбербанке, то регулирование по вытяжке с ограничением притока от вытяжке на какую то дельту, оказывается более предпочтительным - нет больших разниц температур в помещении и температуры притока. процесс регулирования гораздо медленней, но гораздо лучший для персонала.
2. да, действительно именно на нотбуке стоит версия библиотеки по пид от 2006г. из-за этого и глюки? спасибо.

Малышев Олег
22.04.2009, 09:14
да, глюки именно от этого и, именно как у вас(уже была тема или на форуме или на семинаре...).

Jack
22.04.2009, 20:27
Столкнулись с невесёлой ситуацией . В цехе произошло возгорание оборудования при использовании PID регулятора в ПЛК150. Дело в том , что для предварительного нагрева пластмассы в экструдере
используется программный таймер , который в будние дни рано утром включает на прогрев ТЭНы на уровень 180гр(примерная выходная мощность 20% от максимальной).
Всё работало нормально в течении года . Но на днях было решено добавить модуль статистики в PLC configuration, что и было сделано. А ночью при отсутствии персонала на рабочем месте произошло возгорание пластмассы в экструдере .Сработала сигнализация.В результате горения пластика оказались сильно закопчены два помещения.Благо открытый огонь был локальным и не вышел за пределы станка.Оборудование было восстановлено , косметический ремонт помещения ещё предстоит. Анализ показал : при добавлении модуля статистики полностью сбросились параметры программно-аппаратного PID регулятора из библиотеки ОВЕН и на его выходе установилось ,не встречавшееся нам ранее значение "-1.#QNAN" (видимо переполнение REAL переменной ), которое пробралось через все элементы AND , MUL и т.д. и выдало на нагрев 100% мощности, в результате через несколько часов произошло воспламенение. Т.к. ранее с подобным не сталкивались ,это было весьма неожиданно .

Филоненко Владислав
23.04.2009, 07:21
1. Что значит сбросились? При загрузке новой программы текущие значения и retain сбрасываются в значения по умолчанию.
2. Более подробно можно сказать, только увидев проект.
3. Как у Вас происходит настройка ПИД-а?

Jack
23.04.2009, 19:47
ПИД регулятор выдаёт значение от -100 до 100 (0...100%),
преобразуется во временные интервалы ШИМ и управляет
нагрузкой.Автонастройка была выполнена изначально, результаты понравились .В режиме ONline были распечатаны параметры ПИДа , т.к. в процессе развития проекта и перезаписи программы они могли самопроизвольно меняться , и, чтобы не выполнять вновь Автонастройку , эти параметры вводили руками.Но критических ситуаций не было ,просто температура держалась не стабильно , и это косвенно подсказывало ,что
параметры сбились.Было бы неплохо ,если один раз выполнив автонастройку, ПИД помнил их дооолго, буквально допустим выдал из себя все параметры в виде структуры, чтобы их можно было жёстко подать, в дальнейшем,ему же на вход , по принципу "один раз настроил и забыл ".Ведь ПИДов в проекте может быть несколько , и постоянно контролировать сбились ли их параметры или нет оказывается трудоёмко на реальном объекте.В приложении принтскрины ...

Малышев Олег
23.04.2009, 20:17
Из последнего скрина видно, что сбились к-ты. Понятно, что Ei/0 =бесконечность т.е. NaN - непонятно почему он проходит сквозь ограничение выхода -100..100. Какая версия прошивки?
Для предотвращения сбоев на вашей системе используйте не ANR_PID... а PID_FUNCTION с kp=.fk0(24.95) ti=.fki(1156) td/ti=0.125

Jack
23.04.2009, 21:57
хорошо.возможно это вариант, получить коэффициенты ,используя элемент с Anr , а потом задействовать Pid_function.попробуем.используется плк150 , прошивка 2.08 .

Малышев Олег
24.04.2009, 08:33
Прошивка 2.02 - а не 2.08 - были проблемы с восстановлением из retain см несколько постов выше. Как я понял тоже не используете DECODE_FLOAT

Хотелось бы все же глянуть краем глаза на текст программы, если можно на oleg сбк owen.ru

Jack
25.04.2009, 07:22
насчёт прошивки всё верно :2.02.8
если имеется ввиду тот Decode_float, который рекомендуется ставить на сигнальный вход , то он
задействован.вырезку из проекта отправили.
попробовали обновить прошивку до: 2.07.2 и таргет
до 2.06.3(странно ,что при установке на всплывающей подсказке пишется версия 2.02, а после установки в Hadware : 2.05 ).из того ,что сразу бросилось в глаза,
это меньшее время цикла проекта.но к сожалению плк150 перестал обмениваться с частотником Atv31 по Modbus Rtu на скорости 19200 .на предыдущей прошивке было нормально.просим подсказать как восстановить обмен с пч.откатывать назад прошивку не хотелось бы, а в понедельник станку предстоит работать...

Малышев Олег
26.04.2009, 17:58
Увеличивайте время цикла. Расчитывате Pooling time.

Jack
26.04.2009, 23:43
Используется на всех модулях опрос "by command" (поэтому Pooling Time видимо не влияет, там стоит 150ms). Parity : EVEN ( не NO PARITY ). Поставили задачу в цикл 3;5;10ms (для прошивки 2.07.2) - не помогло. Переустановили прошивку на 2.05.7 - начался вялый обмен ,что-то передаётся ,но не всё, также поставили задачу в цикл 3;5;10ms - не помогло.Может попробовать поставить прошивку 2.10...? Просим выслать прошивку и таргет на почту garr@mail.ru .

Назаров Александр
09.06.2009, 12:29
Очередной завис ПИД функции (см. вложение) Интеграл -1, выход 0.
PLCInfo
PLC model MODEL PLC 100
Binary VERSION 2.05.7
Need Target version 2.05
Compiled: 17:03:33 May 30 2008
MAC 67:77:00:12:C4:37
IP 10.0.6.10
GATE 10.0.6.1
MASK 255.255.255.0
PIC upper version is 05
Licence unlimited
No DAC
PIC lower version is 09
Сброс контроллера не помогает, только сброс в "оригинал".
Случается это, скорее всего, после подгрузки изменений.
Каков порядок действий при изменении программы должен приводить к 100% положительному результату для дальнейшей работы программы с верным функционированием?

Малышев Олег
10.06.2009, 07:32
Оптимально нажать reset и загрузиться без автозапуска программы (с нажатой PLC_PRG). После этого загрузитья.
При отладке старайтесь пользоваться Load All... (не зависимо есть в программе ПИД или нет.)

Назаров Александр
10.06.2009, 09:09
что значит "с нажатой Plc_prg"?

Малышев Олег
10.06.2009, 16:02
виноват, утром кофе до мозга не дошло.
с нажатой кнопкой старт/стоп (на передней панели плк) для предотвращения запуска проекта в автозагрузке

Flomaster
26.06.2009, 02:04
Добрый день!
Тоже произошла проблема с ПИД-регулятором на станции управления насосами.
На прошивке 2.02 всё работало как часы. Несколько дней назад обновили прошивку и таргет до 2.05. Вроде бы все нормально, регулятор работал как обычно, без проблем. Однако, через несколько часов работы выходная мощность регулятора упала от 80-85% до нуля (чего быть не должно даже теоретически!!!). В результате пришлось переходить на резервную станцию.
Поскольку станция территориально находится достаточно далеко, на рабочем столе собрал макет (ПЛК+МДВВ+ИП320, частотного преобразователя нет, да он и не нужен для проверки). К ПЛК подключен датчик давления, который показывает 0. Уставка, например 12 очков.
Задаю параметры ПИД-регулятора, на выходе мощность 100%. То, что надо, стремимся к 12 очкам.
Блок ПИД-регулятора в программе реализован как функциональный блок на FBD. Если в ходе выполнения программы щелкнуть на этом блоке в списке POUs, то предлагается выбрать Implementation либо Instanse. Выбираю Instanse и имею возможность увидеть все текущие значения в блоке. В общем, всё, как надо!

Наступила ночь. Затем утро. Утром решил проверить. Вхожу в соответствующий экран ИП320 и вижу выходную мощность ПИД-регулятора 0. Подключаюсь к ПЛК, пытаюсь зайти в POU регулятора. Но окно выбора Implementation либо Instanse на экране не появилось. Сразу открылся блок регулятора, но все переменные, которые раньше корректно отображались, теперь отображаются как "???".

Соседняя станция подпиточных насосов на прошивке 2.02 работает без проблем уже несколько месяцев.

Вопросы:
1. Из-за чего такое могло произойти? Поменялась только прошивка ПЛК и таргет, сам код программы остался прежним.
2. Какая прошивка на данный момент является наиболее стабильной? Из форума понять не смог. Перелопатил всё, но на каждую версию прошивки есть куча негатива.
3. На сайте Овен появилась новая библиотека PID_Regulators. Это новая версия библиотеки? Что в ней изменилось?

Kirill
26.06.2009, 15:41
Вопросы:
1. Из-за чего такое могло произойти? Поменялась только прошивка ПЛК и таргет, сам код программы остался прежним.
2. Какая прошивка на данный момент является наиболее стабильной? Из форума понять не смог. Перелопатил всё, но на каждую версию прошивки есть куча негатива.
3. На сайте Овен появилась новая библиотека PID_Regulators. Это новая версия библиотеки? Что в ней изменилось?

1. Проверяйте время цикла. Хотя.. в 2-05-7 это не поможет. Значит версия 2-07-2, таргеты для нее менять не надо. Поставьте время цикла не 1 мс, а 5.

2. Вопрос дискуссионный. Если вы не используете всяческие навороты вроде udp, подключения модемов через Конфигурацию ПЛК и др. нововведения, то рекомендую оставаться на 2-03-0. На мой взгляд - самая стабильная. Плюс нет заморочек с временем цикла.
Либо что-то новее, но только не 2-05-7.

3. Это другая библиотека, в ее основе, конечно, прежние алгоритмы, но переработано полностью. Другие алгоритмы автонастройки, большее количество блоков для различных процессов. Действует начиная с прошивки 2-07-2.

Flomaster
26.06.2009, 15:59
Спасибо за ответ, думаю, что пока вернемся на прошивку 2.03. Различные навороты у нас не используются, да и прошивка пока с отрицательной стороны себя не показала.
Время цикла в модуле Statistic проверял, там отображается величина 1600-2600. Я так понимаю, что это соответствует 1.6-2.6 мс. Многовато, надо бы программку оптимизировать.
И еще вопрос: можно ли откатиться на прошивку 2.03 командой UpdateCore?