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
День Добрый!
Вопрос по CoDeSys 2.3.
Создан проект. Проверен. Ошибок и замечаний нет. Откомпилирован. В режиме Эмуляция - Онлайн запускается, но при нажатии кнопки "Старт" (F5) редактор выдаёт окно с ошибкой "Доступ по не существующему адресу! ПЛК остановлен."
Вопрос. Где "собака порылась"? ... и как победить проблему?
Вложение 21758
Спасибо!
Попробуйте вот так. Вложение 21761
CleanS Как всегда: по кусочкам удалять программу пока ошибка не исчезнет. Изолировать таким образом ошибку до минимальных единиц языка. С результатами возвращаться сюда на форум, если останутся вопросы. Ещё вариант — выложить проект в открытый доступ.
Ребята кто подскажет (покажет) как можно сделать так чтоб при первой загрузки проекта в ПЛК были уставки по умолчанию,
но эта уставка должна быть RETAIN и эта переменная должна потом меняться с операторской панели по протоколу Modbus RTU
Вложение 21771
Скорей всего так
Вложение 21779
по умолчанию модбас переменные в конфигураторе сохраняются.
а при первой загрузке (при включении плк) в конфигуратор добавить модуль статистики и там использовать переменную power, от нее по тригеру фронта делайте по умолчанию.
ну или просто TRUE на вход триггера, сработает 1 раз.
Спасибо за помощь, попробую.:)
Вопрос, какая максимальная дальность передачи сигнала по RS-485?
Здравствуйте. Подскажите пожалуйста, как можно экспортировать таблицу modbus-регистров из конфигурации ПЛК (Modbus access properties на скриншоте). Тэгов много, выписывать регистры руками долго.
http://rghost.ru/6pTyXwVWl/image.png
Всем добрый день.
Решил разобраться как работать по modbus через библиотеку, а не через конфигурацию. Опрос получается успешно. Читаю несколько регистров и пишу их в заранее сформированную структуру
Сюрпризом стало, что чередование байт не совпадает (как то изначально не задумывался над этим). Соответственно, чтобы получить значение переменной, например WORD, x1:=bufRead1.in_x1 не подходит, а писать к каждой переменной:Код:pRead1:=ADR(bufRead);
bufRead1:=pRead1^;
а есть ещё и DWORDы и REAL - совсем получается некрасиво. Думаю, что каждую структуру можно загнать в цикл и переставить байты местами, но вот с этим пока мне не очень понятно. Может гуру толкнут в правильном направлении?:rolleyes:Код:x1:=BYTE_TO_WORD(bufRead[20]) OR SHL(BYTE_TO_WORD(bufRead[19]),8)
P.S.
сваял такую штуку:
Где bufRead1 - структура, а pRead1, соответственно указатель на эту структуру.Код:pBuf:=ADR(bufRead);
FOR i:=0 TO 23 BY 2 DO
p:=ADR(pBuf^[i])+1;
p1:=ADR(pBuf^[i]);
p1^:=p^;
p1:=p1+1;
p:=p-1;
p1^:=p^;
i:=i+1;
END_FOR;
pRead1:=ADR(pBuf);
bufRead1:=pRead1^;
Не работает...:(
Всё, вопрос неактуален, разобрался сам.
подскажите пожалуйста.....
ПЛК 160 <=> АС3-М -------- RS485 800m ------- АС4 <=> ПК CodeSys будет работать?
Как можно сделать такую логику, при нажатии на кнопку появляется 1 а при повторном нажатии на эту же кнопу появляется 0?
наверное как то такЦитата:
Как можно сделать такую логику, при нажатии на кнопку появляется 1 а при повторном нажатии на эту же кнопу появляется 0?
А что Т триггера нет что ли :confused:
Узнаю картинку http://www.owen.ru/forum/showthread....ll=1#post94449 :rolleyes:
Спасибо вам:)
Petera, добрый день!
Я новичок, но у меня есть задача запускать насос с помощью ПЛК100 в течении недели по графику в определенные часы (5 раз в течении дня), соответственно и останавливать в каждый цикл.
На форуме увидел Ваш недельный таймер, объясните пожалуйста, как записать его в проект и как настроить, пока ничего не понимаю.
С уважением,
Павел
Такой вопрос!
Есть несколько двигателей, и насосов. На всех есть датчик тока. Через МВ передаем данные в ПЛК. Все работаю от 15 минут до 10 часов, когда какой цикл тех процесса. С половиной насосов и двигателей проблем нет. А половина показывает что у них ток прыгает от 0 до 60 ампер и как каждые 30-60 секунд. Что может быть?
Есть одно близкое решение в разработке, которое я планирую на днях опубликовать. На входе — проектный файл, на выходе через шаблонизатор — регистры в нужном виде.Цитата:
Здравствуйте. Подскажите пожалуйста, как можно экспортировать таблицу modbus-регистров из конфигурации ПЛК (Modbus access properties на скриншоте). Тэгов много, выписывать регистры руками долго.
Вложение 22018
Только оно делается под овеновский модбас, а на вашем скриншоте что-то незнакомое. Что это?Без проекта только гадать остаётся. Попробуйте медленнее считывать. Или на ПК программу напишите, чтобы контроллер исключить. Если осциллограф есть, то им можно удостовериться в наличии или отсутствии этих скачков перед модулем.Цитата:
А половина показывает что у них ток прыгает от 0 до 60 ампер и как каждые 30-60 секунд. Что может быть?
Приветствую Всех!
Помогите новичку реализовать функцию 4 ступенчатого нагрева по Pid закону для поддержания заданной температуры
Какой ФБ Pid регулятора лучше использовать?
Codesys V 2.3 ПЛК110
Любой. Например pid (util.lib) Работает не регулятор а его настройки.
Выход пропустить через целочисленный гистерезис.
Как подключить EKON134 к Lectus OPC-server по TCP/IP?
дайте ссылку
я пытался не опрашивает приборы
подскажите, есть возможность отлаживать мастер-скада проект без контроллера?
Имею ситуацию: плк овен 110, софт написан на кодесис. На мастерскада делаю арм оператора.
Использую ОРС кодесис. Контроллера на руках нет. Запускаю кодесис в режиме эмуляции.
В мастер скада не видны данные из ОРС (на вкладке "данные" - пишет "нет соединения" ).
Как я понимаю, кодесис в эмуляции контроллер не заменяет (или я чтото недонастроил ?).
PLCWinNT подключить не получилось, пишет ошибка соединения #0 (есть вообще где-нибудь дока на PLCWinNt ?)
что посоветуете? Как отлаживать программу ?
Вам нужен пример вызова?
Или как работает?Цитата:
PID_K5(
ACTUAL:=RM4_PV ,
SET_POINT:= RM4_SP,
KP:=10 ,
TN:= 30,
TV:= 0,
Y_MANUAL:= K5_Y_MANUAL,
Y_OFFSET:=0.1 ,
Y_MIN:= 5,
Y_MAX:=55 ,
MANUAL:= K5_MAN,
RESET:= K5_RESET,
Y=> K5_Y_M,
LIMITS_ACTIVE=> K5_LIMITS_ACTIVE,
OVERFLOW=>K5_OVERFLOW );
Вложение 22049