PDA

Просмотр полной версии : дискретный выход ТРМ 1032 управление КЗР ( 4-20 мА) возможно?



Сергей Сергеевич
07.11.2024, 12:28
Прошу помочь в разработке программы для управления КЗР ( АСТА ЭПА-204-220В). управление данным КЗР организовано 4-20 мА. проблема в его управление связана с тем что щит автоматики ИТП собран на контролере ТРМ1032 с дискретным управлением.в наличие есть ПР200-220.22.1.0. как это можно реализовать ?

1exan
07.11.2024, 12:47
Прошу помочь в разработке программы для управления КЗР ( АСТА ЭПА-204-220В). управление данным КЗР организовано 4-20 мА. проблема в его управление связана с тем что щит автоматики ИТП собран на контролере ТРМ1032 с дискретным управлением.в наличие есть ПР200-220.22.1.0. как это можно реализовать ?

Вот здесь (https://owen.ru/forum/showthread.php?t=25068&p=447749&viewfull=1#post447749) есть эмулятор 3-позиционного ИМ (в файле "Test_EMU_3pos.owle (https://owen.ru/forum/attachment.php?attachmentid=79352&d=1728671724)" - ФБ "Emulator_3Pos_") - можете его применить

Сергей Сергеевич
07.11.2024, 14:31
спасибо. буду пробовать

FPavel
07.11.2024, 19:24
Была задача управления моторизованной задвижкой без обратной связи ни по концевикам ни по положению - в приводе отсутствовали для подключения и те и другие. А заказчик требовал снимать напряжение при расчётном достижении крайних положений. Хоть сразу на скорую руку просто сделал импульсы заданной длины, позже собрал модель моторизованной задвижки.

///<Description>Эмулятор задвижки, меняющей состояние под воздействием трёхпозиционнгог регулятора.</Description>
///<Author>!!FPA!!</Author>
///<GroupName>Управляющие и регулирующие модули</GroupName>

function_block Emulator_Damper_

var_input
///<Description>Сигнал Открыть</Description>
xOpen: BOOL;
///<Description>Сигнал Закрыть</Description>
xClose: BOOL;
///<Description>Время полного хода задвижки, мс</Description>
udiFullStroke: udint;
///<Description>Время выборки люфта задвижки при открытии</Description>
udiBacklash_Open: udint;
///<Description>Время выборки люфта задвижки при закрытии</Description>
udiBacklash_Close: udint;
///<Description>Верхний предел обратного сигнала задвижки (положения). Для задвижки с контролем положения</Description>
rPos_Max: REAL:=100.0;
///<Description>Нижний предел обратного сигнала задвижки (положения). Для задвижки с контролем положения</Description>
rPos_Min: REAL:=0.0;

end_var

var_output
///<Description>Обратный сигнал задвижки. Для задвижки с контролем положения</Description>
rPos: REAL;
///<Description>Сигнал верхнего предела задвижки</Description>
bOpened: BOOL;
///<Description>Сигнал нижнего предела задвижки</Description>
bClosed: BOOL;
end_var

var
udiCurrent, udiCycle: udint;
udiPrevious: udint := 0;
udiBacklash_Open_: udint; // выбранная часть люфта при открытии
udiBacklash_Close_: udint; // выбранная часть люфта при закрытии
udiRunTime: udint; // часть времени udiCycle, потраченная на перемещение
rFullStroke: real;
h: real;
end_var

// вычисление длительности текущего цикла
udiCurrent := time_to_udint(get_time());
udiCycle := udiCurrent - udiPrevious;
udiPrevious := udiCurrent;

// обработка люфта - часть сигнала перемещения расходуется на компенсацию люфта
udiRunTime := udiCycle;
if xOpen then
if udiRunTime <= udiBacklash_Close_ then
udiBacklash_Close_ := udiBacklash_Close_ - udiRunTime;
else
udiBacklash_Close_ := 0;
end_if;
if udiBacklash_Open_ < udiBacklash_Open then
udiBacklash_Open_ := udiBacklash_Open_ + udiRunTime;
if udiBacklash_Open_ > udiBacklash_Open then
udiRunTime := udiBacklash_Open_ - udiBacklash_Open;
udiBacklash_Open_ := udiBacklash_Open;
else
udiRunTime := 0;
end_if;
end_if;
end_if;
if xClose then
if udiRunTime <= udiBacklash_Open_ then
udiBacklash_Open_ := udiBacklash_Open_ - udiRunTime;
else
udiBacklash_Open_ := 0;
end_if;
if udiBacklash_Close_ < udiBacklash_Close then
udiBacklash_Close_ := udiBacklash_Close_ + udiRunTime;
if udiBacklash_Close_ > udiBacklash_Close then
udiRunTime := udiBacklash_Close_ - udiBacklash_Close;
udiBacklash_Close_ := udiBacklash_Close;
else
udiRunTime := 0;
end_if;
end_if;
end_if;

// вычисление положения задвижки, концевых переключателей
rFullStroke := udint_to_real(udiFullStroke);
h := (rPos_Max - rPos_Min) * udint_to_real(udiRunTime);
if xOpen then
rPos := rPos + h / rFullStroke;
end_if;
if xClose then
rPos := rPos - h / rFullStroke;
end_if;
if rPos >= rPos_Max then
rPos := rPos_Max;
bOpened := true;
bClosed := false;
elsif rPos <= rPos_Min then
rPos := rPos_Min;
bOpened := false;
bClosed := true;
else
bOpened := false;
bClosed := false;
end_if;

end_function_block
Модель можно использовать для требуемого преобразования импульсов управления 3-позиционным приводом в аналоговый сигнал.

В коде есть комментарии к переменным, их назначение можно понять.

Задавайте люфт равным нулю, значение выхода от 0,0 до 1,0, время полного хода от 30 до 90 секунд (30000...90000 мс).
Должно работать.

Мне кажется, что тип выхода в ПР200 настраивается перемычками, а может и путаю.

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

Павел Братковский
08.11.2024, 04:48
тип входа настраивается перемычками, тип выхода заказной.....

Сергей Сергеевич
08.11.2024, 09:26
спасибо за помощь! в субботу поеду на объект буду пробывать