PDA

Просмотр полной версии : ПЛК и ПИД-регулятор



Mikalay83
26.06.2013, 11:15
Здравствуйте. Помогите пожалуйста решить следующую задачу. В программу LD вставляю блок Pd (пропорционально-дифферинциальный регулятор) на вход pd подаю значение температуры, на выходе pd значения выдаются в формате real, вопрос как преобразовывать выход pd real таким образом, чтобы на дискретном (транзисторном) выходе плк генерировались импульсы, длина которых (или скважность) менялась бы в соответствии с соотношением входной величины и вставки (по pd функции).
Заранее благодарен Николай.

Александр Ч.
26.06.2013, 12:22
2.2.3 Подмодуль ШИМ (Pulse-wide modulator или PWM) [PLC_Configuration_OWEN.pdf], стр. 26. Кроме ПЛК63/73.

Mikalay83
27.06.2013, 00:02
Спасибо за внимание, но не выходит у меня с помощью PWM на реальном выходе ПЛК сделать ШИМ91099110
Прилогаю скриншоты конфигурации и программы, я думаю в них будет видна ошибка.
Заранее благодарен Николай.

Валенок
27.06.2013, 10:51
курим типы - real_to_int
перемасштабирование, например-LIN_TRAFO, и про границы самого PSW.
почему min > max ?

melky
27.06.2013, 15:13
А разве при использовании ШИМ не real ? или это только у MK110 real для работы в ШИМ режиме ?

Алексей Дмитриев
27.06.2013, 15:32
;)

почему min > max ?
Более того, как при помощи ШИМ получить отрицательное значение? Если это управляет ТЭНом, то от 0 до 100% мощность меняется, если задвижкой то нужно два ШИМ выхода и логику организовывать, про которую, как впрочем и про сам ШИМ я на скриншотах ничего не увидел, а регулятор выдает выход корректно, в соответствии с настройками.;) Конверсия его выхода в WORD тоже работает правильно.:rolleyes:

Mikalay83
27.06.2013, 15:59
Уважаемый Алексей Дмитриев пожалуйста, не могли бы вы составить проект на ld или cfc с привязкой к выходу ПЛК так, чтобы я загрузил этот проект и увидел на выходе у ПЛК ШИМ. Ключевое не понимание у меня в этом вопросе, это как реальный выход pd может управлять дискретным выходом ПЛК, как я понимаю должен быть некий блок преобразования например LIN_TRAFO и с PWM не совсем понятно.
Если вас не затруднит вот моя почта kamakokip@tut.by
Заранее благодарен Николай.

melky
27.06.2013, 17:27
Mikalay83
ПИД-регулятор для КЗР в CoDeSys (http://www.asutp-volgograd.com/1/post/2013/05/pid-regulator-codesys.html)

В конце еще ссылка на применение ПИД регулятора.

Может будет полезным разобраться.

Mikalay83
27.06.2013, 23:56
Во всех примерах по использованию Pulse-wide modulator указан ПЛК 150, а как в 110 60 М?

Mikalay83
27.06.2013, 23:56
Пример на 150 9116

Валенок
28.06.2013, 03:30
;)
и про сам ШИМ я на скриншотах ничего не увидел,:
Ну там типа на выход который как ШИМ работает. Нормально кстати работает.

;)
, а регулятор выдает выход корректно, в соответствии с настройками.;) Конверсия его выхода в WORD тоже работает правильно.:rolleyes:
Ну да корректно. В соотвествии с min > maх, PD кладет на все ограничения и выдает за любые границы А был бы пид - начался бы плач про долго не закрывается/открывается.
А выдав минус 250, типа надо уж точно закрыться, через word чел получил 65000+. Что больше верхней границы ШИМа который word (0..1000). И железо просто тупо откроется наглухо. Делов-то - опустить-ли графитовый стержень или поднять.

Ну коли надо откр/закр, то выход типа -100..100 нормально бьется на 2 выхода

Алексей Дмитриев
28.06.2013, 09:36
Во всех примерах по использованию Pulse-wide modulator указан ПЛК 150, а как в 110 60 М?

Как-то так. 4 ШИМ выхода, имеем по два параметра на каждый: мощность и период ШИМ.

9117

Описание этого дела на 75 странице руководства по программированию ПЛК110.160.
Собственно вам над только корректно задать мин=0 и макс =1000, а также период ШИМ и все заработает!

Алексей Дмитриев
28.06.2013, 10:33
Делов-то - опустить-ли графитовый стержень или поднять.
Неее, второго Чернобыля нам не нада!

Валенок
28.06.2013, 15:29
вот, наскоро, pid для 2 выходов на родных psw на 1xx

var
y:int;
pid : pid := (y_min:=-1000, y_max:=1000); (*set_point := 0*)

pid( actual := ошипка, ..);
y:=real_to_int(pid.y);
if abs(y) > ?? then (*типа зоны нечуйствительности*)
open := max(0,y);
close:=abs(min(0,y));
else
open:=close:=0;
end_if

Алексей Дмитриев
28.06.2013, 16:09
Вот аналогично на LD, в эмуляторе даже работает.

Mikalay83
01.07.2013, 09:01
Всем большое спасибо, особенно за пример от Алексея Дмитриева.