добрый день,
судя по описанию в справке RISING_EDGE можно использовать только на ФБД и ЛД. А если на СТ пишу, то как им воспользоваться? Или только циклическая запись остается мне?
добрый день,
судя по описанию в справке RISING_EDGE можно использовать только на ФБД и ЛД. А если на СТ пишу, то как им воспользоваться? Или только циклическая запись остается мне?
Пост для экстрасенсов? Ладно, побуду экстрасенсом.
Когда вы ставите канал в режим работы по фронту (он же RISING™ EDGE®), то у вас в таблице привязки появляется битовая запись, к которой вы можете привязать булевую переменную. В дальнейшем на каком угодно языке в нужные вам моменты вы переводите эту переменную из FALSE в TRUE, чем и образуете передний фронт.
Кратовато написал я, конечно, но вы поняли правильно что я имел в виду. Попробовал, вроде работает, но не понял на какое время минамально необходимо держать в состоянии ТРУ триггерную переменную? пробовал сбрасывать на следующем цикле, не хватает ей времени, видимо. Если ставлю ТРУ и не снимаю, то срабатывает.
Последний раз редактировалось Goga2000; 11.11.2014 в 20:19.
Да.Кратовато
А зачем именно вам этот режим работы? У меня вот он используется всего для трёх регистров, через которые панель передаёт команды оператора на другой ПЛК, и я спокойно могу ставить хоть целую секунду — быстрее оператор всё равно не работает. Пробовал снижать значение до 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
Последний раз редактировалось Lode Runner; 12.11.2014 в 07:43.
b := true; - это действие, которое выполняется по триггеру.
Тут всё предельно просто, прочитайте повнимательнее.
Lode Runner не слишком громоздко для ловли переднего фронта?
Код:VAR uno,duo : BOOL; END_VAR IF uno AND NOT duo THEN ;(*любые действия выполняющиеся однократно по переднему фронту переменной uno*) END_IF; duo:=uno;
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран