DRAKON.SU https://forum.drakon.su/ |
|
Конечный автомат для Modbus https://forum.drakon.su/viewtopic.php?f=142&t=5801 |
Страница 1 из 1 |
Автор: | Владимир Невзоров [ Вторник, 05 Июль, 2016 13:48 ] | ||
Заголовок сообщения: | Конечный автомат для Modbus | ||
Дорогие друзья, всем здравствуйте! I. Вступление. ================================================= 1) Сразу скажу: а) Очень интересный раздел! б) Я - начинающий программист. в) Стараюсь текст форматировать согласно, можно сказать, стилю этого форума - разграничивать, выделять, обрамлять - всё для лучшего восприятия. 2) Ниже приведу порядок ознакомления с данной темой: а) Прочитал статью для микроконтроллеров - AVR. Учебный курс. Конечный автомат. б) Изучаю как справедливо заметил Di Halt (автор статьи выше) замечательный цикл статей Владимира Татарчевского, опубликованный в журнале Компоненты и Технологии. в) Кратко посмотрел пару презентаций на сайте Анатолия Абрамовича Шалыто. г) Наконец и здесь, на моём одном из любимейших форумах, нашел данный раздел. II.Собственно вопрос ================================================= 1) Как показать передачу по Modbus'у используя "Дракон"? В 7ой статье из цикла (п.II.2.б) есть небольшая схема (по-моему, называется граф-схема). Прикрепил ниже. Возможно ли её принять за исходную для перевода в ДРАКОН-схему? 2) Я помню в учебнике по "Дракону" Владимира Паронджанова была тема перевода схем в дракон схему. Но, как понял, здесь есть та-же трудность, которую уважаемые участники форума обсуждали в соседних топиках - как показать параллельные взаимодействующие процессы? 3) Степан Митькин предлагал использовать для перехода конечного автомата в новое состояние иконку "Ввод". Можно ли также сделать здесь, подразумевая этой иконкой получение сообщения устройством от другого устройства?
|
Автор: | Ярослав Романченко [ Вторник, 05 Июль, 2016 14:42 ] |
Заголовок сообщения: | Re: Конечный автомат для Modbus |
Владимир Невзоров писал(а): В адресе две ошибки. Правильный адрес http://easyelectronics.ru/avr-uchebnyj- ... tomat.html
|
Автор: | Ярослав Романченко [ Вторник, 05 Июль, 2016 14:59 ] |
Заголовок сообщения: | Re: Конечный автомат для Modbus |
Насколько я понимаю, предполагается, что один автомат работает в одном потоке. В таком случае, чем плоха для визуализации этого автомата обычная ДРАКОН-схема "силуэт"? Вот, я когда-то изобразил серверную часть UDP-chat клиента на каком-то подмножестве протокола ICQ. Там автомат (самая нижняя схема) постоянно "крутится" в одном Активном Объекте (т.е. нити) и обрабатывает поступающие пакеты. http://sage.com.ua/screens/UDPChatServerDRAKON.png |
Автор: | Степан Митькин [ Вторник, 05 Июль, 2016 15:05 ] |
Заголовок сообщения: | Re: Конечный автомат для Modbus |
Владимир Невзоров писал(а): 1) Как показать передачу по Modbus'у используя "Дракон"? Указанную схему можно переложить на ДРАКОН. Но она слишком простая. Это цикл актора в общем виде. Hello world. Hello world на любом языке смотрится элегантно. Вложение: modbus.png [ 32.61 КБ | Просмотров: 16274 ] |
Автор: | Владимир Паронджанов [ Вторник, 05 Июль, 2016 15:08 ] |
Заголовок сообщения: | Re: Конечный автомат для Modbus |
Владимир Невзоров писал(а): II.Собственно вопрос ================================================= 1) Как показать передачу по Modbus'у используя "Дракон"? В 7ой статье из цикла (п.II.2.б) есть небольшая схема (по-моему, называется граф-схема). Прикрепил ниже. Возможно ли её принять за исходную для перевода в ДРАКОН-схему? Владимир, лучше всего, если Вы нарисуете свою собственную дракон-схему и выложите ее. Не бойтесь ошибиться. Смело выкладывайте Ваш вариант решения задачи в виде дракон-схемы. Ничего страшного, если он будет неточным или незавершенным. |
Автор: | Степан Митькин [ Вторник, 05 Июль, 2016 15:13 ] |
Заголовок сообщения: | Re: Конечный автомат для Modbus |
Владимир Паронджанов писал(а): Владимир, лучше всего, если Вы нарисуете свою собственную дракон-схему и выложите ее. Приведите какой-нибудь конкретный пример автомата. Конечный автомат особенно хорош, когда: 1. У него может быть несколько состояний. 2. Он принимает несколько видов сообщений. |
Автор: | Владимир Невзоров [ Вторник, 05 Июль, 2016 15:16 ] |
Заголовок сообщения: | Re: Конечный автомат для Modbus |
Ярослав Романченко писал(а): Владимир Невзоров писал(а): В адресе две ошибки. Правильный адрес http://easyelectronics.ru/avr-uchebnyj- ... tomat.htmlFixed. Спасибо. Ярослав Романченко писал(а): Насколько я понимаю, предполагается, что один автомат работает в одном потоке. В таком случае, чем плоха для визуализации этого автомата обычная ДРАКОН-схема "силуэт"? Вот, я когда-то изобразил серверную часть UDP-chat клиента на каком-то подмножестве протокола ICQ. Там автомат (самая нижняя схема) постоянно "крутится" в одном Активном Объекте (т.е. нити) и обрабатывает поступающие пакеты. http://sage.com.ua/screens/UDPChatServerDRAKON.png Вот это да! Сейчас, наверное, на А3 распечатаю и буду внимательно изучать! Тема клиент-серверного приложения для меня очень интересна! Если есть еще какие-нибудь схемы, может быть статьи (для новичка), если не затруднит, выкладывайте, я с удовольствием прочитаю. Степан Митькин писал(а): Владимир Невзоров писал(а): 1) Как показать передачу по Modbus'у используя "Дракон"? Указанную схему можно переложить на ДРАКОН. Но она слишком простая. Это цикл актора в общем виде. Hello world. Hello world на любом языке смотрится элегантно. Вложение: modbus.png Ну вот, когда написано/изображено - действительно просто))) Здесь, наверное, еще стоит какие-нибудь таймеры использовать. Мол, не пришло за такое время - либо повтори, либо хватит ждать и что-то делай? |
Автор: | Владимир Невзоров [ Вторник, 05 Июль, 2016 15:24 ] |
Заголовок сообщения: | Re: Конечный автомат для Modbus |
Владимир Паронджанов писал(а): Владимир Невзоров писал(а): II.Собственно вопрос ================================================= 1) Как показать передачу по Modbus'у используя "Дракон"? В 7ой статье из цикла (п.II.2.б) есть небольшая схема (по-моему, называется граф-схема). Прикрепил ниже. Возможно ли её принять за исходную для перевода в ДРАКОН-схему? Владимир, лучше всего, если Вы нарисуете свою собственную дракон-схему и выложите ее. Не бойтесь ошибиться. Смело выкладывайте Ваш вариант решения задачи в виде дракон-схемы. Ничего страшного, если он будет неточным или незавершенным. Да вот сейчас уже лучше представляю как представить в виде схемы) Мне интересно мнения присутствующих кто как, исходя из своей области знаний думает, в целом видит решение. Степан Митькин писал(а): Владимир Паронджанов писал(а): Владимир, лучше всего, если Вы нарисуете свою собственную дракон-схему и выложите ее. Приведите какой-нибудь конкретный пример автомата. Конечный автомат особенно хорош, когда: 1. У него может быть несколько состояний. 2. Он принимает несколько видов сообщений. Очередь сообщений. Возможно немного отдаляясь от темы. Там в статьях была упомянута возможность очереди сообщений. Т.е., я так понял, думаешь задать некую последовательность команд и для этого делаешь "какую-то очередь сообщений". Это, наверное, может быть, к примеру, буфер указателей, каждый из которых указывает на какое-то сообщение. Т.е., возможно, это как в программирование называется FIFO. Т.е. очередь для отправки сообщений заполняется и в это же время отправляется? |
Автор: | Владимир Невзоров [ Вторник, 05 Июль, 2016 15:32 ] |
Заголовок сообщения: | Re: Конечный автомат для Modbus |
Владимир Паронджанов писал(а): Владимир Невзоров писал(а): II.Собственно вопрос ================================================= 1) Как показать передачу по Modbus'у используя "Дракон"? В 7ой статье из цикла (п.II.2.б) есть небольшая схема (по-моему, называется граф-схема). Прикрепил ниже. Возможно ли её принять за исходную для перевода в ДРАКОН-схему? Владимир, лучше всего, если Вы нарисуете свою собственную дракон-схему и выложите ее. Не бойтесь ошибиться. Смело выкладывайте Ваш вариант решения задачи в виде дракон-схемы. Ничего страшного, если он будет неточным или незавершенным. По поводу наглядного изображения ответа прибора я предложил использовать вторую точку входа: viewtopic.php?f=78&t=5593&start=20 |
Автор: | prospero78 [ Вторник, 05 Июль, 2016 16:55 ] |
Заголовок сообщения: | Re: Конечный автомат для Modbus |
Строго говоря, в алгоритме работы Modbus должна быть только одна ветка, так как это протокол (в 99% реализаций) со строгой иерархией. Пока сервер не спросит -- клиент не ответит. Клиент, конечно, и так может не ответить, но это уже ветка проверки условия "ответил? да-нет". В целом, это линейный алгоритм, без какой-либо произвольной логики или непредсказуемости. |
Автор: | Владимир Невзоров [ Среда, 06 Июль, 2016 08:58 ] |
Заголовок сообщения: | Re: Конечный автомат для Modbus |
prospero78 писал(а): Строго говоря, в алгоритме работы Modbus должна быть только одна ветка, так как это протокол (в 99% реализаций) со строгой иерархией. Пока сервер не спросит -- клиент не ответит. Клиент, конечно, и так может не ответить, но это уже ветка проверки условия "ответил? да-нет". В целом, это линейный алгоритм, без какой-либо произвольной логики или непредсказуемости. Спасибо за ценные мысли. Лучшее понимание самого протокола приходит. |
Автор: | Владимир Невзоров [ Среда, 06 Июль, 2016 12:16 ] |
Заголовок сообщения: | Re: Конечный автомат для Modbus |
Выкладываю что на данный момент получилось. 1. С чего переделывал: Вложение: ModBus source.png [ 32.85 КБ | Просмотров: 16220 ] 2. Что получилось: Вложение: ModBus2.png [ 224.88 КБ | Просмотров: 16213 ] |
Автор: | Степан Митькин [ Четверг, 07 Июль, 2016 09:33 ] |
Заголовок сообщения: | Re: Конечный автомат для Modbus |
Владимир Невзоров писал(а): Выкладываю что на данный момент получилось. Получилось прикольно. Но я позволю себе предложить улучшение. Ветка == состояние == точка ожидания Можно принять следующее соглашение: 1. Каждая ветка силуэта — состояние автомата.Кроме последней, в ней очистка ресурсов. В этом соглашении получается, что ветка == состояние == точка ожидания. 2. Сразу под заголовком ветки находится икона "Выбор" с текстом "ждать". Каждая икона "Вариант" соответствует типу входящего сообщения. При этом срабатывание таймера — это тоже сообщение. Таким образом, диаграмма наглядно показывает, что автомат делает в зависимости от: - состояния - типа входящего сообщения. Вложение: modbus-part.png [ 85.5 КБ | Просмотров: 16199 ] Прошу обратить внимание, что данный подход не является пустой болтовнёй. DRAKON Editor генерит боевой код из таких силуэтов. Поведение нового редактора (https://drakon-editor.com) задаётся автоматами данного вида. Данный подход оправдал себя на практике. |
Автор: | Владимир Невзоров [ Четверг, 07 Июль, 2016 11:24 ] |
Заголовок сообщения: | Re: Конечный автомат для Modbus |
Степан, спасибо за комментарий! Оффтопик по редактору drakon-editor Как заметили, пользовался Вашим редактором при создание схемы. По-моему, еще полгода назад где-то написал про значок жабы, что, мол, выглядит ядовито. Сейчас-же захожу, и приятный Дракончик, протягивающий руку, как бы здоровающийся, приветствующий. Возможно, посмотрели мой комментарий и, по-крайней мере, мне очень приятно стало видеть такого приветствующего парня Степан Митькин писал(а): Владимир Невзоров писал(а): Выкладываю что на данный момент получилось. Получилось прикольно. Но я позволю себе предложить улучшение. Ветка == состояние == точка ожидания Примерно так и думал. Степан Митькин писал(а): Можно принять следующее соглашение: 1. Каждая ветка силуэта — состояние автомата.Кроме последней, в ней очистка ресурсов. В этом соглашении получается, что ветка == состояние == точка ожидания. Стал читать еще темы из раздела и понял, что вопрос с длинной простыней уже ставился. По-моему, в приведенной мною схеме каждая ветка как-раз и выражала состояние автомата. Степан Митькин писал(а): 2. Сразу под заголовком ветки находится икона "Выбор" с текстом "ждать". Каждая икона "Вариант" соответствует типу входящего сообщения. При этом срабатывание таймера — это тоже сообщение. Таким образом, диаграмма наглядно показывает, что автомат делает в зависимости от: - состояния - типа входящего сообщения. Прошу обратить внимание, что данный подход не является пустой болтовнёй. DRAKON Editor генерит боевой код из таких силуэтов. Поведение нового редактора (https://drakon-editor.com) задаётся автоматами данного вида. Данный подход оправдал себя на практике. Очень ценные и толковые советы! Какая наглядность сразу появляется! Спасибо за приведенную схему! Только пока не совсем понял как Вы спрятали состояния "Передать сообщение" и "Приём сообщения" в другие состояния (в "Ожидания команды на передачу сообщения от основной программы" и "Ожидание ответа ведомого" соответственно). Т.е. получается, хотим, чтобы каждому состоянию по ветке. Но вот эти два состояния спрятаны внутри состояний (==внутри веток). UPD: А... Дракончик шагает) Разглядел) |
Автор: | Степан Митькин [ Четверг, 07 Июль, 2016 11:45 ] |
Заголовок сообщения: | Re: Конечный автомат для Modbus |
Владимир Невзоров писал(а): Т.е. получается, хотим, чтобы каждому состоянию по ветке. Но вот эти два состояния спрятаны внутри состояний (==внутри веток). Да, здесь получается именно так. Но можно сделать и по-другому. Можно развернуть эти состояния, "Передать сообщение" и "Приём сообщения", в отдельные ветки. Разворачивать их имеет смысл, если в этих состояниях автомат принимает сообщения. Таймаут, например, или команду "прервать". Владимир Невзоров писал(а): А... Дракончик шагает) Разглядел) Персонажа Дракошу придумал талантливый дизайнер Сергей Миронов. |
Автор: | Владимир Невзоров [ Четверг, 07 Июль, 2016 14:19 ] |
Заголовок сообщения: | Re: Конечный автомат для Modbus |
Степан Митькин писал(а): Владимир Невзоров писал(а): Т.е. получается, хотим, чтобы каждому состоянию по ветке. Но вот эти два состояния спрятаны внутри состояний (==внутри веток). Да, здесь получается именно так. Но можно сделать и по-другому. Можно развернуть эти состояния, "Передать сообщение" и "Приём сообщения", в отдельные ветки. Разворачивать их имеет смысл, если в этих состояниях автомат принимает сообщения. Таймаут, например, или команду "прервать". В продолжение тему решил перевести данную схему (из 7ой статьи из цикла статей, приведенного в 1ом посте): "Конечный автомат приема сообщения Modbus в режиме RTU" Вложение: modbus передача rtu.png [ 26.88 КБ | Просмотров: 16183 ] В Дракон-схему: Вложение: Конечный автомат приема сообщения Modbus в режиме RTU.png [ 232.1 КБ | Просмотров: 16183 ] ============================================================= По поводу правил построения Дракон-схем. Сейчас вспоминаю книгу. Рассматривая силуэт (т.е. когда много веток): 1. Необходимо стараться идти всё правее и правее для завершения алгоритма? Т.е. если в конце ветки есть выбор и одно направление ведет к продолжению выполнения алгоритма, то его правее? Или (может это только у примитива - т.е. только когда 1 ветка), чем чаще, тем центральнее? 2. Конец - всегда? Конечный автомат опрашивается постоянно. Т.е. он - как отдельный поток. Т.е., по идее, конца нет (только когда программа сама завершиться). Но, в Дракон-схеме, насколько помню, конец должен быть всегда? ============================================================= Степан Митькин писал(а): Владимир Невзоров писал(а): А... Дракончик шагает) Разглядел) Персонажа Дракошу придумал талантливый дизайнер Сергей Миронов. Спасибо, принял. |
Автор: | Степан Митькин [ Четверг, 07 Июль, 2016 14:44 ] |
Заголовок сообщения: | Re: Конечный автомат для Modbus |
Владимир Невзоров писал(а): 1. Необходимо стараться идти всё правее и правее для завершения алгоритма? Думаю, что да. Но для автоматного силуэта это правило в любом случае будет нарушаться. Владимир Невзоров писал(а): 2. Конец - всегда? ... Но, в Дракон-схеме, насколько помню, конец должен быть всегда? Нет, конец в силуэте не обязателен. Бывают бесконечные алгоритмы (например, алгоритмы управления). В DRAKON Editor Web конец обязателен. Но этот недостаток будет исправлен. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |