Alex_st_Tomsk писал(а):
Могу предложить такой вариант. Чтобы алгоритм казался бесконечным, я перед иконой "Конец" добавил вставку этого же алгоритма, создав так называемую рекурсию.
Вложение:
20230627102953.png
У Франца Лещенко схема не совсем верная, потому что условия с назначением таймера проверяются с помощью "синхронизации", но не отдельной развилки. На самом деле вопрос сложный, потому что исходных данных мало. Я, например, не могу понять следующее:
- в каком случае таймер не достигнет уставки?
- почему на схеме флаг #motor.beep появляется
после установки таймера, а в вашем текстовом описании
до?
- появляются ли флаги #q_kv, #motor.beep, #motor.swan ранее в схеме и можно ли их использовать как глобальные переменные и формальные параметры в дракон-схеме?
Конечно, во многом вопросы связаны с моей неосведомлённостью в ПЛК. Я читал о них поверхностно и то год назад.
Ещё насчёт иконы "Таймер" хотел написать, что в книге "Учись писать читать и понимать алгоритмы" она вопреки названию является не таймером, а секундомером. Поэтому я был удивлён, когда увидел в обеих схемах увидел установку таймера на 10 секунд сразу. Хотя всё зависит от контекста. Ранее дракон-схемы с таймерами не предполагали, что в процессе уставка может быть не достигнута - раньше это был обязательно достигаемый маяк. Ваш случай интересный.
Здравствуйте!
- Таймер не достигнет уставки если флаг run будет сброшен во время отсчёта. Это лишь фрагмент подпрограммы, ни весь код. Он приведён лишь для выяснения вопроса, как это нарисовать на Драконе.
- На какой схеме? На той что я нарисовал (Дракон-схема), beep устанавливается при значении таймера < 10 с (т.е. до установки таймера). Хотя, стоит заметить, что в программе бит beep устанавливается по совокупному условию run=true AND swon=false, и таймер тут участвует косвенно. Эту схему следует переделать.
- Это подпрограмма, переменная #motor является структурой с набором флагов. Сама она является входным (inout) параметром. В общем, этот фрагмент - просто набросок чтобы понять как нарисовать схему именно для такого фрагмента. Сам по себе он не полный и требует уточнения. О глобальной схеме я пока не думаю. Прошу простить за такую неточность.
- Может быть, если дискуссия доведет до такого, то появится и полный код этой подпрограммы. Насчёт того, что уставка может быть не достигнута - это легко, просто разорвите логическую цепь на входе таймера, и он остановится. В данном случае, таймер зависит от флага run, который может быть сброшен, например, кнопкой СТОП (её здесь нет для краткости). Ведь это двигатель, и ничто не мешает пользователю передумать и нажать СТОП ещё на стадии предпускового сигнала.
- Рекурсия здесь не требуется, это просто двигатель.