Util.lib / RAMP_INT
Вид для печати
Util.lib / RAMP_INT
Такой вопрос!
ПЛК 100 работают через TCP/IP, время от времени зависают. Находятся в разных цехах, работают с разными OPC серверами. Общая только сеть. Зависают в одно и тоже время! что может быть?
Сеть в порядке, зависают только ПЛК.
Как выполнить вызов визуализации по событию, которое в ней произошло? Имеется три визуализации в проекте. В каждой из них есть переменная, которая по событию переходит в true. Нужно, чтобы автоматически открывалась эта визуализация при изменении значения этой переменной.. В визулизации кдс написано невнятно по этой теме-помогите, пожалуйста, примером или словами поконкретнее..
Здравствуйте!
Есть двигатель, его включают и выключают. И бывает он сгорает. Необходимо учесть время, которое отработал двигатель. И при замене обнулить счетчик.
На входной канал плк подается значение тока двигателя.
Решение.
Тут все просто и понятно
Если Ток > 0 запустить секундомер.
Когда Ток=0 остановить секундомер.
Величину что получили Присвоить переменной "Время Работы".
При замене передать сигнал управления и обнулить переменную "Время Работы"
Вопрос, Как запустить секундомер в плк. Таймеры они идут от заданной величины времени к 0.
timV1(I > 0, PT := T#1s, x:=x+1 Q =0) Вот такое решение будет правильное?
Время будет в формате TIMEКод:VAR
I: REAL;
R_TRIG_1: R_TRIG;
Start: TIME;
F_TRIG_1: F_TRIG;
Tim_work: TIME;
END_VAR
R_TRIG_1(CLK:= I>0, Q=> );
IF R_TRIG_1.Q THEN
Start:=TIME();
END_IF
F_TRIG_1(CLK:=I>0 , Q=> );
IF F_TRIG_1.Q THEN
Tim_work:=TIME()-Start;
END_IF
PS.Цитата:
двигатель, его включают и выключают. И бывает он сгорает. Необходимо учесть время, которое отработал двигатель
Время наработки двигателя в секундахКод:VAR
VAR
I: REAL;
R_TRIG_1: R_TRIG;
Start: TIME;
F_TRIG_1: F_TRIG;
Tim_Cycle: TIME; (*Время работы двигателя от последнего пуска*)
END_VAR
VAR RETAIN
Time_Sum: UDINT; (*Время работы двигателя, ИТОГО*)
Cycle: UDINT; (*Число пусков двигателя*)
END_VAR
R_TRIG_1(CLK:= I>0, Q=> );
IF R_TRIG_1.Q THEN
Start:=TIME();
Cycle:=Cycle+1;
END_IF
F_TRIG_1(CLK:=I>0 , Q=> );
IF F_TRIG_1.Q THEN
Tim_Cycle:=TIME()-Start;
Time_Sum:=Time_Sum + TIME_TO_UDINT(Tim_Cycle)/1000;
END_IF
Написал несколько программ на базе PID_2POS_IM_ANR ПИД-регулятора с автонастройкой. Пока не создал загрузочного проекта в ПЛК все было чудесно, коэффициенты подбирались довольно хорошо. Однако, эти коэффициенты, как оказалось, не сохраняются в памяти ПЛК! Т.е. после отключения питания данные стираются. Есть ли варианты запоминания коэффициентов (может к ним удастся подобраться через библиотеку)?
В документации про реманентные переменные читайте (RETAIN).
Уважаемые форумчане, подскажите начинающему инженеру как реализовать сей
проект(восстанавливаю погрузчик):
крутишь руль и колесо отрабатывает тот же угол поворота , имеются следующие компоненты:
Есть датчик угла поворота руля которым управляют и датчик угла поворота
колеса. они оба подключены на 1 и 2 входы Fast analog inputs.
Все собрано на контроллере PLC160.
К выходам уже прикручены устройства для управления силовой сетью(но для пробы прикрутил
лампочки на 24V одна влево, другая вправо). они обе подключены на 1 и 2 входы Discrete
outputs.
Думаю что надо задать переменные на вход аналоговых сигналов
и при разнице подать сигнал на дисретные выходы и если разница будет положительна, то
загорается лампочка вправо, если отрицательна, то влево.
Пока писал, догадался ,но не до конца.
надо бы выставить погрешность побольше у аналоговых входов(то есть к примеру значение 5,2312 преобразовать в 5 ) в значениях, а то двигатель не остановиться резко и "загорается другая лампа"Вложение 21757
И в момент работы и после выключенияЦитата:
Сообщение от Evgenyi
Код:VAR
I: REAL;
R_TRIG_1: R_TRIG;
Start: TIME;
Tim_Cycle: UDINT; (*Время работы двигателя в текущем цикле работы в секундах*)
delta: UDINT;
Time_SumOld: UDINT;
Tim_CycleOld: UDINT; (*Время работы двигателя в предыдущем цикле работы в секундах*)
END_VAR
VAR RETAIN
Time_Sum: UDINT; (*Время работы двигателя, ИТОГО в секундах*)
Cycle: UDINT; (*Число пусков двигателя*)
END_VAR
R_TRIG_1(CLK:= I>0, Q=> );
IF R_TRIG_1.Q THEN
Start:=TIME();
Cycle:=Cycle+1;
END_IF
IF I>0 THEN
delta:=TIME_TO_DWORD(TIME()-Start)/1000;
Tim_Cycle:=delta;
Time_Sum:=Time_SumOld +delta;
ELSE
Time_SumOld:=Time_Sum;
Tim_CycleOld:=Tim_Cycle;
END_IF