Можно задать пользовательские структуры в коде С, который можно интегрировать с графиком Stateflow® в модели Simulink® для симуляции и генерации кода. Например, модель sf_bus_demo
использует пользовательскую функцию C, чтобы записать в структуру output outbus
. Путем обмена данными с пользовательским кодом можно увеличить возможности, поддержанные Stateflow, и использовать в своих интересах существующий ранее код. Для получения дополнительной информации см. Пользовательский код Повторного использования в диаграммах Stateflow и доступе к Сигналам Шины Через Структуры Stateflow.
В вашем коде С задайте структуру путем создания пользовательского заголовочного файла. Заголовочный файл содержит typedef
объявления, совпадающие со свойствами Simulink.Bus
объект, который задает структуру Stateflow. Например, в модели sfbus_demo
, заголовочный файл 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; ...
В Редакторе Шины задайте Simulink.Bus
возразите, что совпадает с каждой пользовательской структурой typedef
объявление. В поле Header file каждого Simulink.Bus
возразите, введите имя заголовочного файла, который содержит соответствующий typedef
объявление.
Сконфигурируйте свой график языка действия C, чтобы включать пользовательский код С.
Чтобы включать пользовательский код для симуляции, смотрите доступ к Пользовательскому коду С в Графиках Небиблиотеки.
Чтобы включать пользовательский код для генерации кода, смотрите, Интегрируют Внешний Код при помощи Параметров конфигурации Модели (Simulink Coder).
Создайте и запустите свою модель.
Когда вы пишете функции пользовательского кода, которые берут указатели структуры в качестве аргументов, передают структуры Stateflow адресом. Чтобы передать адрес структуры Stateflow или одно из ее полей к пользовательской функции, используйте &
оператор и запись через точку:
&outbus
обеспечивает адрес структуры Stateflow outbus
.
&outbus.inputsignal
обеспечивает адрес подструктуры inputsignal
из структуры outbus
.
&outbus.inputsignal.input
обеспечивает адрес поля input
из подструктуры outbus.inputsignal
.
Для получения дополнительной информации смотрите Подструктуры индекса и Поля.
Например, модель sfbus_demo
содержит пользовательскую функцию C counterbusFcn
это берет указатели структуры в качестве аргументов. Пользовательский заголовочный файл содержит это объявление функции:
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
.