DRAKON.SU

Текущее время: Понедельник, 02 Декабрь, 2024 10:43

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: Понедельник, 26 Июнь, 2023 08:41 

Зарегистрирован: Понедельник, 18 Июль, 2022 10:02
Сообщения: 29
Доброе время суток всем!
Есть такой вот фрагмент кода на языке LAD для ПЛК, как его изобразить в виде блок-схемы? Опыта работы с блок-схемами почти нет, но очень хотелось бы понять, как это изобразить с помощью языка ДРАКОН. В книгах есть описание блоков Синхронизатор, Таймер, но как применить их к данному случаю не могу понять.
Вложение:
Screenshot 2023-06-26 082552.png
Screenshot 2023-06-26 082552.png [ 17.87 КБ | Просмотров: 5670 ]

ПЛК исполняет программу циклически.
Как только появляется флаг #motor.run, начинает отсчёт таймер "Timer(1)" с уставкой 10 с.
Пока таймер не достиг уставки, включается флаг #motor.beep.
Когда таймер достигнет заданной уставки, флаг #motor.swon включится, а флаг #motor.beep отключится.
Вместе с флагом #motor.swon включится флаг #q_kv.
Флаг #motor.run не обязательно "доживёт" до момента достижения таймером уставки, он может быть сброшен в любой момент, например, кнопкой СТОП (здесь это не показано для краткости).
В общем, интересно увидеть и понять, как это корректно изобразить на ДРАКОНе.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 26 Июнь, 2023 20:41 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5944
Откуда: Москва
Франц, спасибо за вопрос.
В настоящее время язык ДРАКОН только учится работать с ПЛК.
Такую работу проводят Алексей Муравицкий и Алексей Степанов в теме Новый дракон-редактор для ПЛК

Я попробовал нарисовать для вас упрощенную схему, возможно, с ошибками. Двойная линия иконы Заголовок означает, что программа работает циклически, как и ПЛК.
Франц Лещенко писал(а):
интересно увидеть и понять, как это корректно изобразить на ДРАКОНе.
Франц, корректной схемы на ДРАКОНе для ПЛК пока еще не существует. Ее надо придумать, детально обсудить со специалистами и только после этого утвердить.
Предлагаемая схема — это ни в коем случае не образец, а всего лишь пример для обсуждения.

Уважаемые коллеги!
Прошу критиковать.
Вложение:
Рис. 66. Управление ПЛК      .png
Рис. 66. Управление ПЛК .png [ 110.28 КБ | Просмотров: 5630 ]


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 26 Июнь, 2023 22:38 

Зарегистрирован: Понедельник, 18 Июль, 2022 10:02
Сообщения: 29
Благодарю Вас, Владимир Данилович!
Хочу заметить, что флаг #motor.swon должен обрабатываться как для промежутка времени "< 10 с", так и для "= 10 с".
Видится это вот так, но выглядит как-то не очень.
Вложение:
how_to_timer_1.png
how_to_timer_1.png [ 18.28 КБ | Просмотров: 5618 ]


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Июнь, 2023 06:44 

Зарегистрирован: Вторник, 27 Апрель, 2021 05:25
Сообщения: 104
Откуда: Томск
Могу предложить такой вариант. Чтобы алгоритм казался бесконечным, я перед иконой "Конец" добавил вставку этого же алгоритма, создав так называемую рекурсию.
Вложение:
20230627102953.png
20230627102953.png [ 87.34 КБ | Просмотров: 5608 ]

У Франца Лещенко схема не совсем верная, потому что условия с назначением таймера проверяются с помощью "синхронизации", но не отдельной развилки. На самом деле вопрос сложный, потому что исходных данных мало. Я, например, не могу понять следующее:
- в каком случае таймер не достигнет уставки?
- почему на схеме флаг #motor.beep появляется после установки таймера, а в вашем текстовом описании до?
- появляются ли флаги #q_kv, #motor.beep, #motor.swan ранее в схеме и можно ли их использовать как глобальные переменные и формальные параметры в дракон-схеме?

