надо будет на железе проверить, а то может опять прелести эмулятора....
надо будет на железе проверить, а то может опять прелести эмулятора....
Вот в эмуляторе с ретайном точно проблема.
А так: FB - структура. Объявили ее в ретайне. Вся структура там.
PS
Про SHL подтверждаю Егора - на железе как положено (110-60L)
В эмуляторе бывают и другие отличия. Опять же - к немцам.
Помогите кто нибудь с кодом. Хотя бы подскажите куда думать.
Мне надо чтобы таймер работал внутри цикла. Что-то типа такогоЯ знаю что этот код кривой, но ровный никак не могу придумать. Поставленную задачу сделал через инструкцию CASE, в общем-то всё работает. Но когда я на код смотрю плакать хочется, 12 раз повторяется одно и то-же. Вижу что напрашивается Цикл использовать но в цикле таймер и я никак не могу добиться чтобы таймер ждал итерацию. Может это и не возможно но тогда прошу это подтвердить. В таком случае придется смириться.Код:FOR i:=1 TO 12 DO t:=T#7s; TP1(IN:=TRUE,PT:=t,Q=>Prst1); IF TP1.Q=0 THEN TP1(IN:=FALSE,PT:=T#0s); END_IF END_IF END_IF END_FOR
Спасибо вам.
Мне надо чтобы прошла интерация цикла 1, потом отработал таймер, потом следующая интерация цикла 2, снова отработал таймер, потом 3 и так далее пока цикл не закончится.
А у меня таймер включился а цикл не обращая внимания но то что таймер еще не остановился побежал дальше. Я хочу понять как можно заставить цикл ожидать таймер который находится внутри цикла.
Тогда в течении 12*7=84с будет выполняться только этот код. Поэтому или все остальное подвиснет или отработает ограничение по времени программного цикла.
Поэтому в вашем случае цикл while. А правильно - полное переписывание программного кода.
Цикл FOR будет выполняться весь в текущем цикле программы и не подходит для данной задачи.
Решение очевидно. Нужно разложить FOR на составляющие
Есть некая переменная цикла i, которая в каждом цикле увеличивается на величину шага, и есть проверка условия достижения переменной i конечного значения.
Например так
Код:PROGRAM PLC_PRG VAR TP1: TP:=(PT:=T#7s); i: INT; Prst1: BOOL; END_VAR IF i<12 THEN TP1(IN:=NOT TP1.Q, Q=>Prst1); IF NOT TP1.Q THEN i:=i+1; END_IF END_IF
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Это понятно что 84 секунды должен выполняться код, но только именно это у меня и не получается написать таймер внутри цикла И код я уже полностью переписал но только он страшный, 12 раз инструкцией CASE выполняется одно и то-же. Хочется сделать его компактным. А почему цикл while надо использовать, ведь заранее известно что в цикле всегда 12 интераций?
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg