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

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

Разработчик S-функции является блоком Simulink®, который интегрирует код C/C++, чтобы создать S-функцию из технических требований и кода С, который вы предоставляете. Разработчик S-функции также служит оберткой для сгенерированной S-функции в моделях, которые используют S-функцию. Чтобы узнать больше на Разработчике S-функции, смотрите S-функции Сборки Автоматически Используя Разработчика S-функции. Чтобы видеть больше примеров о том, как использовать Разработчика S-функции, введите sfundemos в Командном окне MATLAB® затем перейдите к C-file S-functions> S-function Builder.

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

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

  2. Если вы хотите соединить сигнал шины с портом Input or Output Разработчика S-функции, необходимо сначала создать объект шины. Можно создать объект шины в интерактивном режиме с помощью Редактора Шины Simulink (см., Создают и Задают Simulink. Соедините шиной Объекты). В качестве альтернативы можно использовать 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-функции с шиной, введите следующую команду в командном окне MATLAB:

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

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

  4. Нажмите на холст и введите Разработчика S-функции или скопируйте экземпляр блока S-Function Builder из библиотеки User-Defined Functions в новую модель.

  5. Дважды кликните, чтобы открыть Разработчика S-функции редактор.

  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 и Выберите Generate TLC wrapper, чтобы создать обертку для вашей S-функции для генерации кода.

  10. Нажмите Build on the 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-функции автоматически генерирует этот заголовочный файл.

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

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

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

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

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

  2. Кликните по холсту, чтобы создать экземпляр Блока s-function или скопировать Блок s-function с библиотеки User-Defined Functions в Браузере Библиотеки в модель.

  3. Дважды кликните на Блоке s-function.

  4. В диалоговом окне Block Parameters, которое открывается в поле редактирования S-function name, вводят имя исполняемого файла, сгенерированного Разработчиком S-функции.

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

  6. Нажмите OK на диалоговом окне S-Function Block Parameters.

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

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

Можно использовать сгенерированный исполняемый файл в любом Блоке s-function в любой модели, пока исполняемый файл находится на пути MATLAB.

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

|

Похожие темы