DRAKON.SU

Текущее время: Вторник, 24 Апрель, 2018 17:28

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




Начать новую тему Ответить на тему  [ Сообщений: 73 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
СообщениеДобавлено: Среда, 01 Ноябрь, 2017 11:23 

Зарегистрирован: Среда, 07 Январь, 2015 14:53
Сообщения: 692
После отказа автономного генератора запускать его повторно нельзя. Неизвестно в каком состоянии он остался при отказе.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Ноябрь, 2017 11:32 

Зарегистрирован: Среда, 07 Январь, 2015 14:53
Сообщения: 692
Степан Митькин писал(а):
Если это событие выходит за пределы модели, пишем "Вывод" или применяем простую икону Вывод без полки.
Что, в нотации В.Д. Паронджанова есть простые и не простые иконы Вывод?

Предложение С. Митькина является проявлением хаоса.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Ноябрь, 2017 12:27 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 3623
Откуда: Москва
LKom писал(а):
После отказа автономного генератора запускать его повторно нельзя. Неизвестно в каком состоянии он остался при отказе.
Возможен вариант, когда владелец, узнав о происшествии, привез канистру бензина и запустил генератор вручную.

Кончился бензин — это одна из причин отказа.

Это пример того, когда можно и нужно запускать автономный генератор после отказа


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Ноябрь, 2017 12:57 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 456
И ещё: эта двойная стрелка убивает читаемость на корню.
Мне требуются немалые усилия, чтобы понять, что имеется в виду.
Это против Духа ДРАКОНа.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Ноябрь, 2017 13:27 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 3623
Откуда: Москва
Степан Митькин писал(а):
И ещё: эта двойная стрелка убивает читаемость на корню.
Мне требуются немалые усилия, чтобы понять, что имеется в виду.
Это против Духа ДРАКОНа.
Почему убивает читаемость?

Вложение:
050. pimgpsh_fullsize_distr.png
050. pimgpsh_fullsize_distr.png [ 11.37 КБ | Просмотров: 1366 ]


Мне кажется, что в каждой ветке имеются вложенные циклы со стрелкой.
Внутренний цикл со стрелкой аккуратно вложен во внешний цикл со стрелкой.
Разве не так?

Степан, давайте сравним с этой схемой, где тоже имеются две стрелки. viewtopic.php?p=100662#p100662
Здесь две стрелки тоже "убивают читаемость"?
Если не убивают, то в чем разница?
В чем отличие этих двух дракон-схем, где каждая имеет две стрелки?


Степан, как, по вашему мнению, надо исправить?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Ноябрь, 2017 13:53 
Аватара пользователя

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

Степан, как, по вашему мнению, надо исправить?

Есть две мысли.

1. Первая, она же главная — избавиться от скрытых состояний.
Здесь я непреклонен.
Всё должно быть на виду. Есть 4 состояния? Значит, нужны 4 ветки.
- Сеть есть.
- Возможно, сети нет.
- Сети нет.
- Возможно, сеть есть.
Очень важно вытащить из тени малозаметные сочетания факторов.
Я говорю это на основании опыта автоматного программирования реальных систем.
Громоздко? Да. Зато понятно.
Лень? Хочется срезать углы? Сделать покороче? Готовьтесь к сбоям и отказам в самый неподходящий момент. :(

2. Вторая мысль связана с идиомой цикла со стрелкой в качестве ожидания события. Здесь я не настаиваю, только предлагаю.
Если взять описание алгоритма для человека (не программирование), то, возможно, цикл — не очень хорошая вещь.
Можно перепутать с требованием выполнять что-то много раз. Хотелось бы в явном виде сказать:
- Мы на ходимся в состоянии M.
- Мы ожидаем события X, Y, Z.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Ноябрь, 2017 14:37 

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

Очевидно, ветку после запуска таймера нужно не наверх вести, а просто дальше -- к развилке "A > 5мин".
Да, если есть сеть мы сбросим таймер и тут же проверим "а прошло ли 5 минут", но зато обратная стрелка будет одна.

Ну и запуск соответствующих таймеров нужно делать не в конце ветки, а в начале.
Сейчас в каждой ветке упоминаются и таймер A и таймер B (кстати, почему не Б?)

Лучше же будет, если в первой ветке будет только таймер A, а во второй только B.


И, да, сообщение "есть сеть 220" должно посылаться не постоянно, а только когда мы переходим в состояние "есть сеть".
Иными словами, развилка "прошло ли 5 минут?" должна возвращать не в самое начало ветки, а в место после отправки SMS. Ну, чтобы зря сообщения не слать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Ноябрь, 2017 15:49 

Зарегистрирован: Четверг, 06 Январь, 2011 15:45
Сообщения: 54
Степан Митькин писал(а):
1. Нет отправки сообщения "Нет сети 220в".
2. Видимо, имеется путаница. Как автоматы у нас взаимодействуют?
Есть два варианта:
- через отправку сообщений
- через запись значений в разделяемые переменные
Сергей, какого подхода вы придерживаетесь? Это не ясно из диаграмм.
Конечно, из представленной единственной иллюстрации непонятно, как что взаимодействует.
Автоматов много. Все они вызываются поочередно в главном цикле.
Для взаимодействия автоматов есть "служба сообщений". Сообщения очень простые, в них нет ни адреса отправителя, ни адреса получателя, ни параметров. По сути - это битовые флаги. Для работы с сообщениями есть 3 функции:

send_mess( enum mess );
bool get_mess( enum mess );
void process_mess(void);

Первая "посылает" сообщение, вторая - "принимает". Список сообщений (enum) доступен всем автоматам. Любой автомат может послать любое сообщение, не заботясь о том, кто его примет. И любой автомат может принять любое сообщение, не имея понятия, кто его послал. Функция "process_mess" вызывается в главном цикле, после всех автоматов. Она выполняет 2 задачи:

- все посланные в текущем цикле сообщения становятся доступны для чтения всем автоматам в следующем цикле
- в конце следующего цикла эти сообщения уничтожаются.

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

- внести в список (enum) новое сообщение .
- добавить в нужное место икону отправки этого сообщения
- добавить в нужное место икону приёма этого сообщения

Теперь по представленным Дракон схемам. Тут есть такие неявные соглашения:

1. Одна ветка - это одно состояние автомата.
2. Переход на другую ветку происходит при следующем вызове автомата.
3. Переход в самое начало ветки так-же происходит при следующем вызове автомата.

Именно 2 и 3 пункты не позволяют выносить в начало ветки сброс таймера.
Тут может быть только такое действие, которое нужно выполнять при каждом вызове автомата.

С уважением, Ефанов Сергей.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Ноябрь, 2017 15:59 

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

1. Одна ветка - это одно состояние автомата.
2. Переход на другую ветку происходит при следующем вызове автомата.
3. Переход в самое начало ветки так-же происходит при следующем вызове автомата.

Именно 2 и 3 пункты не позволяют выносить в начало ветки сброс таймера.
Тут может быть только такое действие, которое нужно выполнять при каждом вызове автомата.


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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Ноябрь, 2017 17:14 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 456
efanov писал(а):
Для взаимодействия автоматов есть "служба сообщений". Сообщения очень простые, в них нет ни адреса отправителя, ни адреса получателя, ни параметров. По сути - это битовые флаги. Для работы с сообщениями есть 3 функции:

send_mess( enum mess );
bool get_mess( enum mess );
void process_mess(void);

Теперь я понял, спасибо. Было бы хорошо, если бы вы поместили это описание в книге.
Насколько я могу судить, это очень эффективная реализация службы сообщений.

efanov писал(а):
1. Одна ветка - это одно состояние автомата.
2. Переход на другую ветку происходит при следующем вызове автомата.
3. Переход в самое начало ветки так-же происходит при следующем вызове автомата.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 01 Ноябрь, 2017 17:47 

Зарегистрирован: Четверг, 06 Январь, 2011 15:45
Сообщения: 54
Степан Митькин писал(а):
Теперь я понял, спасибо. Было бы хорошо, если бы вы поместили это описание в книге.
Предполагается, что в книге будет подробно "разжёвано" абсолютно всё по этой программе.
Степан Митькин писал(а):
Насколько я могу судить, это очень эффективная реализация службы сообщений.
Я не берусь судить о степени эффективности, но я перепробовал много разных концепций связи между автоматами, и остановился (сейчас) вот на этой. Идея, конечно, не моя, взята вот отсюда:
http://www.kit-e.ru/articles/circuit/2006_12_118.php
Цитата:
Вопрос по циклу со стрелкой в начале ветки.
Как вы избегаете того, что функция автомата уходит в вечный цикл?
Разве первый попавшийся автомат не будет крутиться в своей функции вечно, пока события нет?
Редактор "ИС Дракон", которым я пользуюсь, имеет 3 режима генерации кода. В первом режиме генерируется "обычная" функция. В ней, если нарисовать цикл со стрелкой вначале ветки - то получим вечный цикл. А два других режима генерируют конечный автомат, в котором ЛЮБОЙ переход в НАЧАЛО ветки вызывает обновление переменной состояния и выход из функции. При следующем вызове функции мы можем оказаться в новом состоянии, или пройти по прежнему состоянию. Но "мёртвого цикла" не будет в любом случае.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 02 Ноябрь, 2017 12:29 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 3623
Откуда: Москва
Владимир Ситников писал(а):
Владимир Паронджанов писал(а):
Степан, как, по вашему мнению, надо исправить?

Очевидно, ветку после запуска таймера нужно не наверх вести, а просто дальше -- к развилке "A > 5мин".
Да, если есть сеть мы сбросим таймер и тут же проверим "а прошло ли 5 минут", но зато обратная стрелка будет одна.


Убрал одну обратную стрелку:
Вложение:
050. pimgpsh_fullsize_distr — копия.png
050. pimgpsh_fullsize_distr — копия.png [ 16.88 КБ | Просмотров: 1298 ]


Вот для сравнения две обратные стрелки:
Вложение:
050. pimgpsh_fullsize_distr.png
050. pimgpsh_fullsize_distr.png [ 11.37 КБ | Просмотров: 1298 ]


Что мы выиграли, убрав одну обратную стрелку?

Две стрелки хороши тем, что каждый из двух вложенных циклов становится простым.

С одной стрелкой вместо двух ПРОСТЫХ вложенных циклов появился один цикл, имеющий более СЛОЖНУЮ структуру.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 02 Ноябрь, 2017 13:28 

Зарегистрирован: Среда, 03 Май, 2017 09:55
Сообщения: 125
Владимир Паронджанов писал(а):
Убрал одну обратную стрелку:
Вложение:
050. pimgpsh_fullsize_distr — копия.png

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

Лучше вот почему:
1) Когда две ветки идут из одного места в одно и то же, то интуитивно появляется вопрос "а одной стрелки разве мало было?" или такой: "а вдруг они различаются, давайте найдём отличия"
2) По сути, тут один цикл, который называется "если выключилось и N минут не включалось, то выходим".
Поэтому, логично и в схеме видеть одну развилку, решающую нужно ли выходить из цикла.
Если цикл всего один, то смотришь, и видно, что условием выхода является "прошло 5 минут".
3) Визуально, если линия из сброса таймера идёт вниз, то сброс таймера стоит устойчиво. Если же линия заворачивает наверх, то сброс таймера как бы висит, что гораздо менее устойчиво.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 02 Ноябрь, 2017 14:44 
Аватара пользователя

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

Убрать одну из стрелок недостаточно.
Требуется выделить скрытые состояния и сделать их явными.
Вот так:
Вложение:
20171102124103.png
20171102124103.png [ 75.38 КБ | Просмотров: 1274 ]

Или так. Вообще без стрелок:
Вложение:
20171102124108.png
20171102124108.png [ 85.74 КБ | Просмотров: 1274 ]


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 02 Ноябрь, 2017 15:08 
Аватара пользователя

Зарегистрирован: Среда, 09 Ноябрь, 2016 00:33
Сообщения: 97
Откуда: Tallinn
а не напомнит ктонить, почему в ДРАКОНе нельзя "шинировать" переходы идущие в одну точку? как в электронных схемах скажем


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 02 Ноябрь, 2017 16:53 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 456
Игорь Мазница писал(а):
а не напомнит ктонить, почему в ДРАКОНе нельзя "шинировать" переходы идущие в одну точку? как в электронных схемах скажем

Нарисуйте, что имеете в виду.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 02 Ноябрь, 2017 17:32 
Аватара пользователя

Зарегистрирован: Среда, 09 Ноябрь, 2016 00:33
Сообщения: 97
Откуда: Tallinn
Цитата:
Нарисуйте, что имеете в виду.

слева две стрелки, справа шина как на советских электронных схемах


Вложения:
Комментарий к файлу: шинирование нескольких переходов в одну точку
shinirovanie.png
shinirovanie.png [ 11.92 КБ | Просмотров: 1260 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 03 Ноябрь, 2017 09:20 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 456
Игорь Мазница писал(а):
слева две стрелки, справа шина как на советских электронных схемах

Так можно. Я такое видел в книгах В.Д. Паронджанова.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 03 Ноябрь, 2017 09:28 

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

слева две стрелки, справа шина как на советских электронных схемах
Игорь, у вас есть лишний излом линии.

Этот излом исчезнет, если отросток вести не вправо, а вниз.
Имеется в виду отросток под правой иконой В = 0

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 03 Ноябрь, 2017 09:43 

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

Рассмотрим схему, содержащую две обратных стрелки, КОНЦЫ КОТОРЫХ ИДУТ В ОДНУ ТОЧКУ (т.е. ОБЪЕДИНЕНЫ):

Вложение:
050. pimgpsh_fullsize_distr.png
050. pimgpsh_fullsize_distr.png [ 11.37 КБ | Просмотров: 1338 ]


Против двух обратных стрелок в этой схеме высказались все участники дискуссии:
LKom
Степан Митькин
Владимир Ситников
Игорь Мазница.
Я присоединился к мнению уважаемых участников.

Вывод

Нужно отказаться от двух обратных стрелок, объединить две линии и соединить их с одной обратной стрелкой (как показано ниже).

Вложение:
050. pimgpsh_fullsize_distr — копия.png
050. pimgpsh_fullsize_distr — копия.png [ 16.88 КБ | Просмотров: 1338 ]


==================================

Этот вывод не относится к другим случаям, где КОНЦЫ ОБРАТНЫХ СТРЕЛОК указывают на РАЗНЫЕ точки.
Например, две обратные стрелки в нижней схеме являются правильными и разрешенными:

Вложение:
Insertion sort variant 3.png
Insertion sort variant 3.png [ 120.26 КБ | Просмотров: 1337 ]


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

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


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

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


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

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