Тем, что вне блока их реализовать невозможно.
Посоветуйте как лучше реализовать мертвую зону на утиловском для регулирования температуры задвижкой.
1.
pid();
if abs(SP-PV) < deadband then
pid.Y := 0; // чтобы задвижка стояла на месте
end_if
2.
pid();
if abs(SP-PV) < deadband then
SP:=PV;
end_if
3.
pid();
if abs(SP-PV) < deadband then
SP:=PV;
pid.Y := 0;
end_if
Можете предложить свой вариант.
Ни один из этих вариантов у вас работать не будет. В первом варианте вы не сможете присвоить выходу значение. Во втором варианте у вас уставка будет постоянно "следовать" за переменной, как только переменная попадет в зону нечувствительности. Только если PV изменится резко, чтобы выскочить из зоны, только тогда ПИД заработает.
Ну а третий вариант это сумма двух первых.
if Pid.Pv>=Pid.Sv-Dead_band OR Pid.Pv<=Pid.Sv+Dead_band THEN
Pid.Pv:=Pid.Sv;
end_if;
...
...
...
Pid();
Т.е вариант№2 товарища стартера, именно этого не хватает в "заводской" комплектации утильного ПИД регулятора, проверено десятками стабильно работающих реализаций. Тут еще кто-то пургу мел про Tn="многим тысячам"...,так вот то именно пурга(или бред). Зырьте формулу,для этого даже код открывать не надо.
Как то так...
З.Ы Вы тут такую пургу метете... Господа!Пришлите мне того-же, что вы курите.
Последний раз редактировалось Sergey666; 26.11.2018 в 21:49.
Можно и так. У одного российского производителя ПЛК со своей системой программирования в первых версиях вообще вычмхитание уставки из величины выносилось вне ФБ - точно по учебнику ТАУ.
А почему нельзя подавать сигнал сброса на вход Reset регулятора?