DRAKON.SU

Текущее время: Пятница, 19 Октябрь, 2018 01:59

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




Начать новую тему Ответить на тему  [ Сообщений: 16 ] 
Автор Сообщение
СообщениеДобавлено: Воскресенье, 25 Февраль, 2018 23:16 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 472
Прочитал книгу А.Д. Закревского "Параллельные алгоритмы логического управления"
https://forum.oberoncore.ru/viewtopic.p ... 233#p77233

Очень хорошая книга. Написана простым и понятным языком.
Я перевёл некоторые алгоритмы из этой книги на язык ДРАКОН.
https://drakon-editor.com/ide/doc/examples/127

Как я переводил:

Ожидание входящих сигналов
По Закревскому алгоритм управления принимает сигналы извне через входные переменные.
Для получения сигнала имеется оператор "ожидание". В нём алгоритм ждёт, когда в одной или нескольких входных переменных появится определённое значение.
Как отобразить оператор "ожидание"? Я применил икону "Событие" ("Синхронизатор") вместе с иконой "Вопрос" и стрелочным циклом.
При этом вместо одной иконы "Вопрос" может быть несколько (логическая формула).
Смысл данной макроиконы получился такой:
Проверяем наличие некоторых значений во входящих переменных.
Если значения есть, идём дальше.
Если нет, ждём сигнала извне.
Когда сигнал приходит, снова проверяем переменные и так далее.
Это не ожидание в состоянии занятости.

Параллельные алгоритмы
Параллельные алгоритмы из книги я изображал двумя способами:
1. Макроиконой "Начало совместной работы".
2. Иконой "Параллельный процесс".

У Закревского есть операция "гашение". Это остановка всех параллельных ветвей, которые выполняются в настоящий момент.
Для гашения я применил икону "Вывод": выдать команду "прекратить параллельный процесс".

Вот операторы "ожидание" и "выдача команды":
Вложение:
20180225160004.png
20180225160004.png [ 48.46 КБ | Просмотров: 1219 ]

Вложение:
20180225160007.png
20180225160007.png [ 28.66 КБ | Просмотров: 1219 ]

Пример со светофором:
Вложение:
zak-svet.png
zak-svet.png [ 23.54 КБ | Просмотров: 1219 ]

Вложение:
20180225160011.png
20180225160011.png [ 145.47 КБ | Просмотров: 1219 ]

Пример с вертикально-протяжным станком:
Вложение:
zak-prok.png
zak-prok.png [ 104.67 КБ | Просмотров: 1219 ]

Вложение:
20180225160027.png
20180225160027.png [ 114.09 КБ | Просмотров: 1219 ]

Вложение:
20180225160031.png
20180225160031.png [ 167.93 КБ | Просмотров: 1219 ]


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 26 Февраль, 2018 09:54 

Зарегистрирован: Среда, 03 Май, 2017 09:55
Сообщения: 184
Степан Митькин писал(а):
Как отобразить оператор "ожидание"? Я применил икону "Событие" ("Синхронизатор") вместе с иконой "Вопрос" и стрелочным циклом.

Очень близко к "циклу с ожиданием" (ну, когда паузу рисуют на обратной стрелке)

Встречный вопрос: в книге встречается вариация "ждать, но не более N секунд"?
Например, "подали команду на пуск насоса и ждем срабатывание датчика давления" (см №25-26). По-хорошему, ждать нужно не бесконечно, а какое-то ограниченное время.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 26 Февраль, 2018 10:14 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 472
Владимир Ситников писал(а):
По-хорошему, ждать нужно не бесконечно, а какое-то ограниченное время.

Согласен. Бесконечное ожидание — это обычно дефект алгоритма.
Надо указывать таймаут.
Например так:
Вложение:
20180226080415.png
20180226080415.png [ 30.46 КБ | Просмотров: 1197 ]

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

Если мы не хотим бросать исключение, а хотим обработать ошибку в самом алгоритме, можно проверить особую переменную "таймаут".
Вложение:
20180226081326.png
20180226081326.png [ 49.26 КБ | Просмотров: 1197 ]


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 26 Февраль, 2018 11:30 

Зарегистрирован: Среда, 07 Январь, 2015 14:53
Сообщения: 775
Изображение

Нельзя использовать икону Синхронизатор без наличия иконы ПускТаймера.

Т.к. надо запустить отсчет времени.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 26 Февраль, 2018 11:35 

Зарегистрирован: Среда, 03 Май, 2017 09:55
Сообщения: 184
Степан Митькин писал(а):
Тут, кстати, проблема: синхронизатор и событие выглядят одинаково. Возможно, для события имеет смысл сделать другую икону.

Основная проблема, я так понимаю, как раз в том, что нужна ветка выполнения для случая "что делать, если событие не пришло".

Получается, нужна стрелка назад "продолжаем ждать" и стрелка вниз "дождались" и еще одна стрелка вниз "не дождались".

Где-то уже обсуждали вариант "выбор" для обработки событий, но там получается как-то громоздко.
Ну, когда я планирую "нужно подождать пока появится давление, но не более 30 секунд", то я не рассуждаю в духе "так, у нас тут <<выбор>>, тут <<цикл со стрелкой>>, ...".

Да и не сочетается "выбор" со стрелками назад.
Может, получится как-то упростить (в визуальном смысле) "выбор"?

Технически, конечно, есть "длительность группы действий" (слева/справа), оно даже визуально понятно, но, к сожалению, оно не указывает что происходит, если длительность превышается.

Степан Митькин писал(а):
Если мы не хотим бросать исключение, а хотим обработать ошибку в самом алгоритме, можно проверить особую переменную "таймаут".
Вложение:
20180226081326.png

И потом еще 2-3 страницы описывать "правила видимости этой автомагической переменной"... Должна ли переменная быть доступна при переходе от одной ветке к другой? А, если переменная проверяется в начале ветки, а приходим мы туда после разных ожиданий?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 26 Февраль, 2018 16:08 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 472
Владимир Ситников писал(а):
Основная проблема, я так понимаю, как раз в том, что нужна ветка выполнения для случая "что делать, если событие не пришло".
Получается, нужна стрелка назад "продолжаем ждать" и стрелка вниз "дождались" и еще одна стрелка вниз "не дождались".

Да.

Владимир Ситников писал(а):
Может, получится как-то упростить (в визуальном смысле) "выбор"?

Можете предложить, как?

Владимир Ситников писал(а):
И потом еще 2-3 страницы описывать "правила видимости этой автомагической переменной"... Должна ли переменная быть доступна при переходе от одной ветке к другой? А, если переменная проверяется в начале ветки, а приходим мы туда после разных ожиданий?

Предлагаю такой вариант

Вариант 1
Переменная таймаут всегда лежит в иконе "Вопрос", к которой присоедена икона "Событие".

Точно понятно, к какому ожиданию относится проверка таймаута. Но не ясно, чего ждём.


Вариает 2
Переменная таймаут видна:
1. Ниже иконы "Вопрос" с "Событием" по пути выполнения.
2. Выше иконы "Пауза" по пути выполнения.

Ясно, изменения какой переменной мы ждём. Но можно забыть, к какому ожиданию относится таймаут.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 26 Февраль, 2018 16:12 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 472
LKom писал(а):
Нельзя использовать икону Синхронизатор без наличия иконы ПускТаймера.
Т.к. надо запустить отсчет времени.

LKom принял икону Событие за икону Синхронизатор.
Возможно, имеет смысл икону Синхронизатор показывать в виде другой графической фигуры.
А может и нет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 26 Февраль, 2018 16:36 

Зарегистрирован: Среда, 03 Май, 2017 09:55
Сообщения: 184
Степан Митькин писал(а):
Можете предложить, как?

Знал бы -- предложил бы.
Не появляется идей, когда оно выглядело бы компактно, понятно и т.п.

Варианты на уровне "пальцем в небо" (не сказать, что они прямо плохие, но у каждого из них я вижу недостатки):
а) Из синхронизатора (или из "времени группы") отращивать новую ветку вниз, на которую переходит выполнение в случае "превышен интервал ожидания". Если синхронизатор можно навесить справа (например, к "действию" или к развилке, оба конца которой идут вниз), то это даже может и нормально смотреться. Но в случае "цикла со стрелкой" (ну когда стрелка идёт наверх) справа синхронизатор не особо прицепишь.

б) Вообще останавливать Дракон-схему при наступлении таймаута. Тут, конечно, вопрос "как в обработчике" понять какое именно действие превысило указанную длительность, но может оказаться, что вариант "вообще все timeout'ы обрабатываются одинаково" не самый плохой с точки зрения надёжности. Как-никак, будет гарантия, что все timeout'ы обработаны. Это что-то сродни "обработке исключений" типа "деление на ноль".

Минус тут в том, что зачастую нужны алгоритмы в духе "если возникла ошибка, то позвать оператора, дождаться когда он починит, и продолжить с того же места". Т.е. нужна не семантика "полного останова", а именно "продолжение с проблемного шага".

в) Если "ожидание" допустимо только у икон с одной веткой, смотрящей вниз (например, допустимо у "цикла со стрелкой" или у развилки, у которой одна из стрелок возвращается вверх, но недопустимо у развилки, у которой оба продолжения смотрят вниз), то можно договориться, что в случае "превышения времени ожидания", управление всегда проваливается вниз, где можно проверить "дождались-не дождались".

Например, на картинке 20180225160031 (в этой теме) развилка "ДВК" (сразу после комментария "4") двумя своими ветками смотрит вниз, и вариант "в" для неё не получится. Ну, невозможно сказать "в случае превышения длительности переходи к следующему шагу". Какой там следующий (yes или no)?

Степан Митькин писал(а):
Предлагаю такой вариант...Переменная таймаут

Это ещё плохо и тем, что образовалось единственное место, где используется слово "переменная". Это при том, что в Дракон-схемах вообще плохо с "переменными", "данными", "областями видимости" и т.п.

Думаю, хорошо бы попробовать сначала визуальные варианты, а текстовые (названия переменных и т.п.) использовать тогда, когда по-другому никак.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 26 Февраль, 2018 17:08 

Зарегистрирован: Среда, 07 Январь, 2015 14:53
Сообщения: 775
http://forum.drakon.su/viewtopic.php?p=101378#p101378
Степан Митькин писал(а):
LKom писал(а):
Нельзя использовать икону Синхронизатор без наличия иконы ПускТаймера.
Т.к. надо запустить отсчет времени.

LKom принял икону Событие за икону Синхронизатор.
Возможно, имеет смысл икону Синхронизатор показывать в виде другой графической фигуры.
А может и нет.

Степан Митькин: - "LKom принял икону Событие за икону Синхронизатор."
У LKom-а правильно - икона Синхронизатор.

Смотрите - http://forum.drakon.su/viewtopic.php?p=101352#p101352
В.Д. Паронджанов от Четверг, 22 Февраль, 2018 16:11 (перед праздником День Защитника Отечества)
Владимир Паронджанов писал(а):
Окончательный вариант
Иконы языка ДРАКОН. 2018 год
Всего 31 икона

Изображение
У В.Д. Паронджанов, в редакции от 22 Февраль, нет иконы Событие.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 26 Февраль, 2018 20:02 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 3784
Откуда: Москва
LKom прав.

Степан, объясню, почему так получилось.

После нашего последнего разговора по скайпу я пришел к выводу, что решение по обработке событий (для реализации событийно-ориентированного программирования) нуждается в дополнительном обсуждении (желательно публичном).

Поэтому я удалил слово Событие которое стояло в таблице, как второе название иконы Синхронизатор.

В общем, надо еще подумать и обсудить, как лучше организовать объявление и обработку событий.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Февраль, 2018 10:54 

