PDA

Просмотр полной версии : Пара вопросов по программированию



Hemann
18.02.2016, 23:56
Коллеги, приветствую!

Подскажите, пожалуйста, пару моментов.
Во-первых, существует ли возможность однократного исполнения какого-либо функционального блока? Т.е. мне нужно при определенных условиях вызывать Write_to_FB, а если эти условия не наступили-то не вызывать его. В течение работы условия вызова могут возникать и пропадать в произвольные моменты времени. Значение параметра, в который происходит запись, заранее не известно и прочитать его нельзя.
Во-вторых, что-то у меня штатный функциональный блок PID не выставляет флаг "Завершена автонастройка", да и в связи с этим никак не соображу, правильно ли работает автонастройка. Кто-то уже применял этот ФБ? Какие отзывы и какие есть грабли?

rovki
19.02.2016, 00:01
Действуйте как электронщик,а не программер -если нарисовали ФБ в проекте ,то он ни куда не денется .Делайте блокировку сигнала входа или выхода и все .

capzap
19.02.2016, 07:10
действуйте как программист, запись имяФБ(IN:=имяФБ.IN) означает что каждый цикл, на вход будет подаваться значение которое в текущий момент находится на этом входе, когда наступает событие через связку триггер и блок SEL можно изменить значение на входе, а далее опять присваивать текущее значение

AI!
19.02.2016, 07:46
сделайте так:
http://www.owen.ru/forum/attachment.php?attachmentid=3595&stc=1&d=1299955355
булевы вход - импульс, сигнал к изменению выходного значения
целочисленный - значение на которое надо изменить

Hemann
19.02.2016, 09:18
Коллеги, спасибо! Возможно я не точно изложил задачу, но судя по всему, самый подходящий вариант - тот что предложили уважаемые AI! и capzap.
На всякий пожарный уточню задачу. Есть ПИД-регулятор. Когда его выходная мощность превышает 70%, то подключается дополнительный исполнительный механизм, а выходная мощность ПИД-регулятора насильственно ограничивается 60-ю процентами. Когда выходная мощность ПИД-регулятора опускается ниже 50%, то дополнительный исполнительный механизм отключается, а ограничение по мощности снимается.
Если использовать штатный ФБ PID, то текущие ограничения мощности из него считать нельзя, а свои ограничения вводить/снимать нужно не постоянно, а лишь в соответствующий момент времени.
Поскольку у этого самого ФБ PID нет входа разрешения изменения каких-либо его внутренних переменных, то действовать как электронщику (что было бы мне проще, как схемщику) не получается.

Hemann
19.02.2016, 09:19
Да, и еще. Хотелось бы попросить коллег обратить внимание на вторую часть моего вопроса, ту которая про ФБ PID.

Aldonin2007
19.02.2016, 10:22
День добрый! Если я правильно понял, то на 70% надо что-то включить, а на 50% выключить. На мой взгляд тут проще всего использовать операторы "Больше" и "Меньше". (сам пытаюсь написать программу для сушильной печи и у меня тоже есть такие механизмы работающие по температуре)

maximov2009
19.02.2016, 10:54
Добрый день. А может быть Вы глубоко копаете? Я бы попробовал сделать включение-выключение дополнительного оборудования по гистерезису как Вы и пишите. То есть включение при 70, отключение при 50. И всё. А ПИД регулятор сам вернётся в нужное положение. Не надо его ограничивать. Тем более, сделав ему такое обрезание, Вы никогда толком не сможете осуществить автонастройку ПИД.
То есть мухи отдельно - варенье отдельно. Такой принцип ПИД регулирования, какой Вы хотите, осуществляется при управлении многонасосными системами. Там это реализуется на одном частотнике. Если один насос не вывозит, подключается 2,3 и т.д. Кстати там ещё учитывается фактор времени, за которое он не успевает вытащить систему на нужный параметр (чаще всего это давление в трубопроводе или уровень в ёмкости или бассейне). Я бы в Вашей разработке тоже рекомендовал учесть это фактор времени "НЕВЫВОЗа" на параметр.
С уважением.

Hemann
19.02.2016, 21:34
Aldonin2007, так это простой двухпозиционный регулятор-охладитель с гистерезисом, он и в онлайн базе макросов есть, да и я его разновидность под свои цели сделал.
maximov2009, Вы совершенно правы, задача очень напоминает каскадное включение насосов. Но, согласно поставленной задаче, требуется снижать выходную мощность ПИД-регулятора. Ну а для настройки этого регулятора будет режим наладки, который будет исключать ограничение выходной мощности.

Кстати, в штатном ФБ PID по умолчанию выходная мощность лежит между 20-ю и 80-ю процентами, и при автонастройке я вижу те же ограничения, если перед ней не установить нормальную границу 0-100% заранее. А по окончании автонастройки опять устанавливаются границы 20-80% автоматически, как бы изнутри ФБ.

maximov2009
20.02.2016, 06:37
Добрый день. Если это задача для курсового проекта, то тогда необходимо жёстко следовать заданию. А если это практика, то всегда можно убедить заказчика в корректировке техзадания. Просто, если Вы не будете глушить ПИД, при подключении дополнительного оборудования у Вас вся система быстрее придёт к требуемой точке. Как наглядный пример: если взять систему нагрева, то при использовании в качестве доп. оборудования инерционный нагреватель, получится провал. То есть ПИД дошёл до 70, ТЭН включился, но не нагрелся. А вы уже срубили мощность на основном. Вот и ямка. А ПИД регулятор удевлённо крутит головой, показывает связанные руки и помаленьку сходит с ума. Такая же картина будет, если при регулировании давления Вы свяжете руки основному насосу, а вспомогательный пока разгонится и т.д. В лучшем случае получите раскачку системы.
Но это мои рассуждения как практика. На а там уж на Ваше усмотрение. Вольному-воля.
С уважение.

Hemann
20.02.2016, 15:24
Добрый день! Это не курсовой проект, т.к. моя учеба в закончилась лейтенантскими погонами почти 25 лет назад. Мне тоже несколько не нравится затея с зажиманием выходной мощности регулятора, т.к. у него может накопиться избыточная ошибка, и при снятии ограничения он "выстрелит" большим перерегулированием, а затем, как Вы правильно говорите, может пойти колебательный процесс. Так что будем беседовать с заказчиком. Но, кроме всего прочего, есть интерес к этому пресловутому ФБ PID, не связанный с вышеописанной задачей. В частности, сейчас я с ним экспериментирую на столе в качестве обычного нагревателя (грею эмулятор печи ЭП10). И, например, АНР работает не корректно, как мне кажется. Вот и хочется услышать мнение других коллег.

maximov2009
20.02.2016, 16:57
К сожалению пока не имею Пр200. Поэтому ПОКА не участвую особо в обсуждении этого изделия. 200 это расширенная версия ПР114, с которой работаю и сейчас. В своё время использовал в проекте на 114 макрос ПИД, которым поделились коллеги с форума. Он и сейчас есть. А с тем ПИД, что включен сейчас в библиотеку для 200, пока не знаком. Но я так думаю, что ПИД он и в Африке ПИД. Про автонастройку ПИД я поднимал вопрос наверное больше года назад. Если он сейчас существует - очень хорошо. Но я обычно на объекте применяю автонастройку (если есть) а потом пробую чуть чуть корректировать. Эксперименты на столе, вряд ли дадут приемлемую картину. надо пробовать на живом. Автонастройка удачно получается только в случае процесса с неизменными входными данными. Например Вам нужно поддерживать постоянную температуру болванки постоянной массы. Нет проблем. А Вот если Вы попытаетесь сделать автонастройку Вашей системы, с учётом обрезания мощности и подключения непонятно какой дополнительной нагревательной системы. НИКОГДА толком не получится. Как говорится, на автонастройку надейся, да сам не плошай.
С уважением.

porada
20.02.2016, 18:51
>> существует ли возможность однократного исполнения какого-либо функционального блока?

Конечно, существует. Оформляется по разному в зависимости от языка:

ST:
R_TRIG(CLK:=%IX4,0);
IF R_TRIG.Q THEN
myPID(***:=***, ***:=***, ... );
END_IF

