PDA

Просмотр полной версии : плк63 сбой работы



relline
19.11.2010, 09:31
дброго времини суток.
решили попробовать использовать ваши контролеры плк-63. в результате двухнедельней експлуатации дважды повторилсь одна и таже проблема. при колебаниях напряжения перестало работать пид регулирование, точнее на выход(4-20ма) после скачка/просадки идет 20ма. плк, все датчики и регулятор запитаны через упс. хотелось бы услышать возможные причины.

relline
19.11.2010, 11:54
Также выскакивает сообщение, время от времени, с ошибкой 403(ошибка чтения из EEPROM). Используется SCADA-система Indel 4, время опроса 2 сек., количество переменных не превышает 15.

Алексей Дмитриев
20.11.2010, 12:40
какого типа у вас просадка питания? хотелось бы узнать длительность и величину.
заложил в проект плк-63, шкаф уже собрал. пока не налаживал, железо еще не готово. не хотелось-бы наступать на ваши грабли!:d

relline
22.11.2010, 09:47
после многочисленных издевательств над входным напряжением на упс, пришли к выводу что колебания напряжения не причем. но вот выход(4-20) со временем(может за час может за сутки) уползает до 20ма, хотя выходя из задания и параметра он должен быть закрыт(4ма).

relline
22.11.2010, 09:59
будьте добры ссылочку на последнюю прошивку к плк63-ррррии-м

Алексей Дмитриев
22.11.2010, 16:44
Если в CoDeSys видим, что выход должен быть закрыт, а он 20 ма, то скорей всего проблема аппаратная. Недавно столкнулись с аналогичным эффектом на датчике - Выход уплывает до максимума примерно за 1 час. Причину так и не выяснили, отправили производителю, но интересный эффект - если датчик своим корпусом не подключен к земле, то есть висит на проводе - этого эффекта не наблюдается. Пришли к выводу, что стоят какие-то емкостные фильтры на землю и потихоньку заплывают.:D
Может у Вас аналогичная проблема с гальванической развязкой?

relline
09.03.2011, 11:58
Доброго времини суток. Вот появилось время повозится с даной проблемой.
Собрал в лаборатории стенд после двух дней наблюдений выявил факт отказа в работе описаный выше. Скрины отладки Кодесис прилагаю. Проблема оказалась в переполнении при ращете Интегральной составляющей пид регулятора. Хотелось бы услышать что мне дальше делать чтобы помочь Вам в решении проблемы и собсно что бы я мог поставить даные контролеры на обьект.

Скриншоты:
http://s013.radikal.ru/i325/1103/bc/242c0848d005.jpg
http://s015.radikal.ru/i333/1103/2c/a292f6a8226f.jpg

relline
09.03.2011, 12:35
"Неправильная настройка регулятора может вызвать неограниченный рост интегральной составляю-
щей. Для обнаружения такой ситуации предназначен выход OVERFLOW. При переполнении он при-
нимает значение TRUE, одновременно останавливается работа регулятора. Для его включения необ-
ходимо использовать рестарт"
CoDeSys_V23_RU.pdf стр.10-61

неправлиная настройка подразумевает что TN будет "0", в моем случае ПИД регулятор работает хорошо но через некоторые время выскакивает переполнение. при нач. условиях что я использую место датчика обычное сопротивление на входе(как результат вход у меня постоянен и не колеблится) данного переполнения быть не должно.

ЗЫ: Проводить проводить рестарт ПИД регулятора можно но не вариант.

relline
09.03.2011, 14:03
У Вас выход OVERFLOW на обоих картинках в состоянии TRUE соответственно ошибка есть
место утверждения хотелось что бы Вы ткнули пальцем какой с параметров я указал с ошибкой, не зря первый скрин со значениями настроек ПИД регулятора, а второй с раскрытыми функциями ПИД регулятора.


есть куча библиотек с ПИД-регуляторами, поиграйтесь ими, к примеру я вообще свою писал

