Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Монография2009

.pdf
Скачиваний:
88
Добавлен:
09.04.2015
Размер:
3.12 Mб
Скачать

А.А. Тюгашев

Графические языки программирования и их применение в системах управления реального времени

Самара 2009

2

УДК 681.3.068 ББК 32.973

Тюгашев А.А. Графические языки программирования и их применение в системах управления реального времени / Изд-во Самарского научного центра РАН – Самара, 2009. 100 с., ил.

ISBN

Рассмотрены графические языки программирования с целью оценки их применимости при создании управляющего программного обеспечения реального времени. Проведены анализ и классификация существующих графических языков программирования и инструментальных сред разработки. На основе проведенного анализа, выявления сильных и слабых сторон, сделаны выводы о целесообразности применения графических языков при проектировании и разработке управляющего программного обеспечения, в том числе – для космических аппаратов, и целесообразности использования при этом специально разработанных средств, в достаточной степени учитывающих специфику космических аппаратов.

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

Библиогр.: 51 назв., Ил. 50.

Рецензент: заведующий кафедрой вычислительной техники Самарского государственного технического университета, доктор технических наук, профессор С.П. Орлов.

Печатается по решению редакционно-издательского совета Самарского научного центра Российской академии наук

Издание осуществлено за счет гранта Президента РФ для молодых докторов наук МД-2009

ISBN

А.А. Тюгашев, 2009

 

 

 

 

3

 

 

 

Оглавление

 

Обозначения и сокращения......................................................................................................

4

Предисловие

.............................................................................................................................

5

1. Тенденции ......................................развития современных языков программирования

7

2. Преимущества ..................................................визуального представления программ

14

3. Классификация ..........................................средств графического программирования

17

4. Системы ..............................визуального построения пользовательского интерфейса

23

 

4.1. Системы .............визуального конструирования интерфейса на основе компонент

23

 

4.2.

VUFC .......................................................................................................................

25

5.

Учебные ................................................................................................................языки

29

 

5.1. Scratch...........................................................................................................................

 

29

 

5.2. Интерпретатор ............................................................................................блок-схем

31

 

5.3. Sivil ...............................................................................................................................

 

33

 

5.4. VIPR .............................................................................................................................

 

35

6.

Языки, ориентированные .........................................................................на состояния

37

 

6.1. Язык SDL .....................................................................................................................

37

 

6.2. Диаграммы .....................................................................................состояний в UML

42

 

6.3. Языки ...........................................................................Grafcet и SFC (МЭК61131-1)

44

 

6.4. Язык Argos ...................................................................................................................

47

7. Языки описания ........................................................потока управления (control flow)

49

 

7.1. Графические .......................................схемы (блок-схемы) алгоритмов и программ

49

 

7.2. Технология ..................................графосимволического программирования ГРАФ

51

 

7.3. Диаграммы ........................................................деятельности и активностей в UML

54

 

7.4. Язык потоковых ....................................диаграмм FC (Flow Chart) системы IsaGraf

57

 

7.5. Язык ДРАКОН .......................................................и технология ГРАФИТ-ФЛОКС

58

 

7.6. Язык Р ..................................................................................................................-схем

61

 

7.7. Algorithm .........................................................Builder для микроконтроллера Atmel

61

8. Языки графического ..........................................................описания структур данных

64

 

8.1. Язык ER ......................................................................-диаграмм и стандарт IDEF1X

64

 

8.2. Диаграммы ............................................................................................классов UML

66

9. Языки описания ......................................................................потоков данных (dataflow)

68

 

9.1. LD (Ladder .............................................................................Logic, МЭК61131-3)

69

 

9.2. FBD .................................................................................................(МЭК61131-3)

70

 

9.3. DFD ........................................................................................(Data Flow Diagram)

72

 

9.4.

LabVIEW .................................................................................................................

74

 

9.5.

Simulink ...................................................................................................................

76

 

9.6.

Prograph ...................................................................................................................

78

 

9.7.

Ptolemy.....................................................................................................................

81

 

9.7.1. ........................................................................................

Discrete - Events – DE

85

 

9.7.2. ................................................................................................................

Giotto

85

 

9.7.3. ..................................................................................

Timed Multitasking – TM

85

10.

Событийный ...................................................................................................подход

87

 

10.1.

Графическое ...........................................программирование в IBM Visual Age

87

 

10.2.

Передача ...................................методов, данных и событий в системе HiAsm

91

Заключение.............................................................................................................................

 

94

Литература..............................................................................................................................

 

97

4

Обозначения и сокращения

БА – бортовая аппаратура БВС – бортовая вычислительная система БД – база данных

БКУ – бортовой комплекс управления БОС РВ – бортовая операционная система реального времени БПО – бортовое программное обеспечение

БЦВМ – бортовая цифровая вычислительная машина ДЗЗ – дистанционное зондирование Земли ЖЦ – жизненный цикл ИИ – искусственный интеллект КА – космический аппарат

ООП – объектно-ориентированное программирование ОС – операционная система ПЛК – программируемый логический контроллер ПО – программное обеспечение

САПР – система автоматизации проектирования СУБД – система управления базами данных УА РВ – управляющий алгоритм реального времени ЭВМ – электронная вычислительная машина

CASE – Computer Aided Software/System Engineering DFD – Data Flow Diagram

FBD – Functional Block Diagram GUI – Graphical User Interface

IDE – Integrated Development Environment LD – Ladder Logic

NASA – National Aeronautics and Space Administration SDL – Specification and Description Language

SFC – State Flow Chart

SQL – Structured Query Language

UML – Unified Modeling Language

5

Предисловие

Современный уровень развития систем управления реального времени подразумевает использование в качестве центрального компонента вычислительной системы. Так, в БКУ КА это БВС, включающая в свой состав одну или несколько БЦВМ [1, 2, 3], связанных соответствующими интерфейсами с бортовыми системами, приборами, агрегатами. При этом непосредственно задачи управления, выполнения КА целевой задачи и реализации требуемой циклограммы работы бортовых систем решаются комплексом БПО, функционирующего в режиме реального времени. Размеры современных комплексов управляющего ПО достигают миллионов строк программного кода [3, 4]. Комплекс БПО современного КА может рассматриваться как яркий пример, на котором могут быть рассмотрены возможность и целесообразность применения графического, или визуального программирования, в системах управления реального времени.

Спецификой предметной области разработки БПО для КА являются высочайшие требования к надежности и качеству создаваемых программ управления. Ошибки в управляющих алгоритмах и программах могут иметь весьма тяжелые последствия, в том числе – потерю дорогостоящих КА, а вместе с ними – срыв решения важнейших научных, народнохозяйственных и оборонных задач, потерю труда многочисленных коллективов, а в случае пилотируемых полетов – и человеческие жертвы.

В сетевом графике работ по созданию КА и ракетно-космических комплексов в целом критическим путем зачастую является именно разработка системы управления. А при создании системы управления, в свою очередь, наиболее трудоемким и долгим является процесс создания и отладки бортовых программ [3, 4].

При этом в разработку БПО вовлечены сотни людей, включая специалистов по бортовым системам и подсистемам, алгоритмистовразработчиков УА РВ, программистов, и т.д. Все названное требует не просто программирования на уровне «искусства» отдельных разработчиков, но использования проработанной технологии программирования, важными чертами которой являются следующие:

-тщательное документирование комплекса БПО;

-как можно большая формализация всех этапов ЖЦ, начиная с постановки задачи;

-создание формальной «базы знаний» о процессах разработки БПО и возможность ее использования всеми участниками разработки, снижение зависимости от уникального опыта и квалификации отдельного исполнителя;

-разделение ответственности.

6

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

1.Сокращение сроков и трудоемкости разработки БПО.

2.Обеспечение требуемого уровня надежности программ, уменьшение числа ошибок в ПО, для чего в свою очередь необходима разработка комплекса методов верификации управляющих алгоритмов и программ реального времени.

3.Создание удобных и наглядных средств документирования комплексов БПО, упрощающих понимание и взаимодействие участников в процессах его жизненного цикла.

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

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

7

1.Тенденции развития современных языков программирования

