В этом примере показано, как использовать структуры из пользовательского кода на графике 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 декларация. В поле Header file каждого Simulink.Bus введите имя файла заголовка, содержащего соответствующий typedef декларация.

3. Сконфигурируйте диаграмму Stateflow, чтобы включить пользовательский код С
Чтобы включить пользовательский код для симуляции, смотрите Доступ к Пользовательскому Коду С в Нелибральных Графиках.
Чтобы включить пользовательский код для генерации кода, смотрите Интегрирация внешнего кода при помощи параметров конфигурации модели (Simulink Coder).
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)