PDA

Просмотр полной версии : программирование на ПЛК 150



Fix_m
22.10.2012, 15:44
Добрый день! помогите пож-та с программированием ПЛК 150.
есть датчик температуры. надо в зависимости от температуры управлять электродвигателем, скоростью его вращения (эл/двиг управляется сигналом 0-5В). кто может помочь с этой простой прогой?

Gans
22.10.2012, 15:50
Здравствуйте, Fix_m.

Добрый день! помогите пож-та с программированием ПЛК 150.
есть датчик температуры. надо в зависимости от температуры управлять электродвигателем, скоростью его вращения (эл/двиг управляется сигналом 0-5В). кто может помочь с этой простой прогой?
Проще на ТРМ10 (http://www.owen.ru/catalog/46584403)

Fix_m
22.10.2012, 15:59
Здравствуйте, Fix_m.

Проще на ТРМ10 (http://www.owen.ru/catalog/46584403)

Спасибо! но потом надо будет усложнять схему управления. мне для начала надо хотя бы такому простому научиться. сможете помочь написать прогу? на Codesys, как я понимаю.

nik9999
22.10.2012, 16:14
Если плк 150 с индексом У ( аналоговые выходы ПЛК150/154 ЦАП 0...10 В)
то приблизительно как то так

1. В конфигурации плк определяем вход ( термодатчик) PV и аналоговый выход OUT
2. в глобальных переменных

VAR_GLOBAL RETAIN PERSISTENT
SP : REAL := 30; (* Уставка для температуры *)
KP : REAL := 1;
TN : REAL := 0;
TV : REAL := 0;

END_VAR

3. скачиваем с сайта oscat.de библиотеку , и добавляем ее в проект
4. В основной программе
PROGRAM PLC_PRG

VAR
CTRL : CTRL_PID;
PWR : REAL;
END_VAR

CTRL(
ACT:= PV,
SET:= SP,
M_I:= ,
MAN:= ,
RST:=,
KP:= KP,
TN:= TN,
TV:= TV,
Y=> PWR,
);

PWR := LIMIT(0,PWR,1000)/10;
OUT:=SCALE_R(PWR*10,0,1000,0,5);( * для выхода 0-5 в *)

5. В конфигурации задач, добавляем наш PLC_PRG, в циклически выполняемую ( на пр. раз в секунду)

6. Подбираем коэф. ПИД регулятора KP, TN, TV

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

Fix_m
22.10.2012, 16:42
Если плк 150 с индексом У ( аналоговые выходы ПЛК150/154 ЦАП 0...10 В)
то приблизительно как то так

1. В конфигурации плк определяем вход ( термодатчик) PV и аналоговый выход OUT
2. в глобальных переменных

VAR_GLOBAL RETAIN PERSISTENT
SP : REAL := 30; (* Уставка для температуры *)
KP : REAL := 1;
TN : REAL := 0;
TV : REAL := 0;

END_VAR

3. скачиваем с сайта oscat.de библиотеку , и добавляем ее в проект
4. В основной программе
PROGRAM PLC_PRG

VAR
CTRL : CTRL_PID;
PWR : REAL;
END_VAR

CTRL(
ACT:= PV,
SET:= SP,
M_I:= ,
MAN:= ,
RST:=,
KP:= KP,
TN:= TN,
TV:= TV,
Y=> PWR,
);

PWR := LIMIT(0,PWR,1000)/10;
OUT:=SCALE_R(PWR*10,0,1000,0,5);( * для выхода 0-5 в *)

5. В конфигурации задач, добавляем наш PLC_PRG, в циклически выполняемую ( на пр. раз в секунду)

6. Подбираем коэф. ПИД регулятора KP, TN, TV

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

вот это здорово! спасибо!!
только я совсем еще начинающий.
1) как определить входы-выходы в конфигурации ПЛК? как в программе указать, например, с какого физического входа принимать сигнал?
2) это всё на каком языке лучше писать?
3) про глобальные переменные понял
4) что в этой библиотеке нового? которую советуете скачать.
5) "CTRL_PID" - это из новой библиотеки?
6)"M_I:= , - этого, честно говоря, вообще не понял. для чего это?
MAN:= ,
RST:=,"
7) "PWR := LIMIT(0,PWR,1000)/10;
OUT:=SCALE_R(PWR*10,0,1000,0,5);( * для выхода 0-5 в *)"
что означают эти записи? вкратце.
8) и опять таки про конфигурацию задач. как добавить в цикл.выполняемую?
буду благодарен за подробный ответ.

nik9999
22.10.2012, 19:11
вот это здорово! спасибо!!
только я совсем еще начинающий.
1) как определить входы-выходы в конфигурации ПЛК? как в программе указать, например, с какого физического входа принимать сигнал?

Очень внимательно читаем PLC_Configuration_OWEN.pdf ( идет на диске с плк), конкретно стр 33, 42... Но в целом скажу, что надо все прочесть РЭ_ПЛК150.pdf, "Порядок программирования ПЛК1хх_РП.pdf" .


2) это всё на каком языке лучше писать?

На мой взгляд ST, но ИМХО


4) что в этой библиотеке нового? которую советуете скачать.

Очень много вкусностей и полезностей , в доке к ней все написанно


5) "CTRL_PID" - это из новой библиотеки?

Да


6)"M_I:= , - этого, честно говоря, вообще не понял. для чего это?
MAN:= ,
RST:=,"

Значения этих переменных, инициализирует сама библиотека



7) "PWR := LIMIT(0,PWR,1000)/10;
OUT:=SCALE_R(PWR*10,0,1000,0,5);( * для выхода 0-5 в *)"
что означают эти записи? вкратце.

CTRL_PID ,из диапазона 0-1000, большая часть "железных" регуляторов выдают мощность в %, первая строка и переделывает в проценты.
вторая строка диапазон 0-1000, апроксимирует на 0-5, по скольку на вых. ПЛК должно быть 0-5 в.


8) и опять таки про конфигурацию задач. как добавить в
цикл.выполняемую?
буду благодарен за подробный ответ.


читаем CodeSys.pdf там все просто написанно

Fix_m
24.10.2012, 16:19
nik9999, спасибо! стал разбираться, читать. уже стало понятнее.
но остались вопросы.
1) "OUT:=SCALE_R(PWR*10,0,1000,0,5);( * для выхода 0-5 в *)"
Как ПЛК должен понять, что 0-5 означают вольты? а если написать 0-20, то на аналоговом выходе всё равно будет 0-10В ?

2) если пока не брать ПИД регулирование. Допустим, надо написать такую программу. Если на аналоговом входе температура больше 20 градусов, то двигатель должен крутиться на полную мощность (т.е. выходной сигнал должен быть 5В). если меньше, то 1В.
при компиляции вывел ошибки. неправильно называю переменными входы-выходы. что я делаю не так?
рисунки приложил. http://zalil.ru/upload/33886372 (не знаю, как по-другому добавить рисунки)

nik9999
25.10.2012, 10:54
nik9999, спасибо! стал разбираться, читать. уже стало понятнее.
но остались вопросы.
1) "OUT:=SCALE_R(PWR*10,0,1000,0,5);( * для выхода 0-5 в *)"
Как ПЛК должен понять, что 0-5 означают вольты? а если написать 0-20, то на аналоговом выходе всё равно будет 0-10В ?

В канал аналогового модуля из программы ПЛК передается число,
равное желаемому выходному значению фиксированного модуля аналогового входа. Для ЦАП типа «Ток» это значения от 4 до 20, для напряжения – от 0 до10. Если записать 20, то все равно будет 10.


2) если пока не брать ПИД регулирование. Допустим, надо написать такую программу. Если на аналоговом входе температура больше 20 градусов, то двигатель должен крутиться на полную мощность (т.е. выходной сигнал должен быть 5В). если меньше, то 1В.
при компиляции вывел ошибки. неправильно называю переменными входы-выходы. что я делаю не так?
рисунки приложил. http://zalil.ru/upload/33886372 (не знаю, как по-другому добавить рисунки)

Это не совсем правильно, нужен гистерезис, иначе может сильно дергать двигатель при температуре ~20!

VAR
HS: HYST_1;
END_VAR

HS(IN := PV, low:= 19, high := 21 ); (*Гистерезис в 2 градуса*)

IF HS.Q THEN
OUT :=5; (*Включаем мотор*)
ELSE
OUT :=1; (*Выключаем*)
EBD_IF;

PS
Имена переменных должны отличаться от имен каналов

Fix_m
26.10.2012, 11:45
nik9999, понял, спасибо!

что будет между 19 и 21 градусом? двиг будет выключен или работать на средних оборотах?

привильно ли я понимаю работу "HS.Q" ? На выходе Q блока HYST_1 будет высокий уровень, если t>21, и двиг включится (OUT :=5), будет низкий уровень, если t<19, и двиг выкл (OUT :=1) ? эти уровни логические (как 0 и 1)??

QWERTY
22.11.2012, 12:59
Разрешите вопрос по теме?
Подскажите, как реализовать подобную программу, если мне просто нужно изменять значения на аналоговом выходе через определенно заданные промежутки времени (без всяких зависимостей от входов).
Можно ли воплотить это в жизнь на языке LD?