Вход

Просмотр полной версии : Регулировка давления воздуха.



EvilH0mer
17.06.2026, 12:31
Добрый день. Подскажите, может кто знает или сталкивался. Как лучше регулировать давление воздуха, есть два клапана, один нагнетает второй спускает, есть задание в барах и датчик. Выставляем задание, клапана отрабатывают. В данный момент у меня пид регулятор, далее макрос который разделяет сигнал на +- и два шим регулятора, работает но трудно настраивается. Что то мне подсказывает, что есть способ лучше, но я ничего не нашел и не придумал.89582 Самый главный вопрос в том, что при выставлении только пропорционального параметра в "100" остальные в ноль, всё работает идеально, но хотелось бы чуть увеличить скорость выхода на задание. Пока более менее работает с Kр 7; Ki 0,01; Kd 90

C.Pavel
17.06.2026, 12:56
есть два варианта
- регулирование дроссельным клапаном на входе
-регулирование оборотами двигателя компрессора89583

EvilH0mer
17.06.2026, 13:04
Давление нужно как понижать так и повышать, это давление в поршневой полости цилиндра, который давит на гидравлический клапан. Сначала накачивается расчётное давление воздуха в клапан, затем когда начинает подниматься давление в гидросистеме, клапан переходит в режим регулировки по давлению в гидравлике, там всё отрабатывает быстро. Вот хотелось бы ускорить первоначальную скорость набора давления, компрессор стоит один на всё производство, его нельзя трогать:)))

IVM
17.06.2026, 14:06
Добрый день. Подскажите, может кто знает или сталкивался. Как лучше регулировать давление воздуха, есть два клапана, один нагнетает второй спускает, есть задание в барах и датчик. Выставляем задание, клапана отрабатывают. В данный момент у меня пид регулятор, далее макрос который разделяет сигнал на +- и два шим регулятора, работает но трудно настраивается. Что то мне подсказывает, что есть способ лучше, но я ничего не нашел и не придумал.89582 Самый главный вопрос в том, что при выставлении только пропорционального параметра в "100" остальные в ноль, всё работает идеально, но хотелось бы чуть увеличить скорость выхода на задание. Пока более менее работает с Kр 7; Ki 0,01; Kd 90

Ki увеличь.

C.Pavel
17.06.2026, 14:06
компрессор 40м3
двигатель-70кВт
частотник-90кВТ
потребители пневмоклапана и упаковочные автоматы, режим работы 24/789585

EFrol
17.06.2026, 15:50
ПИД-регулятор в этом случае плохая идея.
У меня просто расчет времени
dp = уставка - тек.давление
dp > 0 - время подачи dp*Kin
dp < 0 - время сброса dp*Kout
где Kin, Kout и период расчета подбираю эмпирически
соответственно чем больше dp, тем на больший период отраваются клапана, тем быстрее выхожу на уставку
естественно время открытия клапанов должно быть больше приемлемого минимального значения
(образуется мертвая зона и клапан не дергаю лишний раз)

FPavel
17.06.2026, 20:05
Каждым клапаном управлять от собственного двухпозиционного регулятора с уставкой и гистерезисом - один регулятор "нагреватель", а другой - "охладитель".
Уставки и гистерезисы можно сделать одинаковыми, просто действовать они будут в разные стороны от одной уставки.

Если ещё и ресивер имеется - совсем хорошо.

Это чем-то хуже управления от ШИМ с более частым переключением?

Ещё можно нагнетать в ресивер с некоторой точностью, а из ресивера через клапан-регулятор прямого действия отправлять потребителям. Таким образом давление в ресивере будет колебаться довольно значительно, но к потребителю пойдёт идеально точное давление. Один недостаток - в ресивере нужно поддерживать значительно большее давление.

EvilH0mer
18.06.2026, 08:42
Каждым клапаном управлять от собственного двухпозиционного регулятора с уставкой и гистерезисом - один регулятор "нагреватель", а другой - "охладитель".

Это чем-то хуже управления от ШИМ с более частым переключением?

Спасибо попробую.

EvilH0mer
18.06.2026, 09:00
Ki увеличь.

Пробовал, но дело в том, что даже при Ki = 0,0001 этого уже много.

EvilH0mer
18.06.2026, 09:02
Это чем-то хуже управления от ШИМ с более частым переключением?
Попробовал. Хуже тем, что при выходе на уставку не происходит остановка, всегда работает либо клапан с нагрева либо с охлаждения.

EvilH0mer
18.06.2026, 10:21
Получилось быстро набирать давление и выставляться до тысячных бара, что важно для моего запорно-регулирующего гидропневматического клапана. В ПИД регуляторе выставил Kp в 100, остальные коэффициенты в ноль и на выходе регулятора поставил макрос усиливающий сигнал, т.е. получился П-регулятор с нелинейным усилением на финише. Макрос:
FUNCTION_BLOCK FB_SplitSignal2
// ================================================== ==========================
// Разделение биполярного сигнала ПИД на два однополярных
// С УМНЫМ УСИЛЕНИЕМ МАЛОГО СИГНАЛА (ДЛЯ НАПОЛНЕНИЯ И СБРОСА)
// ================================================== ==========================

VAR_INPUT
PID_Signal : REAL; // Вход от ПИД (-100...+100%)
DeadZone : REAL := 0.3; // Зона нечувствительности (чтобы не висело)
BoostThreshold : REAL := 10.0; // Сигнал меньше этого (%) — усиливаем
BoostFactor : REAL := 2.5; // Во сколько раз усиливаем
MaxBoost : REAL := 15.0; // Потолок усиленного сигнала
Hysteresis : REAL := 0.5; // Гистерезис для плавности
END_VAR

VAR_OUTPUT
Out_Napoln : REAL; // Сигнал для наполнения (0-100%)
Out_Sbros : REAL; // Сигнал для сброса (0-100%)
State : UDINT; // 0-нет, 1-наполнение, 2-сброс
END_VAR

VAR
RawSignal : REAL; // Сырой сигнал с ПИД
ErrorAbs : REAL; // Модуль сигнала
WorkSignal : REAL; // Обработанный сигнал (уже с усилением)
BoostActive : BOOL := FALSE; // Флаг усиления
CurrentDeadZone : REAL; // Текущая мертвая зона с гистерезисом
END_VAR

// ----------------------------------------------------------------------------
// 1. БЕРЕМ СИГНАЛ И МОДУЛЬ
// ----------------------------------------------------------------------------
RawSignal := PID_Signal;
ErrorAbs := ABS(RawSignal);

// ----------------------------------------------------------------------------
// 2. ЛОГИКА УСИЛЕНИЯ (работает одинаково для + и -)
// ----------------------------------------------------------------------------
// Определяем мертвую зону с гистерезисом
IF BoostActive THEN
CurrentDeadZone := DeadZone; // Если усиление активно — выключаем при DeadZone
ELSE
CurrentDeadZone := DeadZone + Hysteresis; // Если не активно — включаем позже
END_IF;

// --- Расчет усиления ---
IF ErrorAbs > CurrentDeadZone AND ErrorAbs < BoostThreshold THEN
// Сигнал маленький -> УСИЛИВАЕМ
WorkSignal := RawSignal * BoostFactor;
BoostActive := TRUE;

// Ограничиваем усиленный сигнал (чтобы не перелететь)
IF WorkSignal > MaxBoost THEN
WorkSignal := MaxBoost;
ELSIF WorkSignal < -MaxBoost THEN
WorkSignal := -MaxBoost;
END_IF;

ELSIF ErrorAbs >= BoostThreshold THEN
// Сигнал большой -> РАБОТАЕМ КАК ОБЫЧНО
WorkSignal := RawSignal;
BoostActive := FALSE;

ELSE
// Сигнал меньше DeadZone -> ВЫКЛЮЧАЕМ ВСЁ
WorkSignal := 0.0;
BoostActive := FALSE;
END_IF;

// ----------------------------------------------------------------------------
// 3. РАЗДЕЛЕНИЕ НА ДВА КАНАЛА (СИММЕТРИЧНО)
// ----------------------------------------------------------------------------
IF WorkSignal > 0 THEN
// Положительный сигнал -> НАПОЛНЕНИЕ
Out_Napoln := WorkSignal;
Out_Sbros := 0.0;
State := 1;

ELSIF WorkSignal < 0 THEN
// Отрицательный сигнал -> СБРОС (инвертируем, чтобы было положительное число)
Out_Napoln := 0.0;
Out_Sbros := -WorkSignal; // <--- ВОТ ЗДЕСЬ БЫЛА ОШИБКА, ТЕПЕРЬ ИСПРАВЛЕНО!
State := 2;

ELSE
// Сигнал равен 0 -> ВСЁ ВЫКЛЮЧЕНО
Out_Napoln := 0.0;
Out_Sbros := 0.0;
State := 0;
END_IF;

// ----------------------------------------------------------------------------
// 4. ЗАЩИТА ОТ ВЫХОДА ЗА 100% (НА ВСЯКИЙ СЛУЧАЙ)
// ----------------------------------------------------------------------------
IF Out_Napoln > 100.0 THEN Out_Napoln := 100.0; END_IF;
IF Out_Sbros > 100.0 THEN Out_Sbros := 100.0; END_IF;
IF Out_Napoln < 0.0 THEN Out_Napoln := 0.0; END_IF;
IF Out_Sbros < 0.0 THEN Out_Sbros := 0.0; END_IF;

END_FUNCTION_BLOCK

Коэффициенты макроса конкретно у меня такие:
DeadZone = 0.3
BoostThreshold = 30
BoostFactor = 8
MaxBoost = 50
Hysteresis = 0.589594