exponenta event banner

Использование сигнала шины с построителем S-функций для создания S-функции

В этом разделе показано, как создать сигнал шины и подключить его к построителю S-функций. В конце вы будете использовать S-Function Builder для построения простой C MEX S-функции.

S-Function Builder - это блок Simulink ®, который интегрирует код C/C + + для создания S-функции из спецификаций и кода C. Построитель S-функций также служит оболочкой для сгенерированной S-функции в моделях, использующих S-функцию. Дополнительные сведения о построителе S-функций см. в разделе Автоматическое создание S-функций с помощью построителя S-функций. Для просмотра дополнительных примеров использования S-Function Builder введитеsfundemos в окне команд MATLAB ® перейдите к C-файлу S-functions > S-function Builder.

  1. Начните создавать S-функцию, установив текущую папку в папку, в которой требуется создать S-функцию. Затем добавьте эту папку в путь MATLAB.

    mkdir newSfun
    addpath(fullfile(pwd,'newSfun'))
    cd('newSfun')

  2. Если требуется подключить сигнал шины к входному или выходному порту S-Function Builder, необходимо сначала создать объект шины. Объект шины можно создать в интерактивном режиме с помощью редактора шины Simulink (см. раздел Создание и указание объектов Simulink.Bus). Кроме того, можно использовать Simulink.Bus:

    1. В окне команд MATLAB введите:

      a = Simulink.Bus

      В результате, HeaderFile для шины по умолчанию - пустой вектор символов:

      a =
       
      Simulink.Bus
          Description: ''
           HeaderFile: ''
             Elements: [0x1 double]
    2. Если требуется указать файл заголовка для шины, то в окне команд MATLAB введите следующее:

      a.Headerfile = 'Busdef.h'

      Если файл заголовка не указан, Simulink автоматически создает Sfunctionname_bus.h

    Для демонстрации использования S-Function Builder с шиной введите следующую команду в окне команд MATLAB:

    open_system(fullfile(matlabroot,'/toolbox/simulink/simdemos/simfeatures/sfbuilder_bususage'))

  3. Создайте новую модель Simulink. Щелкните холст и введите S-Function Builder, чтобы создать экземпляр блока S-Function Builder. Можно также перетащить блок построителя S-функций из библиотеки пользовательских функций в браузере библиотеки в новую модель.

  4. Щелкните холст и введите S-Function Builder или скопируйте экземпляр блока S-Function Builder из библиотеки пользовательских функций в новую модель.

  5. Дважды щелкните, чтобы открыть редактор S-Function Builder.

  6. Используйте панели ввода спецификаций и кодов в диалоговом окне S-Function Builder для ввода информации и пользовательского исходного кода, необходимых для адаптации созданной S-функции к приложению.

  7. Проверьте, находится ли сигнал шины между указанными верхним и нижним пределами насыщения. Для этого создайте два входных и два выходных порта и назначьте порты в соответствии с приведенной ниже таблицей:

  8. Заполнить Outputs_wrapper функция с логикой кода. См. пример кода:

    void sfbuilder_bus_Outputs_wrapper(const SFB_COUNTERBUS *u0,
                                       const int32_T *u1,
                                       const SFB_COUNTERBUS *y0,
                                       int32_T *y1)
    {
    /* Output_BEGIN */
    int32_T limit;
      boolean_T inputGElower;
      
      /* limit is sum of SFB_SIGNALBUS.input and the second input(u1) */
      limit = u0->inputsignal.input + *u1;
      
      /* check if SFB_SIGNALBUS.limit is >= LIMITBUS.lower_saturation_limit */
      inputGElower = (limit >= u0->limits.lower_saturation_limit);
    
      if((u0->limits.upper_saturation_limit >= limit) && inputGElower) 
      {
          *y1 = limit;
      } 
      else 
      {
          if(inputGElower) 
          {
              limit = u0->limits.upper_saturation_limit;
          } else 
          {
              limit = u0->limits.lower_saturation_limit;
          }
          *y1 = limit;
      }
    
      y0->inputsignal.input = *y1;
      y0->limits = u0->limits;
    /* Output_END */
    }
  9. Щелкните стрелку под Build и выберите Создать оболочку TLC, чтобы создать оболочку для S-функции для генерации кода.

  10. Щелкните Создать (Build) в Построителе S-функций (S-Function Builder), чтобы запустить процесс построения.

    Построитель S-функций создает файл MEX, реализующий указанную S-функцию, и сохраняет файл в текущей папке (см. раздел Как построитель S-функций создает S-функцию).

  11. Сохраните модель, содержащую блок S-Function Builder.

Как построитель S-функций создает S-функцию

Построитель S-функций создает S-функцию путем создания следующих исходных файлов в текущей папке:

  • sfun.c - Этот файл содержит представление C исходного кода стандартных частей сгенерированной S-функции.

  • sfun_wrapper.c - Этот файл содержит пользовательский код, введенный в диалоговом окне S-Function Builder.

  • sfun.tlc - Этот файл позволяет выполнять сгенерированную S-функцию в Simulink Rapid Accelerator и позволяет встроить S-функцию во время формирования кода. Кроме того, этот файл генерирует код для S-функции в Accelerator режим, который позволяет модели работать быстрее.

  • sfun_bus.h - При указании любого Input port или Output port как шина в таблице Порты и параметры (Ports and Parameters), но не указывайте файл заголовка, то S-Function Builder автоматически генерирует этот файл заголовка.

После генерации исходного кода S-функции построитель S-функций использует mex для создания представления файла MEX S-функции из сгенерированного исходного кода и любого внешнего пользовательского исходного кода и библиотек, указанных пользователем.

Развертывание сгенерированной S-функции

Чтобы использовать сгенерированную S-функцию в другой модели, сначала проверьте, что папка, содержащая сгенерированную S-функцию, находится в пути MATLAB. Затем скопируйте блок S-Function Builder из модели, используемой для создания S-функции, в целевую модель. При необходимости задайте для параметров целевой модели значения, требуемые для целевой модели.

Кроме того, можно развернуть сгенерированную S-функцию без использования блока S-Function Builder или раскрытия базового исходного файла C.

  1. Откройте модель Simulink, которая будет включать S-функцию.

  2. Щелкните холст, чтобы создать экземпляр S-функционального блока, или скопируйте в модель S-функциональный блок из библиотеки пользовательских функций в браузере библиотеки.

  3. Дважды щелкните по блоку S-Function.

  4. В открывшемся диалоговом окне «Параметры блока» в поле редактирования имени S-функции введите имя исполняемого файла, созданного построителем S-функций.

  5. Введите любые параметры для S-функции в поле редактирования параметров S-функции. Введите параметры в том порядке, в котором они отображаются в диалоговом окне S-Function Builder.

  6. Нажмите кнопку OK в диалоговом окне S-Function Block Parameters (Параметры S-функционального блока).

Создав блок из сгенерированной S-функции, можно также создать маску для блока S-функции. Дополнительные сведения о добавлении маски для S-функции см. в разделе Создание блоковых масок. Для просмотра примера добавления блоковых масок к S-функции введите следующую команду в окне команд MATLAB.

open_system(fullfile(matlabroot,'/toolbox/simulink/simdemos/simfeatures/sfcndemo_matadd'));

Созданный исполняемый файл можно использовать в любом блоке S-Function в любой модели, если он находится по пути MATLAB.

См. также

|

Связанные темы