Зарегистрирован: Воскресенье, 09 Март, 2008 22:38
Сообщения: 342
Степан Митькин писал(а):
Владимир Ситников писал(а):
По-хорошему, ждать нужно не бесконечно, а какое-то ограниченное время

Согласен. Бесконечное ожидание — это обычно дефект алгоритмаНадо указывать таймаут

Вообще, у Закревского акцент на реагирующих алгоритмах (управляемых событиями - event driven), имеющих "пассивную натуру" и пребывающих в основном в нормальном для них "спящем" состоянии ожидания.

В более сложных системах - например, при управлении космическими аппаратами, управляющий алгоритм имеет "активный" характер и должен реализовать определенный план (циклограмму, полетное задание). Раньше ставились ПВУ - программно-временные устройства, выдававшие необходимые команды в заданное время. Конечно, учет реальной обстановки в данный момент времени никто не отменял. Соответственно, семантика алгоритма усложняется - получается управляющий алгоритм реального времени (УА РВ), или алгоритм, "управляемый временем" (time driven).

Поскольку ДРАКОН рожден в космической отрасли и появился из ГРАФИТа, примитивы для описания задержек и таймеров в нем присутствуют 8)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Февраль, 2018 10:56 

Зарегистрирован: Воскресенье, 09 Март, 2008 22:38
Сообщения: 342
Владимир Паронджанов писал(а):
LKom прав.

Степан, объясню, почему так получилось.

После нашего последнего разговора по скайпу я пришел к выводу, что решение по обработке событий (для реализации событийно-ориентированного программирования) нуждается в дополнительном обсуждении (желательно публичном).

Поэтому я удалил слово Событие которое стояло в таблице, как второе название иконы Синхронизатор.

В общем, надо еще подумать и обсудить, как лучше организовать объявление и обработку событий

Вообще, я уже неоднократно указывал, что семантически правильно будет отображать разрыв потока управления при переходе управляющего алгоритма в режим ожидания события. При этом ресурсы вычислительной системы (параллельной) высвобождаются для решения иных задач. И "синхронизатор" должен соответствовать еще одному "включению" или "входу" УА.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Февраль, 2018 12:03 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 3784
Откуда: Москва
TAU писал(а):
Вообще, я уже неоднократно указывал, что семантически правильно будет отображать разрыв потока управления при переходе управляющего алгоритма в режим ожидания события. При этом ресурсы вычислительной системы (параллельной) высвобождаются для решения иных задач. И "синхронизатор" должен соответствовать еще одному "включению" или "входу" УА.
Андрей Александрович, спасибо за замечание.

Пожалуйста, приведите пример дракон-схемы, отображающей вашу идею. С подробным пояснением.

Без такого примера трудно в полной мере понять суть предложения.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Февраль, 2018 19:33 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 213
Степан Митькин писал(а):
По Закревскому алгоритм управления принимает сигналы извне через входные переменные.
Для получения сигнала имеется оператор "ожидание". В нём алгоритм ждёт, когда в одной или нескольких входных переменных появится определённое значение.

Эта семантика, фактически, пропадает или стирается, если с этими переменными обращаться как в примере со светофором, где есть и "не ожидаем события, просто проверяем значение переменной "подход"", и "ожидаем события, которое изменит значение переменной "подход"".

Степан Митькин писал(а):
Как отобразить оператор "ожидание"? Я применил икону "Событие" ("Синхронизатор") вместе с иконой "Вопрос" и стрелочным циклом.
...
Это не ожидание в состоянии занятости.

А схема какой-то spinlock отображает. Во всяком случае, обратный цикл здесь неоднозначно понимается.

Степан Митькин писал(а):
Параллельные алгоритмы из книги я изображал двумя способами:
1. Макроиконой "Начало совместной работы".
2. Иконой "Параллельный процесс".

С помощью которых, вроде как, выражается лишь один вариант семантики дивергенции/конвергенции -- вместе начали, вместе же закончили.

