Просмотр полной версии : Проблема работы ПЛК-150 в автономном режиме
У нас имеется программа регулировки температуры в камере. В ней имеется две пид-функции для нагрева (нагрев - включение тена, охлаждение - выключение тена) и для охлаждения (охлаждение - включение компрессора, нагрев - отключение компрессора). Также имеется алгоритм выбора какой из пид-функции пользоваться. Также мы сделали возможность задавать значение уставки температуры с панели оператора, а также отображение температуры с датчика на панели оператора. Когда контроллером управляем из среды программирования CoDeSys (просто меняем значение уставки в CodeSys) у нас весь алгоритм работает правильно (правильно выбирает чем надо регулировать, и правильно дает ШИМ-сигнал на выходные реле). Затем мы зашиваем программу в ПЛК и начинаем задавать уставку с панели СМИ. У нас ПЛК начинает работать не правильно. Когда нужно нагревать он нагревает, а когда нужно охлаждать он этого не делает.
В чем проблема разобраться пока не можем. Есть версия что мы не правильно зашиваем программу в ПЛК.
Если у вас есть версия в чем причина данной ошибки, ответьте пожалуйста побыстрее.
Также хотел бы отметить, что мы до этого его прошивали другой программой для проверки его автономной работы. Программа была простая (уставка больше порога, нагревание, меньше порога охлаждение) и она работала. Есть ли вероятность того что мы ее не до конца удалили, и она как-то влияет. Удаляли ее командой Reset (original). И после этого записывали уже новую программу.
Николаев Андрей
29.01.2010, 15:29
Если из CoDeSys все работает верно, то проблема не в проекте, а в наладке связи с СМИ1 - там и копайте.
Связь ПЛК с панелью оператора правильная. Мы наблюдаем за работой в режиме LOgin а управляем уставкой из панели оператора. Все получается. ЗАтем зашиваем эту программу в ПЛК с помощью команды creat bootproject. Перезагружаем контроллер и он включается автоматически и начинает работать, но уже охлаждение не выполняется.
Сегодня пытался разбираться, и смотрел что он делает, по шагово. Алгоритм выбора режима (Режим нагрева и режим охладение) делается правильно, выбирает все то что должен.
А загвостка оказалось вот в чем. До перезагрузки контроллера выход пид-функции довал как и положено -100, а когда начал работать автономно, на выходе пид-функции постоянно ноль. Хотя уставка меньше температуры датчика на 10 градусов. Смотрел уставка с панели приходит. А также выполняется режим нагрева, в случаи когда уставка больше температуры датчика, как и положено дает сигнал на нагрев.
Управление компрессором с помощью ПИД регулятора несколько не рационально, получается что при достижении уставки компрессор будет отключаться, при этом температура опустится ниже уставки и включится ПИД тэна, систему реально заколбасит туды сюды, добиться таким образом точного поддержания температуры будет не возможно. Плюс ко всему компрессоры очень копрризная вещь и частое включение/отключения для него крайне не желательно(это особенно важно в двухкаскадных системах охлаждения).
Для точного поддержания температуры гораздо лутьше включить/выключать компрессор "вручную" прописав в программе алгоритм изходя из текущей температуры и требуемой уставки, т.е. при работе на минусе работает компрессор и тэн, а при работе на плюсе(температура уставки выше температуры окружающей среды) работать только тэном. Тэном управлять ПИД регуляторами, причем если хорошо подобрать коэффициенты на плюсе и на минусе можно использовать одни и теже ПИДкоэфициенты. Главное чтобы на минусе мощность тэна была больше мощности на испарителе выдаваемой компрессором...
У нас просто бывает случаи когда нужно выйти с температуры плюс 50 на температуру 30 за 10 минут и в это деле без компрессора не обойтись. Ну эту мы проблему решили. У нас нет такого что одновременно выполняется Пид-компрессором и Пид-теном. Мы сделали чтобы действия выбирались при изменении уставки. То есть когда поменялась уставка, в этом момент происходит сравнение температуры датчика с температурой новой уставки ,и делается вывод, что надо делать. И в дальнейшем температура датчика не сравнивается с уставкой. Только при следующей смене уставки. На основе этих сравнений делается вывод что делать, нагревать, или охлаждать.
Конечно можно использовать и пид регулирование компрессором, особенно если он настроен исключительно как пропорциональный, то вероятность того что при подходе к уставке он не начнёт вкл/выкл компрессор достаточно мала.
Тем неменее при достижении уставки вам необходимо будет переводить машину в нормальный режим работы, для чего вам необходимо создать отдельный алгоритм (например сброс флага) сигнализирующий о достижении уставки. Т.е. появляется два алгоритма работы камеры: алгоритм достижения температуры уставки и алгоритм удержания температуры уставки.
Алгоритм достижения уставки определяется из разности температуры уставки и текущей температуры(если разность положительна - греем, если отрицательна - холодим).
Алгоритм удержания уставки определяется изходя из температуры уставки (вобщей форме: если нужная температура ниже 30 - холодим и пидим тэном, иначе только пидим)...
Главное отработать функцию информирующий о достижении уставки...
...вовсяком случае я делал именно так...
Для чего цеплять пид регулятор к управлению компрессора для меня всё равно не понятно...
Если есть возможность не могли бы скинуть пример вашей программы.
Ну весь проект я выкладывать не буду, а сам алгоритм регулировки могу:
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 используктся только для перегрузки пид регулятора тэна(когда тэн выключен он перегружается...
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot