TAU писал(а):
andr писал(а):
Появляется задача построить такую схему средствами Фабулы[/color][/b].
Возможны разные варианты
Вами по сути затронут целый широкий пласт вопросов, далеко выходящий за границы "традиционного" использования ДРАКОНа.
Во-первых, надеюсь все попробовать в силуэтах - там кажется есть возможности реализации многополюсных связей.
Во-вторых:
Цитата:
Появилась одна важная вещь - циклограмма.
Это само по себе необходимая вещь для параллельных систем.
В-третьих:
Цитата:
На самом деле, у сложного управляющего алгоритма возможны различные варианты - соответственно, его необходимо описывать набором циклограмм, представляющих развитие действий в разных складывающихся ситуациях.
В-четверных:
Цитата:
От такого "обусловленного" набора циклограмм возможен переход (автоматический) к логико-временным схемам, представляющим конкретное воплощение потока управления.
Не очень понятно, что значит "обусловленный набор циклограмм".
По-видимому, это что-то вроде некоторого представительного набора циклограмм:
необходимого и достаточного для покрытия множества ключевых ситуаций(?)
В отношении логико-временных схем.
Это интересное замечание.
Не очень понял такой переход, но остановлюсь на этом позднее.
Цитата:
Неявно понимается, что среди действий, отражаемых прямоугольниками, присутствуют действия, инициирующие выполнение параллельных процессов ("запрос в ОС на активацию процесса") и "взведение" таймеров.
Для низкоуровневого описания параллелизма
фактически надо явно задавать служебные операторы порождения параллельных процессов
(в многопоточном и многозадачном псевдо-параллелизме).
Для высокоуровневого описания параллелизма это действительно задается неявно
какими-то служебными синтаксическими конструкциями.
Есть еще потоковый метод
(я с ним мало знаком, но немного попробовал - он реализован в среде MS Robotics Developer Studio).
Но вот существует много методов (без общего названия - я пока его не знаю) для управления визуальными или техническими объектами.
Они основаны на циклическом прогоне множества фрагментов кода.
В каждой итерации выполняется либо простые действия двоичного типа (включить, выключить и т.п.),
либо микро-перемещения объектов (ну и спроверками разных условий).
Здесь, фактически, нет операторов порождения параллельных процессов,
но нужно отслеживать параллельные причинно-следственные связи:
например, в событийно-ориентированных реализациях.
Но вот систематического обобщенного описания таких методов нигде не видел.
----------------------------
В отношении вариантов поведения дискретных систем - могу дать свои представления
применительно к промышленной автоматике
(не просто аппаратурной автоматике, а автоматизированной механике).
Здесь такая замысловатая картина.
1
Есть принципиальные различия в исторических траекториях развития:
-- вычислительных (и вообще математических) алгоритмов:
алгоритмов управления дискретными вычислительными (и математическими) процессами;
-- технических, технологических (и робототехнических - в технологии) алгоритмов.
Вложение:
ПромАлг-01.PNG [ 10.85 КБ | Просмотров: 17217 ]
1) Общий порядок развития математической алгоритмики (Рис. 9.12, "пунктирная" траектория):
• от жестких (непереключаемых) последовательных (линейных) структур;
• к гибким (переключаемым) последовательным структурам;
• и далее к гибким (переключаемым) параллельным структурам.
2) Общий порядок развития технической алгоритмики (Рис. 9.12, "сплошная" траектория):
• от жестких (непереключаемых) последовательных (линейных) структур;
• к жестким (непереключаемым) параллельным структурам;
• и далее к гибким (переключаемым) параллельным структурам.
Например, начиная с древних греков, древние ритуальные и театральные автоматы
это были, в основном,
параллельные системы с управлением (на палках и веревках) от вращения
распределительных валов:
с колками (зацепами) для веревочных приводов простых механизмов (под весом мешочков с песком),
возможно с рычажными приводами от поворотных кулачков и т.п.
Это была примитивная еще механическая реализация
жестких (без альтернативных переключений) параллельных структур алгоритмов.
В середине прошлого века в механическом производстве существовали цеха кулачковых автоматов
с многокулачковыми распределительными валами.
Например, прутковые кулачковые автоматы:
-- в конце оборота распредвала готовая деталь отрезалась, падала в лоток и скатывалась в тару;
-- в начале очередного оборота (без остановки станка) пруток разжимался, проталкивался вперед, зажимался
и начиналась обработка очередной детали.
Все это выполняется в непрерывном цикле изготовления потока деталей:
параллельная многоинструментальная обработка -
жесткий параллельный алгоритмс единсвенным общим циклом (без вложенных цилов) - без специальной команды цикла
("естественные" новые итерации цикла в непрерывном вращении распредвала).
Понятия об алгоритмах и, тем более, о параллельных алгоритмах еще не существовало.
Программирование выполнялось точными методами ТММ - теории механизмов и (деталей) машин.
Реализация таких алгоритмов в железе выполнялась во вспомогательных механических службах
(вес такого метрового и более механического вала-алгоритма-программы мог быть убедительным).
Примерами таких систем являются кулачковые распредвалы многоцилиндровых двигателей автомобилей.
Вложение:
ПромАлг-02.PNG [ 116.23 КБ | Просмотров: 17217 ]
Круговая диаграмма (циклограмма) работы механизма распредвала:
Вложение:
ПромАлг-03.PNG [ 17.11 КБ | Просмотров: 17217 ]
Типичная линейная циклограмма механического (специального) станка-автомата
Вложение:
ПромАлг-04.PNG [ 69.02 КБ | Просмотров: 17217 ]
Явное наличие параллелизма процессов, но это факт еще не осознавался
(это было само собой понятно).
Очевидно, что теория последовательных алгоритмов здесь была не применима и не нужна,
а теория параллельных алгоритмов еще была неизвестна.
2
При появлении (специальных) станков-автоматов с релейно-контактными системами управления:
1) Сохранялся единственный основной параллельный (в общем случае) алгоритм работы.
2) Появилась многорежимность, в частности:
-- рабочий режим;
-- наладочный режим со многими циклами - от отдельных ходов разных агрегатов,
до холостого общего цикла работы станка - без наличия деталей.
3) Проектирование релейно-контактных схем управления
-- сначала выполнялось непосредственно на чертежах;
-- затем стала привлекаться теория релейно-контактных схем;
-- пытались применять конечные автоматы (последовательные),
но в общем случае этого было неприменимо при наличии параллелизма;
-- стали появляться циклограммы в виде блок-схем - еще не совсем алгоритмов:
мог отображаться параллелизм, но в общем он еще тоже не осознавался.
4) Уже на этом уровне стали появляться встроенные системы автоматического контроля деталей:
на входе в обработку или / и на выходе из обработки:
-- с разделением их на Годно и Брак (Брак исправимый и Брак неисправимый);
-- с отбраковкой деталей из основного потока.
Но это еще существенно не влияло на общий жесткий (параллельный по существу) алгоритм.
3
Примерно такая же ситуация имела место в автоматических линиях массового производства
(в основном, в автопроме).
Здесь было меньше параллелизма на отдельных станках
(хотя для корпусов, например, могла быть многоинструментальная обработка).
Использовался синхронный конвейерный режим.
Пример циклограммы блок-схемного типа:
Вложение:
ПромАлг-05.PNG [ 133.9 КБ | Просмотров: 17217 ]
Здесь возможен скрытый параллелизм:
в одном месте включается какой-то процесс, в другом места выключается и т.п.
4
Постепенно стали осваиваться системы числового (и циклового) программного управления
основным и вспомогательным технологическим оборудованием.
Началась комплексная автоматизация серийного производства,
пошла промышленная робототехника, гибкие производственные модули и системы.
И здесь возникла такая ситуация - почти полный пробел в описании работы таких систем.
Например:
Вложение:
ПромАлг-06.PNG [ 104.86 КБ | Просмотров: 17217 ]
Причем первые робототехнические системы были еще слепые - без внешней сенсорики
(с наличием внутренней сенсорики путевой автоматики).
А сейчас распространяются алгоритмические робототехнические системы, взаимодействующие со средой.
---------------------------
Вот с такими делами пришлось вплотную столкнуться - в начале 80-х гг.
Правда уже были кое-какие заделы по параллельным алгоритмам - еще с начала 70-х годов.
И одновременно стали появляться разные материалы по разным логикам времени.
Это помогало сразу же немного сориентироваться в логико-временной интерпретации параллельных алгоритмов.
Еще где-то в 1973 г. задепонировал 1-ю часть отчета по операторной форме временных булевых функций.
Вторую часть оформить не успел - пришлось заниматься другими делами.
С тех пор сильно не продвинулся, но идеология отрабатывалась.
Текущие планы по этому вопросу (в направлении образовательной робототехники) отражаются в статье:
Логико-временная интерпретация параллельных алгоритмов робототехнических системhttp://paralg.ucoz.com/g4140/v5-g4144-s ... terpre.pdf