Страница 479 из 1044 ПерваяПервая ... 379429469477478479480481489529579979 ... ПоследняяПоследняя
Показано с 4,781 по 4,790 из 10436

Тема: ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)

  1. #4781

    По умолчанию

    Цитата Сообщение от Zik Посмотреть сообщение
    while i<100
    Циклы while и for используются _только_ для того, чтобы перебрать N опрашиваемых устройств/кранов/лампочек/кнопок и т.п.
    Во всех остальных случаях (== в 99.99% программ) циклов while/for быть вообще не должно.

  2. #4782

    По умолчанию

    Zik, попробуйте оператор CASE
    сделайте их столько, сколько Вам нужно
    В каждом из них сделайте нужный Вам таймер

    Может быть я и неправильно написал, но сложно понять Ваш текст, если Вы не описываете её как внешнюю задачу.
    В ПЛК крайне не желательно использовать Wile&For эти операторы я в ПЛК использую, когда мне нужны манипуляции с массивами и структурами. ПЛК и Windows очень отличаются, в ПЛК Вы с легкостью подвесите процессор.
    В общем - действуйте еще аккуратнее)
    +79104444236
    С уважением,
    Лапшин Вячеслав

  3. #4783

    По умолчанию

    Спасибо за советы, попробую завтра с CASE. Непривычно довольно отказываться от циклов со счетчиком, не знал, что они так плохо воспринимаются средой.

  4. #4784

    По умолчанию

    Дело не в том что они средой не так воспринимаются, а в том что время общего цикла в ПЛК условно фиксировано и если вы в него не уложились то получили собаку. Поэтому вам надо поверх того цикла организовать свой при помощи оператора CASE. В нем в первом шаге что-то делаете (действие одно-го из ваших 100 циклов, взводите таймер и переходите во втррой шаг CASE. Во втором шаге просто проверяем таймер и если он отсчитал положенное возвращаемся в первый шаг CASE.

  5. #4785

    По умолчанию

    Попробовал вставить цикл только лишь для чередования между двумя case-блоками, в одном из которых таймер, а в другом по подверждению от таймера переход обратно к первому шагу. Происходит та же ошибка, что и без использования блоков -срабатывание сторожевого таймера. Возможно ли как-то реализовать их чередование без использования циклов? Ведь после проверки значения переменной условия case, повторная проверка возможна только при повторении всего кода, выходит. Схематично программу выложил здесь. https://ideone.com/hC38bK

  6. #4786
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,841

    По умолчанию

    Цитата Сообщение от Zik Посмотреть сообщение
    Попробовал вставить цикл только лишь для чередования между двумя case-блоками, в одном из которых таймер, а в другом по подверждению от таймера переход обратно к первому шагу. Происходит та же ошибка, что и без использования блоков -срабатывание сторожевого таймера. Возможно ли как-то реализовать их чередование без использования циклов? Ведь после проверки значения переменной условия case, повторная проверка возможна только при повторении всего кода, выходит. Схематично программу выложил здесь. https://ideone.com/hC38bK
    А что изменилось?
    Вы в цикл WHILE еще и CASE засунули
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  7. #4787

    По умолчанию

    Case нужен, так как по логике таймер не должен заканчивать отсчет позже,чем завершается программа. Только в итоге для плк ничего не изменилось. А while тут только для чередования блоков, без цикла выполняется только один из них, как перейти после выполнения второго к первому шагу case, например?

  8. #4788

    По умолчанию

    Цитата Сообщение от Zik Посмотреть сообщение
    Case нужен, так как по логике таймер не должен заканчивать отсчет позже,чем завершается программа. Только в итоге для плк ничего не изменилось. А while тут только для чередования блоков, без цикла выполняется только один из них, как перейти после выполнения второго к первому шагу case, например?
    Опишите пожалуйста задачу.
    Мне кажется Вы совершаете классическую ошибку программиста верхнего уровня и не учитываете особенности работы ПЛК. В частности того, что ПЛК в принципе работает в цикле сам по себе. Цикл уже организован в ПЛК
    Любой другой цикл существует только для проверки условия ну или для зацикливания ПЛК, что приводит к перезагрузке.

  9. #4789
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,841

    По умолчанию

    Вот я и говорю, что с точки зрения ПЛК ничего не изменилось, как был цикл WHILE так он и остался.
    В ПЛК вся программа выполняется циклически без участия программиста, время цикла задается в настройках(в конфигурации). Вы не можете ее "притормозить" - сработает сторожевой таймер.
    По этому вместо WHILE используйте IF с тем же условием.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  10. #4790

    По умолчанию

    Цитата Сообщение от Николаев Андрей Посмотреть сообщение
    Опишите пожалуйста задачу.
    Мне кажется Вы совершаете классическую ошибку программиста верхнего уровня и не учитываете особенности работы ПЛК. В частности того, что ПЛК в принципе работает в цикле сам по себе. Цикл уже организован в ПЛК
    В общем-то, задача - цикл испытаний, который должен повториться сто раз. В нем мотор крутится три секунды в одну сторону, три секунды ждет, потом три секунды крутится в другую. Пишу для PLC 100 R-M. Понимаю, как это реализовать несколькими способами, но натыкаюсь на сопротивление как раз таки архитектуры ПЛК. Когда я запускаю программу без цикла в режиме эмуляции CodeSYS - она выполняется один раз с начала и до конца. Отсчитывает один раз таймер, присваивает конечные значения локальным переменным, и останавливается, не мигают выходы, не присваиваются начальные значения для нового цикла. То же самое при подключении ПЛК, т.е. уже не в режиме эмуляции, код проходит один раз. Поэтому для наглядности, которая нужна работодателю, листинг должен быть зацикленным. Будет ли программа с блоками case идти на второй круг после выполнения, если не добавлять в нее циклы вручную, и главное, как это проверить? И именно на сотом ПЛК. Я в полном смятении.

Страница 479 из 1044 ПерваяПервая ... 379429469477478479480481489529579979 ... ПоследняяПоследняя

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •