Вот вам схема трапецевидного графика, с выхода (INT) подавайте на ПИД регулятор, на вход (SP). Если будут вопросы пишите в личку.
Вид для печати
Подскажите, плиз: какое максимальное количество регистров можно записать за раз с помощью функции MODBUS - 16 Preset Multiple Registers, при использовании библиотеки modbus.lib. ?
Здравствуйте. Хочу поморгать реле с периодом в 2 сек. Дана программа ааа. В PLC_PRG кроме нее ни чего нет. Почему не работает сия конструкция:Вложение 17616
Kavoo, так вообще не пишут. Вариант 1 (Util.lib):Вариант 2 (TON):Код:VAR
blinker: BLINK := (TIMELOW := T#1s, TIMEHIGH := T#1s);
doBlink: BOOL;
a13_3: BOOL;
END_VAR
blinker(ENABLE := doBlink, OUT => a13_3);
Вариант 3 (ленивый/отладочный с некорректным первым периодом):Код:VAR
blinker: TON := (PT := T#2s);
doBlink: BOOL;
a13_3: BOOL;
END_VAR
blinker(IN := NOT blinker.Q AND doBlink);
a13_3 := blinker.ET > T#1s;
Код:VAR
doBlink: BOOL;
a13_3: BOOL;
END_VAR
a13_3 := doBlink AND TIME_TO_DWORD(TIME()) MOD 2000 > 1000;
Почему? Это ограничение среды программирования? Разве повторный вызов таймера не обнуляет его текущего состояния?
Таймер не будет считать сам по себе. Его нужно постоянно вызывать, и вы этого не делаете. Это не ограничение среды, это суть среды.
Если вставить вызов таймера после IF, моргание идет не регулярно.
Спасибо за отклик Yegor. Ваши процедуры работают. Извините меня за навязчивость, просто хочу понять почему не работает мой вариант, чтоб не нарваться в будущем. Я же вызываю их поочередно, сначала t2 потом t1. Они же должны работать независимо от остальной программы, я же объявил ааа не как функцию, а как пользовательскую программу.
То ,что таймеры должны работать независимо от остальной программы - это не я придумал, я где то вычитал в литературе по CoDeSys. Получается если таймера нужно вызывать постоянно, то их временные интервалы которые они отсчитывают в процессе работы программы, окажутся больше заданных?
Пруф?Цитата:
То ,что таймеры должны работать независимо от остальной программы - это не я придумал, я где то вычитал в литературе по CoDeSys.
Любые временные интервалы по точности ограничиваются временем цикла ПЛК. Ну, за исключением быстрых входов и выходов, но это совсем другая история.Цитата:
Получается если таймера нужно вызывать постоянно, то их временные интервалы которые они отсчитывают в процессе работы программы, окажутся больше заданных?
Ваш код работает у меня вот в таком виде:Но повторюсь: так писать не надо. Это невозможно отлаживать.Код:VAR
t1: TON := (PT := T#1s);
t2: TON := (PT := T#1s);
ddd: BOOL := TRUE;
a13_3: BOOL;
END_VAR
IF t1.Q OR ddd THEN a13_3 := FALSE; t1(IN := FALSE); t2(IN := TRUE); ddd := FALSE; END_IF
IF t2.Q THEN a13_3 := TRUE; t2(IN := FALSE); t1(IN := TRUE); END_IF
t1();
t2();
Пруф — единица крепости алкоголя, равная 0,5 % содержания спирта *Вики :D
Премного благодарен за исчерпывающие ответы:) Буду работать дальше.
добрый день. подключил энкодер к плк100. в конфигурации добавил на вход Encoder 16 bit. беру сигнал со входа %IW0.1.0 (*Position*) и отправляю на функциональный блок (см. вложение), который нашел на форуме. работает, считает... но не совсем так как хотелось. поковырявшись в настройках получаю за один оборот примерно 1000 импульсов. методом деления на 4 перевожу в мм и вроде ничего. но вот в чем загвоздка: выход функционального блока выдает сигнал (импульсы)не чередуя (...434,435,436,437), а через какой то интервал (...,545,564,587, и т.д). при делении соответственно интервал меньше.
может с этим ФБ надо использовать counter 16 bit?
смотрю не понимаю как работает это ФБ. может кто подскажет? или надо вообще что то другое использовать?
Имеется контроллер ПЛК100 и модуль с аналоговыми выходами МУ110-6У. Связь с модулем идет(моргает светодиод RS-485)
Пытаюсь вывести на первый аналоговый выход 10В, но неполучается, что не так?
Вложение 17697
Доброго времени суток! Есть такое задание для освоения среды codesys:
При нажатии на кнопку пуск, звучит предупредительная
сигнализация и запускается основной вентилятор теплого воздуха 1. После
запуска основного вентилятора, включается топливный вентилятор 2 для
продувки (10 с). Затем включается топливный соленоидный клапан 3 и
топливная смесь закачивается в камеру сгорания (5 с). Срабатывает
запальная свеча 4 (4 с). Реле пламени 5 контроллирует наличие пламени.
Если пламя не появилось в течечние 5 с., процесс розжига выполняется еще
раз (с продувки воздухом 15с.). При повторном незапуске агрегата
включается продувка 1мин. и аварийная сигнализация. При нормальном
запуске агрегата, система должна контролировать температуру воздуха на
выходе термопреобразователем 6 и изменять скорость вращения топливного
вентилятора 2. При остановке агрегата, продувка должна осуществляться до
тех пор, пока температура не упадет ниже Тmin.
Я начинающий разработчик. ПЛК 100КМ. Пытаюсь сделать в CFC, но простыми функциональными блоками ну уж слишком сложно получается. Может есть ухищрения или готовые блоки в библиотеках?! Опытные люди, подскажите!
Сначала нужно в обязательном порядке "Срабатывает запальная свеча 4 (4 с)", затем "включается топливный соленоидный клапан 3 и топливная смесь закачивается в камеру сгорания (5 с)" + "Реле пламени 5 контроллирует наличие пламени.
Если пламя не появилось в течечние 5 с., процесс розжига выполняется еще раз (с продувки воздухом 15с.)".
А если сделаете в той последовательности как у Вас, то с Вашим агрегатом будет это
:
Блок управления розжигом и сигнализацией, такой?Вложение 17728
Здравствуйте! Подскажите пожалуйста: имеется контроллер PLC110 и панель СП270. В контроллере располагается массив из переменных времени (DATA_AND_TIME). Каким образом я могу отобразить данные переменные на панели? Спасибо!
Дело в том, что моя цель: научиться работать в codesys. По этому я нашел пару заданий в интернете для выполнения в codesys и пытаюсь собственными силами их выполнить. Пока что это язык CFC. Подскажите какими блоками лучше воспользоваться или хотя-бы внятную последовательность действий. P.S.: ПЛК можно любой фирмы ОВЕН, просто под рукой стэнд с ПЛК 100км. Спасибо.
Как сделать задержку включения и выключения реле, значение которой нужно отображать и изменять в HMI Вложение 17732
Добрый день.
В установленной Codesys 3.5 почему-то отсутствуют некоторые элементы визуализации - а именно лампочки,
вместо них индикатор со стрелкой. Библиотеки ставил из образа диска, который идет в комплекте к СПК.
И попутно еще вопрос - как переключаться между визуализациями на СПК средствами CFC?
Здравствуйте. Нужна помощь по алгоритму работы.
Есть три входные переменные: p1,p2,U и одна выходная r1.
p1 и p2 - биты управления контакторами k1 и k2 соответственно. U - величина напряжения. r1 - дискретный выход управления контактором к2.
При подаче команды p1 на включение контактора k1 переменная "U" возрастает до установленной величины (800В).
Необходимо организовать работу контактора k2.
Условие работы:
При включенном контакторе k1 и/или наличия напряжения U(800В) ( контактор k2 НЕ должен быть включен (r1=FALSE).
НО при включенном k2 ( бит управления p2) можно замыкать k1 (бит управления p1) ( r1=TRUE).
Основная программа написана на языке CFC.
Программа большая, с множеством подпрограмм. А вот этот кусочек не могу осилить.
При включении k1 напряжение возрастает до 800 В в течении 15 секунд.
Скрин части программы
Вложение 17836
тогда не выполнится условие
НО при включенном k2 ( бит управления p2) можно замыкать k1 (бит управления p1) ( r1=TRUE).
Если добавить инверсный вход к1 ко второму AND, то при включенном p2 и включении р1 r1=FALSE, а нужно чтобы было TRUE