добрый день,
судя по описанию в справке RISING_EDGE можно использовать только на ФБД и ЛД. А если на СТ пишу, то как им воспользоваться? Или только циклическая запись остается мне?
Вид для печати
добрый день,
судя по описанию в справке RISING_EDGE можно использовать только на ФБД и ЛД. А если на СТ пишу, то как им воспользоваться? Или только циклическая запись остается мне?
Пост для экстрасенсов? Ладно, побуду экстрасенсом.
Когда вы ставите канал в режим работы по фронту (он же RISING™ EDGE®), то у вас в таблице привязки появляется битовая запись, к которой вы можете привязать булевую переменную. В дальнейшем на каком угодно языке в нужные вам моменты вы переводите эту переменную из FALSE в TRUE, чем и образуете передний фронт.
Кратовато написал я, конечно, но вы поняли правильно что я имел в виду. Попробовал, вроде работает, но не понял на какое время минамально необходимо держать в состоянии ТРУ триггерную переменную? пробовал сбрасывать на следующем цикле, не хватает ей времени, видимо. Если ставлю ТРУ и не снимаю, то срабатывает.
Да.Цитата:
Кратовато
А зачем именно вам этот режим работы? У меня вот он используется всего для трёх регистров, через которые панель передаёт команды оператора на другой ПЛК, и я спокойно могу ставить хоть целую секунду — быстрее оператор всё равно не работает. Пробовал снижать значение до 50 мс — работало.
Хочу использовать его для релейного модуля му110-16Р, писать туда в цикле нет никакого желания - всю полосу забивают несколько релейных модулей, т.к. из-за наличия ПЧВ пришлось снизить частоту до 38200 кбод. Смысла писать постоянно одно и то же значение в течении нескольких часов нет никакого.
Ну значит у вас обработка выхода триггера происходит раньше, чем вызов этого триггера, поэтому выход обрабатывается в следующем цикле ПЛК, когда он уже FALSE.
Я ради теста в пустом проекте сейчас сделал вот так - работает так, как надо, как ожидалось.
Либо обнуляеете вход до вызова триггера.Код:PROGRAM PLC_PRG
VAR
re: R_TRIG;
a, b: BOOL;
END_VAR
a; (*это чтобы онлайн присвоить ей правду*)
re (clk := a);
IF a THEN
a := FALSE;
END_IF;
IF re.q THEN
b := TRUE;
END_IF;
END_PROGRAM
b := true; - это действие, которое выполняется по триггеру.
Тут всё предельно просто, прочитайте повнимательнее.
Lode Runner не слишком громоздко для ловли переднего фронта?
Код:VAR
uno,duo : BOOL;
END_VAR
IF uno AND NOT duo THEN
;(*любые действия выполняющиеся однократно по переднему фронту переменной uno*)
END_IF;
duo:=uno;