Вход

Просмотр полной версии : Помогите разобраться с АНР ФБ APID_PWM библиотеки Pid_reg2



maul52
21.05.2014, 21:08
ПЛК73. ФБ APID_PWM. Задаю уставку 300 пытаюсь выполнить АНР. Что по моему мнению должно произойти: Мощность на выходе 100% и нагрев до Температуры = (SP-PV_0)*0.8+PV_0 т.е (300-15)*0,8+15 = 243. При 243 градусах выходная мощность должна упасть в 0 и регулятор должен замерить насколько "улетит" температура потом ждет пока температура опустится до 243 и регулятор должен перейти в рабочий режим.
Что имею по факту: в печи 130, задаю уставку 300. Старт АНР. Мощность на выходе 100%. Пошел нагрев.
В печи 243, мощность на выходе 100%, нагрев продолжается
В печи 300, мощность на выходе 100%, нагрев продолжается
В печи 400, мощность на выходе 100%, нагрев продолжается
В печи 449, мощность на выходе 100%, нагрев продолжается
В печи 450, максимум для этой печи, аварийная остановка.
Не могу понять, что я не так делаю. Прошу помогите разобраться.
13018

maul52
21.05.2014, 21:14
Почему то вставился еще один скрин, поэтому спрошу сразу
Так же не могу разобраться с GET_APID_PWM и SET_APID_PWM
Все переменные xp, td и так далее по списку загнал в Retain. Когда АНР выполняется там есть значения, после перезагрузки там опять 0. Возможно конечно это из за того, что АНР не выполняется до конца.

AlexPC1
15.09.2014, 16:28
попробуй при объявлении переменных в Retain дописать директиву компилятора {falg noinit}
VAR_GLOBAL RETAIN
MAIN :MAIN_MODBUS {flag noinit};
BOILER :ARRAY [1..2] OF BOILER_MODBUS {flag noinit};
END_VAR


Q: Чем отличаются переменные-марекры (%M) от переменных VAR_RETAIN? В документации сказано, что и те и другие сохраняются в NVRAM, но у меня значение маркера обнуляется при перезапуске.
A: Переменные в M-памяти имеют такие же свойства, как и RETAIN переменные. Однако, при запуске программы их значения инициализируются нулями, если не указано другого значения для инициализации. Избежать инициализации можно с помощью инструкции {flag noinit}. Примеры:

VAR
a AT %MW0: INT {flag noinit};
b : INT {flag noinit};
END_VAR

{flag noinit on}
VAR
a AT %MW0: INT;
b : INT;
END_VAR
{flag off}