Интегрируйте пользовательские структуры в диаграммах Stateflow

В этом примере показано, как использовать структуры из пользовательского кода в графике Stateflow®. Можно задать введенные данные структуры в коде С и объединяться, это со структурами Stateflow и Simulink® соединяет шиной сигналы. Путем обмена данными с пользовательским кодом можно увеличить возможности, поддержанные Stateflow, и использовать в своих интересах существующий ранее код. Для получения дополнительной информации см. Пользовательский код Повторного использования в диаграммах Stateflow.

В этом примере диаграмма Stateflow обрабатывает данные от одного сигнала шины Simulink и выводит результат к другому сигналу шины Simulink. Оба сигналы шины ввода и вывода заданы Simulink.Bus объект 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 адресом. Чтобы передать адрес структуры 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.

Смотрите также

Похожие темы