PDA

Просмотр полной версии : Проблема работы ПЛК-150 в автономном режиме



DimaSik
28.01.2010, 15:27
У нас имеется программа регулировки температуры в камере. В ней имеется две пид-функции для нагрева (нагрев - включение тена, охлаждение - выключение тена) и для охлаждения (охлаждение - включение компрессора, нагрев - отключение компрессора). Также имеется алгоритм выбора какой из пид-функции пользоваться. Также мы сделали возможность задавать значение уставки температуры с панели оператора, а также отображение температуры с датчика на панели оператора. Когда контроллером управляем из среды программирования CoDeSys (просто меняем значение уставки в CodeSys) у нас весь алгоритм работает правильно (правильно выбирает чем надо регулировать, и правильно дает ШИМ-сигнал на выходные реле). Затем мы зашиваем программу в ПЛК и начинаем задавать уставку с панели СМИ. У нас ПЛК начинает работать не правильно. Когда нужно нагревать он нагревает, а когда нужно охлаждать он этого не делает.

В чем проблема разобраться пока не можем. Есть версия что мы не правильно зашиваем программу в ПЛК.

Если у вас есть версия в чем причина данной ошибки, ответьте пожалуйста побыстрее.

DimaSik
28.01.2010, 19:33
Также хотел бы отметить, что мы до этого его прошивали другой программой для проверки его автономной работы. Программа была простая (уставка больше порога, нагревание, меньше порога охлаждение) и она работала. Есть ли вероятность того что мы ее не до конца удалили, и она как-то влияет. Удаляли ее командой Reset (original). И после этого записывали уже новую программу.

Николаев Андрей
29.01.2010, 15:29
Если из CoDeSys все работает верно, то проблема не в проекте, а в наладке связи с СМИ1 - там и копайте.

DimaSik
29.01.2010, 21:45
Связь ПЛК с панелью оператора правильная. Мы наблюдаем за работой в режиме LOgin а управляем уставкой из панели оператора. Все получается. ЗАтем зашиваем эту программу в ПЛК с помощью команды creat bootproject. Перезагружаем контроллер и он включается автоматически и начинает работать, но уже охлаждение не выполняется.

Сегодня пытался разбираться, и смотрел что он делает, по шагово. Алгоритм выбора режима (Режим нагрева и режим охладение) делается правильно, выбирает все то что должен.

А загвостка оказалось вот в чем. До перезагрузки контроллера выход пид-функции довал как и положено -100, а когда начал работать автономно, на выходе пид-функции постоянно ноль. Хотя уставка меньше температуры датчика на 10 градусов. Смотрел уставка с панели приходит. А также выполняется режим нагрева, в случаи когда уставка больше температуры датчика, как и положено дает сигнал на нагрев.

Crusash
01.02.2010, 16:12
Управление компрессором с помощью ПИД регулятора несколько не рационально, получается что при достижении уставки компрессор будет отключаться, при этом температура опустится ниже уставки и включится ПИД тэна, систему реально заколбасит туды сюды, добиться таким образом точного поддержания температуры будет не возможно. Плюс ко всему компрессоры очень копрризная вещь и частое включение/отключения для него крайне не желательно(это особенно важно в двухкаскадных системах охлаждения).
Для точного поддержания температуры гораздо лутьше включить/выключать компрессор "вручную" прописав в программе алгоритм изходя из текущей температуры и требуемой уставки, т.е. при работе на минусе работает компрессор и тэн, а при работе на плюсе(температура уставки выше температуры окружающей среды) работать только тэном. Тэном управлять ПИД регуляторами, причем если хорошо подобрать коэффициенты на плюсе и на минусе можно использовать одни и теже ПИДкоэфициенты. Главное чтобы на минусе мощность тэна была больше мощности на испарителе выдаваемой компрессором...

DimaSik
01.02.2010, 16:39
У нас просто бывает случаи когда нужно выйти с температуры плюс 50 на температуру 30 за 10 минут и в это деле без компрессора не обойтись. Ну эту мы проблему решили. У нас нет такого что одновременно выполняется Пид-компрессором и Пид-теном. Мы сделали чтобы действия выбирались при изменении уставки. То есть когда поменялась уставка, в этом момент происходит сравнение температуры датчика с температурой новой уставки ,и делается вывод, что надо делать. И в дальнейшем температура датчика не сравнивается с уставкой. Только при следующей смене уставки. На основе этих сравнений делается вывод что делать, нагревать, или охлаждать.

Crusash
01.02.2010, 18:45
Конечно можно использовать и пид регулирование компрессором, особенно если он настроен исключительно как пропорциональный, то вероятность того что при подходе к уставке он не начнёт вкл/выкл компрессор достаточно мала.
Тем неменее при достижении уставки вам необходимо будет переводить машину в нормальный режим работы, для чего вам необходимо создать отдельный алгоритм (например сброс флага) сигнализирующий о достижении уставки. Т.е. появляется два алгоритма работы камеры: алгоритм достижения температуры уставки и алгоритм удержания температуры уставки.
Алгоритм достижения уставки определяется из разности температуры уставки и текущей температуры(если разность положительна - греем, если отрицательна - холодим).
Алгоритм удержания уставки определяется изходя из температуры уставки (вобщей форме: если нужная температура ниже 30 - холодим и пидим тэном, иначе только пидим)...
Главное отработать функцию информирующий о достижении уставки...
...вовсяком случае я делал именно так...

Для чего цеплять пид регулятор к управлению компрессора для меня всё равно не понятно...

DimaSik
02.02.2010, 09:11
Если есть возможность не могли бы скинуть пример вашей программы.

Crusash
02.02.2010, 15:35
Ну весь проект я выкладывать не буду, а сам алгоритм регулировки могу:


PROGRAM Regul (*регулировка управления климатической камерой (mashina)*)
VAR_INPUT
iy:INT;
END_VAR
VAR
delta_t:REAL;(*разность температур уставки*)
b_dhod: BOOL;(*бит о достижения диопазона температур уставки, нужен для перегрузки ПИД регулятора*)
END_VAR

delta_t:=mashina.ust_t-mashina.tek_t;
mashina.i_airing:=FALSE;
IF delta_t<10 AND delta_t>-10 THEN (*регулировка удержания*)
mashina.i_airing:=FALSE;
IF mashina.ust_t<=mashina.tek_t_sreda+9 AND mashina.ust_t>=mashina.tek_t_sreda+11 THEN
mashina.r_ten:=TRUE;
mashina.r_kompressor:=FALSE;
ELSIF mashina.ust_t>mashina.tek_t_sreda+10 THEN
mashina.r_ten:=TRUE;
mashina.r_kompressor:=FALSE;
ELSE
mashina.r_ten:=TRUE;
mashina.r_kompressor:=TRUE;
END_IF

IF b_dhod=FALSE THEN(*включаем бит достижения уставки, перегружаем тен*)
IF delta_t < 0 THEN
Mashina.r_ten:=FALSE;
END_IF
b_dhod:=TRUE;
END_IF
ELSE (*delta_t>=10 OR delta_t<=-10 THEN*)
mashina.kompressor_revers:=FALSE;
b_dhod:=FALSE;(*температура уставки не достигнута*)
IF mashina.tek_t>50 THEN
IF delta_t<0 THEN
mashina.i_airing:=TRUE;
mashina.r_ten:=FALSE;
ELSE
mashina.i_airing:=FALSE;
mashina.r_ten:=TRUE;
END_IF

mashina.r_kompressor:=FALSE;
ELSE
mashina.i_airing:=FALSE;
IF delta_t>0 THEN
mashina.r_ten:=TRUE;
mashina.r_kompressor:=FALSE;
ELSE
mashina.r_ten:=FALSE;
mashina.r_kompressor:=TRUE;
END_IF
END_IF
END_IF

эта не полная версия(чёто мне ёе не найти), но рабочая,
в этой есть небольшой баг(ну думаю сами найдёте)...
mashina - простинкая структура с температурами и режимами работы,
i_airing - это режим проветривания.
r_ten,r_kompressor - тэн и холодилка,
b_dhod используктся только для перегрузки пид регулятора тэна(когда тэн выключен он перегружается...