Цитата:
Сообщение от
FPavel
Критикуйте, хуже не будет. В крайнем случае скажу "ВыНеПонимаете - ЭтоДругое, У_МеняВсёРаботает" ))))
да?
Код:
///<Description>Эмулятор объекта управления. Эмулируется последовательное соединение трёх апериодических звеньев 1-го порядка.</Description>
///<Author>!!FPA!!</Author>
///<GroupName>Управляющие и регулирующие модули</GroupName>
function_block Emulator_Cont_ST_
var_input
///<Description>Перезапуск работы блока (инициализация всех переменных состояния) по фронту</Description>
xReset: bool := false;
///<Description>Входная переменная. Управляющий сигнал с ПИД</Description>
rVLV_Pos: real;
///<Description>Внешнее возмущающее воздействие (суммируется с rVLV_Pos для вычислений внутри ФБ)</Description>
rDisturbance: REAL;
///<Description>Значение выхода при rVLV_Pos=0</Description>
rPV_0: REAL:=20.0;
///<Description>Коэффициент передачи объекта управления (трёх последовательных апериодических звеньев 1-го порядка)</Description>
rGain: REAL:=1.5;
///<Description>Постоянная времени первого апериодического звена 1-го порядка, [мс]</Description>
dwTime_T1: udint:=60000;
///<Description>Постоянная времени второго апериодического звена 1-го порядка, [мс]</Description>
dwTime_T2: udint:=10000;
///<Description>Постоянная времени третьего апериодического звена 1-го порядка, [мс]</Description>
dwTime_T3: udint:=0;
end_var
вот вообще смотрю и не пойму. Даже пиво поставил и очки взял.
Код:
//GroupName: Управляющие и регулирующие модули
//Эмулятор объекта управления (ОУ)
//Последовательное соединение апериодических звеньев (АЗ) 1-го порядка
//Author: !!FPA!!
function_block Emulator_Cont_ST_
var_input
xReset: bool := false; //Перезапуск. Инициализация всех состояний по фронту
rVLV_Pos: real; //Управляющий сигнал с ПИД
rDisturbance: REAL; //Возмущающее воздействие (суммируется с rVLV_Pos)
rPV_0: REAL:=20.0; //Значение выхода при rVLV_Pos=0. 0 - норм сигнал же?
rGain: REAL:=1.5; //Коэффициент передачи ОУ для АЗ-1..3
dwTime_T1: udint:=60000; //Постоянная времени АЗ-1, [мс]
dwTime_T2: udint:=10000; //... АЗ-2, [мс]
dwTime_T3: udint:=0; //... АЗ-3, [мс]
end_var
стал воспринимать)) но не всё понимать
Цитата:
ПИД.выход -> rVLV_Pos
...
rPV_Inner := (rVLV_Pos + rDisturbance) * rGain;
... rPV_Inner := ...
rPV := rPV_0 + rPV_Inner;
rPV -> обр.связь.ПИД
rPV может и эмулятор объекта управления (ОУ), ну вот ни разу не эмулятор ИУ* которое:
Цитата:
ПИД.выход -> хотелка_Pos.ИУ.rVLV_Pos -> воздействие.ОУ.rPV -> обр.связь.ПИД
и которое имеет 3 состояния :
1.Не крутится.
2.Крутится со скоростью const A
3.Крутится со скоростью const B (которое часто просто = -A)
*Достаточо часто встречающихся
Цитата:
Не знаю, видел в справке к ФБ. Иногда, востребовано - при штатном изменении уставки ограничивают скорость.
Если нужное встроено в ПИД на уровне динамической коррекции И-части то не нужно.
Цитата:
В реализации для Koyo DirectLogic встречал ограничение И-части в виде "заморозка И-части при переполнении выхода" - когда выход (П+И+Д) превышал 100%, он ограничивался 100% и пересчёт И не производился.
Допускаю что это описание чуть-чуть неверное, по факту примерно так:
И-часть пересчитывается всегда, чтобы выход ПИДа не выходил за края.
Если же как описано, то для меня это - в корзину.
Цитата:
Нет, исходника ПИД от встроенного в прошивку ПР - нет, только описание.
Жаль. То же справочное описание замечательного КДС/util/PID не совсем соответствует реальности примерно так же.
Цитата:
закрытые библиотеки для ФБ, реализованных в прошивках
Как для меня это странно. Что в ПИД секретного? И что в матформуле может быть привязано к прошивке?
Поэтому тоже всегда сам ПИД делаю - не доверяю и свои хотелки реализую.
И тоже предпочитаю Kp,Ki,Kd ))
Цитата:
Сообщение от
FPavel
...Или выполнять пересчёт строго по таймеру через заданные промежутки времени..
Вот это - "строго" и это - "по таймеру" тоже странное в общем случае, хотя сами же подсказали
Цитата:
Сообщение от
FPavel
...время прошедшее от предыдущего вычисления..
Место вычисления только не подсказали))