ну и что вы делаете? вы отдаёте себе отчёт в своих действиях?
напишите словами что вы делаете слева и что вы делаете справа. что это за цифры, а?
Вложение 86981
Вид для печати
ну и что вы делаете? вы отдаёте себе отчёт в своих действиях?
напишите словами что вы делаете слева и что вы делаете справа. что это за цифры, а?
Вложение 86981
У ПЛК и компа должны IP отличаться в последних цифрах. IP ПЛК вы должны уже точно знать. https://rutube.ru/video/e953a4b0d919...05b36ebffdeb1/
Для открытия примеров надо поставить все таргеты, примеры для разных ПЛК и могут открыться с ошибками.
Здравствуйте!
Столкнулся со следующей проблемой. Не могу записать значение в modbus slave устройство в переменную COIL. Использую: мастер - ПЛК110 Codesys 2.3, слейв - SMSD 4.2 Modbus.
Подскажите как реализовать команду 0x05 (Write Single Coil)?
Добрый день.
По ссылке архив проекта (проект, таргет, библиотеки): https://ftp.owen.ru/CoDeSys23/07_Exa...ingle_coil.zip
Благодарю!
Добрый день! Подскажите пожалуйста если знаете. Пишу код в Codesys v2.3 на языке CFC всё работает, перехожу на ST пишет ошибку, конфигурация аппаратуры.
Добрый день! Подскажите пожалуйста если знаете. Пишу код в Codesys v2.3 на языке CFC всё работает, перехожу на ST пишет ошибку, конфигурация аппаратуры.
всем привет. есть электро котел 100 кВт три блок ТЭН на пускателях и ПР200. хочется реализовать ротацию тэн по наименьшей наработке времени. может есть у кого то готовые решения.
понял спасибо
Люди, не бейте меня ибо вопрос идиотский но как решить его я не могу второй день, сеодня даже на ночь остался на работе но решил сдаться и спросить у Вас.
Если упростить задачу до ,, кирпича,, то необходимо: если условие А:=TRUE --- зажечь лампочку_1 - отсчитать время Т --- потушить лампочку _1и зажечь лампочку_2---отсчитать время Т---потушить лампочку 2 и зажечь лампочку_3---отсчитать время Т и вернуться к процедуре лампочки_1 . И так по кругу пока условие А:=TRUE; когда A:=FOLSE будет другая последовательность но это уже не важно. Пересмотрел варианты каскадного управления котлами но все что я нашел основано на использовании системного времени ПЛК а знаний у меня по этому направлению ещё меньше. Для меня реально это использовать таймеры.
Обявил три тамера
VAR
(*Таймер_1*)
TP_1 : TP;
IN_TP_1 : BOOL;
(*Таймер_2*)
TP_2 : TP;
IN_TP_2 : BOOL;
(*Таймер_3*)
TP_3 : TP;
IN_TP_3 : BOOL;
(*Переменную PT_TIME чтобы все таймеры шли одинаково*)
PT_TIME : TIME := T#15S;
(*Переменная в качестве счетчика CASE*)
COUNT_1 : INT;
END_VAR
В теле функционального блока ,,завел 3 таймера:
TP_1 (IN := IN_TP_1, PT := PT_TIME);
TP_2 (IN := IN_TP_2, PT := PT_TIME);
TP_3 (IN := IN_TP_3, PT := PT_TIME);
IF A THEN
В качестве реализации алгоритма решил использовать конструкцию с CASE:
CASE COUNT_1 OF
0: OUT_LAMP_1:=1;
OUT_LAMP_2:=0;
OUT_LAMP_3:=0;
IN_TP_1 := 1; (*запускаем таймер ТР_1*)
IF TP_1.Q THEN IN_TP_1 := 0; COUNT_1 := 1; END_IF; (*Если таймер ТР_1 отсчитал заданое время , я его выключаю и перехожу на следоющий блок CASE*)
1: OUT_LAMP_1:=0;
OUT_LAMP_2:=1;
OUT_LAMP_3:=0;
IN_TP_2 := 1; (*запускаем таймер ТР_2*)
IF TP_2.Q THEN IN_TP_2 := 0; COUNT_1 := 2; END_IF; (*Если таймер ТР_2 отсчитал заданое время , я его выключаю и перехожу на следоющий блок CASE*)
2: 1: OUT_LAMP_1:=0;
OUT_LAMP_2:=0;
OUT_LAMP_3:=1;
IN_TP_3 := 1; (*запускаем таймер ТР_3*)
IF TP_3.Q THEN IN_TP_3 := 0; COUNT_1 := 0; END_IF; (*Если таймер ТР_3 отсчитал заданое время , я его выключаю и возврощаюсь к нулевому блоку CASE*)
END_CASE;
END_IF;
Как вы поняли это ничего не работает т.к. тамеры не успевают завершить отсчет времени ибо у них выход Q сразу =1 и идет переход к следоющему блоку CASE. Можно попытаться сделать на одном таймере но я не знаю как сделать разрыв в цикле чтобы тамер смог перегрузиться и в следоющем блоке CASE был готов к работе. Я Пересмотрел всю ветку овен лоджике с ST конструкциями, но там опять опираеться на системное6 время и слишком не понятно для меня. Сейчас попробую с счетчиками, ночь длинная. Спасибо.
Решил я эту задачу с помощю счетчика CTD и BLINK. Но хотелось узнать как эту задачу можно таймерами решить.Спасибо.
Вот здесь:
IF TP_3.Q THEN IN_TP_3 := 0; COUNT_1 := 0; END_IF; (*Если таймер ТР_3 отсчитал заданое время , я его выключаю и возврощаюсь к нулевому блоку CASE*)
сделайте вызов TP для его обнуления:
IF TP_3.Q THEN
TP_3 (IN := false, PT := t#0s);
IN_TP_3 := 0;
OUNT_1 := 0;
END_IF;
Вообще лучше использовать не TP, a TON и можно вызывать его прямо внутри шага CASE - если нужна выдержка времени
Здесь посмотрите пример
Если всё идёт через равное время, то можно и один ton использовать, как то так:
На эту переменную и вешайте ваш case, если он вам так нравится. Но не забудьте при первом взводе А её сделать 1 или 0, а при превышении какого то числа опять приравнять к 0 или 1, чтоб закольцевать.Код:TON_X(IN:= A AND NOT TON_X.Q, PT:=T#5S);
IF TON_X.Q THEN peremennaya:= peremennaya + 1; END_IF
Тут таймер TON.
PS В case только логика ламп, и ничего больше...
Всё уже лежит на форуме давно, попроще, посложней на одном таймере, любое кол-во шагов
Простой шаговый автомат, новый TON с паузой_____ https://owen.ru/forum/showthread.php...39&page=43#424
Прогр. управление 6 нагрузками 6 реж. 12 шагов _ФБ_фунции_____https://owen.ru/forum/showthread.php...39&page=11#105
2+3 насоса_Нараб_Уровень_Ротация по времени_____ https://owen.ru/forum/showthread.php...l=1#post465744
Ребят, доброе всем утра! Спасибо что откликнулись! Улыбнуло - спал в кабинете на полу на 4 плакатах ОХРАНЫ ТРУДА
Алиса конешно решила задачу, но много лишнего
-куча таймеров (уже говорили выше),
-зачем if если уже есть case? if это неявный шаг case, это и юзать
-лампы в шагах. Лампа это уже шаг по условию.
Есть куда расти
Если нет соревнования - типа в 4..5 строк, то лучше автоматно (case)
Вариант:
Код:function_block sw
var_input
i : bool;
end_var
var_output
Q1, Q2, Q3 : bool;
end_var
var
tmr : SYS.TON;
tmp : bool;
end_var
tmr(I:=i, T:=T#1s);
if i then
if not(Q1 or Q2 or Q3) then Q1 := true; end_if
if tmr.Q then
tmp := Q3; Q3 := Q2; Q2 := Q1; Q1 := tmp; tmr(I:=false);
end_if
else
Q1 := false; Q2 := false; Q3 := false;
end_if
end_function_block
Колеги доброе утро! Подскажите почему это так работает Вложение 87215 я как понимааю действие в вложеном втором условии не должно выполняться , а оно выполняеться:confused:
Вложение 87216 Эта авария генерируеться только в этих очках в рамках этого FB
in-goy1 у вас 1, у вас нет теперь никаких else
Вложение 87218 Спасибо , обяснили, теперь понял!
Почему по вложенному? По всему вообще
OUT_AVAR.. := IN_GOY1 AND NOT IN_KONC_GOY1;
человек и так путается в if'ах и не видит 3-ого неявного условия. Еще больше запутается если ее в этот же if напихаетЦитата:
Ну там же ещё логика думаю будет.
Код:OUT_AVAR.. := IN_GOY1 AND NOT IN_KONC_GOY1;
if IN_GOY1 then
.. еще какая-то логика
else
.. и еще
end_if
Возник вопрос куда подключить разъем com на частотнике,если управление частотником реализовано через клеммы fwd,s2 s1 и rev, которые в свою очередь подключены к выходам на ПЛКВложение 87224