Обсуждение участника:Mexbios/САПР MexBIOS
Оставляем комментарии по необходимым разделам и главам Mexbios (обсуждение) 05:28, 12 ноября 2015 (UTC)
для того чтобы понять кто сделал коммент пишем ~~~~~ в конце своего комментария
Создать заглавные страницы к главам Kiselev Alexey (обсуждение) 05:29, 12 ноября 2015 (UTC)
08:24, 21 декабря 2015 (UTC)
Панель элементов
правитьВнешний вид
Палитра состоит из разделов в виде списков и блоков сгруппированных по разделам палитры. Список Embedded включает в себя встроенные блоки, которые не могут быть отредактированы. Палитра изменяется, в зависимости от области применения блоков. Всего может быть пять различных состояния палитры. 1. Открыто главное поле набора структуры программы. 2. Открыто поле набора STATE_FLOW. 3. Открыто поле набора ALGORITHM. 4. Открыто поле набора схемы программы (поле набора внутри блоков FORMULA и STATE). 5. Открыто поле набора SUBSYSTEM. Из палитры, перетаскиванием мыши, производится вынос блоков на открытое поле набора.
При несоответствии библиотеки блоков на компьютере с библиотекой блоков зашитой в контроллере (нет блока или не совпал GUID-номер), происходит запрет для использования блоков в схемах.
Описание встроенных блоков Embedded
правитьEVENT (Событие)
правитьНазначение: Запускает, подключенные к событию, системы (ALGORITHM, FORMULA, WHILE, STATE_FLOW), в зависимости от настроек: на программном прерывании либо на аппаратном прерывании.
Группа: Встроенные.
Настройки: Параметр Source (источник прерывания) может быть Аппаратным и Программным. Для Аппаратного прерывания следующие настройки: Вектор – выбор вектора прерывания, настроенного в стартовом проекте. Период – настройка периода выполнения, необходимая для симуляции программы. Должна быть равна периоду аппаратного прерывания. Режим моделирования – режим моделирования прерывания на компьютере. Выключено – прерывание не выполняется, Однократное – выполниться один раз при пуске, Непрерывное – будет выполняться непрерывно. Для Программного прерывания: Условие – условие запуска Значение 1 – величина 1, может быть как VAR, так и константой. Значение 2 – величина 2, может быть как VAR, так и константой. Формат – задание формата данных, которые используются для сравнения в режиме программного прерывания. По умолчанию формат Integer.
Внимание: Срабатывание программного прерывания может работать некорректно, если указан формат данных не совпадающий с форматом переменных указанных в Значение 1 и Значение 2.
Описание: Блок выносится из палитры на поле набора. Имеет один выход. К выходу подключаются вход другого внутреннего блока. Можно подключить только один блок. Программные прерывания выполняются в фоне процессора и не имеют строгой периодичности. В качестве события Программные прерывания можно использовать выполнение условия сравнения 2х переменных. Моделирование на компьютере производиться с заданным периодом.
Внимание: Используемые в проекте аппаратные прерывания, должны быть настроены и запущены в стартовом проекте соответствующим образом.
Примечание: Настройка Режим моделирования имитирует выполнение прерывания в процессе моделирования. Для работы в контроллере, выбранное аппаратное прерывание должно быть разрешено в стартовом проекте. Если прерывание не запущенно в стартовом проекте, то ветка программы, присоединѐнная к EVENT, выполняться не будет.
Область действия: Блок может быть добавлен только на главное поле набора.
ALGORITHM (Алгоритм)
правитьНазначение: Система, внутри которой может быть построена схема из других встроенных блоков (кроме EVENT). Блок предназначен для создания обособленной части программы.
Группа: Встроенные
Описание: Блок выносится из палитры на поле набора. Имеет один вход и один выход. К входу необходимо напрямую подключить блок EVENT, либо подключиться через цепочку других блоков, подключенных к блоку EVENT. К выходу можно последовательно присоединить другие внутренние блоки.
Область действия: Блок может быть добавлен на поле набора как для Models, так и для открытой библиотеки чипа. Также можно создать вложенность одного ALGORITHM в другой. Внутри блока могут содержаться блоки IF, FORMULA, ALGORITHM, STATE_FLOW, STICKER.
FORMULA (Формула)
правитьНазначение: Внутри блока создаѐтся функциональная часть реализуемой программы управления из внешних блоков, расположенных в палитре.
Группа: Встроенные
Описание: Блок выносится из палитры на поле набора. Имеет один вход и один выход. К входу необходимо напрямую подключить блок EVENT, либо подключиться через цепочку других блоков, подключенных к блоку EVENT. К выходу можно последовательно присоединить другие внутренние блоки. Из FORMULA можно передать сигнал с помощью TP_IN, TP_OUT в другую FORMULA, либо STATE, либо FORMULA и/или STATE библиотеки MODELS.
Область действия: Блок может быть добавлен на поле набора как для Models, так и для библиотеки процессора. Внутри блока могут содержаться блоки TP_IN, TP_OUT, STICKER и внешние блоки к открытой библиотеке.
IF (Условие «Если»)
правитьНазначение: Разделение алгоритма программы на два возможных случая, в зависимости от выполнения назначенного условия
Группа: Embedded
Настройки: Параметр Condition – логическое условие сравнения либо оператор применяемый к Значение 1 и Значение 2. Доступны логические операции: равно (==), не равно (!=), больше(>), больше либо равно (>=), меньше (<), меньше либо равно (<=), И (AND), И-НЕ(AND-NOT), ИЛИ (OR), ИЛИ-НЕ (OR-NOT), исключающая ИЛИ (XOR), исключающая ИЛИ-НЕ (XOR-NOT). Значение 1 и Значение 2– список добавленных на схему переменных. Сравнение переменной можно производить с константой, для этого необходимо выбрать пункт Константа…. Формат – выбирается формат данных, в котором выполняются операции.
Описание: Для работы с блоком IF необходимо указать условие выполнения ветки true или false. В зависимости от выполнения условия срабатывают системы (FORMULA, ALGORITHM, STATE_FLOW) подключенные последовательно к выходам блока. Допустимо оставлять одну пустую (не содержащую Формулу или Алгоритм) ветвь true или false. Для корректной работы блока необходимо замкнуть ветки true и false в узел. К получившемуся узлу можно подключать другие внутренние блоки.
Область действия: Блок может быть добавлен на поле набора как для Models, так и для библиотеки процессора.
WHILE (Условие «Пока»)
правитьНазначение: Выполняет находящуюся внутри блока схему, пока выполняется заданное условие
Группа: Встроенные
Настройки: Параметр Condition – логическое условие сравнение либо оператор применяемый к Value 1 и Value 2. Доступны логические операции: равно (==), не равно (!=), больше (>), больше либо равно (>=), меньше (<), меньше либо равно (<=), И (AND), И-НЕ(AND-NOT), ИЛИ (OR), ИЛИ-НЕ (OR-NOT), исключающая ИЛИ (XOR), исключающая ИЛИ-НЕ (XOR-NOT). Value 1 и Value 2 – список добавленных на схему переменных. Сравнение переменной можно производить с константой.
Описание: Для работы с блоком WHILE необходимо указать условие пока будет выполняться собранная внутри схема.
Внимание: Необходим гарантированный выход из цикла WHILE за конечное число расчетов программы, иначе произойдет потеря режима реального времени и зависание процессора.
Область действия: Блок может быть добавлен на поле набора как для Models, так и для библиотеки процессора.
STATE_FLOW (State-машина)
правитьНазначение: Блок реализует оболочку для создания State-машины
Группа: Встроенные
Описание: Блок STATE_FLOW может содержать вложение блоков STATE_FLOW, что позволяет создать state-машину внутри state-машины. Количество вложений ограничено количеством памяти, выделенной в контроллере. Внутри каждого блока STATE_FLOW можно создать блок FORMULA, причем блок FORMULA не будет иметь входа и выхода, что означает, что схемы собранные внутри блока будут выполняться всегда, если выполняется состояние, в котором расположена FORMULA. Внутри блока с помощью блоков STATE и STATE_FLOW создаѐтся машина состояния – действие программы описываются конкретными состояниями системы, и задаются условия перехода между этими состояниями (назначается на соединительные линии). Для блока STATE_FLOW существует настройка Start state, которой устанавливается начальное состояние, с которого начнѐтся выполняться State-машина.
Примечание: По умолчанию стартовым состоянием назначается первое состояние STATE, помещѐнное на поле набора. Если схема собрана только блоками STATE_FLOW, то необходимо вручную задать стартовое состояние для родительского STATE_FLOW.
Область действия: Блок может быть добавлен на главное поле набора, ALGORITHM. Внутри блока могут находиться блок STATE, STATE_FLOW, FORMULA и STICKER
STATE (Состояние)
правитьНазначение: Блок состояния, внутри могут находиться внешние блоки из палитры. Блок может подключаться к другому блоку состояния и на линию связи назначается условие перехода из текущего состояния в другое состояние. Начальное состояние по умолчанию назначается первое, вынесенное на поле набора, состояние.
Группа: Встроенные
Описание: Внутри блока могут быть добавлены внешние блоки из палитры и блоки TP_IN, TP_OUT, STICKER.
Область действия: Блок может быть добавлен только внутрь блока STATE_FLOW
FORMULA (Формула для STATE_FLOW)
правитьНазначение: Внутри блока создается функциональная часть реализуемой программы управления из внешних блоков, расположенных в палитре. Формула выполняется в том случае, если активно состояние, в котором размещена формула.
Группа: Встроенные
Описание: Блок выносится из палитры на поле набора STATE_FLOW. Из FORMULA можно передать/использовать сигнал с помощью TP_IN, TP_OUT.
Область действия: Блок может быть добавлен на поле STATE_FLOW. Внутри блока могут содержаться блоки TP_IN, TP_OUT, STICKER и внешние блоки к библиотеке.
STICKER (Комментарий)
правитьНазначение: Блок создания комментариев на схеме. Хранит в себе текст комментария.
Группа: Встроенные
Описание: В параметр Strings записывается текст комментария
Область действия: Может находиться в любой из систем
TP_OUT (Передатчик сигнала (Teleporter From))
правитьНазначение: Блок позволяет передать сигнал из схемы, в которой он расположен, в любую другую схему в которой расположен блок TP_IN. Может связывать библиотеки Models и библиотеку блоков процессора (необходимо при моделировании).
Группа: Встроенные
Описание: Блок предназначен для передачи сигнала, присоединѐнного к входу блока, в блок TP_IN. Сигнал будет передаваться в любой (может несколько) привязанный к блоку TP_OUT блок TP_IN. Блоки TP_OUT позволяют организовать передачу данных между библиотеками и между использованными в программе встроенными блоками. Блок имеет параметр Tag, который отвечает за привязку к блоку блоков TP_OUT.
Примечание: В проекте не может быть двух блоков с одинаковыми Тег.
Область действия: Блок может находиться только в системах FORMULA и STATE.
TP_IN (Приемник сигнала (Teleporter To))
правитьНазначение: Блок приемник сигнала из блока TP_OUT.
Группа: Встроенные
Описание: Блок предназначен для приѐма сигнала из блока TP_OUT. Для связи блока TP_OUT с TP_IN, в настройках блока необходимо выбрать свойство Tag блока TP_OUT (от которого передаѐм сигнал) из выпадающего списка.
Область действия: Блок может находиться только в системах FORMULA и STATE.
SYBSYSTEM (Подсистема)
правитьНазначение: Создание подсистемы для внутренних блоков на поле набора FORMULA или STATE
Группа: Встроенные
Описание: При двойном нажатии ЛКМ на блоке откроется поле набора подсистемы, где можно собирать схему, либо вырезать часть большой схемы и вставить внутрь подсистемы. В палитре появится два блока SUBIN и SUBOUT – блоки входа и выхода для подсистемы. Дополнительные входа/выхода можно добавить из Панели элементов или скопировать существующие.
Область действия: Блок может находиться только в системах FORMULA и STATE.
Блок LEXER
правитьБлок Lexer представляет собой специальный блок, в котором можно писать программу на языке подобному языку стандарта МЭК 61131 -3 структурированный текст (ST). Не описанные далее структуры языка ST в блоке Lexer не поддерживаются. Также имеются особенности синтаксиса ветвления IF и цикла WHILE.
Для библиотек, поддерживающих вычисления в формате Float (например: TMS320F2833x, LM4F23 и др.) формат данных по умолчанию в блоке Lexer является Float. Для библиотек, которые производят вычисления в формате с фиксированной запятой, формат для блока Lexer по умолчанию Integer.
Данный блок поддерживает возможность обмениваться данными (считывать/записывать) с переменными, объявленными в проекте.
Внимание: Особенностью блока является то, что он должен содержать всегда правильный код. Редактор блока не закроется, пока текст программы не будет содержать ошибок.
При двойном нажатии на блок появится окно, представленное на следующем рисунке:
Структура любой LEXER-программы имеет следующие зарезервированные слова: PROGRAM – объявление начала программы. После этого ключевого слова должно следовать имя программы на латинице. Имя не должно начинаться с цифры. INPUT_VAR – после этого ключевого слова объявляются входа блока. В зависимости от числа объявленных входов в этой секции, будут появляться входа у блока на поле набора. Секция должна обязательно содержать ключевое слово END_VAR, означающее, в данном случае, завершение объявление входов. OUTPUT_VAR – ключевое слово начала объявления выходов блока. В зависимости от числа объявленных выходов в этой секции, будут появляться выхода у блока на поле набора. Раздел должен обязательно содержать команду END_VAR, означающую, в данном случае, завершение объявление выходов. LOCAL_VAR – раздел объявление локальных переменных, действующих внутри блока. Далее следует основная программа, которая должна обязательно заканчиваться командой END_PROGRAM. Комментарии заключаются в символы (* *).
Объявление входов/выходов
Объявление входов/выходов имеет следующий синтаксис:
Входа
(* Input variables *) INPUT_VAR In : INT; In1 : Q24; In2 : FLOAT; END_VAR
Выхода
(* Output variables *) OUTPUT_VAR Out : INT; Out1 : Q24; Out2 : FLOAT; END_VAR
Для каждого входа/выхода необходимо задать формат, в котором будут производиться вычисления. Соответственно на вход блока необходимо подавать сигнал в указанном формате. На выходе блока будет сигнал указанного формата. Возможно использовать следующие форматы INT – целочисленный формат, FLOAT – формат с плавающей запятой, Q1 – Q30 – формат фиксированной запятой.
Объявление локальных переменных
Объявление локальных переменных имеет подобный синтаксис, как и для входов/выходов, только возможно задать начальное значение:
(* Local variables *) LOCAL_VAR VAR : INT := 10; VAR1 : Q24 := 12; VAR2 : FLOAT := 0; END_VAR
Если переменная объявления в формате VAR1 : Q24 := 12; Число в VAR1 запишется в формате Q24, дополнительно переводить не нужно. Также с другими форматами.
Использование внешних переменных
Если на главном поле набора объявлены переменные (вынесены из Панели элементов блоки VAR), то в тексте программы Lexer возможно непосредственное обращение к этим переменным.
Математические операции
Поддерживаются основные математические операции:
a * b - умножение; a / b - деление; a + b - арифметический плюс; a -- b - арифметический минус; -a – унарный минус; +a – унарный плюс;
Внимание: Математические операции выполняются в формате, который задан по умолчанию для текущей библиотеки. Для библиотек поддерживающих вычисления с плавающей запятой это Float, для библиотек производящих вычисления в формате с фиксированной запятой это Integer. Для математических вычислений в формате, отличном от формата по умолчанию необходимо использовать блоки как функции из группы Math.
Использование внешних блоков как функций:
Можно использовать внешние блоки как функции. Например, для умножения в формате IQN необходимо написать следующее:
Out := MPY(VAR, Q24(2), 24); Где MPY – блок в группе Math. Необходимо указывать следующие аргументы для блока – входа и дополнительный параметр – формат. Если у блока больше входов и параметров, то аргументами функции будут сначала входа сверху вниз, затем параметры, которые отображаются на вкладке Параметры в окне Редактора блока.
Свойства.
Рассмотрим PID регулятор:
Для использования функции PID регулятора в блоке Lexer необходимо написать следующее выражение:
Out := PID(Ref, Fdb, Res, 1, 0,0,0, -1,1, 0, 0, 0); где Ref, Fdb, Res – входа блока Lexer, объявленные в поле ключевого слова INPUT_VAR.
Приведение формата для констант
Для констант возможно применение преобразование формата:
FLOAT(3.14) INT(1000) Q1(3.5) ... Q30(1.234)
Преобразование формата для констант можно использовать как аргументы функций, в сравнениях.
Внимание: Недопустимо использовать преобразование форматов для входов/выходов и для переменных.
Ветвление IF и цикл WHILE
Возможно использование структуры IF и цикла WHILE. Пример ветвления IF: Ветвление используется для проверки условия и в зависимости от этого условия выполнить какие-либо действия.
IF VAR > 0 THEN VAR := VAR + 1; END_IF
Также можно использовать дополнительные условия:
IF VAR > 1000 THEN VAR := VAR + 1; ELSE_IF VAR < 0 THEN VAR := VAR + 2; ELSE VAR := VAR + 3; END_IF
Можно использовать множество условий ELSE_IF.
Пример цикла WHILE:
Цикл выполняется, пока верно заданное условие. Необходимо, чтобы выход из цикла гарантированно выполнялся.
WHILE VAR < 10 THEN VAR := VAR + 1; END_WHILE
Принципы создания программ
правитьСтруктура и условие выполнения частей программы создаются с помощью внутренних блоков (EVENT, FORMULA, ALGORITHM, WHILE, STATE_FLOW). Ветвление структуры (выполнение одной из частей программы по условию) программы производится с помощью блока условия IF. Внутренние блоки соединяются с помощью линий связи, которые показывают направление и порядок выполнения соединенных внутренних блоков. Основные функции программы создаются в блоках FORMULA и STATE из внешних блоков библиотеки для выбранного процессора с помощью настройки параметров и создания связей между блоками. Связь между функциями программы (передача данных) осуществляется с помощью блоков TP_IN, TP_OUT. Также из разных FORMULA и STATE можно обратиться к одной переменной VAR. После создания нового файла по умолчанию создается FORMULA (MAIN), присоединенная в ветку BACKGROUND. Все элементы программы, подключенные к ветке BACKGROUND, будут находиться в цикле не занятости процессора (Idle Loop – т.е. будут выполняться в свободное от выполнения прерываний время процессора). В ветке BACKGROUND блоки, требующие работы со строгой периодичностью, будут работать без привязки к реальному времени, т.е. результаты могут быть не корректны. Цикл занятости процессора формируется прерываниями (Interrupts). Прерывание создается с помощью блока EVENT с соответствующей настройкой (см. далее). Линия связи EVENT с FORMULA, ALGORITHM, WHILE, STATE_FLOW, IF передает очередность выполнения блоков с предыдущего элемента программы, образуя тем самым структуру программы. Также необходимо расставлять очередность выполнения внешних блоков. Для этого необходимо в порядке нужной очередности выполнения блоков выделить блоки, находящиеся на схеме. Далее нажать ПКМ по выделенным блокам и выбрать пункт меню Задать порядок вызова. Для отображения/скрытия индексов очередности выполнения блоков нажмите клавишу F3. Процессором выполняются только те конструкции, которые подключены к EVENT (при срабатывании условия запуска события). Не подключенные внешние блоки к EVENT не генерируются в матрицу и, следовательно, не выполняются. К EVENT и каждой последующей системе может быть подключена только одна система. Блок IF разделяет алгоритм на два возможных пути, к выходу true и false можно также последовательно подключать блоки FORMULA, ALGORITHM, STATE FLOW.
Создание программы
правитьЛюбой из внутренних блоков программы ALGORITHM, FORMULA, WHILE, STATE_FLOW должен быть непосредственно, либо через другие внутренние блоки, присоединен к блоку EVENT. При создании схемы на поле набора помещена структура (BACKGROUND), которая работает в цикле незанятости процессора (Idle loop). В цикле незанятости могут располагаться блоки, не требующие строгой периодичности выполнения. Блоки, которые требуют строгой периодичности выполнения, должны быть соединены с блоком EVENT, который привязан к периодичному прерыванию.
Рассмотрим порядок действий для создания периодически выполняемой программы:
1. Для создания ветки программы, привязанной к прерыванию, вынесите на поле набора блок EVENT.
2. Для настройки свойств блока EVENT в инспекторе выделите блок и проделайте следующее:
2.1. Свойство Источник переключите в 2 : Аппаратное прерывание.
2.2. Выберете вектор прерывания TINT0 (для разных процессоров может быть разным, уточнить в документации к библиотеке процессора), раскрыв список Вектор.
2.3. Установите период прерывания, равный периоду прерывания указанному в стартовом проекте. Для процессора TMS320F281 x частота прерывания TINT0 равна 5000 Гц, задается в файле config.h стартового проекта:
- define HZ 5000 // Main isr frequency
Период = 1/5000 = 0.0002 – за одну секунду программа привязанная к главному прерыванию выполнится 5000 раз.
3. Свойство Режим моделирования установить в режим 2: Непрерывное. Настройка 0: Выключено означает, что событие не будет запускаться, 1: Однократное - выполнится один раз.
4. Прерывание настроено. В зависимости от необходимости к событию EVENT, привязанному к прерыванию TINT0 можно последовательно присоединить FORMULA, ALGORITHM, STATEFLOW, IF, WHILE. Для проверки работоспособности проделаем следующее:
5. Перетащите на поле набора аналогичным образом, из Панели элементов, группа Embedded, блок FORMULA.
6. Присоединить вход к выходу блока TINT0, выход присоединить к блоку END.
7. Двойным нажатием ЛКМ войти внутрь FORMULA.
8. Собрать следующую схему с использованием Label (Embedded→Controls→LABEL).
8.1. Блок CONST находится в Панели инструментов→Embedded (активно поле набор FORMULA). Параметры блока CONST: Формат 0: Integer, Значение = 1 ;
8.2. Блок LABEL находится в Панели инструментов →Embedded→Controls. Параметры блока LABEL: Формат 0: Integer, Переменная 0: Не задано, Значение = 0;
8.3. Блок ADD находится в Панели инструментов →TMS320F281 x→Math.
9. Запустить моделирование программы (горячая клавиша F5 либо вкладка Домой→Начать моделирование). Убедиться, что счетчик аккумулирует единицу при каждом такте расчета. За единицу модельного времени счетчик должен досчитать до 5000.
10. Если значение в Label при моделировании не изменяется, то проверьте что в CONST параметр Значение = 1 и в настройках EVENT TINT0 параметр Режим моделирования установлен как 2 : Непрерывное.
Глобальные переменные VAR
правитьОбъявление переменной (вынос блока VAR на рабочее поле) выделяет ячейку памяти. К выделенной ячейке памяти можно обратиться из любого места программы (в рамках одной библиотеки), то есть произвести чтение и запись в переменную. Переменные VAR могут применяться для управления блоками IF, WHILE, создания программного прерывания блоком EVENT, организацию перехода из одного состояния в другое в STATE_FLOW. Также могут применяться для передачи сигналов в программе по усмотрению пользователя.
Блок VAR работает совместно с блоками IN и OUT. Привязка этих блоков к глобальной переменной осуществляется выбором имени переменной из списка существующих в параметре Переменная.
Если привязать блок OUT к переменной VAR, то значение, записываемое в блок OUT, будет передаваться и в VAR. Изменить значение блока VAR в этом случае можно только изменением величины на входе блока OUT.
Внешний вид, привязанных к переменным, блоков IN и OUT изменяется. Если привязать блок IN к переменной VAR, то на схему с выхода блока IN будет передаваться значение переменной VAR. Задать значение VAR или IN (связанные между собой) вручную через вкладку окна Переменные можно только при отсутствии привязки переменной VAR к блоку OUT.
Применение блока IF. Расчет части программы на частоте кратной основной частоте прерывания
править1. Для деления частоты нужно использовать специальный импульсный генератор FREQ_DEVIDER (Панель элементов группа Sources). Для этого в FORMULA, которая выполняется с частотой главного прерывания, нужно поместить схему:
2. В блоке IN указать число, кратно которому необходимо чтобы выполнялась часть программы. Выход необходимо передать в OUT, привязанной к переменной VAR.
3. Собрать схему простого счетчика
3.1. Блок CONST и LABEL находятся в группе Embedded. fADD – группа Math.
3.2. Задать время симуляции 1 с. Запустить симуляцию – убедиться, что за 1 с счетчик накапливает значение 10000 (частота TINT0 для данного примера).
4. Далее собрать следующую схему:
В блоке freq_10kHz располагается схема делителя частоты. А в блоке freq_1 kHz будет выполняться на кратной основной частоте.
4.1. Блоки FORMULA, IF, EVENT, VAR находятся в Панель элементов→Embedded.
4.2. Блок IF необходимо настроить следующим образом:
4.3. Параметр Условие задаѐт условие Равно, при котором срабатывает ветка true. Величину Значение 1 привязать к переменной, а Значение 2 задать константой и равной 1. Формат оставить Integer.
Внимание: Формат переменных должен быть одинаковым и должен совпадать с форматом, заданным в параметре Формат.
4.4. После назначения условия внешний вид блока IF отображает назначенное условие.
4.5. Скопируйте из freq_10kHz схему простого счѐтчика и вставьте в freq_1 kHz.
4.6. Добавьте LABEL из freq_10kHz и freq_1 kHz в окно Переменные.
4.7. Запустите симуляцию. Убедитесь, что накопленное число в счѐтчике freq_1 kHz меньше в N раз чем в freq_10kHz.
Применение State Flow
правитьБлок STATE_FLOW предназначен для реализации визуальной программы методом состояний. Метод состояний (state flow) – метод программирования, когда задача описывается конечным числом состояний, в которых может работать программа для решения конкретной задачи. Переход из одного состояния в другое происходит по заданному событию перехода. Блок может быть добавлен на главное поле набора, или в ALGORITHM. Внутри блока могут находиться блоки STATE и STICKER.
Пусть необходимо создать программу, выполняющую следующие действия:
Для реализации необходимо три переменные: A, B, C. И ещѐ одна переменная Const.
Необходимо выполнить следующие действия:
1. Запустите программу и создайте схему для нужного процессора, например TMS320F2833x.
2. Из Панель элементов→Embedded добавьте четыре блока VAR. Переименуйте их согласно рисунку . В переменную Const параметр Значение=1 00;
3. Создайте прерывание TINT0, как описано в разделе «Создание программы».
4. Из Панель элементов →Embedded добавьте блок STATE_FLOW.
5. Полученная промежуточная схема представлена рисунке.
6. Два раза нажмите ЛКМ на блок STATE_FLOW. Откроется поле набора.
6.1. Добавьте три состояния из Панель элементов →Embedded→STATE. Первое вынесенное на поле набора состояние установится начальным состоянием в параметре Начальное состояние блока STATE_FLOW.
6.2. Соедините блоки STATE между собой.
6.3. Два раза нажмите ЛКМ на блоке STATE (начальное состояние).
6.4. Внутри блока соберите следующую схему:
6.5. Для блоков на рис.97 произведите следующие настройки:
Блоки констант:
CONST_1 : Формат 31 : Float; Значение =1; CONST_0: Формат 31: Float; Значение =0; CONST_00: Формат 31: Float; Значение =0.
Блок IN:
IN_A: Формат 31:Float; Значение=1.
Блоки OUT:
A: Формат 31: Float; Variable: A; Значение=0; B: Формат 31: Float; Variable: B; Значение=0; C: Формат 31: Float; Variable: C; Значение=0.
После назначения связи с переменной вид блоков OUT изменится.
В схеме, на рисунке, счетчик реализует операцию инкрементирования A++.
6.6. Необходимо, чтобы порядок выполнения блоков был по направлению распространения сигналов от IN к OUT.
6.7. В другие состояния, необходимо скопировать полученную схему и поменять местами переменную, в которую будет производиться инкрементирование. Изменить переменную на счетчик. Схемы для двух других состояний представлены на рисунке:
Настройки для блоков констант не изменяются. Для второго состояния необходимо к счетчику подключить OUT, привязанный к блоку B, к входу счетчика подключить блок IN, привязанный к переменной B. Для третьего состояния необходимо к счетчику подключить OUT, привязанный к блоку С, к входу счетчика подключить блок IN, привязанный к переменной С.
7. Далее необходимо назначить условие на линии перехода из состояния в состояние.
7.1. Выделить нужную линию перехода внутри блока STATE_FLOW.
7.2. В Свойства назначить условие перехода, как показано на рисунке:
7.3. После назначения всех условий схема примет вид:
8. Добавить переменные A, B, C в окне Переменные.
9. В вкладке Домой→Параметры. В окне Параметры на вкладке Общие в разделе Моделирование установить настройки
10. Запустить моделирование системы. Наблюдать в окне Переменные работу алгоритма.
Применение блока цикла WHILE
правитьЦикл (WHILE) – отличается от встроенного блока ALGORITHM тем, что выход из системы созданной внутри этого блока может произойти только по заданному в параметрах блока условию.
Важно, чтобы условие выхода из блока WHILE срабатывало за ограниченное число циклов, иначе произойдет зависание программы в режиме симуляции и зависание ядра в микроконтроллере.
Одной из особенностей данного цикла является то, что во время выполнения цикла невозможно в реальном времени отслеживать процессы, происходящие внутри него. Обновление переменных, задействованных в цикле, производится после выхода из него. Рассмотрим работу данного блока на примере.
Пример использования блока While.
Пример будет реализовывать следующее: в блоке WHILE будет производиться инкрементирование переменной VAR, пока не выполнится условие. После выхода из WHILE величина VAR будет накапливаться в OUT (с помощью сумматора и переменной). Переменная VAR в конце цикла будет обнуляться.
Параллельно будет работать счетчик, показывающий работу основного прерывания. Например, если условие выхода из WHILE будет VAR<10, то схемы внутри WHILE будут рассчитываться 10 раз за один такт события (прерывания), к которому подключен блок WHILE.
1. Запустите программу и создайте схему для нужного процессора, например TMS320F281 x.
2. Создайте прерывание TINT0, как описано в разделе «Создание программы».
3. Из Панель элементов→Embedded добавьте блок WHILE.
4. Добавьте на поле набора блок FORMULA из библиотеки Embedded.
5. Добавьте на поле блок VAR.
6. Задайте свойства блока WHILE в соответствии с рисунком:
7. Соедините и переименуйте элементы схемы в соответствии с рисунком:
8. Нажмите два раза ЛКМ по блоку WHILE, откроется поле набора цикла While.
9. Добавьте блок FORMULA из Palette, произведите соединение как показано на рисунке:
10. Перейдите на поле набора FORMULA_WHILE.
11. Создайте внутри блока FORMULA_WHILE схему, аналогичную представленной на рисунке:
12. Перейдите в окно набора формул блока FORMULA, находящегося в корневом поле набора и создайте в нем схему, аналогичную приведенной на рисунке:
13. Задайте параметр Замедление моделирования равным 100.
14. Порядок выполнения блоков, должен быть по порядку в направлении передачи сигнала (от IN к OUT).
15. Запустите симуляцию и наблюдайте за изменением отображаемых значений блоков LABEL:
В WHILE происходит увеличение переменной VAR на единицу за один такт выполнения WHILE до тех пор, пока выполняется условие цикла (VAR<10). По достижении переменной VAR значения 10 выполняется условие выхода из цикла и происходит переход в блок FORMULA_1, где к счетчику прибавляется значение переменной VAR. Второй счетчик показывает количество выполненных прерываний. После достижения счетчиком заданного значения в условии WHILE, переменная VAR обнуляется. Цикл программы завершается.
Визуальные компоненты управления
правитьВизуальные органы управления являются надстройками над блоками IN и OUT. К каждому блоку IN, OUT можно назначить визуальный орган управления. Визуальные органы управления позволяют сделать программное обеспечение MexBIOS™ Development Studio интерактивным.
В MexBIOS™ Development Studio существуют два набора визуальных органов управления, для ввода и вывода информации, соответственно назначаемые блокам IN и OUT.
IN
- None;
- BUTTON;
- TRACKBAR;
- EDIT;
- RADIO_IN;
- CHECK_IN;
- PROTO_IN (появляется при наличии в проекте одного или нескольких блоков протокола).
- GRID;
- STRING_IN;
Out
- None;
- LABEL;
- PROGRESS;
- BULB;
- AGAUGE;
- ANIMATE;
- RADIO_OUT;
- CHECK_OUT;
- PROTO_OUT (появляется при наличии в проекте одного или нескольких блоков протокола).
- STRING_OUT
Назначение визуальных органов управления для других типов блоков не предусмотрено.
Когда схема находится в неактивном режиме, на визуальных органах управления появляется значок «замок», показывающий, что визуальный орган управления не активен.
В неактивном режиме можно произвести изменение состояния визуального органа управления. Для этого необходимо зажать кнопку Alt и нажать ЛКМ один раз по блоку – блок перейдет в активное состояние, кнопку Alt можно отпустить. Провести изменение состояния визуального органа управления с помощью соответствующего нажатия ЛКМ. После нажать на поле набора ЛКМ, визуальный орган управления перейдѐт в неактивное состояние.
Отладка программы
правитьБлок виртуального осциллографа
правитьОсциллограф предназначен для графического отображения сигналов. Может работать в двух режимах: по точкам и буфером. Простой режим осциллографа предназначен для использования в режиме моделирования. Позволяет отображать на осциллографе заданное количество точек графика. Буферный режим предназначен для использования в режиме обновления связи с контроллером, но может работать и в режиме моделирования. Позволяет отображать на осциллографе ограниченное число точек (ограничение вызвано областью памяти выделенной под данные в памяти контроллера).
Настройки осциллографа.
1. Откройте пример Models_um_ScopeTest.mbp. Для открытия примеров перейдите на вкладку Помощь, нажмите кнопку Примеры. Пример создан в библиотеке Models.
2. Зайдите в формулу MAIN.
3. Два раза нажмите ЛКМ по блоку SCOPE.
4. Нажмите кнопку вызова настроек осциллографа.
5. Установите Формат сигналов, которые подключены к блоку осциллографа.
6. Нажмите на клавишу OK для применения настроек осциллографа.
7. Запустите симуляцию (кнопка Начать моделирование на вкладке Домой главного меню).
8. Наблюдайте процесс построения графика в окне осциллографа.
Режим По точкам предназначен для потокового отображения сигнала на экране виртуального осциллографа. Режим не подходит для использования в режиме связи с контроллером (при отображении быстро изменяющихся сигналов во времени) из-за медленного процесса обмена данными между компьютером и микроконтроллером частота передачи сигнала не высока (период считывания порядка 0,7 секунды).
Режим триггера для режима По точкам
правитьДля использования режима триггера необходимо:
1. Выбрать канал (опция Источник для синхронизации) по которому будет выполняться срабатывание триггера.
2. Выбрать режим (Режим синхронизации) как по фронту или однократный.
3. Выбрать срабатывания триггера (Активный фронт) спадающий или нарастающий сигнал.
4. Установить уровень срабатывания триггера – Уровень сигнала.
5. Запустить моделирование.
График будет отображаться при срабатывании триггера и не будет построен, пока не выполнится условие срабатывания триггера.
Режим Буфер работы осциллографа
правитьВ ядре MexBIOS™ предусмотрена возможность просматривать в графическом виде изменение значений глобальных переменных. Чтобы построить график, изменения значения по тому или иному адресу глобальных данных, ядро MexBIOS™ с заданной частотой сохраняет данные по этому адресу в массив. Такой массив вычитывается с заданной периодичностью (период равен времени заполнения буфера плюс время на передачу по каналу связи) из памяти микропроцессора. По переданному массиву, блок осциллографа, в буферном режиме работы, строит график. Процесс вычитывания данных отображается полосой загрузки под графиком осциллографа (в режиме обмена данными). Одновременно ядро MexBIOS™ может строить до 6 каналов. MexBIOS™ Development Studio выводит каналы в виде графиков. Основное назначение буферного режима – получение графиков при работе с контроллером, но он может использоваться и в режиме моделирования.
Пример работы с буферным осциллографом:
1. Откройте окно настройки осциллографа.
2. Измените режим выборки с по точкам на буфером.
3. Нажмите OK.
4. Повторно откройте окно опций осциллографа.
5. Задайте параметр Децимация = 100. Это означает, что каждая 100 точка будет отображаться на графике, таким образом, график «сожмётся» по оси времени.
6. Закройте окно настроек, нажав кнопку OK.
7. Запустите процесс моделирования (кнопка Начать моделирование на вкладке Домой главного меню).
8. Построение графиков не начнётся автоматически при запуске моделирования. Необходимо нажать кнопку «пуск обновления данных» в окне SCOPE.
9. После запуска обновления данных, запустится накопление данных в массив.
10. При необходимости подстроить параметр Децимация (для сжатия графика по оси времени).
11. В режиме моделирования процесс накопления данных не будет показан. В режиме связи с микроконтроллером будет происходить отображение процесса накопления данных в массив.
Режим триггера для режима буфер
правитьДля использования режима триггера в буферном осциллографе необходимо:
1. Выбрать канал (опция Источник для синхронизации) по которому будет выполняться срабатывание триггера.
2. Выбрать режим (Режим синхронизации) как по фронту или однократный.
3. Выбрать срабатывания триггера (Активный фронт) спадающий или возрастающий сигнал.
4. Установить уровень срабатывания триггера – Уровень сигнала.
5. Запустить моделирование или начать обновление.
График будет отображаться при срабатывании триггера и не будет построен, пока не выполнится условие срабатывания триггера.
Функция пошаговой отладки программы
правитьВ режиме моделирования реализована возможность пошаговой отладки программы. Данная функция позволяет пошагово отследить работу собранной схемы, корректность выполнения каждого блока. Режим доступен только в Моделировании. Для того что бы перейти в режим пошагового моделирования необходимо нажать кнопку «Сделать шаг» на панели меню. Программа произведет расчет первого блока и перейдет к следующему, остановившись, в ожидании дальнейших действий. Отображение времени будет идти согласно заданному «периоду дискретизации».
Работа с библиотеками блоков
правитьРабота с библиотеками блоков предполагает: создание новых блоков, удаление блоков, редактирование существующих блоков, скрытие исходного кода блоков. Пользователь может создавать собственные блоки с помощью Редактора блока. Исходный код блока может быть открыт или закрыт для редактирования. Закрытие библиотеки необходимо для скрытия исходного кода от пользователя, в библиотеку встраиваются только откомпилированные блоки и готовый out файл библиотеки для самостоятельной загрузки в flash-память. При этом пользователь может создавать собственные блоки и размещать их в отдельную секцию flash-памяти. При открытой библиотеке все блоки доступны для редактирования с помощью инструмента редактирования блока. Пользователь может по своему усмотрению вносить изменения и дорабатывать блоки, предложенные в библиотеке. Вся ответственность при таком редактировании ложится на пользователя. Редактор блока вызывается отдельно для каждого блока двойным нажатием левой клавишей мыши по блоку в Панели элементов. Также конструктор можно вызвать, нажав на блок правой клавишей мыши и в ниспадающем меню выбрать пункт Редактировать код. Изменения затронут все экземпляры блока, на открытой схеме
Редактор блока
правитьОсобенностью создания и редактирования блоков является назначение уникального номера ID, состоящего из уникального набора байтов. Для осуществления проверки соответствия блоков загруженных в чип и находящихся в библиотеке необходимо на вкладке Правка нажать кнопку Проверить блоки. После завершения процедуры проверки, появится сообщение об удачной верификации библиотеки или перечень блоков, ID которых не совпал с номером ID в текущей библиотеке. Если такие блоки есть, то произойдёт блокирование их для выноса на поле набора.
Создание и редактирование блоков
правитьСоздание блока представляет собой последовательность из нескольких шагов, которые производятся в каждой отдельной вкладке конструктора. Переключение между вкладками конструктора блока происходит непосредственным нажатием на соответствующую вкладку либо на кнопки Назад / Вперед в нижней панели. Кнопка Закрыть закрывает конструктор блока.
Закладка Входы
правитьЗакладка Входы предназначена для создания входов блока и настройки формата данных.
Описание редактируемых параметров закладки Входы:
• Имя – имя входа, отображаемого на блоке. Заданное имя входа используется в Code editor, для обращения к данным поступающим через вход и обработки их внутри исполняемого кода блока. Внутри кода блока не допускается присвоение нового значения входа.
• Формат — формат данных входа, назначается из ниспадающего списка форматов. Список вызывается левым щелчком мыши, после выделение ячейки.
Параметр Формат определяет способ хранения и передачи данных между блоками в ядре операционной среды. Существует три основных варианта представления данных:
1) Целочисленное значение типа 0: Integer. Например, значение «5» будет представлено как «5» в десятичном формате.
2) Дробное значение с фиксированной запятой типа n: Qn (n – определяет степень формата). Степень «n» определяет диапазон возможных значений и точность хранения дробной части числа представленной в дополнительном коде. Например, значение «5.0» в формате «Q24» будет представлено как «5.0 * 224» = «83886080» в десятичном формате или «0x5000000» в шестнадцатеричном формате. При этом для приведенного формата под дробную часть отведено 24 бита, под целую 31-27=7 бит, а возможный диапазон значений будет от «-128.0» до «127.(9)».
3) Дробное значение с плавающей запятой типа 31: Float. Например, значение «5» будет представлено как «1084227584» в десятичном формате или «0x40A00000» в шестнадцатеричном формате.
• Для каждого входа можно назначить дополнительные свойства:
Отображать имя – отображать имя входа на блоке или нет.
Фиксированный формат – свойство для отображения формата входа. При изменяемом формате входа необходимо убрать это свойство.
Требует подключения – если отмечено это свойство, то в панели Ошибки и Предупреждения будет выдавать сообщение, что порт данного блока не подключен.
Закладка Выходы
правитьЗакладка Выходы предназначена для настройки выходных параметров блока. Диалог идентичен диалогу вкладки Входы и имеет те же функции. Отличие лишь в создании выхода блока. Внешний вид блока можно посмотреть на вкладке Дизайн.
Закладка Параметры
правитьЗакладка Параметры предназначена для создания и настройки внутренних параметров и переменных в функции блока, написанной в Редакторе блока.
Описание редактируемых параметров закладки Параметры:
• Название – Имя параметра, к которому происходит обращение в Редакторе блока. Определяет, как будет отображаться имя параметра на панели Свойства и в окне Параметры среды MexBIOS™ Development Studio.
• Значение – Начальное значение параметра. Определяет значение, которое будет задано в параметре в момент инициализации блока.
• Формат – Формат данных параметра. Аналогично полю Формат во вкладке Входы и Выходы.
• Редактор – Тип редактирования параметра в Свойствах. Определяет способ отображения и ввода значений параметров блока на панели Свойства среды MexBIOS™ Development Studio. Существуют следующие типы:
1) Целое – целочисленные значения (допускается ввод с клавиатуры цифр от «0» до «9» и знака «-»).
2) Дробное – дробные значения (допускается ввод с клавиатуры цифр от «0» до «9», а также знаков «-» и «.»).
3) Булево – выпадающий список (возможные значения выбираются из списка содержащих две строки: «0: Нет» и «1: Да»).
4) Шестнадцатеричное – шестнадцатеричный редактор (допускается ввод с клавиатуры символов от «0» до «9» и символов от «A» до «F»).
5) Выпадающий список – выпадающий список (возможные значения выбираются из списка сформированного пользователем).
6) Вход/Выход – выпадающий список (возможные значения выбираются из списка содержащих две строки: «0: Вход» и «1: Выход»).
7) Количество входов – целочисленные значения (определяет количество входных контактов блока).
8) Количество выходов – целочисленные значения (определяет количество выходных контактов блока).
9) Формат – выпадающий список (возможные значения выбираются из списка возможных форматов).
10) Адрес –
11) Списки Gpio, Spi, Sci, Pwm1, Pwm2, Adc, Qep – содержат списки доступных
• Тип – Тип параметра. Возможны три следующих типа:
1) Константа – значение параметра есть константа, которая может задаваться только во время инициализации (до запуска моделирования или обмена данными с процессором). Редактируется только через «Свойства».
2) Переменная – значение параметра есть переменная, которая может задаваться как во время инициализации, так и во время симуляции и работы с процессором. Редактируется через Свойства до запуска процесса моделирования или режима работы с процессором и в окно Переменные после добавления параметров блока в окно Переменные и запуска симуляции или режима работы с процессором.
3) История – значение параметра есть переменная, которая используется для работы блока. Данный параметр недоступен для редактирования. Параметр данного типа позволяет сохранять значение переменной после каждого цикла исполнения функции блока.
• Точность – Точность задаваемого значения.
• Минимум – Минимальное значение параметра. Определяет минимально возможное вводимое значение.
• Максимум – Максимальное значение параметра Определяет максимально возможное вводимое значение.
• Тип формата – фиксированный или зависимый параметр.
• Строки – содержит сформированный пользователем список строк, выпадающий при вводе значения параметров, если задан тип редактора «Строки».
Вкладка Исходный код
правитьПредназначена для редактирования исходного кода блока. Содержит две обязательные функции:
Init – для инициализации выходных данных и параметров.
Exec – для описания основной функции обработки данных. Для удобства работы в правой верней части редактора, расположен список всех входов/выходов и параметров блока. Для добавления в программный код имен переменных и параметров просто перенесите с помощью мыши выбранное имя на поле редактирования кода, после чего оно появится в том месте, где был расположен курсор ввода с клавиатуры.
Для работы с кодом в верхней части закладки имеется панель с кнопками. Внизу располагается панель информационная панель. При компиляции в информационную панель будут выводиться сообщения об ошибках и предупреждения. Также в информационной панели выводиться оставшееся число символов, которое может быть использовано в демонстрационной версии программы.
Вкладка Завершение
правитьВкладка предназначена для завершающих действий над созданным блоком. Предоставляется произвести компиляцию блока кнопкой Компилировать блок. Если блок не завершен, можно сохранить произведённые изменения кнопкой Сохранить. Для экспорта созданного блока необходимо нажать кнопку Экспортировать и задать директорию, куда будет скопирована папка с исходными файлами блока.
Создание собственного блока
правитьБлок можно создать в уже существующей группе блоков, либо создать новую группу блоков. Можно дублировать существующий блок, отредактировать для решения своих задач.
Назначение кнопок в контекстном меню палитры:
Добавить группу – создать новую группу в палитре;
Добавить блок – добавить новый блок в текущую группу (которая выделена или в которой находится выделенный блок);
Редактировать код – вызов Редактора кода для редактирования выделенного блока.
Переименовать – переименовать группу либо блок, на данную функцию назначена горячая клавиша F2. Чтобы переименовать группу или блок, необходимо выделить группу/блок и нажать F2 либо ПКМ в контекстном меню выбрать пункт Переименовать.
Удалить – удаляет группу/блок из палитры. Возможно удалить блок из палитры и с диска (полное удаление) либо удалить из палитры, тогда блок можно будет вернуть через меню. Параметры/Библиотека вкладка Блоки. После нажатия del появляется окно с требованием подтвердить действие, если нажать Да – произойдёт полное удаление файла, Нет – файл удалится из палитры блоков, Отмена – отмена удаления.
Копия – создаёт копию выделенного блока в текущей группе.
Импортировать блоки – импортирует блок из указанной папки. Блок добавляется в текущую папку. После нажатия пункта Импортировать блоки появится диалог выбора каталога с блоком/блоками. Если в выбранном каталоге находится несколько блоков, то произойдёт добавление всех блоков в текущую группу.
Экспортировать блоки – экспортирует выделенный блок или выделенную группу в указанную папку.
Помощь – вызов справки по блоку.
Открытие папки – открыть папку с файлами выделенного блока.
1. Создание нового блока. В качестве примера создадим блок сумматора в библиотеке Models:
1.1 Нажать ПКМ по названию библиотеки.
1.2 В контекстном меню выбрать пункт Добавить группу.
1.3 В конце списка групп появится новая группа с именем NewGroup.
1.4 Нажать ПКМ по группе. Выбрать пункт Добавить блок
1.5 В группе появится новый блок.
2. Переименование блока:
2.1 Нажать ПКМ по имени нового блока
2.2 В контекстном меню выбрать Переименовать.
2.3 Либо выделить блок и нажать F2.
2.4 Переименуйте новый блок, например myADD
3. Два раза нажмите ЛКМ по блоку либо вызовите контекстное меню и нажмите Редактировать. Появится окно Редактор блока.
4. На вкладке Дизайн отредактируйте внешний вид блока.
5. Перейдите на вкладку Входы Добавьте два входа. Задайте формат Integer.
6. Перейдите на вкладку Выходы Добавьте один выход. Задайте формат Integer.
7. В блоке сумматора нет параметров.
8. Перейдите на вкладку Исходный код.
9. Введите следующий код:
void Init(void) { } void Exec(void) { Out = In + In1; }
На выход блока будет поступать сумма двух входных сигналов.
10. Если есть необходимость - задайте информацию о блоке на вкладке Информация.
11. Перейдите на вкладку Дизайн. Убедитесь, что внешний вид блока удовлетворителен.
12. Перейдите на вкладку Завершение. Нажмите кнопку Компилировать блок. Если компиляция прошла успешно, то на окне отображения процесса компиляции появится сообщение Компиляция завершена.
13. Если в коде имеются ошибки, то на вкладке Исходный код появится панель отображения ошибок и предупреждений.
14. Если компиляция прошла успешно, блок создан.
15. Закройте окно Редактор блока.
16. При необходимости переместите блок в секцию памяти блоков пользователя.
17. Нажмите кнопку компиляции библиотеки Построить на вкладке Правка. Произойдёт компиляция библиотеки. В папке библиотеки обновится *.out и *.hex файлы, которые нужно загрузить в контроллер.
18. Перед загрузкой проверьте работу блока в режиме симуляции. При необходимости провести редактирование блока.
Настройки компиляции библиотек
правитьДля компиляции внешнего блока и затем библиотеки необходимо чтобы был установлен компилятор, предоставляемый фирмой производителем используемой серии микропроцессора. Настройка расположения компилятора (выбор папки, где находится компилятор) производится через диалог Библиотека, вкладка Параметры построения, который вызывается кнопкой Настройки в меню Правка.
Вкладка Библиотека
правитьПри добавлении блока или изменении существующего в среде MexBIOS™ Development Studio блока необходимо перестроить (провести компиляцию) соответствующую библиотеку для последующей симуляции и/или загрузки в память устройства. Кроме того, при использовании стартового проекта, отличного от поставляемого при установке библиотеки, также необходимо провести его компиляцию. Для этой цели в среде предусмотрено ряд настроек расположенных на следующих вкладках:
Вкладка Конфигурация – содержит базовые настройки библиотеки, которые определяют расположение в памяти устройства MexBIOS™ kernel, тип используемого контроллера, тип выходного файла библиотеки и параметры для коммуникации с библиотекой.
Конфигурация библиотеки – отражает имя файла конфигурации, содержащие все настройки для библиотеки.
Целевое устройство – тип используемого контроллера.
Изменение данной настройки приводит к изменению секторов памяти отображаемых в выпадающих списках.
Выходной модуль – тип выходного файла.
Размер памяти программ – диапазон адресов в памяти программ (в формате Hex) для хранения исполняемого кода основной сборки библиотеки.
Размер памяти программ пользователя – диапазон адресов в памяти программ (в формате Hex) для хранения дополнительной пользовательской сборки библиотеки.
Размер динамической памяти – диапазон адресов в памяти данных (в формате Hex) для динамически создаваемых объектов
Размер памяти конфигураций – диапазон адресов в памяти данных (в формате Hex) для загрузки и хранения конфигурации работы библиотеки
Размер памяти для мониторов– диапазон адресов в памяти данных (в формате Hex) для мониторинга данных в режиме реального времени (в среде используется для блока SCOPE в режиме «Буфер»)
Размер памяти для стека – диапазон адресов в памяти данных (в формате Hex) для внутренних переменных и стека
Размер памяти для переменных – размер памяти в словах (в формате Hex) выделенных под переменные среды. Например, при значении 100 (Hex) = 256 (dec) доступно использовать 256 / 2 = 128 переменных (включая не только блоки VAR, но и переменные блоков библиотеки)
Начальный адрес для коммуникации – начальный адрес в протокола обмена. Все выше описанные секции размещаются начиная с заданного адреса в соответствии с их размером.
Предопределённая конфигурация – предустановленная конфигурация работы библиотеки, которая будет использоваться при старте микроконтроллера. Данная опция может использоваться при отсутствии внешней памяти для хранения конфигурации.
Вкладка Блоки – включает дополнительные настройки расположения блоков библиотеки. С помощью данного окна можно запретить использование выбранных блоков и перенести выбранные блоки в секцию пользователя или исключить их из сборки.
Вкладка Параметры построения – содержит настройки для построения библиотеки для дальнейшей загрузки в память устройства.
Флаги компилятора – флаги компилятора.
Флаги компановщика – флаги компоновщика (для построения исполняемого файла)
Флаги архиватора – флаги архиватора (для построения статической библиотеки)
Предопределённые символы – предопределённые символы
Подключаемые библиотеки – подключаемые статические библиотеки
Путь для поиска заголовочных файлов – папки для поиска заголовочных файлов
Путь для поиска библиотек – папки для поиска статических библиотек
Командные файлы – командные файлы распределения памяти в микроконтроллере
Для отката к настройкам заданным после установки библиотеки необходимо нажать на кнопку «По умолчанию».
Вкладка Стартовый проект
правитьКонфигурация стартового проекта – отражает имя файла конфигурации, содержащие все настройки для стартового проекта. После изменения каких-либо настроек во вкладке Стартовый проект существует возможность сохранить их в отдельном файле конфигурации с расширением «.mbcfg». Для этого необходимо нажать на кнопку и задать имя нового файла. При этом файлы, поставляемые при установки библиотеки, изменять не рекомендуется (они помечены атрибутом файла «Только для чтения» и недоступны для изменения). Для загрузки ранее сохраненной конфигурации необходимо выбрать файл с расширением «.mbcfg». После этого в поле «Конфигурация стартового проекта» отобразится имя файла без расширения.
Папка проекта – папки нахождения фалов стартового проекта.
При выборе папки определяется переменная среды «%StartUpProjectDir%».
Имя выходного файла – название выходного исполняемого файла
Папка объектных файлов – папка хранения объектных файлов
Папка для копий выходных файлов – в указанную папку будут скопированные выходные файлы библиотеки *.out и *.hex.
Флаги компилятора – флаги компилятора
Флаги компановщика – флаги компоновщика (для построения исполняемого файла)
Предопределённые символы – предустановленные символы
Подключаемые библиотеки – подключаемые статические библиотеки
Путь для поиска заголовочных файлов – папки для поиска заголовочных файлов
Путь для поиска библиотека – папки для поиска статических библиотек
Командные файлы – командные файлы распределения памяти в микроконтроллере
Исходные файлы – список исходных файлов стартового проекта.
Для отката к настройкам заданным после установки библиотеки необходимо нажать на кнопку «По умолчанию».
Вкладка Утилиты для построения
правитьПапка Code Generation Tool – содержит путь к папке установленного компилятора для данного типа микроконтроллера
Командная строка компилятора – шаблон вызова компилятора через командную строку
Командная строка компановщика – шаблон вызова компоновщика через командную строку
Командная строка архиватора – шаблон вызова архиватора через командную строку
Действия после построения – действие после построения (например, создания hex-файла)
Для отката к настройкам, заданным после установки библиотеки, необходимо нажать на кнопку «По умолчанию».
Компиляция библиотеки
правитьДля компиляции библиотеки блоков необходимо иметь установленный компилятор. Для контроллеров фирмы TI это Code Generation Tools, версии не ниже 5.2.1 (скачать нужную версию можно по ссылке http://processors.wiki.ti.com/index.php/Compiler_Releases. Для скачивания необходима регистрация на TI.com). После компиляции блока необходимо произвести компиляцию всей библиотеки блоков, нажав кнопку Построить на вкладке Правка главного меню. Кнопка «Построить» может находиться в двух состояниях. Если выбрано «Построить», то произойдёт линкование obj файлов всех блоков в библиотеку. Если выбрать и нажать «Построить всё», то произойдёт повторная компиляция всех блоков библиотеки с последующим линкованием obj фалов.
Библиотека блоков пользователя
правитьСекция пользователя – отдельно выделенная память в контроллере, где пользователь может хранить свои блоки отдельно от блоков библиотеки. Для секции пользователя генерируется отдельный out файл, который необходимо прошивать в контроллер отдельно. Для формирования библиотеки пользователя необходимо создать собственные блоки, которые далее будут перенесены в секцию памяти для блоков пользователя.
Настройка секции памяти для блоков пользователя:
1. Необходимо нажать кнопку Настройки на вкладке Правка главного меню.
2. На вкладке Библиотека, открыть окно Блоки.
3. Перенести нужные блоки в секцию пользователя Сборка пользователя.
4. Перейти на вкладку Конфигурация. Нажать кнопку Загрузить сохранённую конфигурацию.
5. Выбрать файл Library_2812_EXT.mbcfg (зависит от типа используемого процессора) в папке Config. В данном файле под стартовый проект выделены сектора A, B, C. Под секцию блоков пользователя выделено два сектора D,E. Сектора F, G, H, I, J выделены под библиотеку блоков.
6. Нажать Ok.
7. На вкладке Правка главного меню, нажать кнопку Построить.
Загрузка библиотеки и стартового проекта в память контроллера
правитьЗагрузку библиотеки и стартового проекта можно осуществить с помощью JTAG эмулятора и специализированной программы, предоставляемой производителем микропроцессора. Другой способ загрузки – использование возможности загрузки через последовательный интерфейс с помощью программы C2Prog (сайт http://www.codeskin.com/programmer). C2Prog инструмент программирования flash памяти для микроконтроллеров фирмы TI серии C2000™ и MSP430™. Зачастую у пользователя нет JTAG программатора или даже нет JTAG интерфейса на устройстве. C2Prog позволяет загружать ПО микроконтроллера через RS-232, RS-485, TCP/IP, USB и CAN. Использование C2Prog подходит при работе не в лабораторных условиях, когда JTAG порт обычно недоступен.
Инструкция по загрузке с помощью C2Prog по SCI
правитьДля загрузки стартового проекта и библиотеки блоков в память МК с помощью C2Prog необходимо выполнить следующие действия:
1. Перейти на вкладку Правка главного меню.
2. Нажать на маленький треугольник кнопки Прошивка.
3. Нажать на пункт CodeSkin Chip Programmer.
4. В появившемся окне нажать кнопку Выбрать. Окно настроек закроется.
5. Нажать на кнопку Прошивка.
6. Появится окно C2Prog.
7. Нажать на кнопку Select File... В появившемся диалоговом окне выбрать сгенерированный .hex файл. Нажать Open.
8. После выбора .hex файла стартового проекта главное окно C2Prog изменится.
9. Далее необходимо в списке Target выбрать нужный процессор. Покажем на примере 2812.
10. После выбора процессора в списке Options необходимо выбрать тактовую частоту используемого кварца (можно посмотреть на корпусе кварца).
11. Отключенную от питания плату перевести в режим работы SСI. Для платы mZdsp 2812 положение перемычек см. следующую таблицу:
Положение перемычек XK3...XK6
XK6 BOOT3 | XK5 BOOT2 | XK4 BOOT1 | XK3 BOOT0 | Mode |
---|---|---|---|---|
1 | x | x | x | FLASH |
0 | 0 | x | x | SPI |
Перемычка XK8 должна быть в положении Int.
12. Подключить плату к компьютеру.
13. Нажать кнопку Configure Ports...
14. В появившемся окне нажать кнопку Scan Porst.
15. Выбрать порт и нажать OK.
16. Нажать кнопку Program.
17. Начнётся процесс загрузки.
Загрузка состоит из двух этапов. Первый этап – загрузка вторичного загрузчика. Второй этап выполнение загрузчика, очистка секторов flash памяти, загрузка программы.
18. После появления текста «You may now close this window and reset the target», нажать OK, отключить питание у платы.
19. Подключить плату к компьютеру снова.
20. Выбрать .hex файл библиотеки блоков в папке: ...\MexBIOS Development Studio\Extend\TMS320F281x
21. Нажать кнопку Program.
22. После появления текста «You may now close this window and reset the target», нажать OK, отключить питание у платы.
23. Переставить перемычки в положение FLASH.
Устройство готово к использованию.
Откройте окно MexBIOS Development Studio.
24. Должен быть открыт файл библиотеки процессора, для которого была произведена загрузка стартового проекта и библиотеки блоков.
25. Перейдите на вкладку Device.
26. Настройте подключение (кнопка Settings).
27. Нажать кнопку Connect. Если всё сделано правильно – установится связь с процессором.
Инструкция по загрузке с помощью плагина SAUFlash TCLXDS
правитьДля загрузки стартового проекта и библиотеки блоков в память контроллера с помощью плагина SAUFlash TCLXDS необходимо иметь эмулятор SAU510USB и выполнить следующие действия:
1. Перейти на вкладку Правка главного меню.
2. Нажать на маленький треугольник кнопки Прошивка.
3. Нажать на пункт SAUFlash TCLXDS.
4. Появится окно плагина.
5. Подключить эмулятор к плате и подать питание.
6. Выходные файлы уже выбраны по умолчанию.
7. Далее необходимо нажать кнопку Прошивка на уровне с пунктом Файл основной сборки (загрузка библиотеки блоков). Процесс загрузки будет отображаться в окне.
8. Если используется пользовательская секция, то нажать кнопку Прошивка на уровне с пунктом Файл сборки пользователя (загрузка библиотеки блоков пользователя).
9. Нажать кнопку Прошивка на уровне с пунктом Файл стартового проекта (загрузка стартового проекта). Произойдёт загрузка стартового проекта. Процесс загрузки будет отображаться в окне.
Устройство готово для программирования MexBIOS™ Development Studio.
Функция верификации библиотеки
правитьДля проверки идентичности блоков библиотеки зашитой в контроллер с блоками библиотеки на компьютере необходимо воспользоваться функцией Проверить блоки (главное меню, вкладка Устройство). Блоки считаются идентичными, если у них совпадают номера GUID. Если какие либо блоки из библиотек не совпадают (отсутствуют, или не одинаковый GUID), то после выполнения верификации появится сообщение с перечнем блоков, которых нет в библиотеке на компьютере. Блоки, которых нет в библиотеке, загруженной в память микроконтроллера, будут заблокированы для использования. Для разблокирования блоков необходимо открыть Настройки на вкладке Правка. В окне Библиотека перейти на вкладку Блоки. C помощью кнопок перенести блоки из списка Исключенные блоки в список Основная сборка.
Функция генерации кода
правитьВ данном разделе описана функция генерации кода в MexBIOS™ Development Studio, на языке С, по созданной схеме. Сгенерированный код выполняется процессором без участия ядра MexBIOS. Сгенерировать можно только полностью программу, собранную средствами MexBIOS™ Development Studio в рамках одной библиотеки. В демонстрационной версии на генерацию кода имеется ограничение в 16 384 символа.
Для генерации кода необходимо:
1. Открыть проект, с которого будет производиться генерация кода.
2. Открыть Менеджер проекта.
3. Нажать ПКМ по дереву проекта, с которого будет производиться генерация кода.
4. В появившемся меню выбрать пункт Генерация кода.
5. Появится диалог сохранения файла.
6. Выбрать папку назначения и дать имя выходному С-файлу.
Далее полученный С-файл необходимо подключить в свой проект. Покажем на примере проекта в Code Composer Studio для процессора TMS320F2812.
1. Открыть свой либо проект предоставляемого примера в Code Composer Studio.
2. В дереве проекта нажать ПКМ по папке Source.
3. В появившемся меню выбрать пункт Add files to Project.
4. В появившемся диалоге выбора файла – выбрать сгенерированный С-файл.
5. Файл появится в папке Source дерева проекта.
6. В main.с (папка Source) файле проекта объявить прототипы следующих функций:
// Function prototypes void MBS_DATA_Init(void); void MBS_BACKGROUND_Exec(void); void MBS_TINT0_Exec(void);
В функции MBS_DATA_Init будет проходить инициализация блоков схемы. В этой функции будут выполняться все функции Init каждого блока схемы. В функции MBS_BACKGROUND_Exec будет выполнять часть программы, которая в проекте mbs была подключена к событию BACKGROUND, а также выполнялась на программном прерывании. Если в вашем проекте не используется BACKGROUND, то эту функцию можно не включать в проект. Функция MBS_TINT0_Exec выполняет часть программы, подключенную в проекте к аппаратному прерыванию TINT0. Если в вашем проекте не используется TINT0, то эту функцию можно не включать в проект. Также, если вы используете другой вектор прерывания (не TINT0), то имя функции MBS_TINT0_Exec будет другим.
7. В main функции вызвать функции инициализации – MBS_DATA_Init и фоновых задач MBS_BACKGROUND_Exec:
void main(void) { ... ... // MBS code init MBS_DATA_Init(); ... // Loop forewer while(1) { // MBS background task MBS_BACKGROUND_Exec(); } }
8. В периодическом прерывании, выполняемом с известной частотой, необходимо вызвать функцию MBS_TINT0_Exec.
interrupt void CpuTimer0IsrHandler(void) { ... // MBS interrupt task MBS_TINT0_Exec(); ... ... }
9. Провести компиляцию проекта.
10. Загрузить проект с помощью On-Chip Flash Programmer (меню Tools → F28xx OnChip Flash Programmer). Загрузка производится во все сектора.
11. Запустить проект на исполнение: меню→Debug→Run.
Генерация пользовательского интерфейса
правитьВ процессе работы в MexBIOS Development Studio пользователю доступно создание интерфейса управления с помощью визуальных компонент. Но применение MexBIOS Development Studio с завершенным устройством не всегда удобно. Для удобства пользователя к MexBIOS Development Studio выпускается утилита GUI Player. Пользователь может на основе своего интерфейса управления сгенерировать файл *.mbe, который повторяет только интерфейс пользователя, реализованный в MexBIOS Development Studio, и способен управлять программой пользователя в контроллере по используемому пользователем интерфейсу связи. Необходимо установить программу GUI Player. Открыть вкладки, в которых находится органы управления, которые необходимо поместить в сгенерированный GUI. На вкладке Устройство нажать кнопку Создать GUI приложение. Появится окно настроек.
Название приложения – название файла приложения.
Папка назначения – выбор папки, в которую будет сгенерировано приложение, причем в папку будут также скопированы картинки, используемые для оформления GUI и картинки, назначенные на кнопки управления.
Развернуть во весь экран – если пункт отмечен, то приложение будет сгенерировано по размером экрана, если пункт не отмечен, то размеры GUI будут зависеть от расположения крайних элементов на схеме.
Изменяемые размеры – если пункт не отмечен, то GUI-приложение будет иметь статичные размеры, определяемые размером схемы, если отмечен, то размеры можно будет изменить.
В сгенерированном GUI приложении кнопка Connect/Disconnect – выводит на связь или отключает от устройства.
Start/Storp refreshing – включить остановить обновление.
Save variables to NVRAM – сохранить изменения в NVRAM.
Горячие клавиши
правитьГорячие клавиши редактирования
Ctrl+X | Вырезать выделенную часть |
Ctrl+C | Копировать выделенную часть |
Ctrl+V | Вставить из буфера обмена |
Ctrl+S | Сохранить текущий проект |
Ctrl+Shift+S | Сохранить текущий проект как |
Ctrl+O | Открыть проект |
Ctrl+R | Вращать выделенные блоки |
Ctrl+A | Выделить всё |
R | Увеличить масштаб |
V | Уменьшить масштаб |
F | Поместить выделенный фрагмент в экран |
Delete | Удалить выделенное |
F11 | Вызов инспектора |
Ctrl+Left | Сместить выделенное влево |
Ctrl+Right | Сместить выделенное вправо |
Ctrl+Up | Сместить выделенное вверх |
Сtrl+Down | Сместить выделенное вниз |
Служебные горячие клавиши
F1 | Вызов справки по выделенному элементу |
F5 | Запуск моделирования |
Shift+F5 | Остановка моделирования |
F2 | Показать / Скрыть форматы сигналов |
F3 | Показать / Скрыть принадлежность блоков к слоям и библиотекам |
F4 | Добавить блок в окно Переменные |
F11 | Показать вкладку Свойства |
Сообщения об ошибках и предупреждениях
править0 | Неизвестная ошибка |
1 | Ошибка при создании проекта |
3 | Ошибка при создании схемы |
4 | Ошибка при выделении памяти для графического представления схемы |
5 | Ошибка конструктора связей при конструировании линии связи между блоками |
6 | Ошибка конструктора связей при завершении конструирования линии связи между блоками |
8-15 | Ошибка при нажатии мышью на различные графические объекты схемы (линии, блоки…) |
16-22 | Ошибка при движении мышью с захваченными графическими объектами, при движении мышью в процессе конструирования линии связи. |
23-29 | Ошибка при отпускании мыши над различными графическими объектами схемы (линиями, блоками…) |
30-32 | Ошибки при прорисовке графического представления схемы |
33-36 | Ошибки выделения снятия выделения с различных графических объектов |
37 | Общая ошибка создания блока |
38 | Общая ошибка создания линии |
39 | Общая ошибка создания узла линий |
40 | Общая ошибка удаления блока |
41 | Общая ошибка удаления линии |
42 | Общая ошибка удаления узла линий |
43 | Ошибка при поиске объекта под курсором мыши |
44 | Ошибка выставления свойств шрифта для графического представления схемы |
45 | Ошибка при вращении выделенных объектов схемы |
46-63 | Внутренняя ошибка графического представления при работе с линиями связей |
65-73 | Внутренняя ошибка графического представления при работе с узлами линиями связей |
74-87 | Внутренняя ошибка графического представления при работе с блоками |
88-92 | Внутренняя ошибка графического представления при работе с контактами блоков |
94 | Ошибка проекта при поиске графических объектов |
95 | Ошибка проекта при индексировании графических объектов |
98 | Ошибка сохранения проекта |
99 | Ошибка загрузки проекта |
100 | Ошибка проекта при копировании |
101 | Ошибка проекта при вырезании |
102 | Ошибка проекта при вставке |
103 | Ошибка проекта при записи в файл |
104 | Ошибка проекта при загрузке из файла |
105 | Ошибка при перемещении выделенных объектов |
106 | Ошибка при удалении выделенных объектов |
107 | Ошибка при определении размеров схемы |
108 | Ошибка схемы при поиске графических объектов |
109 | Ошибка при восстановлении удаленного блока |
110 | Ошибка при добавлении входа в схему |
111 | Ошибка при добавлении выхода в схему |
112 | Ошибка при удалении входа из схемы |
113 | Ошибка при удалении выхода из схемы |
114 | Ошибка схемы при индексировании объектов схемы |
115 | Ошибка схемы при сохранении |
116-118 | Ошибка схемы при загрузке |
121 | Ошибка при реорганизации истории |
122 | Ошибка REDO |
123 | Ошибка UNDO |
128 | Ошибка схемы при копировании |
129 | Ошибка схемы при вырезании |
130 | Ошибка схемы при вставке |
131 | Ошибка при удалении линии |
132 | Ошибка при сохранении линии |
133 | Ошибка при загрузке линии |
134 | Ошибка при сохранении линии в историю |
135 | Ошибка при загрузке линии из истории |
136 | Ошибка удаления узла линий |
137 | Ошибка сохранения узла линий |
138 | Ошибка загрузки узла линий |
139 | Ошибка при удалении блока |
142 | Ошибка при сохранении блока |
143 | Ошибка при загрузке блока |
301-313 | Ошибка вызова «callback» функции |
1000 | Неизвестная ошибка системы |
10001-1071 | Внутренние ошибки среды |
10331-10334 | Ошибка среды при построении матрицы |
1300-1306 | Ошибка инспектора параметров |
1400-1420 | Ошибка документа |