История развития языков программирования, начиная с появления первых ЭВМ (30е-40е годы XX столетия) может рассматриваться, как эволюция в направлении повышения удобства и производительности труда разработчиков ПО при одновременном повышении надежности и качества программ. Достичь этого эффекта позволила автоматизация, создание и развитие языков программирования и инструментальных сред разработки ПО.

Первые ЭВМ (построенные в соответствии с «фоннеймановскими» принципами), программировались на языке машинных кодов. Человекразработчик должен был проанализировать задачу, которую планировалось решать с применением ЭВМ, построить алгоритм ее решения, перевести его на язык машинных команд (записываемых в двоичном коде, т.е. последовательностями нулей и единиц) с учетом особенностей архитектуры конкретной ЭВМ, вручную ввести программу в память ЭВМ, запустить ее на выполнение, зафиксировать результат. В случае возникновения ошибки (что совсем неудивительно для подобного процесса), что можно было понять по результатам вычислений, разработчику необходимо было понять, в чем именно она состоит, внести исправления в программу, вновь закодировать ее, поместить в память, и т.д. Ясно, что производительность труда в таком случае невысока, не высокой является и надежность создаваемых программ. Машинные коды принято считать языками программирования первого поколения.

Повысить производительность труда программиста позволило создание языков программирования второго поколения – языков ассемблера (автокодов). При использовании ассемблера, во-первых, отпадала необходимость запоминать длинные двоичные последовательности – коды команд (вместо чего стали применяться их мнемонические обозначения, например, СУМ, СТОП, и т.д.). Во-вторых, появилась возможность присваивать ячейкам с ключевыми данными, имен (прообраз имен переменных в языках высокого уровня). Все это привело к тому, что программа стала значительно легче восприниматься человеком, повысилось удобство работы, сократились сроки разработки и отладки. Однако, теперь стала невозможной прямая загрузка программы в память ЭВМ для исполнения, поскольку для перевода ее на язык машинных кодов стала необходимой специальная инструментальная программа – ассемблер.

При использовании ассемблера (автокода), тем не менее, программа должна быть составлена в терминах («на уровне») реализации БЦВМ – ее ячеек памяти (с учетом используемых методов адресации), системы команд,

8

уровней прерываний, и пр. Это достаточно далеко от уровня формулировки решаемых на ЭВМ задач.

С целью приближения к уровню абстракции, используемому при постановке и решении задач человеком (математические переменные, формулы, и т.д.), были созданы языки программирования высокого уровня, называемые также языками третьего поколения – Фортран, Кобол, Lisp, APL, Паскаль, Си, Ада, Java и многие другие.

Применение языков программирования высокого уровня позволило в значительной степени за счет удобства формулировки и записи программ для программиста, повысить качество и надежность создаваемого ПО, сократить сроки и трудоемкость разработки. Активно развивается, начиная с конца 1980-х годов, направление ООП в рамках языков высокого уровня. Наиболее известными представителями данного подхода являются такие языки, как Симула, Smalltalk, C++, Java, C#. Как декларируется, ООП позволяет еще более повысить используемый уровень абстракции в языке программирования и дает возможность создавать достаточно легко модифицируемые и сопровождаемые большие программные комплексы.

В то же время, уже в середине 1970-х стал очевидным так называемый «кризис» программирования. Его анализу, в частности, посвящена классическая книга Ф. Брукса [5]. Суть сводится к тому, что по сравнению с прогрессом в области аппаратных средств, где за прошедшие с момента появления первых ЭВМ десятилетия быстродействие и объемы памяти возросли в сотни тысяч раз, прогресс в области разработки ПО далеко не столь впечатляет. Методы обеспечения надежности аппаратных средств ЭВМ также были в достаточной степени теоретически исследованы и практически отработаны. Методы же обеспечения надежности ПО оставались в основном области использования тестов, не гарантирующих на 100% корректность создаваемой программы.

Попытками разрешения кризиса стало появление так называемых «языков программирования четвертого поколения» (к которым причисляют концептуально достаточно разные подходы), и CASE-средств. Эти подходы призваны позволить:

1)Повысить производительность труда при разработке сложных программных комплексов;

2)Сократить затраты времени на отладку программ;

3)Обеспечить повышение качества создаваемого ПО (при этом «качество ПО» понимается как интегральная характеристика, включающая показатели корректности, надежности, эффективности, сопровождаемости, удобства использования, переносимости, модифицируемости и пр.).

Кнаправлениям исследований и разработок в области языков программирования четвертого поколения могут быть отнесены:

1.Проблемно-ориентированные языки программирования.

2.Декларативный подход к программированию.

3.Языки визуального (графического) программирования.

9

4. Использование в программировании подмножеств естественного языка.

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

Декларативный подход к программированию означает, что с программиста снимается обязанность подробного инструктирования ЭВМ, как именно решать задачу (пошагового описания алгоритма), вместо чего ему необходимо лишь провести постановку задачи некоторым формальным образом, задав существующие ограничения, то есть описать, что требуется получить в качестве результата. Декларативный подход является попыткой воплощения "идеальной" технологии программирования, в качестве которой может быть рассмотрена такая технология, когда по некоторому достаточно неформальному описанию задачи автоматически генерируется синтаксически и семантически корректная программа решения [16]. Поиск решения при этом возлагается на встроенную в систему программирования «машину вывода». Возможно, неплохо описывает ключевую идею декларативного программирования определение Джона Робинсона [27]: программа является теорией, а вычисления представляют собой вывод в этой теории. Ещё одно достоинство декларативных языков - пригодность для формальных рассуждений, которые, в частности, могли бы поднять методы обеспечения надежности и безошибочности в программировании на новый уровень (известно, что тестирование может помочь обнаружить ошибки в программах, но не может гарантировать на 100% их отсутствия). К сожалению, существующие методы формального анализа программ чрезвычайно трудоёмки. Много усилий было направлено на создание более простых и строгих языков, а также на совершенствование методов анализа, но результаты не обнадёживают. Декларативная программа обладает следующим преимуществом. Она, представляя собой формальную теорию, может быть подвергнута логическому анализу в своих собственных понятиях, не требуя привлечения дополнительных формализмов, таких как предикаты на состояниях. Более того, возникает возможность создания

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

10

немаловажно, проще понять, чем эквивалентную императивную программу. Помимо этого, возникает возможность передачи ответственности за конкретную реализацию порядка выполнения операций компьютеру. Более того, появляются возможности использовать нетривиальные алгоритмы планирования вычислений, такие как недерминированные, "ленивые" и параллельные подходы.

К сожалению, универсального решения, позволяющего решать подобным образом произвольные задачи, не существует, иначе бы отпала необходимость в программировании и программистах. Тем не менее, в ограниченных предметных областях, при условии наличия заранее подготовленных программных модулей, из которых может быть осуществлена «сборка» требуемой программы решения, декларативный подход возможен. Достаточно успешными реализациями декларативного подхода можно считать язык логического программирования Пролог, основанный на выводе в логике предикатов, а также язык запросов к реляционным СУБД SQL.

Идея визуального программирования, также называемого графическим программированием, сводится к тому, что написание программы как текста заменяется в том или ином масштабе ее изображением в виде графической диаграммы («рисованием»). В современных системах программирования просматривается тенденция к развитию средств, позволяющих программисту при создании программы оперировать не текстовыми, синтаксическими конструкциями, а графическими образами. Традиционный термин «писать программу» при этом трансформируется в «построить, проектировать программу». Описываться при этом могут самые разные аспекты программного комплекса. Такое богатство возможных средств визуального представления обусловило существование некоторых трудностей при определении понятия «визуальное», или «графическое» программирование. Встречаются варианты: «использование графических средств разработки и визуальной метафоры при создании программного обеспечения» (Microsoft), «программирование, предусматривающее создание приложений с помощью наглядных средств», «графический язык программирования – любой язык программирования, в котором программы задаются путем графического манипулирования элементами взамен текстового манипулирования ими» (Википедия), и пр. Одно из наиболее удачных определений принадлежит Маргарет Барнет, оно используется в энциклопедическом словаре

Encyclopedia of Electrical and Electronics Engineering, John Wiley & Sons Inc., New York. Согласно версии Барнет, «визуальное программирование – это программирование, в котором для передачи семантики используется более чем одно измерение».

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

сокращения трудоемкости разработки, повышения качества и