Рекомендую взглянуть на труды В.Е. Зюбина, как развитие результатов Закревского (или чуть иная форма построения моделей), оставаясь на простейшем уровне событийного управления с "логическим" параллелизмом:
http://forum.drakon.su/viewtopic.php?f=143&t=6160&start=20#p100964

Вариант графического формализма:
https://cyberleninka.ru/article/n/razrabotka-graficheskogo-formalizma-dlya-opisaniya-algoritmov-v-protsessorientirovannom-stile

Стиль -- максимально простой императивный (что проще для блок-схем), есть явное понятие активности/пассивности процессов, каждый процесс может иметь свои состояния (в смысле как состояние автомата -- вариант работы процесса на конкретном этапе, каждое со своим отсчётом таймера, если он нужен. На Дракон-е можно было бы выделять как отдельные ветки, но они могут быть короткими). В итоге достаточно одной какой-то иконы "событие" (возможен и альтернативный выбор из совокупности "вариантов"), необходим запуск/стоп для процессов. Предполагается максимальная "зернистость" моделей. Но в результате, к примеру, вместо какой-нибудь "группы действий во времени" необходимо оформлять внешние управляющие процессы. Отсюда, возможно потребуются (если нужно) отдельные формализмы для выражения всей совокупности процессов в системе (на базе каких-то графов, или аля диаграммы Ганта).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 07 Март, 2018 00:25 

Зарегистрирован: Воскресенье, 09 Март, 2008 22:38
Сообщения: 342
Владимир Паронджанов писал(а):
TAU писал(а):
Вообще, я уже неоднократно указывал, что семантически правильно будет отображать разрыв потока управления при переходе управляющего алгоритма в режим ожидания события. При этом ресурсы вычислительной системы (параллельной) высвобождаются для решения иных задач. И "синхронизатор" должен соответствовать еще одному "включению" или "входу" УА.
Андрей Александрович, спасибо за замечание.
Пожалуйста, приведите пример дракон-схемы, отображающей вашу идею. С подробным пояснением.
Без такого примера трудно в полной мере понять суть предложения.

Увы, крайне затруднительно сейчас нарисовать Дракон-схему, иллюстрирующую, о чем я написал. Дракон не поддерживает пока. Все же я постарался отобразить с применением "силуэта" и его "веток".
См. здесь. Правда, для просмотра нужно быть зарегистрированным пользователем онлайн редактора Степана Митькина.

Если коротко: после иконы активации таймера мы рано или поздно выходим в ОС. Поток управления алгоритма прерывается. В том числе - визуально. Что правильно, поскольку на самом деле ничего не происходит. Далее мы рисуем некое новое "начало" алгоритма - новый "вход" или включение его.

В Драконе есть нечто, интуитивно соответствующее данному случаю - ветки "силуэта". Но в этом случае нужно четко понимать, что ветка активируется по истечении заданного временного интервала, и что конец ветки - это выход из алгоритма. Или, если угодно - переход его в пассивное состояние, пока не произойдет активация того или иного его "входа" по УВИ (а вообще - и другими способами, но это уже другой разговор).


Вложения:
СхемаСРазрывомДляПаронджанова.jpg
СхемаСРазрывомДляПаронджанова.jpg [ 112.21 КБ | Просмотров: 963 ]


Последний раз редактировалось TAU Среда, 07 Март, 2018 00:55, всего редактировалось 3 раз(а).
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 07 Март, 2018 00:38 

Зарегистрирован: Воскресенье, 09 Март, 2008 22:38
Сообщения: 342
Вот, впрочем, удалось нарисовать в не столь "строгом" к порядку ввода оффлайновом редакторе Митькина

УВИ - термин, применяемый на "Прогрессе", означет "уставка временного интервала". 8)


Вложения:
Комментарий к файлу: Возможно, лучше передает суть
ДляПаронджанова2.png
ДляПаронджанова2.png [ 17.96 КБ | Просмотров: 963 ]
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ] 

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


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

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


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

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