Конечно, во многом вопросы связаны с моей неосведомлённостью в ПЛК. Я читал о них поверхностно и то год назад.
Ещё насчёт иконы "Таймер" хотел написать, что в книге "Учись писать читать и понимать алгоритмы" она вопреки названию является не таймером, а секундомером. Поэтому я был удивлён, когда увидел в обеих схемах увидел установку таймера на 10 секунд сразу. Хотя всё зависит от контекста. Ранее дракон-схемы с таймерами не предполагали, что в процессе уставка может быть не достигнута - раньше это был обязательно достигаемый маяк. Ваш случай интересный.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Июнь, 2023 09:08 

Зарегистрирован: Среда, 07 Январь, 2015 14:53
Сообщения: 1360
Alex_st_Tomsk писал(а):
Могу предложить такой вариант. Чтобы алгоритм казался бесконечным, я перед иконой "Конец" добавил вставку этого же алгоритма, создав так называемую рекурсию.
Так делать нельзя!
Каждый рекурсивный вызов записывает адрес возврата в стек.
Т.к. икона Конец никогда не выполняется и возврат не происходит, то стек переполнится и программа аварийно завершится.

Надо удалить икону Конец и сделать безусловный переход на икону следующую за иконой Заголовок, т.е. пересадить лиану.

В.Д. Паронджанов предусматривает удаление иконы Конец для образования бесконечно цикла.
Смотри Книгу "Учись..." стр. 207


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Июнь, 2023 09:47 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5944
Откуда: Москва
Франц Лещенко писал(а):
Видится это вот так, но выглядит как-то не очень.

Явных ошибок я не вижу.

Замечания

