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
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Написал несколько программ на базе 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
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg