DRAKON.SU https://forum.drakon.su/ |
|
Как это сделать - блок-схема с таймером? https://forum.drakon.su/viewtopic.php?f=241&t=7283 |
Страница 1 из 2 |
Автор: | Франц Лещенко [ Понедельник, 26 Июнь, 2023 08:41 ] |
Заголовок сообщения: | Как это сделать - блок-схема с таймером? |
Доброе время суток всем! Есть такой вот фрагмент кода на языке LAD для ПЛК, как его изобразить в виде блок-схемы? Опыта работы с блок-схемами почти нет, но очень хотелось бы понять, как это изобразить с помощью языка ДРАКОН. В книгах есть описание блоков Синхронизатор, Таймер, но как применить их к данному случаю не могу понять. Вложение: ПЛК исполняет программу циклически. Как только появляется флаг #motor.run, начинает отсчёт таймер "Timer(1)" с уставкой 10 с. Пока таймер не достиг уставки, включается флаг #motor.beep. Когда таймер достигнет заданной уставки, флаг #motor.swon включится, а флаг #motor.beep отключится. Вместе с флагом #motor.swon включится флаг #q_kv. Флаг #motor.run не обязательно "доживёт" до момента достижения таймером уставки, он может быть сброшен в любой момент, например, кнопкой СТОП (здесь это не показано для краткости). В общем, интересно увидеть и понять, как это корректно изобразить на ДРАКОНе. |
Автор: | Владимир Паронджанов [ Понедельник, 26 Июнь, 2023 20:41 ] |
Заголовок сообщения: | Re: Как это сделать - блок-схема с таймером? |
Франц, спасибо за вопрос. В настоящее время язык ДРАКОН только учится работать с ПЛК. Такую работу проводят Алексей Муравицкий и Алексей Степанов в теме Новый дракон-редактор для ПЛК Я попробовал нарисовать для вас упрощенную схему, возможно, с ошибками. Двойная линия иконы Заголовок означает, что программа работает циклически, как и ПЛК. Франц Лещенко писал(а): интересно увидеть и понять, как это корректно изобразить на ДРАКОНе. Франц, корректной схемы на ДРАКОНе для ПЛК пока еще не существует. Ее надо придумать, детально обсудить со специалистами и только после этого утвердить.Предлагаемая схема — это ни в коем случае не образец, а всего лишь пример для обсуждения. Уважаемые коллеги! Прошу критиковать. Вложение:
|
Автор: | Франц Лещенко [ Понедельник, 26 Июнь, 2023 22:38 ] |
Заголовок сообщения: | Re: Как это сделать - блок-схема с таймером? |
Благодарю Вас, Владимир Данилович! Хочу заметить, что флаг #motor.swon должен обрабатываться как для промежутка времени "< 10 с", так и для "= 10 с". Видится это вот так, но выглядит как-то не очень. Вложение:
|
Автор: | Alex_st_Tomsk [ Вторник, 27 Июнь, 2023 06:44 ] |
Заголовок сообщения: | Re: Как это сделать - блок-схема с таймером? |
Могу предложить такой вариант. Чтобы алгоритм казался бесконечным, я перед иконой "Конец" добавил вставку этого же алгоритма, создав так называемую рекурсию. Вложение: У Франца Лещенко схема не совсем верная, потому что условия с назначением таймера проверяются с помощью "синхронизации", но не отдельной развилки. На самом деле вопрос сложный, потому что исходных данных мало. Я, например, не могу понять следующее: - в каком случае таймер не достигнет уставки? - почему на схеме флаг #motor.beep появляется после установки таймера, а в вашем текстовом описании до? - появляются ли флаги #q_kv, #motor.beep, #motor.swan ранее в схеме и можно ли их использовать как глобальные переменные и формальные параметры в дракон-схеме? Конечно, во многом вопросы связаны с моей неосведомлённостью в ПЛК. Я читал о них поверхностно и то год назад. Ещё насчёт иконы "Таймер" хотел написать, что в книге "Учись писать читать и понимать алгоритмы" она вопреки названию является не таймером, а секундомером. Поэтому я был удивлён, когда увидел в обеих схемах увидел установку таймера на 10 секунд сразу. Хотя всё зависит от контекста. Ранее дракон-схемы с таймерами не предполагали, что в процессе уставка может быть не достигнута - раньше это был обязательно достигаемый маяк. Ваш случай интересный. |
Автор: | LKom [ Вторник, 27 Июнь, 2023 09:08 ] |
Заголовок сообщения: | Re: Как это сделать - блок-схема с таймером? |
Alex_st_Tomsk писал(а): Могу предложить такой вариант. Чтобы алгоритм казался бесконечным, я перед иконой "Конец" добавил вставку этого же алгоритма, создав так называемую рекурсию. Так делать нельзя!Каждый рекурсивный вызов записывает адрес возврата в стек. Т.к. икона Конец никогда не выполняется и возврат не происходит, то стек переполнится и программа аварийно завершится. Надо удалить икону Конец и сделать безусловный переход на икону следующую за иконой Заголовок, т.е. пересадить лиану. В.Д. Паронджанов предусматривает удаление иконы Конец для образования бесконечно цикла. Смотри Книгу "Учись..." стр. 207 |
Автор: | Владимир Паронджанов [ Вторник, 27 Июнь, 2023 09:47 ] |
Заголовок сообщения: | Re: Как это сделать - блок-схема с таймером? |
Франц Лещенко писал(а): Видится это вот так, но выглядит как-то не очень. Явных ошибок я не вижу. Замечания 1. Можно предложить иное использование иконы Полка. Вверху пишем "Установить признак" или "Снять признак". Внизу пишем, например: "#motor.beep". (#motor.beep — это логическая переменная величина). Вложение: Можно писать сокращенно: Цитата: Уст признак 2. В иконе Заголовок нельзя писать untitled. Надо писать продуманное точное название алгоритма. |
Автор: | Владимир Паронджанов [ Вторник, 27 Июнь, 2023 10:40 ] |
Заголовок сообщения: | Re: Как это сделать - блок-схема с таймером? |
Владимир Паронджанов писал(а): Двойная линия иконы Заголовок означает, что программа работает циклически, как и ПЛК. Вложение: Икону Заголовок циклический я опубликовал в статье 1995 года Цитата: Паронджанов В. Д. Графический синтаксис языка ДРАКОН // Программирование 1995, №3. — С. 45-62. Оригинальная статья на русском языке не оцифрована и в сети Интернет отсутствует. Есть официальный перевод на английский язык Цитата: Parondzhanov V.D. Visual syntax of the DRAKON language // Programming and computer software. Official English translation of Programmirovanie. Volume 21. Number 3. May-June 1995. pp. 142–153. https://drakon.su/_media/video_i_prezen ... yntax_.pdf С тех пор (в течение почти 30 лет) я никогда не упоминал про эту икону. Но для ПЛК она, похоже, оказалась востребованной. |
Автор: | Франц Лещенко [ Вторник, 27 Июнь, 2023 13:29 ] |
Заголовок сообщения: | Re: Как это сделать - блок-схема с таймером? |
Доброе время суток всем! Прошу извинить меня, сейчас не могу ответить, нагрузка!!! |
Автор: | tonyk [ Вторник, 27 Июнь, 2023 13:35 ] |
Заголовок сообщения: | Re: Как это сделать - блок-схема с таймером? |
Так-то таймеры обрабатываются в отдельном обработчике прерываний, в котором обрабатываются таймеры. Это отдельный асинхронный процесс. Так делается для того, чтобы по окончании счёта и установке флага об окончании счёта можно было активировать прерывание. Так что одной картинкой тут не отделаться. |
Автор: | Франц Лещенко [ Вторник, 27 Июнь, 2023 19:43 ] |
Заголовок сообщения: | Re: Как это сделать - блок-схема с таймером? |
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, который может быть сброшен, например, кнопкой СТОП (её здесь нет для краткости). Ведь это двигатель, и ничто не мешает пользователю передумать и нажать СТОП ещё на стадии предпускового сигнала. - Рекурсия здесь не требуется, это просто двигатель. |
Автор: | Франц Лещенко [ Вторник, 27 Июнь, 2023 19:55 ] |
Заголовок сообщения: | Re: Как это сделать - блок-схема с таймером? |
tonyk писал(а): Так-то таймеры обрабатываются в отдельном обработчике прерываний, в котором обрабатываются таймеры. Это отдельный асинхронный процесс. Так делается для того, чтобы по окончании счёта и установке флага об окончании счёта можно было активировать прерывание. Так что одной картинкой тут не отделаться. Мой скромный опыт пока ограничен, в основном, работой с ПЛК Сименс (s7-300, -1200, -1500). Здесь таймеры (аппаратные и программные) вполне себе работают в обычной программе. Хотя непродвинутый пользователь (это о себе) может и не догадывается, как это реализовано на уровне ОС. Прерываниями для обработки таймеров обычно пользоваться не приходится, так как для простых задач эффект асинхронности не оказывает действия. Буду считать, что здесь таймер - это чёрный ящик, на вход подал уставку и разрешение, и опрашивай его состояние в каждом скане. Как-то так, просто не приходилось решать сложные задачи. |
Автор: | Франц Лещенко [ Вторник, 27 Июнь, 2023 20:13 ] |
Заголовок сообщения: | Re: Как это сделать - блок-схема с таймером? |
Владимир Паронджанов писал(а): Франц Лещенко писал(а): Видится это вот так, но выглядит как-то не очень. Явных ошибок я не вижу. Замечания 1. Можно предложить иное использование иконы Полка. Вверху пишем "Установить признак" или "Снять признак". Внизу пишем, например: "#motor.beep". (#motor.beep — это логическая переменная величина). Вложение: Вложение Рис. 67 Икона Полка .png больше недоступно Можно писать сокращенно: Цитата: Уст признак 2. В иконе Заголовок нельзя писать untitled. Надо писать продуманное точное название алгоритма. Спасибо за замечания, прошу меня простить за небрежность. Фокус внимания целиком был на таймере и что с ним, а периферия выпала из поля зрения. Про икону Полка я читал в Вашей книге. И на сайте drakonhub есть описание, и мне глянулась как раз нотация на drakonhub. Ещё раз посмотрел на программу, на схему, надо переделать. Вот такой вариант получился. Он, как мне кажется, точнее. Вложение: В программе Степана Митькина отсутствует икона Заголовок циклический, можно пока без этой иконы. Хотелось бы подробнее узнать о Заголовок циклический. Эта икона относится к основной программе ПЛК (суперциклу)? Поскольку в данном случае мы рассматриваем подпрограмму. Она конечно вызывается из основной, поэтому, цикличность обеспечивается основной программой. |
Автор: | tonyk [ Среда, 28 Июнь, 2023 07:25 ] |
Заголовок сообщения: | Re: Как это сделать - блок-схема с таймером? |
Франц Лещенко писал(а): Он, как мне кажется, точнее. А как, глядя на диаграмму, понять, что есть какой-то механизм, обеспечивающий работу таймера? И какой алгоритм работы этого таймера? |
Автор: | Франц Лещенко [ Среда, 28 Июнь, 2023 08:09 ] |
Заголовок сообщения: | Re: Как это сделать - блок-схема с таймером? |
tonyk писал(а): Франц Лещенко писал(а): Он, как мне кажется, точнее. А как, глядя на диаграмму, понять, что есть какой-то механизм, обеспечивающий работу таймера? И какой алгоритм работы этого таймера? В данном случае это аппаратный таймер, его работа обеспечивается операционной системой. Для нас это, можно сказать, библиотечная функция. Программа обеспечила его вызов, разрешающий сигнал на вход подала, уставку определила. А дальше - пусть работает! Программа на каждом скане опрашивает его состояние - достиг уставки или не достиг. Насчёт того, какой алгоритм таймера. Сама программа реализована на ПЛК Сименс (серия s7-1500). Данный таймер - это таймер задержки включения (on delay timer), он задерживает сигнал на входе на заданное время и по истечении устанавливает свой выход, если входной сигнал не прервался до этого. Подробнее о таймерах ПЛК Сименс можно почитать в руководстве по программированию, можно найти и на русском языке. |
Автор: | Владимир Паронджанов [ Среда, 28 Июнь, 2023 08:57 ] |
Заголовок сообщения: | Re: Как это сделать - блок-схема с таймером? |
Франц Лещенко писал(а): если дискуссия доведет до такого, то появится и полный код этой подпрограммы. Франц, очень желательно посмотреть и обсудить полный код этой подпрограммы Франц Лещенко писал(а): о таймерах ПЛК Сименс можно почитать в руководстве по программированию, можно найти и на русском языке. Желательно дать ссылку.
|
Автор: | tonyk [ Среда, 28 Июнь, 2023 10:19 ] |
Заголовок сообщения: | Re: Как это сделать - блок-схема с таймером? |
Франц Лещенко писал(а): Подробнее о таймерах ПЛК Сименс можно почитать в руководстве по программированию, можно найти и на русском языке. Как работают таймеры в ПЛК я знаю, в том числе и у Сименса. Тут разговор идёт об изображении алгоритма, а раз так, то алгоритм должен быть изображён безотносительно того, где и на чём он будет реализован и выполняться. Что это за изображение алгоритма, что надо сделать кучу оговорок и прочитать Руководство по программированию конкретного ПЛК, чтобы понять, как и что реализует изображённый алгоритм? ИМХО, так себе изображеньице. Я допускаю, что часть диаграммы, изображающая алгоритм, может быть выделена, например, пунктиром, или изображена отдельно и прокомментирована чем-то навроде "реализовано стандартным таймером S7-1500". Но иллюстрация работы алгоритма таймера, ИМХО, в том или ином виде должна быть на диаграмме работы всей программы. При таком подходе будет вообще без разницы, где и на чём реализовывать алгоритм, а то сейчас, судя по картинке, его можно реализовать только на S7-1500. |
Автор: | Франц Лещенко [ Среда, 28 Июнь, 2023 10:53 ] |
Заголовок сообщения: | Re: Как это сделать - блок-схема с таймером? |
tonyk писал(а): Франц Лещенко писал(а): Подробнее о таймерах ПЛК Сименс можно почитать в руководстве по программированию, можно найти и на русском языке. Как работают таймеры в ПЛК я знаю, в том числе и у Сименса. Тут разговор идёт об изображении алгоритма, а раз так, то алгоритм должен быть изображён безотносительно того, где и на чём он будет реализован и выполняться. Что это за изображение алгоритма, что надо сделать туеву хучу оговорок и прочитать Руководство по программированию конкретного ПЛК, чтобы понять, как и что реализует изображённый алгоритм? ИМХО, так себе изображеньице. Я допускаю, что часть диаграммы, изображающая алгоритм, может быть выделена, например, пунктиром, или изображена отдельно и прокомментирована чем-то навроде "реализовано стандартным таймером S7-1500". Но иллюстрация работы алгоритма таймера, ИМХО, в том или ином виде должна быть на диаграмме работы всей программы. При таком подходе будет вообще без разницы, где и на чём реализовывать алгоритм, а то сейчас, судя по картинке, его можно реализовать только на S7-1500. Прошу меня извинить за непонятливость, но на блок-схеме используется стандартная икона таймера языка Дракон. Ни что не указывает на Сименс... Про него речь зашла окольным путём, и здесь неважно, что за ПЛК, Сименс, ОВЕН, или еще что. Логика работы таймера одинакова что тут что там. Если вернуться в начало, к первому скриншоту программы на языке LAD (он же LD в стандарте), то мне было любопытно, как этот фрагмент описать на Драконе, и всё. Было непонятно, как сюда приладить Синхронизатор или Время? Получается, что никак. Почему-то получилось обойтись без этих икон. Если образно выразится, то поток программы не останавливается на таймере и не ждёт пока он выполнит отсчёт, а идёт дальше. Таймер лишь опрашивается на каждом скане (цикле), программа как бы заглядывает в таймер - что там, и идёт дальше. Для меня в этом суть интереса с самого начала. Давайте будем взаимно вежливы. Как говорил один персонаж "Не будем волноваться, и во всём спокойно разберёмся." |
Автор: | tonyk [ Среда, 28 Июнь, 2023 12:15 ] |
Заголовок сообщения: | Re: Как это сделать - блок-схема с таймером? |
Франц Лещенко писал(а): на блок-схеме используется стандартная икона таймера языка Дракон Вот этот момент я упустил из виду. |
Автор: | Владимир Паронджанов [ Среда, 28 Июнь, 2023 12:46 ] |
Заголовок сообщения: | Re: Как это сделать - блок-схема с таймером? |
Франц Лещенко писал(а): Хотелось бы подробнее узнать о Заголовок циклический. Подробный ответ дан в теме Алексей Муравицкий и программирование бортовых компьютеров для космоса |
Автор: | LKom [ Среда, 28 Июнь, 2023 13:19 ] |
Заголовок сообщения: | Re: Как это сделать - блок-схема с таймером? |
В указанной теме сделано следующее заключение: Alexey_Donskoy писал(а): LKom писал(а): Необходимости в иконе "Циклический заголовок" нет. Согласен, необходимости нет.... |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |