Zik, попробуйте оператор CASE
сделайте их столько, сколько Вам нужно
В каждом из них сделайте нужный Вам таймер
Может быть я и неправильно написал, но сложно понять Ваш текст, если Вы не описываете её как внешнюю задачу.
В ПЛК крайне не желательно использовать Wile&For эти операторы я в ПЛК использую, когда мне нужны манипуляции с массивами и структурами. ПЛК и Windows очень отличаются, в ПЛК Вы с легкостью подвесите процессор.
В общем - действуйте еще аккуратнее)
+79104444236
С уважением,
Лапшин Вячеслав
Спасибо за советы, попробую завтра с CASE. Непривычно довольно отказываться от циклов со счетчиком, не знал, что они так плохо воспринимаются средой.
Дело не в том что они средой не так воспринимаются, а в том что время общего цикла в ПЛК условно фиксировано и если вы в него не уложились то получили собаку. Поэтому вам надо поверх того цикла организовать свой при помощи оператора CASE. В нем в первом шаге что-то делаете (действие одно-го из ваших 100 циклов, взводите таймер и переходите во втррой шаг CASE. Во втором шаге просто проверяем таймер и если он отсчитал положенное возвращаемся в первый шаг CASE.
Попробовал вставить цикл только лишь для чередования между двумя case-блоками, в одном из которых таймер, а в другом по подверждению от таймера переход обратно к первому шагу. Происходит та же ошибка, что и без использования блоков -срабатывание сторожевого таймера. Возможно ли как-то реализовать их чередование без использования циклов? Ведь после проверки значения переменной условия case, повторная проверка возможна только при повторении всего кода, выходит. Схематично программу выложил здесь. https://ideone.com/hC38bK
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Case нужен, так как по логике таймер не должен заканчивать отсчет позже,чем завершается программа. Только в итоге для плк ничего не изменилось. А while тут только для чередования блоков, без цикла выполняется только один из них, как перейти после выполнения второго к первому шагу case, например?
Опишите пожалуйста задачу.
Мне кажется Вы совершаете классическую ошибку программиста верхнего уровня и не учитываете особенности работы ПЛК. В частности того, что ПЛК в принципе работает в цикле сам по себе. Цикл уже организован в ПЛК
Любой другой цикл существует только для проверки условия ну или для зацикливания ПЛК, что приводит к перезагрузке.
Вот я и говорю, что с точки зрения ПЛК ничего не изменилось, как был цикл WHILE так он и остался.
В ПЛК вся программа выполняется циклически без участия программиста, время цикла задается в настройках(в конфигурации). Вы не можете ее "притормозить" - сработает сторожевой таймер.
По этому вместо WHILE используйте IF с тем же условием.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
В общем-то, задача - цикл испытаний, который должен повториться сто раз. В нем мотор крутится три секунды в одну сторону, три секунды ждет, потом три секунды крутится в другую. Пишу для PLC 100 R-M. Понимаю, как это реализовать несколькими способами, но натыкаюсь на сопротивление как раз таки архитектуры ПЛК. Когда я запускаю программу без цикла в режиме эмуляции CodeSYS - она выполняется один раз с начала и до конца. Отсчитывает один раз таймер, присваивает конечные значения локальным переменным, и останавливается, не мигают выходы, не присваиваются начальные значения для нового цикла. То же самое при подключении ПЛК, т.е. уже не в режиме эмуляции, код проходит один раз. Поэтому для наглядности, которая нужна работодателю, листинг должен быть зацикленным. Будет ли программа с блоками case идти на второй круг после выполнения, если не добавлять в нее циклы вручную, и главное, как это проверить? И именно на сотом ПЛК. Я в полном смятении.