В этом примере показано, как использовать структуры из пользовательского кода в графике Stateflow®. Можно задать введенные данные структуры в коде С и объединяться, это со структурами Stateflow и Simulink® соединяет шиной сигналы. Путем обмена данными с пользовательским кодом можно увеличить возможности, поддержанные Stateflow, и использовать в своих интересах существующий ранее код. Для получения дополнительной информации см. Пользовательский код Повторного использования в диаграммах Stateflow.
В этом примере диаграмма Stateflow обрабатывает данные от одного сигнала шины Simulink и выводит результат к другому сигналу шины Simulink. Оба сигналы шины ввода и вывода заданы
объект Simulink.Bus
(Simulink)COUNTERBUS
. В графике шина Simulink сигнализирует об интерфейсе со структурами Stateflow inbus
и outbus
. График вызывает пользовательскую функцию C, чтобы записать в структуру output outbus
.
1. В вашем коде С задайте структуру путем создания пользовательского заголовочного файла. Заголовочный файл содержит typedef
объявления, которые задают свойства пользовательской структуры. Например, в этой модели, заголовочный файл counterbus.h
объявляет три пользовательских структуры:
... typedef struct { int input; } SIGNALBUS;
typedef struct { int upper_saturation_limit; int lower_saturation_limit; } LIMITBUS;
typedef struct { SIGNALBUS inputsignal; LIMITBUS limits; } COUNTERBUS; ...
2. В Редакторе Шины задайте Simulink.Bus
возразите, что совпадает с каждой пользовательской структурой typedef
объявление. В поле Заголовочного файла каждого Simulink.Bus
возразите, введите имя заголовочного файла, который содержит соответствующий typedef
объявление.
3. Сконфигурируйте диаграмму Stateflow, чтобы включать пользовательский код С, как описано в Задают Пользовательский код для Вашей Модели.
4. Создайте и запустите свою модель.
Когда вы вызываете функции пользовательского кода, которые берут указатели структуры в качестве аргументов, передают структуры Stateflow адресом. Чтобы передать адрес структуры Stateflow или одно из ее полей к пользовательской функции, используйте &
оператор и запись через точку:
&outbus
обеспечивает адрес структуры Stateflow outbus
.
&outbus.inputsignal
обеспечивает адрес подструктуры inputsignal
из структуры outbus
.
&outbus.inputsignal.input
обеспечивает адрес поля input
из подструктуры outbus.inputsignal
.
Для получения дополнительной информации смотрите индекс и Значения Присвоения к Структурам Stateflow.
Например, этот пример содержит пользовательскую функцию C counterbusFcn
это берет указатели структуры в качестве аргументов. Пользовательский заголовочный файл counterbus.h
содержит это объявление функции:
extern void counterbusFcn(COUNTERBUS *u1, int u2, COUNTERBUS *y1, int *y2);
График передает адреса структурам Stateflow counterbus_struct
и outbus
при помощи этого вызова функции:
counterbusFcn(&counterbus_struct, u2, &outbus, &y2);
Функция читает значение входа u2
графика и локальная структура
counterbus_struct
. Это пишет в график выход y2
и структура output outbus
.
Simulink.Bus
(Simulink)