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

Можно задать пользовательские структуры в коде С, который можно интегрировать с графиком Stateflow® в модели Simulink® для симуляции и генерации кода. Например, модель sf_bus_demo использует пользовательскую функцию C, чтобы записать в выходную структуру outbus. Путем обмена данными с пользовательским кодом можно увеличить возможности, поддержанные Stateflow, и использовать в своих интересах существующий ранее код. Для получения дополнительной информации см. Пользовательский код Повторного использования в диаграммах Stateflow и доступе к Сигналам Шины Через Структуры Stateflow.

Задайте пользовательские структуры в коде С

  1. В вашем коде С задайте структуру путем создания пользовательского заголовочного файла. Заголовочный файл содержит объявления 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;
    ...
    
  2. В Редакторе Шины задайте объект Simulink.Bus, который совпадает с каждой пользовательской структурой объявление typedef. В поле Header file каждого объекта Simulink.Bus введите имя заголовочного файла, который содержит соответствующее объявление typedef.

  3. Сконфигурируйте свой график языка действия C, чтобы включать пользовательский код С.

  4. Создайте и запустите свою модель.

Передайте структуры Stateflow пользовательскому коду

Когда вы пишете функции пользовательского кода, которые берут указатели структуры в качестве аргументов, передают структуры 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 и выходной структуре outbus.

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

Связанные примеры

Больше о