В ПР200 при переходе на экран с помощью кнопок никак не определить на какой вы перешли экран
Вид для печати
Хотелось бы услышать, что Вы согласны сделать переходы по изменению(редактированию) переменной с экрана!
Все преведущие товарищи говорили, что это менее удобно и отказывались!
Здесь не надо быть большим специалистом, чтобы понимать что это менее удобно, но это решает проблему!
Короче, при редактировании переменной с экрана формируется импульс перехода на соответствующий экран, всё. Я делал продолжительность импульса перехода = 255 мс, говорят(я не проверял) от продолжительности в один цикл не всегда срабатывает.
Вложение 88557
Вложение 88558
Ох тж, а я то думал!!! :) Вот в чем секрет! Эдак и я так могу :)
Ладно забейте, нет так нет, это просто был вопрос, можно или нет, оказывается нет, сделаю так как вы очень давно предлагали, хотя я это сделал еще до того как задал этот вопрос и это слишком просто и не по феншую...
В любом случае всем спасибо! :)
добрый день, как сделать в схеме в OWEN LOGIC, чтобы при нажатии на лкм i1 сигнал был 1, при отжатии лкм I1 уходил в ноль, то есть кнопка без фиксации
А "лкм" = это левая кнопка мыши?
Добрый день, подскажите пожалуйста, Овен ПЛК 110-60, в codesys написана программа, в конфигураторе ПЛК добавил Modbus slave (TCP) и добавил 8bit в кол-ве 4 штук, то есть на регистр 0х00 2 и на 0х01 2, проблема в том, что в Овен OPC при опросе контроллера не видит изменение переменных после 15бита, с 0х01 регистра, состояние подключения пишет GOOD.
Если через Codesys подключаться, то в конфигураторе и в программе все переключается, переменные все глобальные, на самом плк индикаторы тоже переключаются
Да, на 1-15 бит адрес 0, для 16-31 адрес 1, пробовал добавлять еще 2 по 8bit, чтобы проверить 2 адрес, но результат не меняется.
Думал возможно проблема в настройке OPC, но и там вроде все нормально
Если у вас Holding регистры, то регистр 0 биты с 0 по 15, Вложение 88565
регистр 1 тоже биты с 0 по 15.
На скрине сделал по 10 бит в 0 и 1 регистре
А вот опрос для Coils, только адреса уже 0-15 и 16-31. Вложение 88566
На скрине сделал тоже по 10 бит
Добрый день.
Помогите сообразить!
Пишу свой код типа счетчика моточасов. Готовые решения не устраивают, поэтому не плюйтесь.
А вопрос в следующем. Необходимо сохранять счетчик при потере питания и соответственно восстанавливать данные после подачи питания. Для этого я, вне функционального блока создал энергонезависимую переменную. Вход куда я ее записываю, и выход который изменяет эту переменную. Но при старте программа не успевает перебросит данные с входа на выход и переменная обнуляется. Точнее если написать в начале кода (первой строкой Vaur OUT := Var IN) То она успевает перезаписать и все вроде нормально. Но если поместить ее строкой ниже или не дай бог засунуть в условие типа IF. то она конечно не успевает пере записаться и обнуляется.
Возможно я изобретаю велосипед, подскажите как реализовать правильно эту функцию.
И от сюда вытекает второй вопрос. В программе мне необходимо использовать 2 блока. 1 это инициализация (выполняется один раз при старте) и 2 в цикле. Я использовал оператор IF c защелкой. (решение мне самому не нравится). Сейчас играюсь с функциями WHILE и REPEAT UNTIL. мне кажется они более правильные.
Есть ли какие-то более гибкие и правильные реализации этих двух вопросов?
Але-ндр Варианты, как понял тебя я (я делал такой блок на FBD, и он отлично работает):
1. Да! В коде ST положение строк ВАЖНО. Потому что они выполняются сверху вниз.
И если тебе надо сначала получить данные из VAR_IN_OUT, а потом выдать - то строки поулчения должны быть выше.
2. Если писать счётчик часов на FBD, то можно объявить энергонезависимую переменную прям внутри макроса (я так и сделал).
3. WHILE - это цикл. Я не уверен, что он нужен в этом блоке.
Вложение 88613 Вложение 88614
ДА.
Как это не парадоксально. но вся программа у меня также написана на FBD и уже давно работает (больше 2 лет).
А тут решил ( как говорится) ради самоистязания (в свободное время) изучить ST, и переписать уже работающую программу. (на самом деле готовлю обновление).
По этому все вопросы исключительно по ST.
Самая большая проблема что я не смог найти данных о времени выполнения тех или иных функций (тайминги реального процессора) хотя в принципе они не критичны. Опытным путем определил что Vaur OUT := Var IN корректно работает в первых трех строках.
И до сих пор не разобрался в приоритетах выполнения (последовательности функциональных блоков).
Почему разбиваю выполнение на 2 блока? На самом деле это мая (в некотором смысле ) прихоть не хочу нагружать цикл тупым переписываниями 14 переменных одними и теми же данными, обычно они прописываются при инициализации. К сожалению при определении переменных им можно задавать только константы. На сколько я помню (могу ошибаться, не хочу лезть в справочник) на запись уходит 3 такта процессор (3х14=42) а на функцию IF около 10.
Ситуация с "первыми тремя строчками" конечно странная - как я понимаю, при обработке ФБ его программа на ST обрабатывается полностью, прежде чем произойдёт запись в переменные, присоединённые к его выходам или начнётся обработка следующего ФБ. И поэтому все эти такты/тайминги влияют только на общее значение текущего времени обработки холста (времени цикла).
Выбор порядка выполнения блоков остаётся за компилятором, и можно повлиять на него лишь используя линии задержки. Наверное можно считать, что ФБ связанные непосредственной линией связи - будут обработаны последовательно,. Я бы хотел, чтобы на блоках отображался порядок их выполнения (хотя бы по вызову, как например в CDS3.5)
Не очень понятно, но, условно у вас есть счетчик А := А + time. Чтобы он был энергонезависмый, пишем Out := In + time, (In, Out - одна и та же энергонезависимая переменная на входе и на выходе).
По инициализации:
Код:if init then
основное тело
else
что надо сделать в момент первого запуска
end_if
init := true;
Але-ндр 1. Ой ой! Ты путаешь ПРку и микроконтроллеры. Тут НЕ надо считать такты и время цикла.
Потому что время цикла ПРки зависит от нагруженности её программы.
2. Внутри FUN/FB ST-код выполняется по строкам так, как написан.
3. Зря ты морочишься. Можно же часть программы писать на ST, а часть на FBD.
4. Про "Vaur OUT := Var IN корректно работает в первых трех строках" - показал бы весь код FBшки-то? Интересно, что же там такого ты накрутил!
Даже если не устраивают готовые решения, посмотреть как сделана инициализация и как сохранять данные можно было.
Пример Опер таймера (наработка) на ST и ФБ времени https://owen.ru/forum/showthread.php...l=1#post443096
И вы конечно изобретаете велосипед, IF наше всё, а с WHILE очень аккуратно.