Cредства программирования и отладкиОбщие сведения.

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

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

Языки программирования. Общие понятия. Работу любой микропроцес­сорной (в том числе и микроконтроллерной) системы можно рассматривать как исполнение последовательности поступающих на ее центральный процессор ма­шинных команд в виде двоичных кодов, каждая из которых реализует некоторое элементарное действие. Микроконтроллерная система управления функциониру­ет по определенному алгоритму, представляющему собой строго регламентиро­ванную последовательность действий, или машинных команд. Набор команд, на котором можно задать алгоритм функционирования системы управления, состав­ляет машинный язык, или язык кодовых комбинаций. Какие команды включить в машинный язык решает разработчик при создании микроконтроллера (процес­сорного ядра). Поэтому каждое семейство микроконтроллеров имеет свой набор команд, или свой машинный язык. Обычно стремятся к упрощению машинных ко­манд, что позволяет избежать сложных схемных решений и снизить затраты на изготовление контроллера. Так как большинство машинных языков примитивны, непосредственное использование их для описания алгоритма связано с извест­ными трудностями.

Для представления алгоритма системы управления в понятном для человека виде служат специальные языки программирования, отличающиеся от естествен­ных языков ограниченным количеством слов (операторов, команд) и строгими правилами их записи. Совокупность правил записи слов образует синтаксис язы­ка программирования, а смысловое содержание слов и других конструкций язы­ка — его семантику. Формализованное описание алгоритма с использованием языков программирования называется программой. Для составления текста про­граммы используются редакторы. Нарушение формы записи программы приво­дит к синтаксическим ошибкам, а несоответствие текста программы алгоритму — к семантическим ошибкам. Процесс поиска ошибок в программе называется тес­тированием, процесс устранения ошибок — отладкой.

Языкинизкогоуровня (Low–Level Language). Для микроконтроллера (процессора) единственно понятным является язык кодовых комбинаций, обра­зующих систему его команд. Программирование на этом языке позволяет:

●     рационально использовать особенности архитектуры микроконтроллера и каждой его команды;

●     наилучшим образом выполнять адресацию;

●     задействовать для хранения программ минимальный объем памяти и, следо­вательно, снизить аппаратные затраты;

●     получить минимальное время исполнения программы.

Главный недостаток языка кодовых комбинаций — трудности составления про­грамм, связанные с написанием, поиском ошибок и внесением исправлений. По­этому он применялся на раннем этапе развития компьютерной техники.

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

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

Язык ассемблера относится к машинно–ориентированным языкам и требует хорошего знания архитектуры микроконтроллера.

Достоинство языков низкого уровня (ассемблеров) — возможность создания эффективных и компактных программ благодаря тому, что разработчик имеет до­ступ ко всем ресурсам микроконтроллера.

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

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

Языки высокого уровня (HighLevel Language). Эти языки создавались с ориентацией на облечение труда программистов, поэтому в них используются термины, которые ближе к словам естественного языка или к математическим формулам, чем к командам ассемблера. Языки высокого уровня позволяют пользователю составлять программы, не имея представления о тех действиях, которые осуществляет микроконтроллер (процессор) во время выполнения про­граммы. Особенности конкретных архитектур в них не учитываются, поэтому со­здаваемые программы на уровне исходных текстов легко переносятся на другие платформы, для которых создан транслятор этого языка. Разрабатывать програм­мы на языках высокого уровня с помощью понятных и мощных команд значитель­но проще, а ошибок при создании программ допускается гораздо меньше. Каж­дая команда языка высокого уровня эквивалентна нескольким командам в ма­шинных кодах, поэтому программы, написанные на языках высокого уровня, бо­лее компактны, чем аналогичные программы в машинных кодах.

Языки высокого уровня предназначены для решения общих задач (проблем), и поэтому их часто называют проблемно–ориентированными языками. Благодаря указанным выше достоинствам они находят широкое применение при програм­мировании микроконтроллерных систем управления.

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

Ассемблер (Assembler) является транслятором с языка ассемблера и жест­ко привязан к конкретному микропроцессору или микроконтроллеру. Трансляция исходной программы осуществляется за несколько проходов. В первом проходе команды преобразуются в машинный код и выделяются метки, символизирующие адреса. На втором (и возможно третьем) проходе метки преобразуются в коды соответствующих адресов, а при необходимости определяются обращения в биб­лиотеки.

Компилятор (Compiler) обрабатывает полный текст исходной программы, при этом:

●     просматривает его (иногда несколько раз) в поисках синтаксических ошибок и выполняет определенный смысловой анализ;

●     автоматически транслируют на машинный язык, т. е. генерируют машинный код;

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

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

Интерпретатор (Interpreter) — это специальная программа, которая сразу выполняет исходную программу по принципу строка — за строкой, преобразуя каждый оператор исходной программы в машинные коды и немедленно его вы­полняя. После выполнения текущего оператора интерпретатор переходит к следу­ющему. Таким образом, интерпретатор моделирует некую виртуальную машину, для которой базовыми инструкциями служат не элементарные команды микро­контроллера (процессора), а операторы языка программирования.

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

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

●     анализу подвергается каждый оператор исходной программы, поэтому один и тот же оператор будет выполняться в программе столько раз, сколько раз встречается по ходу ее выполнения;

●     циклы активизируются и повторяются столько раз, сколько их указано в ис­ходной программе (кстати, всего лишь одной строкой). Кроме того, при компиляции отсутствует возможность оптимального кодиро­вания, поскольку программа выполняется сразу оператор за оператором.

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

Основные этапы программирования. Рассмотрим основные этапы создания

готовых программных модулей:

    создание исходной программы. На этом этапе составляется алгоритм зада­чи–приложения, выбирается язык программирования и с помощью редактора пишется текст программы. Использование специализированного редактора, позволяет в процессе ввода текста выделять ключевые слова и идентифика­торы, автоматически проверять правильность синтаксиса программы. Исход­ная программа представляет собой один или несколько (для больших про­грамм) текстовых файлов–модулей (с расширением .ТХТ);

●     трансляция исходной программы. На этом этапе исходный текст с помощью программы–компилятора переводится в объектный код (двоичные файлы–модули со стандартным расширением .OBJ). При обнаружении синтаксичес­ких ошибок объектный код не создается;

    создание загрузочного модуля. Полученные при компиляции отдельные фай­лы с объектным кодом необходимо объединить в одно целое. Кроме того, к ним надо добавить машинный код подпрограмм, реализующих стандартные функции (например, синус или логарифм). Такие функции содержатся в биб­лиотеках (файлах со стандартным расширением .LIB), которые поставляются вместе с компилятором. Поэтому объектный код обрабатывается специальной программой — редактором связей (компоновщиком, сборщиком, линкером), который выполняет связывание объектных модулей и машинного кода стан­дартных функций, находя их в библиотеках. Результатом обработки является исполнимый код, представляющий собой законченную программу–приложение в виде файла с расширением .ЕХЕ или .СОМ. Эта программа может быть выпол­нена только в среде с операционной системой, для которой она создавалась.

Инструментарий программирования. Следует выделить пять базовых инст­рументов, которые используются для разработки приложений на основе микро­контроллеров:

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

    компилятор/ассемблер, выполняющий преобразование исходного кода в ас­семблерные команды микроконтроллера и затем в формат, который может быть загружен в память программ;

    программный симулятор, представляющий собой программу, которая выпол­няет откомпилированный программный код в инструментальном компьютере системы разработки так, как он выполнялся бы в реальной (целевой) систе­ме. Программный симулятор дает возможность вести наблюдение за про­граммой и реакцией микроконтроллера на различные события. Он позволяет исследовать ситуации, трудно воспроизводимые на реальной аппаратуре. Для имитации внешних условий и ситуаций обычно используется специаль­ный файл входных воздействий. Этот файл задает последовательность вход­ных сигналов, поступающих на моделируемое устройство. Несмотря на то, что симуляторы не обеспечивают выполнение программы в режиме реального времени, многие разработчики предпочитают использовать их для моделиро­вания работы устройств в процессе проектирования. Это обусловлено тем, что при симуляции используется исходный текст, а не файлы, сгенерированные компилятором. Следить за выполнением программы с помощью исходного текста намного проще, чем контролировать скомпилированный объектный код. Симуляция используется перед сборкой и включением реального устройства;

    аппаратный, или схемный (InCircuit EmulatorICE), эмулятор, позволяющий организовать интерфейс с микроконтроллером в реальном времени. При его использовании микроконтроллер подключается не к ПЗУ, а к ОЗУ программ и выполняет прикладные задачи с реальной скоростью;

     программатор памяти программ микроконтроллера. Помимо дешевых микроконтроллеров с масочно–программируемой памятью программ, выпус­кается широкий ассортимент контроллеров с E(E)PROM и флэш–памятью.

Такие МК программируются при разработке приложения. Для некоторых типов микроконтроллеров требуется специальный программатор, но чаще всего ис­пользуются возможности внутрисистемного программирования ISP. В этом случае программатор является частью проектируемого устройства.

Проектирование МК–систем. Исходные данные для проектирования микроконтроллерных систем содержат требования к алгоритмам управления и основным технико–экономическим показателям (производительности, энерго­потреблению, стоимости, надежности, конструктивным и другим параметрам). Рассмотрим основные этапы проектирования МК–систем (рис. 5.1.1).

рис. 5.1.1

Разработка архитектуры системы. На этом этапе решаются общие вопросы по выбору состава аппаратных и программных средств для разрабаты­ваемой системы управления, при этом:

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

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

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

Разработка и автономная отладка аппаратных средств. Этот этап может быть выполнен традиционными методами проектирования аппаратных средств, с помощью которых разрабатываются электрическая схема и печатная плата (или комплект плат), после чего выполняются монтаж и отладка системы. Однако путем использования полуфабрикатов или готовых изделий, выпускаемых в большом количестве рядом производителей, можно не только сократить сроки разработки аппаратных средств, но и повысить их качество. К таким изделиям от­носятся:

    оценочные комплекты (Evaluation Kit), представляющие собой набор разме­щенных на плате аппаратных средств, достаточных для реализации неслож­ных систем управления;

●     отладочные платы или системы (Evaluation Board, System) — размещенные на плате программно–аппаратные средства, обеспечивающие моделирование и отладку систем различного назначения на базе определенных моделей микроконтроллеров;

    целевые платы (Target Board — ТВ) — программно–аппаратные средства, ори­ентированные на использование после автономной отладки в качестве прототипной системы;

    одноплатные компьютеры и контроллеры (SingleBoard Computer, ControllerSBC) — конструктивные комплексы, предназначенные для использования в качестве базовых модулей при реализации целевых систем промышленного применения.

Обычно перечисленные выше изделия содержат базовый микроконтроллер, память (ОЗУ, флэш–память, служебное ПЗУ), ряд периферийных и вспомогатель­ных схем, а также разъем для подключения к инструментальному (персональ­ному) компьютеру, используемому при комплексной отладке системы. С их помо­щью реализуется прототип проектируемой системы, на котором можно выпол­нить комплексную отладку программных и аппаратных средств, а в ряде случаев и провести проверку их функционирования в рабочих условиях. После этого нетруд­но разработать рабочий вариант системы, объединив на одной плате использу­емые модули прототипной системы. Прототипная плата может непосредственно использоваться в качестве рабочей (целевой) системы, если ее параметры и кон­структивное оформление удовлетворяют требованиям технического задания. Если имеющихся на плате средств недостаточно, то дополнительные средства проектируются и размещаются на вспомогательной плате.

При разработке аппаратных средств весьма перспективна мезонинная тех­нология, предназначенная для унификации прототипных плат. В этой технологии используется базовая плата–носитель стандартного размера (обычно 45x99 мм2), на которой размещаются от 2 до 12 небольших плат — мезонинов. Мезонины выполняют функции дополнительной памяти и различных периферийных уст­ройств (параллельных и последовательных портов, таймеров–счетчиков, АЦП и ЦАП, сетевых и шинных контроллеров и др.).

Каждый мезонин соединяется с платой–носителем с помощью двух разъемов, при этом:

●     один из разъемов предназначен для подключения к локальной шине платы–носителя;

●     функциональное назначение второго разъема определяется типом мезонина, который может содержать многоканальную систему ввода/вывода, сетевые адаптеры и другие устройства.

Платы–носители представляют собой одноплатные контроллеры SBC, реали­зованные на базе высокопроизводительных микроконтроллеров (МС68332, МС68360 и др.). Они имеют связь с персональным компьютером, могут выпол­нять функции плат развития и использоваться в составе прототипных и целевых систем.

Платы–носители и набор мезонинов серийно выпускаются рядом производи­телей. Используя их, разработчик может быстро реализовать сложные с функцио­нальной точки зрения целевые системы для разнообразных применений.

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

Разработка и автономная отладка программного обеспечения. В процессе разработки и отладки программного обеспечения микроконтроллер­ных систем используются:

    языковые средства, ассемблеры, компиляторы. При программировании мик­роконтроллерных систем часто применяется язык ассемблера, позволяющий существенно уменьшить объем памяти программ и время выполнения про­граммных модулей (до 20–50%). Ассемблеры с широким набором функцио­нальных возможностей, включая макросы (макроассемблеры), поставляются рядом фирм–разработчиков. В качестве языков высокого уровня чаще всего используются С, С++. Поставляемые для них компиляторы обеспечивают так­же программирование на языке ассемблера. Многие компиляторы содержат компоновщики для связи программных модулей, библиотеки функций;

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

•      симулятор, реализующий программно–логическую модель микроконтроллера;

•      компоновщик–загрузчик объектного кода;

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

    операционные системы реального времени (ОСРВ), предназначенные для разработки объектов управления, работающих в реальном масштабе време­ни. В составе многих ОСРВ имеются средства поддержки программирования, которые могут использоваться при проектировании и отладке системы. В настоящее время программирование и отладка чаще всего выполняются с использованием интегрированной среды развития и ли средств ОСРВ. Програм­мирование производится обычно с помощью кросс–средств, инсталлированных на инструментальном компьютере, в качестве которых используются персональ­ные компьютеры (например, IBMPC старших моделей) или рабочие станции.