под словом "куча" хотелось бы увидить хотя бы одну ссылку.

ЗЫ: ИМХО в коде контролера/библиотеки где-то есть ошибка, я как покупатель данной продукции вправе требовать ее исправления!

relline
09.03.2011, 16:44
данная библиотека не содержит ручного управления, попробую рестартовать ПИД-контур при переполнении, посмотрю как это отобьется на техпроцесе

ЗЫ: Плохо нету комментариев от разработчиков

kolyan
09.03.2011, 19:22
неправлиная настройка подразумевает что TN будет "0", в моем случае ПИД регулятор работает хорошо но через некоторые время выскакивает переполнение. при нач. условиях что я использую место датчика обычное сопротивление на входе(как результат вход у меня постоянен и не колеблится) данного переполнения быть не должно.

ЗЫ: Проводить проводить рестарт ПИД регулятора можно но не вариант.


"при нач. условиях что я использую место датчика обычное сопротивление на входе(как результат вход у меня постоянен и не колеблится) данного переполнения быть не должно".

Интересно! Если у Вас вместо датчика резистор, то интегральная составляющая регулятора будет стремиться уменьшить рассогласование между входным значением и уставкой.
Но, так как при попытках регулятора воздействовать на объект регулирования, сопротивление Вашего резистора остаётся неизменным, а значит и измеренное значение также остаётся неизменным, то начинает накапливаться интегральная составляющая. И накапливаться она будет до тех пор, пока не произойдёт переполнение. Чем меньше время интегрирования, тем быстрее произойдёт переполнение. Но, даже, если время указано значительное, то при данном опыте переполнение всё равно произойдёт, хотя и позже.

relline
11.03.2011, 09:11
Интересно! Если у Вас вместо датчика резистор, то интегральная составляющая регулятора будет стремиться уменьшить рассогласование между входным значением и уставкой.
Но, так как при попытках регулятора воздействовать на объект регулирования, сопротивление Вашего резистора остаётся неизменным, а значит и измеренное значение также остаётся неизменным, то начинает накапливаться интегральная составляющая. И накапливаться она будет до тех пор, пока не произойдёт переполнение. Чем меньше время интегрирования, тем быстрее произойдёт переполнение. Но, даже, если время указано значительное, то при данном опыте переполнение всё равно произойдёт, хотя и позже.

хорошо, допустим я с этим согласен, вопрос остается тогда почему на РАБОЧЕЙ!!! установке случается даное переполнение?но я все таки не согласен:
1. АЦП не будет держать стабильное значение, оно будет колеблится пускай даже в раене тысячных
2. если бы было переполнение по Интегральной составляющей согласно Вашей теории то переполнение было по выходу, а на скрине видно что выход "-329,4446" это не переполнение, также видно со скрина что переполнение по входу!

вот код ращета интегральной составляющей


FUNCTION_BLOCK INTEGRAL
VAR_INPUT
IN:REAL; (* input variable *)
TM:DWORD; (* time since last call in msec *)
RESET:BOOL; (* reset: OUT is set to zero and OVERFLOW to false *)
END_VAR
VAR_OUTPUT
OUT:REAL; (* value of the integral *)
OVERFLOW:BOOL:=FALSE; (* overflow *)
END_VAR
VAR
END_VAR
IF RESET THEN
OUT:=0;
OVERFLOW:=FALSE;
ELSIF NOT OVERFLOW THEN
IF 1E38 - IN*TM < OUT OR -1E38 - IN*TM > OUT THEN
OVERFLOW:=TRUE;
ELSE
OUT:=OUT+IN*TM/1000;
END_IF;
END_IF;

вот как берется параметр IN


FUNCTION_BLOCK PID
VAR_INPUT
ACTUAL :REAL; (* actual value, process variable *)
SET_POINT:REAL; (* desired value, set point *)
KP:REAL; (* proportionality const. (P)*)
TN:REAL; (* reset time (I) in sec *)
TV:REAL; (* rate time, derivative time (D) in sec*)
Y_MANUAL:REAL; (* Y is set to this value as long as MANUAL=TRUE *)
Y_OFFSET:REAL; (* offset for manipulated variable *)
Y_MIN:REAL; (* minimum value for manipulated variable *)
Y_MAX:REAL; (* maximum value for manipulated variable *)
MANUAL:BOOL; (* TRUE: manual: Y is not influenced by controller,
FALSE: controller determines Y *)
RESET:BOOL; (* reset: set Y output to Y_OFFSET and reset integral part *)
END_VAR
VAR_OUTPUT
Y:REAL; (* manipulated variable, set value*)
LIMITS_ACTIVE:BOOL:=FALSE; (* true set value would exceed limits Y_MIN, Y_MAX *)
OVERFLOW:BOOL:=FALSE; (* overflow in integral part *)
END_VAR
VAR
CLOCK:TON;
I: INTEGRAL;
D: DERIVATIVE;
TMDIFF: DWORD;
ERROR: REAL;
INIT: BOOL:=TRUE;
Y_ADDOFFSET: REAL;
KPcopy:REAL;
TNcopy:REAL;
TVcopy:REAL;
END_VAR
IF TN>0 AND KP<> 0 AND (NOT OVERFLOW OR RESET OR MANUAL) THEN
ERROR := SET_POINT-ACTUAL; (* Regeldifferenz *)

IF RESET OR MANUAL OR INIT OR (KP<>KPcopy OR TN<>TNcopy OR TV<>TVcopy) THEN (* Reset oder Handbetrieb *)
I(RESET:=TRUE);
D(RESET:=TRUE);
OVERFLOW:=FALSE;
LIMITS_ACTIVE:=FALSE;
IF RESET OR INIT THEN
Y := Y_OFFSET;
INIT:=FALSE;
Y_ADDOFFSET := 0;
ELSIF MANUAL THEN
Y := Y_MANUAL;
Y_ADDOFFSET := Y_MANUAL-(Y_OFFSET+KP*(ERROR+I.OUT/TN+D.OUT*TV));
ELSE
Y_ADDOFFSET := Y - Y_OFFSET - KP*ERROR;
END_IF
TMDIFF:=0;
CLOCK(IN:=FALSE); (* Timer neu starten *)
CLOCK(PT:=t#1h, IN:=TRUE);

TNcopy := TN;
TVcopy := TV;
KPcopy := KP;
ELSE
CLOCK; (* Timer abfragen *)
TMDIFF:=TIME_TO_DWORD(CLOCK.ET); (* Zeitdifferenz seit letztem Aufruf *)
END_IF;

IF TMDIFF>0 THEN
CLOCK(IN:=FALSE); (* Timer neu starten *)
CLOCK(PT:=t#1h, IN:=TRUE);

D(IN:=ERROR, TM:=TMDIFF, RESET:=FALSE); (* Differential abschдtzen *)
I(IN:=ERROR, TM:=TMDIFF, RESET:=FALSE); (* Integral abschдtzen *)

OVERFLOW := I.OVERFLOW;
IF NOT OVERFLOW THEN
Y:=Y_OFFSET+KP*(ERROR+I.OUT/TN+D.OUT*TV) + Y_ADDOFFSET;
IF Y>1E30 OR Y<-1E30 THEN (* Overflow steht bevor, darf aber eigentlich nicht passieren *)
OVERFLOW:=TRUE;
END_IF;

LIMITS_ACTIVE:=FALSE;
IF Y_MAX>Y_MIN AND Y>Y_MAX THEN (* Stellwert-Obergrenze ьberschritten *)
LIMITS_ACTIVE:=TRUE;
IF KP<>0 THEN
I(IN:=(Y_MAX-Y)*TN/KP,TM:=1000,RESET:=FALSE); (* Integral korrigieren *)
END_IF
Y:=Y_MAX;
END_IF;
IF Y_MAX>Y_MIN AND Y<Y_MIN THEN (* Stellwert-Untergrenze unterschritten *)
LIMITS_ACTIVE:=TRUE;
IF KP<>0 THEN
I(IN:=(Y_MIN-Y)*TN/KP,TM:=1000,RESET:=FALSE); (* Integral korrigieren *)
END_IF
Y:=Y_MIN;
END_IF;
END_IF;
ELSE
CLOCK(PT:=t#1h,IN:=TRUE);
END_IF;

END_IF;

собсно не понять почему если у меня вход константа происходит прыжок параметра

kolyan
11.03.2011, 09:23
хорошо, допустим я с этим согласен, вопрос остается тогда почему на РАБОЧЕЙ!!! установке случается даное переполнение?

А, если Вы неправильно подобрали коэффициенты ПИД регулирования, то может слишком быстро накапливаться интегральная составляющая регулятора.
И, если объект не успевает вовремя выйти на уставку, то, в этом случае - опять же произойдёт переполнение интегральной составляющей.
Это не значит, что не может быть других, ранее озвученных проблем.
Я лишь стараюсь указать на возможные ошибки.

kolyan
11.03.2011, 11:37
Попробуйте вот этот регулятор:
http://www.owen.ru/forum/attachment.php?attachmentid=3235&d=1293175635

Алексей Дмитриев
12.03.2011, 14:06
неправлиная настройка подразумевает что TN будет "0", в моем случае ПИД регулятор работает хорошо но через некоторые время выскакивает переполнение. при нач. условиях что я использую место датчика обычное сопротивление на входе(как результат вход у меня постоянен и не колеблится) данного переполнения быть не должно.

ЗЫ: Проводить проводить рестарт ПИД регулятора можно но не вариант.

Если у Вас датчика нет, переполнение неминуемо возникнет!!! Значение переменной процесса должно колебаться вокруг задания со сменой знака, в любом другом случае - переполнение. Учите матчасть! Лечится только сбросом. Кстати, на реальном объекте такого не будет.:D

kolyan
12.03.2011, 16:20
Если у Вас датчика нет, переполнение неминуемо возникнет!!! Значение переменной процесса должно колебаться вокруг задания со сменой знака, в любом другом случае - переполнение. Учите матчасть! Лечится только сбросом. Кстати, на реальном объекте такого не будет.:D

Если у него объект инерционный, а время интегрирования выставлено чересчур малым, то и при работе на этом объекте, скорее всего, всё повторится.

relline
14.03.2011, 16:22
Если у Вас датчика нет, переполнение неминуемо возникнет!!! Значение переменной процесса должно колебаться вокруг задания со сменой знака, в любом другом случае - переполнение. Учите матчасть! Лечится только сбросом. Кстати, на реальном объекте такого не будет.:D

Уважаемый судя по скрины который я выложил еще на 1й странице переполнения по интегральной составляющей на выходе нет, переполнение по входу. Также если возникала бы проблема описана вами то переполнение возникало бы с оприделеной частотой, но судя с експерементов за две недили я словил 3 переполнения из них 2 в один день, при этом параметры не менялись, на обьекте переполнения могут быть по несколько за час а могут 2-3 дня не происходить.
http://s015.radikal.ru/i333/1103/2c/a292f6a8226f.jpg

Если бы на реальном объекте такого не было - я бы не писал здесь.

Алексей Дмитриев
16.03.2011, 22:05
Судя по Вашему скрину регулятор "наелся груш", то есть его заглючило намертво, причем переполнение как в интегральной, так и в дифференциальной части. Причина, думаю в том, что он сидит в основной программе со свободным (очень быстрым) циклом исполнения. Если процесс вялотекущий, вызывайте регулятор из задачи, исполняемой по таймеру, скажем 1 раз в секунду (или раз в 100 мс), глюк пропадет.

Алексей Дмитриев
17.03.2011, 00:50
Можно и так, но я пользовал этот и вызывал из циклически запускаемой задачи. После этого все глюки, а они были, пропали. Делал на ПЛК63. Работает прекрасно.