CFC:
щелчок правой мышкой на FB, выбрать "EN/ENO" из меню

LD:
щелчок правой мышкой на цепи, выбрать "Элемент с EN" из меню, заменить имя FB на myPID

IL:
CAL R_TRIG1 (CLK:=%IX4.0)
LD R_TRIG1.Q
CALC myPID(***:=***, ***:=***, ... )

>> штатный функциональный блок PID не выставляет флаг "Завершена автонастройка",

о каком FB PID идет речь? Т.к. у "штатного" FB PID (Util.lib: made in 3S) никаких автонастроек нет.
Кстати эта Util.lib не запаролена, можно открыть ее в Кодесисе 2.3 и обозреть все присутствующие грабли в ее внутренностях. В Кодесисе 3.5 к сожалению это уже Util.compiled-library-ge33 и фиг че увидишь, но судя по сохранившемуся интерфейсу, на 99% можно полагать, что там все по прежнему.

IMHO, ПИД-регулятор нужен только для улучшения динамических параметров ПИ-регулятора, его матмодель предназначена для оперирования в диапазоне ± бесконечность на входе и ± бесконечность на выходе. В реальном мире ПИД-регулятор никогда не имеет бесконечных диапазонов на входе и выходе, плюс всегда имеем дискретность \ квантование измерений его вх.\вых., что приводит к тому, что без "костылей", как-то компенсирующих эти несоответствия от него будет мало пользы.

Т.е. если Вы не собираетесь улучшать динамические параметры ПИ-регулятора, то может и не стоит разбираться со всеми нюансами конкретной реализации PID? К сожалению в поставке Кодесис нет отдельного ПИ-регулятора, но он есть в Oscat.de библиотеках в исходниках.

capzap
20.02.2016, 18:56
>> существует ли возможность однократного исполнения какого-либо функционального блока?

Конечно, существует. Оформляется по разному в зависимости от языка:

ST:
R_TRIG(CLK:=%IX4,0);
IF R_TRIG.Q THEN
myPID(***:=***, ***:=***, ... );
END_IF

CFC:
щелчок правой мышкой на FB, выбрать "EN/ENO" из меню

LD:
щелчок правой мышкой на цепи, выбрать "Элемент с EN" из меню, заменить имя FB на myPID

IL:
CAL R_TRIG1 (CLK:=%IX4.0)
LD R_TRIG1.Q
CALC myPID(***:=***, ***:=***, ... )

>> штатный функциональный блок PID не выставляет флаг "Завершена автонастройка",

о каком FB PID идет речь? Т.к. у "штатного" FB PID (Util.lib: made in 3S) никаких автонастроек нет.
Кстати эта Util.lib не запаролена, можно открыть ее в Кодесисе 2.3 и обозреть все присутствующие грабли в ее внутренностях. В Кодесисе 3.5 к сожалению это уже Util.compiled-library-ge33 и фиг че увидишь, но судя по сохранившемуся интерфейсу, на 99% можно полагать, что там все по прежнему.

IMHO, ПИД-регулятор нужен только для улучшения динамических параметров ПИ-регулятора, его матмодель предназначена для оперирования в диапазоне ± бесконечность на входе и ± бесконечность на выходе. В реальном мире ПИД-регулятор никогда не имеет бесконечных диапазонов на входе и выходе, плюс всегда имеем дискретность \ квантование измерений его вх.\вых., что приводит к тому, что без "костылей", как-то компенсирующих эти несоответствия от него будет мало пользы.

Т.е. если Вы не собираетесь улучшать динамические параметры ПИ-регулятора, то может и не стоит разбираться со всеми нюансами конкретной реализации PID? К сожалению в поставке Кодесис нет отдельного ПИ-регулятора, но он есть в Oscat.de библиотеках в исходниках.

круто, теперь тоже самое только для среды ОвенЛоджик можете "нарыть" инфу

Hemann
20.02.2016, 23:51
Уважаемый porada, Вы конечно правы, но в CoDeSys у меня имеется свой немалый опыт. Однако в данной теме речь идет об ОвенЛоджик, а это несколько другая система, весьма отличающаяся от приведённых Вами примеров