Комплексная отладка системы. Это наиболее сложный и ответствен­ный этап разработки системы, на котором задействован весь набор программных и аппаратных средств, используемый на этапе автономной отладки, а также ряд специальных средств. К числу наиболее эффективных средств комплексной от­ладки относятся схемные эмуляторы (эмуляторы ПЗУ), включаемые вместо мик­роконтроллера (или ПЗУ) прототипной системы и обеспечивающие возможность контроля ее работы с помощью инструментального (персонального) компьютера.

Заключительной процедурой комплексной отладки является запись в ПЗУ объектных модулей отлаженной программы (с помощью специальных программа­торов) и завершающее испытание ее работоспособности.

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

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

●     переменные могут принимать ряд значений в диапазоне между 0 и 1;

●     сохраняют силу все булевы преобразования и законы (например, ассоциатив­ность);

●     используется набор основных логических операций И, ИЛИ и НЕ (с некоторы­ми особенностями их реализации).

Основу нечеткой логики составляют следующие правила:

●     все утверждения даются в относительном представлении (скорее Истинно, чем Ложно);

●     точное утверждение (Истинно–Ложно) является предельным случаем прибли­женного утверждения;

●     любая логическая система может быть представлена в терминах нечеткой ло­гики («фаззифицирована»);

●     функционирование системы определяется набором нечетких (вероятностных) правил (преобразований), которые оперируют с набором четких входных переменных;

●     логический вывод реализуется с помощью последовательности вероятност­ных преобразований.

В Японии, нечеткая логика стала важной технологией, используемой во многих приложениях, от термостатов в кондиционерах до сложных управляемых комп­лексов.

Особенности использования нечеткой логики покажем на примере решения задачи управления перевернутым маятником (рис. 5.1.2, а): необходимо, переме­щая тележку назад или вперед, удержать маятник в вертикальном положении.

Решение задачи включает следующие основные этапы.

Фаззификация системы. На этом этапе определяются вероятности появ­ления различных выходных переменных в зависимости от входных. В рассматри­ваемом примере входными переменными являются угловое положение маятника и его угловая скорость, а выходными переменными — скорость и направление движения тележки, которые определяют текущее положение тележки.

Можно задать пять выходных зон, в которых может находиться тележка: центр, близко справа, близко слева, далеко справа, далеко слева. Зоны должны покры­вать все части базовой переменной (ось ОХ на рис. 5.1.2, б). Для каждой входной переменной должно быть задано нечеткое множество ее состояний (зон).

рис. 5.1.2

Разработка правил для определения отклика системы. Набор правил формируется для того, чтобы определить величину выходного отклика (направление движения и скорость тележки) на данные условия. Для их разработ­ки могут использоваться различные методы, например, правила типа условий «если — то» или модифицированные карты Карно.

Некоторые правила для рассматриваемой задачи формулируются в следу­ющем виде:

1.    Если Угол = Вертикаль AND Угловая скорость = Останов AND Позиция = Центр, то Скорость = 0 (if Angle = Vertical AND Angular_Speed = Stopped AND Pos = Centre then Speed = 0);

2.    Если Угол = – Наклон AND Угловая скорость = Низкая AND Позиция = Центр, то Скорость = – Низкая (if Angle = – Lean AND Angular_Speed = – Slow AND Pos = Centre then Speed = – Slow).

Аналогичным образом формулируются и другие правила.

Вычисление выходных переменных при различных значениях входных переменных. Для правила 2 возможное значение отрицательного угла отображается, как показано на рис. 5.1.2, а. Значение этого угла равно нечет­кому значению 0,4. Это значение объединяется с помощью операции Логическое И по правилу 2 со значениями Угловая скорость (Angular_Speed) и Положение (Pos), чтобы получить окончательный результат. При выполнении операции И нечеткое значение одной переменной (0,4 для угла в этом примере) сравнивается с нечет­кими значениями других переменных, и в качестве результата используется наи­меньшее из значений переменных. Отметим, что для операции ИЛИ результатом является максимальное значение входных переменных; при выполнении опера­ции НЕ — разность 1 и текущего значения переменной.

 

Найденные значения служат для определения веса выходной величины. Если при вычислениях используется несколько правил, то окончательный результат по­лучается путем комбинирования найденных значений. Для рассматриваемого примера используются два правила, поэтому комбинируются два весовых значе­ния выходной величины. Как показано на рис. 5.1.2, г, значение выходной пере­менной (отклик) располагается в выделенной области. В качестве отклика выбран центр масс.