Профиль должен быть заполнен на русском языке кириллицей. Заполнение профиля заведомо ложными или некорректными данными - причина возможного отказа в регистрации на форуме.

ПИД регулятор

Обсуждение вопросов, не относящихся ни к одному из других подразделов
Аватара пользователя

Ka3ax
здесь недавно
здесь недавно
Сообщения: 14
Зарегистрирован: 30 окт 2012, 03:14
Ф.И.О.: Олд Белл
Откуда: Карасук, Новосибирской обл.

Re: ПИД регулятор

Сообщение Ka3ax » 07 авг 2013, 22:15

а что было по ссылке о " Регулирование на основе SIMATIC"
книга Мюллера Юргена? или статья ?

Аватара пользователя

hell_boy
почётный участник форума
почётный участник форума
Сообщения: 1078
Зарегистрирован: 18 янв 2009, 12:25
Ф.И.О.: Дмитрий
Благодарил (а): 2 раза
Поблагодарили: 22 раза

Re: ПИД регулятор

Сообщение hell_boy » 08 авг 2013, 09:08

Там была книга. Сейчас она здесь http://iadt.siemens.ru/assets/files/inf ... ATIC_r.pdf
"Умные люди обсуждают идеи, средние - события, а глупые - людей" Л.Н. Толстой


Global_viewer
здесь недавно
здесь недавно
Сообщения: 10
Зарегистрирован: 28 дек 2013, 19:24
Ф.И.О.: Сытин Антон Русланович

Re: ПИД регулятор

Сообщение Global_viewer » 19 янв 2014, 18:54

Marrenoloth писал(а): Если интересно, сходите на http://code.google.com/p/s7-facility/, скачайте ПИД...

Файлк то убрали. Если кто качал прошу поделитесь сюды: sysStar@mail.ru
Спасибо

Аватара пользователя

Ka3ax
здесь недавно
здесь недавно
Сообщения: 14
Зарегистрирован: 30 окт 2012, 03:14
Ф.И.О.: Олд Белл
Откуда: Карасук, Новосибирской обл.

Re: ПИД регулятор

Сообщение Ka3ax » 06 июн 2015, 13:17

решаю задачу по поддержанию постоянного давления в системе
компрессор
частотный преобразователь, диапазон выходной частоты 20 Герц- 50 Герц. 20 Герц минимально разрешенная частота для компрессора
контролер S7-300
величина задания частоты частотному преобразователю 0-16384, вместо 0 будет число соответствующее минимально разрешенной частоте.
сейчас смысла нет указывать, так как 16384 может соответствовать и 750 об в мин или 3000 об в мин. Зависит от настроек частотного преобразователя.
частота опроса сигнала с датчика не ограничена, например, 10 раз в секунду
расчет ошибки регулирования производится с частотой равной частоте опроса датчика
а вот выдача сигнала регулирования растянута во времени, ограничение 1 Герц в секунду, быстрее изменять в сторону повышения не разрешено.

полагаю, что PID в данном случае не справится, но для того, что бы подтвердить это математически, мне необходима информация,
что в моем случае
1. время реакции системы регулирования
как я понимаю, время отработки от минимально разрешенной частоты, до максимально разрешенной. или от 0 до 100 процентов для отвлеченной регулируемой величины
2. запаздывание системы..
если честно, то разницы не вижу с первым пунктом.
Но согласно научным фолиантам разница имеется.
для определения возможности применения PID регулятора для какой либо системы, нужно взять отношение первого ко второму.
если величина лежит в диапазоне 1/2 -1/4 то PID справится с задачей.


пока вижу такой способ регулирования.
Эл. мотор 3000 об мин
Fmin- min Частота= 20 Hz = 1200 об в мин
Fmax-max Частота = 50 Hz = 3000 об в мин
Out_min- величина задания частотному преобразователю Fmin = (16384/50 Hz)*20 Hz =~ 6555
Out_max-величина задания частотному преобразователю Fmax = 16384
ADD_Out_S -разрешенное приращение выходной величины регулирования в секуду, 16384/50 Hz=~333
SUB_Out_S- сделаем равное по времени уменьшение величины регулирования в секунду = ~ 333

Out_S- выходная величина, задание частотному преобразователю

Err- ошибка
Err_old- предыдущая ошибка
SP-set point величина задания- например, 100
AP-actual point текущая величина регулируемого параметра, например, 90
TZ- мертвая зона= 10, или разрешенная выходная величина 100+-5
KP- коэффициент пропорциональности, подбирается методом ДОСААФа, 0,5 - 1,0
Out_temp- временная переменная для вычислений величины зада
Out_S_old- предыдущее задание частоты
вызов функции будет производится в OB, вызываемом 10 раз в секунду. 10 ms-OB


------------пробовал тег code, плохо читается
инициализация
Err=0
Err_old=0
Out_S=6555
Out_S_old=6555
ADD_Out_S=33 (333/10)
SUB_Out_S=33 (333/10)
Out_S_min= 6555
Out_S_max=16384
TZ=5

BEGIN

Err=SP-AP
If I ErrI <= TZ then JUMP // если текущая ошибка по модулю меньше или равна "мертвой зоне" переходим на метку Jump

Out_temp= I 1/(KP*Err) I // берем по модулю, величина лежит в пределах 0-1, только одно не понятно, делить на ноль нельзя

if Err > 0 then Out_S=)Out_temp * 16384) +ADD_Out_S // Если ошибка положительная, то приращиваем значение. 16384 - Fmax задание
else
Out_S=(Out_temp * 16384) - SUB_Out_S // Если ошибка отрицательная, уменьшаем выходное значение
end if

if Out_S < Out_S-min then Out_S=Out_S_min // если задание меньше разрешенной величины задания, то выход равен минимуму
else If Out_S > Out_S_max then Out_S=Out_S_max // выходная величина не может быть больше разрешенной

: Jump
Out_S=Out_S
Out_S_old=Out_S

END
----------------------------------------

Аватара пользователя

Ka3ax
здесь недавно
здесь недавно
Сообщения: 14
Зарегистрирован: 30 окт 2012, 03:14
Ф.И.О.: Олд Белл
Откуда: Карасук, Новосибирской обл.

Re: ПИД регулятор

Сообщение Ka3ax » 06 июн 2015, 19:47

Попробовал реализовать задуманное, но скомпилировать не получается.

в строках
компилятор версии 5.3 определяет ошибки, а я не могу распознать

строка 33 место 28 за последней скобкой
строка 36 место 24 за знаком * умножение
строка 38 место 24 указатель отсутствует..

в прикрепленных PDF в цвете, с нумерацией строк.

Код: Выделить всё

FUNCTION_BLOCK FB112
VAR_INPUT
SetPoint : REAL;
ActualPoint : REAL;
Err: REAL;
Err_old: REAL;
OutSold: REAL ;
ADDOutS: REAL ; // 33 как 330/10 10 это время в миллисекундах, частота вызова блока
SUBOutS: REAL ;
OutSmin: REAL ;
OutSmax: REAL ;
KP :  REAL ;
TZ: REAL ;
  END_VAR 
VAR_OUTPUT
    OutS: REAL;
END_VAR 
    VAR_TEMP
      OutTemp : REAL;
    END_VAR
LABEL
    END ;
END_LABEL       
 
  BEGIN
 
Err := SetPoint-ActualPoint ;

IF ABS (Err) <= TZ THEN
    GOTO END ;
           END_IF;
   
    OutTemp = 1 /(KP * Err); // строка 33 место 28 за последней скобкой
 
 IF Err > 0 THEN
    OutS :=  (Out_temp * 16384) + ADDOutS ; // строка 36 место 24 за знаком *

ELSE                                        // строка 38 место 24 указатель отсутствует
    OutS :=  (Out_temp * 16384) - SUBOutS ;
END_IF;

    IF OutS < OutSmin THEN
         OutS := OutSmin;
          END_IF;
 
   
  IF OutS > OutSmax THEN
     OutS := OutSmax ;
     END_IF;
У вас нет необходимых прав для просмотра вложений в этом сообщении.


Вернуться в «Общие вопросы»



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей