Регистрация | Последние сообщения | Персональный список | Поиск | Настройка конференции | Личные данные | Правила конференции | Список участников | Top 64 | Статистика раздела | faq | Что нового v.2.3 | Чат
Skunk Forum - Техника, Наука, Общество » АСУТП »
Алгоритм ПИД регулятора

Версия для печати (настроить)

Новая тема | Написать ответ

Подписаться

Автор Тема:   Алгоритм ПИД регулятора
Boant
Junior Member

Сообщений: 1
Откуда: МОСКВА
Регистрация: Август 2003

написано 29 Августа 2003 11:38ИнфоПравкаОтветитьIP

Может у кого имеется исходный текст(функция) ПИД регул., желательно в Паскале
С уважение, Анатолий

yougi
unregistered
написано 04 Сентября 2003 11:07  ПравкаОтветитьIP

Рекуррентный алгоритм
U=U1-C0*E+C1*E1+C2*E2
C0=Ku*(1+Td/T0)
C1=Ku*(1+2Td/T0-T0/Ti)
C2=Ku*Td/T0
Ku коэффициент усиления
T0 период квантрвания (обычно берут 1)
Ti постоянная интегрирования
Td постоянная дифференцирования
E текущее значение ошибки
E1 значение ошибки такт назад
E2 значение ошибки 2 такта назад

VAR
M:INT; /* переключатель */
U:REAL; /* выход регулятора */
U1:REAL; /* выход такт назад */
E:REAL;
E1:REAL;
E2:REAL;
C0,C1,C2:REAL;
END_VAR;

/* PID subprogram, call cyclically */
PROCEDURE PID;
BEGIN
IF M=1 THEN
BEGIN
E2:=E;
U:=(-C0)*E;
Output(U); /* Процедура вывода управляющего возд. */
U1:=U;
M:=2;
END;
ELSE IF M=2 THEN
BEGIN
E1:=E;
U:=U1-C0*E1+C1*E2;
Output(U);
U1:=U;
M:=0;
END
ELSE
BEGIN
U:=U1-C0*E+C1*E1+C2*E2;
Output(U);
U1:=U;
E2:=E1;
E1:=E;
END;
END_IF;
END;
/*при первом обращении к подпрограмме М должно быть равно 1*/


Нерекуррентный алгоритм
U=C0*E+C1*SUM+C2*(E-E1)
C0=Ku
C1=Ku*T0/Ti
C2=Ku*Td/T0
SUM - сумма ошибок с первой по предпоследнюю


VAR
M:INT; /* переключатель */
U:REAL; /* выход регулятора */
E:REAL;
E1:REAL;
SUM:REAL;
C0,C1,C2:REAL;
END_VAR;

PROCEDURE PID;
BEGIN
IF M=1 THEN
BEGIN
E1:=E;
SUM:=E;
U:=C0*E+C1*SUM;
Output(U);
M=0;
END;
ELSE
BEGIN
SUM:=SUM+E;
U:=C0*E+C1*SUM+C2*(E-E1);
E1:=E;
END;
END_IF;
END;

Это не совсем паскаль, но очень похоже.
Мертвую зону и ограничение добавиь по потребности


AlexASUTP
unregistered
написано 15 Апреля 2004 17:55  ПравкаОтветитьIP

Добрый день !

Спасибо за алгоритм! Я попытался реализвать нерекуррентный вариант и столкнулся с назадачей - а что делать со счетчиком ошибок ? Ведь он в конце концов может переполниться, если система не сможет отработать ошибку и она долгое время будет одного и того же знака ?

Спасибо!

Если можно , ответьте на мой адрес : jermakov@taide.lt

Александр .

[Это сообщение изменил Мощицкий Павел (изменение 15 Апреля 2004 19:47).]

Boant
Junior Member

Сообщений: 13
Откуда: МОСКВА
Регистрация: Август 2003

написано 19 Апреля 2004 13:25ИнфоПравкаОтветитьIP

Дать сообщение(вкючить лампочку), затем обнулить счетчик и продолжать регулирование.
С уважением, Анатолий

Tim
Junior Member

Сообщений: 1
Откуда: Железногорск
Регистрация: Декабрь 2004

написано 28 Декабря 2004 07:28ИнфоПравкаОтветитьIP

А можно сделать алгоритм ПИД-регулятора в виде блок-схемы?
Хочу понять как оно работает!
Надо! Срочно! Задача: Есть контроллер, и в него надо заложить программу по управлению вентилем с плавным регулированием. Т. е. Есть двигатель, и 3 датчика положения вентиля, но нам эти датчики нельзя использовать! Параметр, который учитываем при регулировании, входная величина, это Давление в трубе! Срочно надо!
Кто может. Киньте на мыло tim18@mail.ru

Добавление от 28 Декабря 2004 07:35:

Да, совсем забыл. На двигатель идут команды: Стоп, Открыть, Закрыть.

[Это сообщение изменил Мощицкий Павел (изменение 28 Декабря 2004 08:48).]

MAKC
Junior Member

Сообщений: 3
Откуда: Ukraine
Регистрация: Февраль 2005

написано 11 Февраля 2005 14:16ИнфоПравкаОтветитьIP

Как мне реализовать такую передаточную функцию в Step 7:
G(s)=gain/(1+s*lag)

пробовал с помощью обычного ПИД регулятора, подавая на входы:

1)EN=1

2)P_SEL=0

3)I_SEL=0

4)D_SEL=1

5)GAIN=5.556

6)TM_LAG=0.057s

7)SP_INT=0.1

на выходе при этом был ноль

Константин Власкин
unregistered
написано 12 Февраля 2005 06:28  ПравкаОтветитьIP

Так напишите свой блок.
Функция у вас элементарная.
Пытаться использовать для её решения блок пид регулятора всё равно что стрелять из пушки по воробьям.
А чего вы ждали на выходе отключив все составляющие кроме дифференцирующей?

сергей
unregistered
написано 26 Сентября 2006 22:51  ПравкаОтветитьIP

большое спасибо за алгоритм.
я сейчас занимаюсь только изучением, подскажите пожалуйста каким образом получить
Ti постоянная интегрирования
Td постоянная дифференцирования


Алексейгость
unregistered
написано 27 Сентября 2006 13:08  ПравкаОтветитьIP

Ваш ответ:

Коды форума
Смайлики


Ник:    Пароль       
Отключить смайлики

Все время MSK

Склеить | Разбить | Закрыть | Переместить | Удалить

Новая тема | Написать ответ
Последние сообщения         
Перейти к:

Свяжитесь с нами | skunksworks.net

Copyright © skunksworks.net, 2000-2018

Разработка и техническая поддержка: skunksworks.net


Рейтинг@Mail.ru Яндекс.Метрика