Графики Stateflow® в моделях Simulink® имеют свойство языка действия, которое задает синтаксис для действий перехода и состояния. Значок в нижнем левом углу холста графика указывает на язык действия для графика.
MATLAB® как язык действия.
C как язык действия.
В графиках, которые используют C в качестве языка действия, можно вызвать встроенные функции MATLAB и переменные рабочего пространства MATLAB доступа при помощи ml
оператор пространства имен или ml
функция.
Внимание
Поскольку функции MATLAB не доступны в целевом окружении, не используйте ml
оператор пространства имен и ml
функционируйте, если вы планируете создать цель генерации кода.
ml
Оператор пространства именДля графиков C, ml
оператор пространства имен использует точку стандарта (.)
обозначение к ссылочным переменным MATLAB и функциям. Например, оператор a = ml.x
возвращает значение переменной x
рабочего пространства MATLAB к данным Stateflow
a
.
Для функций синтаксис следующие:
[return_val1, return_val2,...] = ml.matfunc(arg1, arg2,...)
Например, оператор [a, b, c] = ml.
передает возвращаемые значения от функции MATLAB matfunc
x, y matfunc
к данным Stateflow a
B
, и c
.
Если функция MATLAB, которую вы вызываете, не требует аргументов, необходимо все еще включать круглые скобки. Если вы не используете круглые скобки, программное обеспечение Stateflow интерпретирует имя функции как переменную рабочей области, которая, если не найденный, генерирует ошибку времени выполнения в процессе моделирования.
В этих примерах, x
Y
, и z
переменные рабочей области и d1
и d2
данные Stateflow:
a = ml.sin(ml.x)
В этом примере, функция MATLAB sin
оценивает синус x
, который затем присвоен переменной данных Stateflow a
. Однако, потому что x
переменная рабочей области, необходимо использовать оператор пространства имен, чтобы получить доступ к ней. Следовательно, ml.x
используется вместо только x
.
a = ml.sin(d1)
В этом примере, функция MATLAB sin
оценивает синус d1
, который присвоен переменной данных Stateflow a
. Поскольку d1
данные Stateflow, можно получить доступ к ним непосредственно.
ml.x = d1*d2/ml.y
Результат выражения присвоен x
. Если x
не существует до симуляции, она автоматически создается в рабочем пространстве MATLAB.
ml.v[5][6][7] = ml.
matfunc
(ml.x[1][3], ml.y[3], d1, d2, 'string
')
Переменные x
рабочей области и
y
массивы. x[1][3]
(1,3)
элемент двумерной переменной типа массив x.
y[3]
третий элемент одномерной переменной типа массив y
. Последний аргумент, '
string
'
, вектор символов.
Возврат от вызова до matfunc
присвоен элементу (5,6,7)
из массива рабочей области, v
. Если v
не существует до симуляции, она автоматически создается в рабочем пространстве MATLAB.
ml
ФункцияДля графиков C можно использовать ml
функция, чтобы задать вызовы функций MATLAB. Формат для ml
вызов функции использует это обозначение:
ml(evalString, arg1, arg2,...);
выражение, которое выполнено в рабочем пространстве MATLAB. Это содержит команду MATLAB (или набор команд, каждый разделенный точкой с запятой), чтобы выполниться наряду со спецификаторами формата (evalString
%g
F
D
, и т.д.), которые обеспечивают отформатированную замену других аргументов (
, arg1
, и т.д.) в arg2
.evalString
Спецификаторы формата используются в ml
функции совпадают с используемыми в функциях C printf
и sprintf
. ml
вызов функции эквивалентен вызову eval
MATLAB функция с
ml
оператор пространства имен, если аргументы
ограничиваются скалярами или литералами в следующей команде:arg1
, arg2
,...
ml.eval(ml.sprintf(evalString, arg1, arg2,...))
Спецификаторы формата используются в ml
функция должна или соответствовать, типы данных аргументов или аргументов должны иметь типы, которые могут быть продвинуты на тип, представленный спецификатором формата.
Программное обеспечение Stateflow принимает скалярные возвращаемые значения от ml
оператор пространства имен и ml
вызовы функции, когда они используются в качестве аргументов в этом контексте. Смотрите, Как Графики Выводят Размер Возврата для ml Выражений.
В этих примерах, x
переменная рабочего пространства MATLAB и d1
и d2
данные Stateflow:
a = ml('sin(x)')
В этом примере, ml
вызовы функции функция MATLAB sin
оценивать синус x
в рабочем пространстве MATLAB. Результат затем присвоен переменной данных Stateflow a
. Поскольку x
переменная рабочей области и sin(x)
оценен в рабочем пространстве MATLAB, вы вводите его непосредственно в
аргумент (evalString
'sin(x)'
).
a = ml('sin(%f)', d1)
В этом примере, функция MATLAB sin
оценивает синус d1
в рабочем пространстве MATLAB и присвоениях результат к переменной данных Stateflow a
. Поскольку d1
данные Stateflow, его значение вставляется в
аргумент (evalString
'sin(%f)'
) использование выражения формата %f
. Это означает это если d1
= 1.5, выражением, выполненным в рабочем пространстве MATLAB, является sin(1.5)
.
a = ml ('
matfunc
(%g, ''abcdefg'', x, %f)', d1, d2)
В этом примере, выражение '
matfunc
(%g, ''abcdefg'', x, %f)'
показанный в предыдущем операторе формата. Данные Stateflow evalString
d1
и d2
вставляются в то выражение со спецификаторами формата %g
и %f
, соответственно. ''abcdefg''
литерал, заключенный с двумя одной парами кавычек, потому что это - часть выражения анализа, которое уже заключено в одинарные кавычки.
sfmat_44 = ml('rand(4)')
В этом примере квадратная матрица 4 на 4 случайных чисел между 0 и 1 возвращена и присвоена данным Stateflow sf_mat44
. Данные Stateflow sf_mat44
должен быть задан как массив 4 на 4 перед симуляцией. Если его размер отличается, ошибка несоответствия размера сгенерирована во время времени выполнения.
ml
ВыраженияДля графиков C можно смешать ml
оператор пространства имен и ml
выражения function наряду с данными Stateflow в больших выражениях. Следующий пример придает квадратную форму sine
и cosine
из угла в переменной X
рабочей области и добавляет их:
ml.power(ml.sin(ml.X),2) + ml('power(cos(X),2)')
Первый операнд использует ml
оператор пространства имен, чтобы вызвать sin
функция. Его аргументом является ml.X
, начиная с X
находится в рабочем пространстве MATLAB. Второй операнд использует ml
функция. Поскольку X
находится в рабочей области, это появляется в
выражение как evalString
X
. Обработка на квадрат каждого операнда выполняется с power
MATLAB функция, которая берет два аргумента: значение к квадрату и значение степени, 2.
Выражения с помощью ml
оператор пространства имен и ml
функция может использоваться в качестве аргументов для ml
оператор пространства имен и ml
выражения function. Следующие вложенные множества в качестве примера ml
выражения на трех разных уровнях:
a = ml.power(ml.sin(ml.X + ml('cos(Y)')),2)
В создании вашего ml
выражения, выполните уровнями до конца набора приоритета в Бинарных операциях. Используйте круглые скобки вокруг выражений степени с ^
оператор, когда вы используете их в сочетании с другими арифметическими операторами.
Программное обеспечение Stateflow проверяет выражения на несоответствия размера данных в ваших действиях во время парсинга графиков и в течение времени выполнения. Поскольку возвращаемые значения для ml
выражения не известны до времени выполнения программное обеспечение Stateflow должно вывести размер их возвращаемых значений. Смотрите, Как Графики Выводят Размер Возврата для ml Выражений.
ml
Я должен использовать?В большинстве случаев, обозначение ml
оператор пространства имен является более прямым. Однако использование ml
вызов функции действительно предлагает несколько преимуществ:
Используйте ml
функционируйте, чтобы динамически создать переменные рабочей области.
Следующая блок-схема создает четыре новых матрицы MATLAB:
for
цикл создает четыре новых матричных переменные в рабочем пространстве MATLAB. Переход по умолчанию инициализирует счетчик Stateflow i
к 0, в то время как сегмент перехода между лучшими двумя соединениями постепенно увеличивает его 1. Если i
меньше 5, сегмент перехода назад к главному соединению оценивает ml
вызов функции ml('A%d = rand(%d)',i,i)
для текущего значения i
. Когда i
больше или равен 5, сегмент перехода между нижней частью, два соединения происходят и остановки выполнения.
Переход выполняет следующие команды MATLAB, которые создают скаляр рабочей области (A1
) и три матрицы (A2
, A3
, A4
):
A1 = rand(1) A2 = rand(2) A3 = rand(3) A4 = rand(4)
Используйте ml
функция с полным обозначением MATLAB.
Вы не можете использовать полное обозначение MATLAB с ml
оператор пространства имен, когда следующий пример показывает:
ml.A = ml.magic(4) B = ml('A + A''')
Этот пример устанавливает переменную A
рабочей области к волшебной матрице 4 на 4 с помощью
ml
оператор пространства имен. Данные Stateflow B
затем установлен в сложение A
и транспонировать матрицу, A'
, который производит симметрическую матрицу. Поскольку ml
оператор пространства имен не может выполнить выражение A'
, ml
функция используется вместо этого. Однако можно вызвать функцию MATLAB transpose
с ml
оператор пространства имен в следующем эквивалентном выражении:
B = ml.A + ml.transpose(ml.A)
Как другой пример, вы не можете использовать аргументы с массивами ячеек или выражениями индекса включающие двоеточия с ml
оператор пространства имен. Однако они могут быть включены в ml
вызов функции.
ml
Тип данныхДанные Stateflow типа ml
вводится внутренне с типом MATLAB mxArray
для графиков C. Можно присвоить (хранят) любой тип доступных данных в иерархии Stateflow к данным типа ml
. Эти типы включают любой тип данных, заданный в иерархию Stateflow, или возвратились из рабочего пространства MATLAB с ml
оператор пространства имен или ml
функция.
ml
Тип данныхЭти правила применяются к данным Stateflow типа ml
:
Можно инициализировать ml
данные из рабочего пространства MATLAB точно так же, как другие данные в иерархии Stateflow (см., Инициализируют Данные из Базового рабочего пространства MATLAB).
Любой числовой скаляр или массив ml
данные в иерархии Stateflow могут участвовать в любом виде унарной операции и любом виде бинарной операции с любыми другими данными в иерархии.
Если ml
данные участвуют в любой числовой операции с другими данными, размером ml
данные должны быть выведены из контекста, в котором они используются, как возвращают данные из ml
оператор пространства имен и ml
функция. Смотрите, Как Графики Выводят Размер Возврата для ml Выражений.
Вы не можете задать ml
данные с осциллографом Констант.
Эта опция отключена в диалоговом окне Свойств данных и в Model Explorer для данных Stateflow типа ml
.
Можно использовать ml
данные, чтобы создать цель симуляции, но не создать встраиваемую цель генерации кода.
Если данные типа ml
содержит массив, можно получить доступ к элементам массива через индексацию с этими правилами:
Можно индексировать только массивы с числовыми элементами.
Можно индексировать числовые массивы только их размерностью.
Другими словами, можно получить доступ только к одномерным массивам одним значением индекса. Вы не можете получить доступ к многомерному массиву с одним значением индекса.
Первое значение индекса для каждой размерности массива равняется 1, а не 0, как в массивах языка C.
В примерах, которые следуют, mldata
данные Stateflow типа ml
, ws_num_array
массив рабочего пространства MATLAB 2 на 2 с численными значениями и ws_str_array
массив рабочего пространства MATLAB 2 на 2 со значениями вектора символов.
mldata = ml.ws_num_array; /* OK */ n21 = mldata[2][1]; /* OK for numerical data of type ml */ n21 = mldata[3]; /* NOT OK for 2-by-2 array data */ mldata = ml.ws_str_array; /* OK */ s21 = mldata[2][1]; /* NOT OK for character vector data of type ml*/
ml
данные не могут иметь осциллографа вне графика C; то есть, вы не можете задать осциллограф ml
данные как Вход от Simulink или Выхода к Simulink.
Оба ml
оператор пространства имен и ml
функция может получить доступ к данным непосредственно в рабочем пространстве MATLAB и возвратить его в график C. Однако поддержание данных в рабочем пространстве MATLAB может подарить пользователям Stateflow конфликты с другими данными, уже резидентскими в рабочей области. Следовательно, с ml
тип данных, можно обеспечить ml
данные в графике и использовании это для расчетов MATLAB в графиках C.
Как пример, в следующих операторах, mldata1
и mldata2
данные Stateflow типа ml
:
mldata1 = ml.rand(3); mldata2 = ml.transpose(mldata1);
В первой линии этого примера, mldata1
получает возвращаемое значение функции MATLAB rand
, который, в этом случае, возвращает массив 3х3 случайных чисел. Обратите внимание на то, что mldata1
не задан как массив или измерен в любом случае. Это может получить любые данные о рабочем пространстве MATLAB или возврат любой функции MATLAB, потому что это задано как данные Stateflow типа ml
.
Во второй линии примера, mldata2
, также типа данных Stateflow ml
, получает транспонировать матрицу матрицы в mldata1
. Это присвоено возвращаемое значение функции MATLAB transpose
в котором mldata1
аргумент.
Отметьте различия в обозначении, если предыдущий пример должен был использовать данные о рабочем пространстве MATLAB (wsdata1
и wsdata2
) вместо Stateflow ml
данные, чтобы содержать сгенерированные матрицы:
ml.wsdata1 = ml.rand(3); ml.wsdata2 = ml.transpose(ml.wsdata1);
В этом случае к каждым данным о рабочей области нужно получить доступ через ml
оператор пространства имен.
ml
ВыраженияВ графиках C, выражения Stateflow с помощью ml
оператор пространства имен и ml
функция оценивает в рабочем пространстве MATLAB во время выполнения. Фактический размер данных, возвращенных в следующие типы выражения, известен только во время выполнения:
Данные о рабочем пространстве MATLAB или функции с помощью ml
оператор пространства имен или ml
вызов функции
Например, размер возвращаемых значений от выражений ml.
, var
ml.
, или func
()ml (
, где evalString
, arg1
, arg2
,...)
переменная рабочего пространства MATLAB и var
функция MATLAB, не может быть известен до времени выполнения.func
Данные Stateflow типа ml
Графические функции, которые возвращают данные Stateflow типа ml
То, когда эти выражения появляются в действиях, генерация кода Stateflow создает временные данные, чтобы содержать промежуточное звено, возвращается для оценки полного выражения, которого они - часть. Поскольку размер этих возвращаемых значений неизвестен, пока время выполнения, программное обеспечение Stateflow не должно использовать правила контекста вывести размеры для создания временных данных.
В течение времени выполнения, если фактическое возвращенное значение от одной из этих команд отличается от выведенного размера временной переменной, которая хранит его, появляется ошибка несоответствия размера. Чтобы предотвратить ошибки времени выполнения, используйте следующие инструкции, чтобы записать действия с командами MATLAB или ml
данные:
Инструкция | Пример | |
---|---|---|
Возвратите размеры команд MATLAB, или данные в выражении должны соответствовать, возвращают размеры равноправных выражений. | В выражении | |
Выражения, которые возвращают скаляр, никогда не производят ошибку. Можно объединить матрицы и скаляры в больших выражениях, потому что команды MATLAB используют скалярное расширение. | В выражении То же правило применяется к вычитанию ( | |
Команды MATLAB или данные Stateflow типа | Аргументы Выражение для каждого аргумента функции является большим выражением для который размер возврата команд MATLAB или данные Stateflow типа | В |
Индексы массива Выражение для индекса массива является независимым уровнем выражения, которое должно быть скаляром в размере. | В | |
Размер возврата для доступа к элементу индексного массива должен быть скаляром. | Выражение | |
Команда MATLAB или элементы данных, используемые в выражении для входного параметра функции MATLAB, называются через | В вызове функции | |
Команда MATLAB или элементы данных, используемые для входного параметра для графической функции в выражении, разрешены для размера прототипом функции. | Если графическая функция | |
| В выражении | |
В присвоении размер правого выражения должен совпадать с размером левого выражения за одним исключением. Если левым выражением является одна переменная MATLAB, такая как | В | |
В присвоении вектор-столбцы Stateflow на левой стороне совместимы со строкой MATLAB или вектор-столбцами, одного размера на правой стороне. Матрица A, которую вы задаете с размерностью строки 1, рассматривается вектором-строкой. Матрица A, которую вы задаете с одной размерностью или с размерностью столбца 1, рассматривается вектор-столбцом. | В | |
Если вы не можете разрешить размер возврата команды MATLAB или элементов данных в большем выражении ни по одному из предыдущих правил, они приняты, чтобы возвратить скалярные значения. | В выражении | |
Предыдущие правила для решения размера команд MATLAB члена или данных Stateflow типа Примечание Команды MATLAB члена или данные типа |
|
Особые случаи существуют, в котором никакая проверка размера не происходит, чтобы разрешить размер команды MATLAB или выражений данных, которые являются частью больших выражений. Использование следующих выражений не требует осуществления проверки размера во времени выполнения:
ml.
var
ml.
func
()
ml (
evalString
, arg1
, arg2
,...)
Данные Stateflow типа ml
Графическая функция, возвращающая данные Stateflow типа ml
В этих случаях присвоение возврата левой стороне оператора присваивания или аргумента функции происходит, не проверяя на несоответствие размера между двумя:
Присвоение, в котором левая сторона является переменной рабочего пространства MATLAB
Например, в выражении ml.x = ml.y
, ml.y
переменная рабочего пространства MATLAB любого размера и типа (структура, массив ячеек, вектор символов, и так далее).
Присвоение, в котором левая сторона является данными типа ml
Например, в выражении m_x = ml.
, func
()m_x
данные Stateflow типа ml
.
Входные параметры функции MATLAB
Например, в выражении ml.
, func
(m_x, ml.x, gfunc
())m_x
данные Stateflow типа ml
, ml.x
переменная рабочего пространства MATLAB любого размера и типа и
графическая функция Stateflow, которая возвращает данные Stateflow типа gfunc
()ml
. Несмотря на то, что проверка размера не происходит для входного типа, если переданный - в данных не имеет ожидаемого типа, ошибка следует из вызова функции ml.
.func
()
Аргументы для графической функции, которые заданы как данные Stateflow типа ml
в его прототипном операторе
Примечание
Если вы заменяете входные параметры в предыдущих случаях с неMATLAB числовые данные Stateflow, преобразование в ml
тип происходит.