1. Можно предложить иное использование иконы Полка.
Вверху пишем "Установить признак" или "Снять признак".
Внизу пишем, например: "#motor.beep".
(#motor.beep — это логическая переменная величина).
Вложение:
Рис. 67 Икона Полка       .png
Рис. 67 Икона Полка .png [ 12.31 КБ | Просмотров: 5601 ]

Можно писать сокращенно:
Цитата:
Уст признак

2. В иконе Заголовок нельзя писать untitled. Надо писать продуманное точное название алгоритма.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Июнь, 2023 10:40 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5944
Откуда: Москва
Владимир Паронджанов писал(а):
Двойная линия иконы Заголовок означает, что программа работает циклически, как и ПЛК.
Вложение:
Рис. 68 Икона Заголовок циклический   .png
Рис. 68 Икона Заголовок циклический .png [ 13.47 КБ | Просмотров: 5596 ]

Икону Заголовок циклический я опубликовал в статье 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 

Зарегистрирован: Понедельник, 18 Июль, 2022 10:02
Сообщения: 29
Доброе время суток всем! Прошу извинить меня, сейчас не могу ответить, нагрузка!!!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Июнь, 2023 13:35 

Зарегистрирован: Пятница, 01 Апрель, 2022 12:31
Сообщения: 63
Так-то таймеры обрабатываются в отдельном обработчике прерываний, в котором обрабатываются таймеры. Это отдельный асинхронный процесс. Так делается для того, чтобы по окончании счёта и установке флага об окончании счёта можно было активировать прерывание. Так что одной картинкой тут не отделаться.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Июнь, 2023 19:43 

Зарегистрирован: Понедельник, 18 Июль, 2022 10:02
Сообщения: 29
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:58, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Июнь, 2023 19:55 

Зарегистрирован: Понедельник, 18 Июль, 2022 10:02
Сообщения: 29
tonyk писал(а):
Так-то таймеры обрабатываются в отдельном обработчике прерываний, в котором обрабатываются таймеры. Это отдельный асинхронный процесс. Так делается для того, чтобы по окончании счёта и установке флага об окончании счёта можно было активировать прерывание. Так что одной картинкой тут не отделаться.

Мой скромный опыт пока ограничен, в основном, работой с ПЛК Сименс (s7-300, -1200, -1500). Здесь таймеры (аппаратные и программные) вполне себе работают в обычной программе. Хотя непродвинутый пользователь (это о себе) может и не догадывается, как это реализовано на уровне ОС. Прерываниями для обработки таймеров обычно пользоваться не приходится, так как для простых задач эффект асинхронности не оказывает действия. Буду считать, что здесь таймер - это чёрный ящик, на вход подал уставку и разрешение, и опрашивай его состояние в каждом скане. Как-то так, просто не приходилось решать сложные задачи.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Июнь, 2023 20:13 

Зарегистрирован: Понедельник, 18 Июль, 2022 10:02
Сообщения: 29
Владимир Паронджанов писал(а):
Франц Лещенко писал(а):
Видится это вот так, но выглядит как-то не очень.

Явных ошибок я не вижу.

Замечания

1. Можно предложить иное использование иконы Полка.
Вверху пишем "Установить признак" или "Снять признак".
Внизу пишем, например: "#motor.beep".
(#motor.beep — это логическая переменная величина).
Вложение:
Вложение Рис. 67 Икона Полка .png больше недоступно

Можно писать сокращенно:
Цитата:
Уст признак

2. В иконе Заголовок нельзя писать untitled. Надо писать продуманное точное название алгоритма.

Спасибо за замечания, прошу меня простить за небрежность. Фокус внимания целиком был на таймере и что с ним, а периферия выпала из поля зрения.
Про икону Полка я читал в Вашей книге. И на сайте drakonhub есть описание, и мне глянулась как раз нотация на drakonhub.
Ещё раз посмотрел на программу, на схему, надо переделать.
Вот такой вариант получился. Он, как мне кажется, точнее.
Вложение:
how_to_timer_3_2.png
how_to_timer_3_2.png [ 59.93 КБ | Просмотров: 5541 ]

В программе Степана Митькина отсутствует икона Заголовок циклический, можно пока без этой иконы. Хотелось бы подробнее узнать о Заголовок циклический.
Эта икона относится к основной программе ПЛК (суперциклу)?
Поскольку в данном случае мы рассматриваем подпрограмму. Она конечно вызывается из основной,
поэтому, цикличность обеспечивается основной программой.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Июнь, 2023 07:25 

Зарегистрирован: Пятница, 01 Апрель, 2022 12:31
Сообщения: 63
Франц Лещенко писал(а):
Он, как мне кажется, точнее.

А как, глядя на диаграмму, понять, что есть какой-то механизм, обеспечивающий работу таймера? И какой алгоритм работы этого таймера?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Июнь, 2023 08:09 

Зарегистрирован: Понедельник, 18 Июль, 2022 10:02
Сообщения: 29
tonyk писал(а):
Франц Лещенко писал(а):
Он, как мне кажется, точнее.

А как, глядя на диаграмму, понять, что есть какой-то механизм, обеспечивающий работу таймера? И какой алгоритм работы этого таймера?

В данном случае это аппаратный таймер, его работа обеспечивается операционной системой. Для нас это, можно сказать, библиотечная функция.
Программа обеспечила его вызов, разрешающий сигнал на вход подала, уставку определила. А дальше - пусть работает!
Программа на каждом скане опрашивает его состояние - достиг уставки или не достиг.
Насчёт того, какой алгоритм таймера. Сама программа реализована на ПЛК Сименс (серия s7-1500).
Данный таймер - это таймер задержки включения (on delay timer), он задерживает сигнал на входе на заданное время
и по истечении устанавливает свой выход, если входной сигнал не прервался до этого.
Подробнее о таймерах ПЛК Сименс можно почитать в руководстве по программированию, можно найти и на русском языке.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Июнь, 2023 08:57 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5944
Откуда: Москва
Франц Лещенко писал(а):
если дискуссия доведет до такого, то появится и полный код этой подпрограммы.

Франц, очень желательно посмотреть и обсудить полный код этой подпрограммы

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Июнь, 2023 10:19 

Зарегистрирован: Пятница, 01 Апрель, 2022 12:31
Сообщения: 63
Франц Лещенко писал(а):
Подробнее о таймерах ПЛК Сименс можно почитать в руководстве по программированию, можно найти и на русском языке.

Как работают таймеры в ПЛК я знаю, в том числе и у Сименса.
Тут разговор идёт об изображении алгоритма, а раз так, то алгоритм должен быть изображён безотносительно того, где и на чём он будет реализован и выполняться. Что это за изображение алгоритма, что надо сделать кучу оговорок и прочитать Руководство по программированию конкретного ПЛК, чтобы понять, как и что реализует изображённый алгоритм? ИМХО, так себе изображеньице. Я допускаю, что часть диаграммы, изображающая алгоритм, может быть выделена, например, пунктиром, или изображена отдельно и прокомментирована чем-то навроде "реализовано стандартным таймером S7-1500". Но иллюстрация работы алгоритма таймера, ИМХО, в том или ином виде должна быть на диаграмме работы всей программы. При таком подходе будет вообще без разницы, где и на чём реализовывать алгоритм, а то сейчас, судя по картинке, его можно реализовать только на S7-1500.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Июнь, 2023 10:53 

Зарегистрирован: Понедельник, 18 Июль, 2022 10:02
Сообщения: 29
tonyk писал(а):
Франц Лещенко писал(а):
Подробнее о таймерах ПЛК Сименс можно почитать в руководстве по программированию, можно найти и на русском языке.

Как работают таймеры в ПЛК я знаю, в том числе и у Сименса.
Тут разговор идёт об изображении алгоритма, а раз так, то алгоритм должен быть изображён безотносительно того, где и на чём он будет реализован и выполняться. Что это за изображение алгоритма, что надо сделать туеву хучу оговорок и прочитать Руководство по программированию конкретного ПЛК, чтобы понять, как и что реализует изображённый алгоритм? ИМХО, так себе изображеньице. Я допускаю, что часть диаграммы, изображающая алгоритм, может быть выделена, например, пунктиром, или изображена отдельно и прокомментирована чем-то навроде "реализовано стандартным таймером S7-1500". Но иллюстрация работы алгоритма таймера, ИМХО, в том или ином виде должна быть на диаграмме работы всей программы. При таком подходе будет вообще без разницы, где и на чём реализовывать алгоритм, а то сейчас, судя по картинке, его можно реализовать только на S7-1500.

Прошу меня извинить за непонятливость, но на блок-схеме используется стандартная икона таймера языка Дракон. Ни что не указывает на Сименс...
Про него речь зашла окольным путём, и здесь неважно, что за ПЛК, Сименс, ОВЕН, или еще что. Логика работы таймера одинакова что тут что там.

Если вернуться в начало, к первому скриншоту программы на языке LAD (он же LD в стандарте), то мне было любопытно, как этот фрагмент описать на Драконе, и всё.
Было непонятно, как сюда приладить Синхронизатор или Время? Получается, что никак. Почему-то получилось обойтись без этих икон.
Если образно выразится, то поток программы не останавливается на таймере и не ждёт пока он выполнит отсчёт, а идёт дальше.
Таймер лишь опрашивается на каждом скане (цикле), программа как бы заглядывает в таймер - что там, и идёт дальше.
Для меня в этом суть интереса с самого начала.
Давайте будем взаимно вежливы. Как говорил один персонаж "Не будем волноваться, и во всём спокойно разберёмся."


Последний раз редактировалось Франц Лещенко Среда, 28 Июнь, 2023 12:33, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Июнь, 2023 12:15 

Зарегистрирован: Пятница, 01 Апрель, 2022 12:31
Сообщения: 63
Франц Лещенко писал(а):
на блок-схеме используется стандартная икона таймера языка Дракон

Вот этот момент я упустил из виду.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Июнь, 2023 12:46 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5944
Откуда: Москва
Франц Лещенко писал(а):
Хотелось бы подробнее узнать о Заголовок циклический.

Подробный ответ дан в теме Алексей Муравицкий и программирование бортовых компьютеров для космоса


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Июнь, 2023 13:19 

Зарегистрирован: Среда, 07 Январь, 2015 14:53
Сообщения: 1360
В указанной теме сделано следующее заключение:
Alexey_Donskoy писал(а):
LKom писал(а):
Необходимости в иконе "Циклический заголовок" нет.
Согласен, необходимости нет.
...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2008-2024, участники конференции «DRAKON.SU», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB