Шаг 7 — Как вызывать циклические прерывания

#logic #plc

#Логические #плк

Вопрос:

Я хотел бы вызвать циклическое прерывание из OB1, и я хотел бы сгенерировать продолжительность этого прерывания. Я знаю, что могу поместить какой-то счетчик / таймер в FB и каким-то образом сгенерировать значение этого таймера. Однако я не знаю, как выполнить это в цикле, поэтому мне не нужно нажимать кнопки или переключатели.

Спасибо.

РЕДАКТИРОВАТЬ: я считаю себя новичком в ПЛК. 🙂

Сначала я не собираюсь работать с реальной SIMATIC station, поэтому я буду использовать PLCSIM для тестирования своего приложения (программы). Под циклическим прерыванием я подразумеваю что-то вроде OB30 — OB38.

Это должно работать следующим образом:

  1. Я установлю для своих входных данных значение «Логический 1», которое инициализирует цикл. (Я не уверен, что это необходимо)

  2. Теперь в цикле будет выполняться очень простая программа (настройка / сброс катушки) — это всего лишь пример, и не имеет значения, что программа будет делать прямо сейчас.

  3. Где-то во время выполнения произойдет прерывание. Я думаю, что это может быть функция, в которой я настрою таймер со случайно сгенерированным значением длительности.

  4. После / во время выполнения функции (начиная с «3.») мне нужно сохранить сгенерированное значение в БД.

  5. Теперь «2.» до «4.» должно выполняться в «бесконечном» цикле, пока я не установлю входные данные из «1.» в логический 0.

Комментарии:

1. У вашего вопроса недостаточно контекста, чтобы другие могли на него ответить. Вам нужно объяснить, какой ПЛК вы используете, что такое «циклическое прерывание» (я считаю себя экспертом по ПЛК, но понятия не имею, что это такое) или почему вы этого хотите.

2. @IraBaxter Спасибо за комментарий. Пожалуйста, взгляните на мою правку.

Ответ №1:

Прерывания не могут быть вызваны из OB1. Доступны только циклические прерывания, сбои и аппаратные прерывания. Используйте FC или FB, которые вызываются, когда таймер готов, установив значение enable input для этого вызова функции / блока high. Это не будет вызываться напрямую как прерывание, но достаточно быстро.

Я думаю, вы путаете ПЛК с микроконтроллером. Зачем вам нужен код, выполняемый напрямую, когда есть высокий уровень ввода? Это требование безопасности или что-то с движением?

Комментарии:

1. Поскольку я новичок в Step7 и PLC, я действительно не знаю, что вы подразумеваете под «высотой ввода» :). Как я упоминал выше, я хотел бы сгенерировать продолжительность этого таймера. Я собираюсь изучить, как справляться со случайными событиями в сложной системе. Однако сначала мне нужно изучить основы 🙂

2. Высокий уровень ввода, моя ошибка. Просто вы делаете маркер или вводите значение 1.

3. Высокий уровень ввода, моя ошибка. Просто вы делаете маркер или вводите значение 1. Если вы хотите измерить прерывание, вы можете запустить таймер в прерывании и завершить в последней сети. Не рекомендуется выполнять в прерывании больше задач, чем необходимо. В принципе, вам не нужна эта информация в запущенной среде. Итак, мне все еще любопытно, зачем вам нужно знать время выполнения прерывания? Я думаю, что реальная проблема имеет другой ответ.

Ответ №2:

Я попал сюда в поисках чего-то подобного. Поскольку я не мог найти то, что мне было нужно, я просто рискнул и попробовал это на работающем заводе. Хорошо, что ничего не взорвалось, так что все в порядке.

Теперь простой ответ:

  • Циклические прерывания настраиваются в конфигурации оборудования S7.

  • Я использовал OB35 для своих целей, которые заключались в создании времени разрешения 1 мс.(Разрешение таймера CPU 315 составляет всего 10 мс)

  • В конфигурации оборудования дважды щелкните процессор, затем циклические прерывания и установите время выполнения равным 1 (1 миллисекунда, это мой случай, ваш может быть другим).

  • Затем я создал базовый элементарный таймер, именно то, что мне было нужно, и ничего лишнего, поскольку я видел на портале Siemens, что в течение этого времени может произойти остановка процессора, если слишком много кода на OB35.

  • Наконец, первая ступенька на OB35 — это команда «добавить» 1 к временной переменной, вторая — для сброса при достижении заданного количества мс.

  • Если вам нужно добавить условие выполнения, просто установите бит enable на первой ступени, и вы остановите подсчет.

Имейте в виду, что OB35 не нужно «вызывать», процессор вызовет его для вас через выбранный интервал (установленный в конфигурации оборудования)

с уважением

Ответ №3:

Насколько я знаю, циклические прерывания вызываются самим ПЛК с заранее определенным интервалом (или с помощью аппаратного прерывания). Это не то, что вы можете вызвать, используя таймер в вашей программе (как я понял ваш вопрос).

Если я правильно понял, вы хотите запускать цикл непрерывно и время от времени прерывать цикл, чтобы сгенерировать некоторые данные, а затем сохранить эти данные до завершения цикла.

В таком случае могу я предложить вам включить генерацию данных и сохранение кода в ваш цикл? Вы можете использовать тот же триггер, который вы планировали и в этом случае. Вы просто используете его, чтобы перейти к коду, который выполняет бит генерации / хранения данных, когда он не активен.

Здесь вы потеряете максимум пару МС по сравнению с выполнением реального прерывания, если это каким-то образом неприемлемо, возможно, вам следует рассмотреть другой тип устройства вместо PLC.