Документация
В этом примере показано, как создать библиотеку блоков и добавить его в Simulink ® Library Browser. Этот пример также показывает, как добавить подбиблиотеку.
Чтобы указать информацию о вашей библиотеке, вы создаете функцию с именем slblocks .
Добавьте библиотеку в браузер библиотеки
- От начальной страницы Simulink выберите Blank Library и нажмите Create Library.
Примечание Браузер Библиотеки только поддерживает библиотеки. Вы не можете отобразить содержимое модели в Браузере Библиотеки.
set_param(gcs,'EnableLBRepository','on');
function blkStruct = slblocks % This function specifies that the library 'mylib' % should appear in the Library Browser with the % name 'My Library' Browser.Library = 'mylib'; % 'mylib' is the name of the library Browser.Name = 'My Library'; % 'My Library' is the library name that appears % in the Library Browser blkStruct.Browser = Browser;
Примечание Можно сохранить функцию как .m или .mlx файл. Вы не можете сохранить его как Pcode-файл.

Примечание
Если вы сохраненный ваша библиотека без установки ‘EnableLBRepository’ к ‘on’ , сообщение появляется наверху Браузера Библиотеки.

Нажмите Fix и ответьте на подсказку как соответствующую.
Добавьте подбиблиотеку в браузер библиотеки
Выполните эти шаги, чтобы добавить подбиблиотеку под названием mylib2 к вашему mylib библиотека.
- Создайте библиотеку под названием mylib2 . Добавьте некоторые блоки в него.
- В командном окне MATLAB, набор EnableLBRepository свойство библиотеки к ‘on’ для новой библиотеки.
set_param(gcs,'EnableLBRepository','on');


Задайте порядок библиотеки в списке библиотек
Можно задать порядок библиотеки относительно других библиотек в списке путем добавления sl_customization.m файл к пути MATLAB и установке приоритета вида вашей библиотеки. Например, чтобы видеть вашу библиотеку наверху списка, можно установить приоритет вида на -2 . По умолчанию приоритетом вида Библиотеки Simulink является -1 . Другие библиотеки имеют приоритет вида 0 по умолчанию, и эти библиотеки появляются ниже Библиотеки Simulink. Библиотеки с тем же приоритетом вида появляются в алфавитном порядке.
Это демонстрационное содержимое sl_customization.m файл размещает новую библиотеку наверху списка библиотек.
function sl_customization(cm) % Change the order of libraries in the Simulink Library Browser. cm.LibraryBrowserCustomizer.applyOrder('My Library',-2>); end
Заставить индивидуальную настройку сразу вступить в силу, в командном окне MATLAB, введите:
sl_refresh_customizations

Похожие темы
- Создайте пользовательскую библиотеку
- Настройте внешний вид браузера библиотеки
- Укажите индивидуальные настройки с Simulink
Документация Simulink
- Примеры
- Блоки и другая ссылка
- Информация о релизах
- PDF-документация
Поддержка
- MATLAB Answers
- Помощь в установке
- Отчеты об ошибках
- Требования к продукту
- Загрузка программного обеспечения
© 1994-2021 The MathWorks, Inc.
- Условия использования
- Патенты
- Торговые марки
- Список благодарностей
Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.
Отсутствует библиотека simpowersystems в Симулинке.
Просто запустите заново инсталятор и выберете в устанавливаемых продуктах Simscape и все его библиотеки.
Answers (0)
See Also
Categories
Find more on Troubleshooting in Help Center and File Exchange
Tags
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
An Error Occurred
Unable to complete the action because of changes made to the page. Reload the page to see its updated state.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
- América Latina (Español)
- Canada (English)
- United States (English)
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- Deutsch
- English
- Français
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 简体中文 Chinese
- English
Вызов разделяемых библиотек из Simulink
Привет, Хабр!
Представляю вашему вниманию перевод статьи моего коллеги Михаила, посвященной методам вызова разделяемых библиотек в Simulink. Зачем она была создана вообще? Дело в том, что у многих компаний уже есть множество легаси-моделей, которые хотелось бы переиспользовать и нам часто задают вопросы «А как мне легаси интегрировать в Simulink? А если мое легаси в виде DLL?» Поэтому-то и была написана оригинальная статья.
Под катом рассматривается несколько способов по вызову разделяемых библиотек в Simulink.Все изменения в код внесены с разрешения Михаила и сделаны, чтобы не перегружать статью.
В данной статье показано, как использовать функции из разделяемых библиотек в моделях Simulink.
Допустим, нам надо встроить в Simulink библиотеку exlib. Ее код содержится в исходниках exlib.c и exlib.h. Это очень простая библиотека, содержащая три функции:
void exlib_init(void) – открывает файл на запись.
void exlib_print(float data) – записывает данные в файл.
void exlib_term(void) – закрывает файл.Сборка библиотеки
Для начала скомпилируем библиотеку.
Этот шаг не нужен, если библиотека предварительно скомпилирована и поставляется в виде двоичного файла. В этом случае сразу можно перейти к шагу 3, но надо помнить, что для работы с библиотекой нужно получить файл .dll (или .so для Linux) и соответствующий файл заголовка (.h) у поставщика библиотеки. Для Windows также понадобится файл .lib, который представляет собой не статическую библиотеку, а так называемую библиотеку импорта. Эта библиотека импорта потребуется для неявной линковки.
Сначала, будем использовать команду MATLAB mex, которая вызывает текущий активный компилятор хоста для компиляции общей библиотеки (exlib.dll в Windows и exlib.so в Linux). Важно убедиться, что сначала была выполнена командаmex -setupдля выбора поддерживаемого компилятора.
Теперь используем mex для компиляции библиотеки:Код для сборки библиотеки
mingw = strfind(mex.getCompilerConfigurations('C','Selected').Name,'MinGW64 Compiler'); if isunix % GCC mex('LDEXT=.so','LINKEXPORT=','LINKEXPORTVER=','LINKLIBS=','exlib.c'); elseif mingw % MinGW builds static shared library, so dll and lib files are the same % loadlibrary uses the dll file, while legacy code tool looks for the lib file mex('LDEXT=.lib','LINKEXPORT=','LINKEXPORTVER=','LINKLIBS=','exlib.c'); mex('LDEXT=.dll','LINKEXPORT=','LINKEXPORTVER=','LINKLIBS=','exlib.c'); else % Visual mex('LDEXT=.dll','LINKEXPORT=','LINKEXPORTVER=','CMDLINE300="del exlib.exp exlib.dll.manifest"','exlib.c'); end Building with 'gcc'. MEX completed successfully.Проверка скомпилированной библиотеки
После компиляции необходимо удостоверится в том, что полученная библиотека может быть подгружена и использована в MATLAB:
Код для проверки библиотеки
% Load the library [~,~] = loadlibrary(['exlib',system_dependent('GetSharedLibExt')],'exlib.h'); % Display functions available in the library libfunctionsview('exlib'); % Initialize calllib('exlib','exlib_init'); % Step for i = 1:10 calllib('exlib','exlib_print',single(i)); end % Terminate calllib('exlib','exlib_term'); % Unload the library unloadlibrary('exlib'); % Show contents of generated file type('exlib.txt'); 0.000000 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000 10.000000Теперь, когда мы удостоверились, что все работает, начнем работать с Simulink!
Вызов разделяемой библиотеки с помощью S-функций
S-функции позволяют использовать C код в Simulink. Этот подход позволяет пользователю разработать любой код на C, необходимый для загрузки библиотеки и вызова ее функций. Затем этот код компилируется в бинарный файл, который распознается Simulink и связывается с общей библиотекой. Этот двоичный файл называется S-функцией. В Simulink есть блок для вызова этой S-функции. Существует несколько подходов для создания S-функций в Simulink.
Использование Legacy Code Tool
Первым подходом является использование Legacy Code Tool инструмента, который помогает автоматически создавать S-функции по спецификациям, созданным с помощью MATLAB. В этом примере S-функция линкуется с библиотекой импорта (в Windows нам потребуется соответствующий файл * .lib) и происходит вызов библиотечных функций. Этот подход называется неявной линковкой.
Сначала, требуется инициализировать структуру для Legacy Code ToolКод для инициализации структуры Legacy Code Tool
specs = legacy_code('initialize'); % Prototype for the initialization function specs.StartFcnSpec = 'exlib_init()'; % Prototype for the step function specs.OutputFcnSpec = 'exlib_print(single u1)'; % Prototype for the terminate function specs.TerminateFcnSpec = 'exlib_term()'; % Shared library to link with (.so on Linux and .dll on Windows) specs.HostLibFiles = ; % We must supply header file when linking with shared library, otherwise % compiler might make wrong assumptions about function's prototype. specs.HeaderFiles = ; specs.SFunctionName = 'sfun_exlib';Создадим S-функцию, скомпилируем и слинкуем ее:
legacy_code('generate_for_sim',specs); ### Start Compiling sfun_exlib mex('sfun_exlib.c', '-I/tmp/simulink_shrlib_fex', '/tmp/simulink_shrlib_fex/exlib.so') Building with 'gcc'. MEX completed successfully. ### Finish Compiling sfun_exlib ### ExitНаконец создадим блок Simulink:
legacy_code('slblock_generate',specs);open_system('simlib_test'); snapnow; sim('simlib_test'); % Observe the results: type('exlib.txt'); 0.000000 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000 10.000000Написание S-функций вручную
Второй подход заключается в самостоятельном написании собственных S-функций для загрузки разделяемой библиотеки и вызова функций из этой библиотеки. В этом подходе будет использоваться явная линковка, также называемая линковкой во время выполнения. Самым простым решением является адаптация S-функции, автоматически сгенерированной ранее Legacy Code Tool. В этом примере изменяются функции mdlStart, mdlOutputs и mdlTerminate.
Вот как эти функции выглядят после модификации:Посмотреть код
void mdlStart(SimStruct *S) < /* * Load the dynamic library */ #if defined(__GNUC__) && !defined(__MINGW32__) void (*exlib_init_ptr)(void); dllHandle = dlopen("./exlib.so",RTLD_LAZY); exlib_init_ptr = dlsym(dllHandle, "exlib_init"); #else exlib_init_type exlib_init_ptr = NULL; dllHandle = LoadLibrary("exlib.dll"); exlib_init_ptr = (exlib_init_type)GetProcAddress(dllHandle,"exlib_init"); #endif exlib_init_ptr(); >void mdlOutputs(SimStruct *S, int_T tid) < real32_T *u1 = 0; #if defined(__GNUC__) && !defined(__MINGW32__) void (*exlib_print_ptr)(float); exlib_print_ptr = dlsym(dllHandle,"exlib_print"); #else exlib_print_type exlib_print_ptr = NULL; exlib_print_ptr = (exlib_print_type)GetProcAddress(dllHandle,"exlib_print"); #endif /* * Get access to Parameter/Input/Output/DWork/size information */ u1 = (real32_T *) ssGetInputPortSignal(S, 0); /* * Call the function from library */ exlib_print_ptr( *u1); >void mdlTerminate(SimStruct *S) < /* * Unload the dynamic library */ #if defined(__GNUC__) && !defined(__MINGW32__) void (*exlib_term_ptr)(void); exlib_term_ptr = dlsym(dllHandle,"exlib_term"); exlib_term_ptr(); dlclose(dllHandle); #else exlib_term_type exlib_term_ptr = NULL; exlib_term_ptr = (exlib_term_type)GetProcAddress(dllHandle,"exlib_term"); exlib_term_ptr(); FreeLibrary(dllHandle); #endif >Скомпилируем полученную S-функцию:
if isunix mex('sfun_exlib_dyn.c','-ldl'); else mex('sfun_exlib_dyn.c'); end Building with 'gcc'. MEX completed successfully.И запустим симуляцию:
open_system('simlib_test_dyn'); sim('simlib_test_dyn'); % Observe the results: type('exlib.txt'); 0.000000 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000 10.000000Использование S-Function Builder
Еще один подход заключается в использовании блока S-Function Builder. Это специальный блок, который может рассматриваться как нечто среднее между Legacy Code Tool и написанными вручную S-функциями с точки зрения сложности. S-Function Builder предоставляет графический интерфейс, в котором описываются характеристики вашей S-функции, и S-функция создается автоматически.
При использовании S-Function Builder существуют некоторые ограничения и проблемы с производительностью. В настоящее время это считается устаревшим подходом к созданию S-функций. Рекомендуется использовать блок C function, который появился в релизе R2020а и обсуждается позже.Вызов разделяемой библиотеки с помощью MATLAB Function
Блок MATLAB Function позволяет использовать язык MATLAB для описания пользовательского алгоритма в Simulink.
Для вызова разделяемой библиотеки из функции MATLAB используется функция coder.ceval, которую можно использовать только в теле MATLAB Function (а не MATLAB). Для работы coder.ceval не требуется наличие MATLAB Coder.
Код для блока MATLAB Function, вызывающий разделяемую библиотеку:Посмотреть код
function fcn(u) %#codegen % Keep track of initialization and runtime count persistent runTimeCnt % Generate library path on the fly (current directory in this case) coder.extrinsic('pwd','system_dependent'); libpath = coder.const(pwd); % Shared library to link with libname = coder.const(['exlib',strrep(system_dependent('GetSharedLibExt'),'.dll','.lib')]); % Add the external library. Mark it as precompiled, so it won't appear as % makefile target during code generation. coder.updateBuildInfo('addLinkObjects',libname,libpath,1000,true,true); coder.updateBuildInfo('addIncludePaths',libpath); coder.cinclude('exlib.h'); if isempty(runTimeCnt) % Initialize coder.ceval('exlib_init'); runTimeCnt = 0; end % Step coder.ceval('exlib_print',single(u)); runTimeCnt = runTimeCnt+1; % Terminate on the 10th step if (runTimeCnt == 11) coder.ceval('exlib_term'); endДанный подход имеет один недостаток – отсутствие хорошего способа вызвать функцию завершения при окончании симуляции (по сравнению с блоком MATLAB System).
Можно определить функцию завершения для модели, поставив exlib_term (); в настройках модели в категории Simulation Target -> Custom Code -> Terminate function.ПРИМЕЧАНИЕ. Если в настройках модели установлен параметр «Import custom code», то требуется указать все зависимости кода на панели «Simulation Target» (вместо использования coder.cinclude и coder.updateBuildInfo). Если этот параметр не установлен, то можно объединить настройки из Simulation Target, coder.cinclude и coder.updateBuildInfo.
Другой способ — поддерживать зависимости, используя coder.cinclude и coder.updateBuildInfo, и вызывать exlib_term() по условию, как продемонстрировано в примере выше.
Запустим симуляцию:open_system('simlib_test_mlf'); sim('simlib_test_mlf'); % Observe the results: type('exlib.txt'); 0.000000 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000 10.000000Вызов разделяемой библиотеки из Stateflow

Если требуется использовать функции разделяемой библиотеки в диаграммах Stateflow, то эти функции следует вызывать напрямую из Stateflow. В документации Stateflow есть примеры, которые показывают, как это сделать.
Вызов внешней функции в Stateflow очень прост – требуется указать имя функции в диаграмме Stateflow:Дополнительно, необходимо настроить параметры модели, чтобы Stateflow знал, где искать эти внешние функции. В настройках Simulation Target -> Custom Code -> Libraries требуется ввести exlib.lib (или exlib.so в Linux). В Simulation Target -> Custom Code -> Header File требуется ввести #include «exlib.h». Также важно не забыть указать функцию завершения. В Simulation Target -> Custom Code -> Terminate function необходимо указать exlib_term() ;.
Запустим симуляцию:if isunix set_param('simlib_test_sf','SimUserLibraries','exlib.so'); end sim('simlib_test_sf'); % Observe the results: type('exlib.txt'); 0.000000 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000 10.000000Обратите внимание, что информация в этом разделе относится к диаграммам Stateflow, использующим язык действий C. В том случае, если диаграмма Stateflow использует язык действий MATLAB, то требуется использовать coder.ceval, как и для MATLAB Function.
Вызов разделяемой библиотеки с помощью блока MATLAB System
Блок MATLAB System позволяет использовать системные объекты в Simulink. Более подробную информацию об этом блоке можно найти в документации.
Поддержка системных объектов появилась в Simulink в релизе R2013b. Множество людей используют системные объекты, поскольку они позволяют легко определять функции инициализации, шага симуляции и завершения. Также системные объекты могут использовать вспомогательный код MATLAB для этих функций — например, для пред- и постобработки данных функции шага — и все это без написания кода на C.
Вот как выглядит системный объект, используемый в блоке MATLAB System:Код системного объекта
classdef exlib < matlab.System % Call exlib shared library % % This example shows how to call shared library from Simulink using % MATLAB System block. properties (Nontunable,Access=private) libName = exlib.getLibName; libPath = pwd; libHeader = 'exlib.h'; end methods (Static) function libName = getLibName if isunix libName = 'exlib.so'; else libName = 'exlib.lib'; end end end methods (Access=protected) function setupImpl(obj, ~) % Initialize. coder.updateBuildInfo('addLinkObjects',obj.libName,obj.libPath,1000,true,true); coder.updateBuildInfo('addIncludePaths',obj.libPath); coder.cinclude(obj.libHeader); coder.ceval('exlib_init'); end function stepImpl(~, u) % Step. coder.ceval('exlib_print',u); end function releaseImpl(~) % Terminate. coder.ceval('exlib_term'); end end endopen_system('simlib_test_mls'); sim('simlib_test_mls'); % Observe the results: type('exlib.txt'); 0.000000 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000 10.000000Вызов разделяемых библиотек с помощью блока C Caller

Блок C Caller позволяет вызывать функции C напрямую из Simulink. Более подробную информацию об этом блоке можно найти в документации.
Это относительно новый подход, который впервые появился в MATLAB R2018b. Его основная цель — сделать в Simulink вызовы функций и библиотек на C чрезвычайно простыми. Но у него есть ограничения, о которых вы можете прочитать в документации по этому блоку.
После того, как exlib.so/exlib.lib были добавлены в Simulation Target -> Libraries и #include «exlib.h» в Simulation Target -> Header в настройках модели, достаточно нажатия кнопки «Refresh custom code» в блоке C Caller, чтобы увидеть все функции, содержащиеся в библиотеке.
После выбора функции exlib_print, диалог спецификации портов заполняется автоматически:И снова требуется добавить вызовы функций exlib_init и exlib_term, в Simulation Target. Также можно добавить пару других блоков C Caller для непосредственного вызова функций инициализации и завершения. Данные блоки C Caller потребуется поместить в подсистемы Initialize Function и Terminate Function. Также можно рассмотреть следующий пример из Stateflow: Schedule Subsystems to Execute at Specific Times
Запустим симуляцию:open_system('simlib_test_ccaller'); if isunix set_param('simlib_test_ccaller','SimUserLibraries','exlib.so'); end sim('simlib_test_ccaller'); % Observe the results: type('exlib.txt'); 0.000000 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000 10.000000Вызов разделяемых библиотек с помощью блока C Function

Новейшим дополнением к интеграции внешнего кода в Simulink является блок C Function. Он появился в R2020a.
Он напоминает блок C Caller с точки зрения простоты использования, но позволяет создавать код-обертку C вокруг импортируемых функций (таким образом, данный блок напоминает S-Function Builder). Но скорее всего основной сценарий использования блока C Function заключается не в вызове существующих функций C, а в написании небольших фрагментов кода на языке C, если такой код необходим в приложении. Например, может потребоваться доступ к аппаратным регистрам или встроенным функциям компилятора.
Не забудем добавить exlib.so/exlib.lib в настройки «Simulation Target -> Libraries» и #include «exlib.h» в настройки «Simulation Target -> Header file» в настройках модели.
После этого в настройках блока C Function надо добавить символ для входных данных с типом данных single и указать код вывода, запуска и завершения:open_system('simlib_test_cfunction'); if isunix set_param('simlib_test_cfunction','SimUserLibraries','exlib.so'); end sim('simlib_test_cfunction'); % Observe the results: type('exlib.txt'); 0.000000 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000 10.000000Вызов разделяемых библиотек сгенерированных с помощью Embedded Coder
Одним из сценариев использования Embedded Coder является автоматическая генерация C-кода из модели Simulink и упаковка этого кода в разделяемую библиотеку. В документации также есть пример, который показывает, как автоматически генерировать разделяемую библиотеку и вызывать ее из внешнего приложения, написанного на C.
Обратите внимание, что если требуется просто запуск алгоритма или части алгоритма в виде C кода в той же модели Simulink, то лучше применить S-функции Simulink Coder или симуляции в режиме «ПО-в-контуре» (Software-in-the-Loop). Однако, если сгенерированная с помощью Embedded Coder разделяемая библиотека используется для полунатурного моделирования, то может потребоваться интегрировать эту же библиотеку в более крупную модель, используемую другими разработчиками и таким образом защитить свою интеллектуальную собственность.
Работа с разделяемой библиотекой, сгенерированная Embedded Coder, ничем не отличается от работы с разделяемой библиотекой, которая была использована в статье. Рассмотрим простую модель, которая имеет два входа и один выход:open_system('simlib_test_ert'); snapnow;
После сборки модели мы получим файл .dll (.so в Linux), файл .lib (библиотека импорта для .dll) и файл .exp (файл экспорта для связи с .dll).
if isunix set_param('simlib_test_ert','CustomHeaderCode','#include '); end rtwbuild('simlib_test_ert'); ### Starting build procedure for: simlib_test_ert ### Successful completion of build procedure for: simlib_test_ertСгенерированная разделяемая библиотека экспортирует следующие символы:
ex_init double ex_step(double, double) simlib_test_ert_terminateПо умолчанию входы и выходы экспортируются как глобальные символы, а функции инициализации, шага и завершения следуют соглашению об именах моделей. При необходимости можно настроить прототипы функций, имена символов и прочее (обсуждение данных настроек выходит за рамки данной статьи). В этой модели прототип функции шага модели задан как Out1 = ex_step (In1, In2).
Для вызова этих функций нужно применить один из перечисленных выше методов. Например, можно использовать MATLAB Function (для простоты вызовем только функцию шага):Посмотреть код
function y = fcn(u1, u2) %#codegen % Generate library path on the fly coder.extrinsic('RTW.getBuildDir','fullfile'); buildDir = coder.const(RTW.getBuildDir('simlib_test_ert')); libpath = coder.const(buildDir.CodeGenFolder); incpath = coder.const(fullfile(buildDir.BuildDirectory,'simlib_test_ert.h')); % Shared library to link with if isunix ext = '.so'; libname = ['simlib_test_ert',ext]; else ext = '.lib'; libname = ['simlib_test_ert_',computer('arch'),ext]; end % Add the external library. Mark it as precompiled, so it won't appear as % makefile target during code generation. coder.updateBuildInfo('addLinkObjects',libname,libpath,1000,true,true); coder.updateBuildInfo('addIncludePaths',libpath); coder.cinclude(incpath); % Initialize output y = 0; % Step y = coder.ceval('ex_step',u1,u2);Запустим симуляцию и посмотрим на ее результаты:
open_system('simlib_test_callert'); sim('simlib_test_callert'); snapnow;
Выводы
- Отличное соответствие парадигме функций инициализации, шага и завершения, позволяя поддерживать все эти функции внутри самого блока, а не в масштабе модели
- Позволяет добавлять пользовательский код к вызываемым внешним функцям
- Позволяет вам оставаться в MATLAB и писать только код MATLAB
- Блок MATLAB System является автономным и не требует дополнительных шагов для совместного использования (например, нет необходимости компилировать S-функцию)
Скачать исходники и модели можно здесь
UPD:
Ссылка на скачивание материалов была обновленаШкола MATLAB. Урок 2. Библиотека SimPowerSystems

Предлагаемая статья продолжает цикл публикаций, начатый в предыдущем выпуске приложения. Цель второго урока — знакомство с основными разделами библиотеки SimPowerSystems и с азами построения и отладки функциональных и виртуальных моделей устройств и систем силовой электроники. Перед изучением данного материала рекомендуется ознакомиться с основными разделами урока 1.
Назначение и особенности пакета SimPowerSystems
Пакет SimPowerSystems (в версии MATLAB 6.1 и ранее — Power System Blockset) содержит набор блоков для построения виртуальных моделей электротехнических устройств и устройств силовой электроники. Используя библиотеки Simulink и SimPowerSystems, а также применяя функции и команды MATLAB, пользователь может не только имитировать работу устройств во временной области, но и изучать их частотные свойства, оценивать динамические параметры и осуществлять гармонический анализ токов и напряжений.
Несомненным достоинством SimPowerSystems является то, что при моделировании сложных систем силовой электроники можно использовать функциональные (отражающие функции S-блоков), виртуальные (из элементов или SPS-блоков) и структурные модели. Так, силовой блок полупроводникового преобразователя электрической энергии строится на основе виртуальных блоков SimPowerSystems, а система управления — с помощью функциональных блоков Simulink, отражающих лишь алгоритм ее работы без электрической схемы. Такой подход значительно упрощает саму модель и, как следствие, повышает скорость ее работы. Важно заметить, что библиотека SimPowerSystems имеет относительно большое количество блоков, а также дает возможность создавать новые подсистемы из блоков, имеющихся в библиотеке, и привлекать функции MATLAB. Все это значительно расширяет возможности SimPowerSystems при использовании его совместно с Simulink.
Построение SPS-моделей мало отличается от построения S-моделей. Для их создания необходимо открыть окно модели и окно библиотеки и путем перетаскивания («drag-and-drop» — «перетащи и оставь») составить модель из блоков с выполнением соединений между ними. В то же время в создании SPS-моделей имеется своя специфика.
- Входы и выходы SPS-блоков (в SimPowerSystems версии 2.3 и более ранних) критичны к направлению тока, а соединительные линии между блоками являются аналогами электрических проводов, по которым ток протекает в определенном направлении (по стрелкам).
- При подключении к соединительным линиям можно использовать правую кнопку мыши (ПКМ), но при условии учета направления протекания тока. Если соединение из-за указанных направлений невозможно (стрелки направлены навстречу), то для выполнения соединения необходимо применять специальные блоки — соединители, находящиеся в разделе Connectors библиотеки SPS.
- Непосредственное соединение друг с другом блоков из библиотеки Simulink и блоков из библиотеки SimPowerSystems недопустимо. Передавать сигнал от S-блока к SPS-блоку можно через управляемые источники тока или напряжения, а в обратную сторону — через измерители тока или напряжения.
- В виртуальных моделях обязательно задаются начальные условия либо с помощью специального блока Powergui, либо с помощью функции powerinit.
- При анализе виртуальных моделей совместно с функциональными моделями целесообразно использовать следующие решатели дифференциальных уравнений (см. урок 1):
- ode15s — неявный многошаговый разностный метод переменного порядка (от 1 до 5) для жестких систем;
- ode23s — модифицированный метод Розенброка с постоянным шагом и фиксированным порядком точности, предназначенный для интегрирования умеренно жестких систем при низких требованиях к точности, но имеющий обычно большую скорость, чем ode15s;
- ode23t — метод трапеций с разностными уравнениями для умеренно жестких систем, обладающий повышенной скоростью интегрирования;
- ode23tb — модифицированный метод трапеций в начале решения и метод, использующий обратное дифференцирование на последующих этапах; имеет более низкую точность при меньшей скорости интегрирования, чем ode23t.
Выбор решателя осуществляется по результатам сравнения эффективности работы указанных выше решателей в процессе моделирования после запуска конкретной модели с учетом удовлетворительной скорости решения и получаемой картины процессов (отсутствие необъяснимых выбросов или разрывов на временных диаграммах). Как правило, устанавливаемый по умолчанию решатель ode45 использовать для анализа SPS-моделей нежелательно по причине его недопустимо медленной работы — эта рекомендация дается самим пакетом при запуске модели.
Состав библиотеки SimPowerSystems
Откроем окно MATLAB, а из него кнопкой окно обозревателя библиотеки Simulink Library Browser (рис. 1). Закроем в левой части окна открывшееся дерево Simulink, щелкнув левой кнопкой мыши (ЛКМ) по значку «-», а затем откроем дерево SimPowerSystems щелчком по значку «+» и щелчком по строчке — правую часть окна.

Рис. 1. Окно обозревателя библиотеки Simulink с открытым деревом SimPowerSystems
Из рис. 1 видно, что библиотека SimPowerSystems имеет следующие основные разделы:
- Connectors — соединители.
- Electrical Sources — источники электрической энергии.
- Elements — электротехнические элементы.
- Extra Library — дополнительные электротехнические устройства.
- Machines — электрические машины.
- Measurements — измерительные и контрольные устройства.
- Power Electronics — устройства силовой электроники.
Кроме того, в этом окне имеются блок Powergui для проведения анализа свойств исследуемой модели. На основе блоков из перечисленных разделов имеется возможность создавать виртуальные модели довольно сложных устройств силовой электроники.
Источники электрической энергии (Electrical Sources)
Рис. 2. Правая часть окна браузера с открытым разделом Electrical Sources
В этот раздел входят неуправляемые и управляемые источники электрической энергии (рис. 2).
Идеальный источник постоянного напряжения (DC Voltage Source)
Назначение: получение постоянного по уровню напряжения.
Параметры блока (окно для настройки параметров блока вызывается двойным щелчком ЛК мыши по пиктограмме блока): Amplitude (V) — амплитуда (В). Задается уровень выходного напряжения источника. Measurments — измеряемые переменные. Задаются переменные, передаваемые для измерения в блок Multimeter или для наблюдения с помощью блока Scope. Значение параметра выбирается из списка:
- None — переменные не отображаются;
- Voltage — отображается выходное напряжение источника.
Поскольку блок является идеальным источником напряжения, то его внутреннее сопротивление является нулевым.
Идеальный источник переменного напряжения (AC Voltage Source)
Назначение: получение синусоидального напряжения с постоянной амплитудой.
Параметры блока: Реак Amplitude (V) — амплитуда (В). Задается амплитуда выходного напряжения источника. Phase (deg) — фаза (град). Устанавливается начальный фазовый сдвиг. Frequency (Hz) — частота (Гц).
Задается частота переменного напряжения источника. Sample time — шаг дискретизации. С помощью этого параметра задается шаг дискретизации по времени выходного напряжения источника при создании дискретных моделей. Measurments — измеряемые переменные. Задаются переменные, передаваемые для измерения в блок Multimeter или для наблюдения с помощью блока Scope. Значение параметра выбирается из списка:
- None — переменные не отображаются;
- Voltage — отображается выходное напряжение источника.
Блок является идеальным источником напряжения и имеет нулевое внутреннее сопротивление.
Идеальный источник переменного тока (AC Current Source)
Назначение: получение синусоидального тока с постоянной амплитудой.
Параметры блока: Реак Amplitude (А) — амплитуда (А). Задается амплитуда выходного тока источника. Phase (deg) — фаза (град). Устанавливается начальный фазовый сдвиг. Frequency (Hz) — частота (Гц). Задается частота переменного тока источника. Sample time — шаг дискретизации. С помощью этого параметра задается шаг дискретизации по времени выходного тока источника при создании дискретных моделей. Measurments — измеряемые переменные. Задаются переменные, передаваемые для измерения в блок Multimeter или для наблюдения с помощью блока Scope. Значение параметра выбирается из списка:
- None — переменные не отображаются;
- Current— отображается выходной ток источника.
Блок является идеальным источником тока и имеет бесконечно большое внутреннее сопротивление.
Управляемый источник напряжения (Controlled Voltage Source)
Назначение: получение напряжения, соответствующего по форме сигналу управления.
Параметры блока: Initialize — инициализация. При установке флажка выполняется инициализация источника с заданными начальными параметрами — амплитудой, фазой и частотой. Source type — тип источника. Тип источника указывается при необходимости инициализации источника. Если инициализация источника не задается, то параметр недоступен. Значение параметра выбирается из списка:
- AC— источник переменного напряжения;
- DC— источник постоянного напряжения.
Initial amplitude (V) — начальная амплитуда (В). Устанавливается начальное значение выходного напряжения источника. Параметр доступен, если задана инициализация источника. Phase (deg) — начальная фаза (град). Параметр доступен, если источник инициализируется как источник переменного напряжения. Initial frequency (Hz) — начальная частота (Гц). Параметр доступен, если источник инициализируется как источник переменного напряжения. Measurements — измеряемые переменные. Задаются переменные, передаваемые для измерения в блок Multimeter или для наблюдения с помощью блока Scope. Значение параметра выбирается из списка:
- None— переменные не отображаются;
- Voltage — отображается выходное напряжение источника.
Блок является идеальным источником напряжения и имеет нулевое внутреннее сопротивление.
Управляемый источник тока (Controlled Current Source)
Назначение: получение напряжения, соответствующего по форме сигналу управления.
Параметры блока: Initialize — инициализация. При установке флажка выполняется инициализация источника с заданными начальными параметрами — амплитудой, фазой и частотой. Source type — тип источника. Тип источника указывается после инициализации источника. Если инициализация источника не задается, то параметр недоступен. Значение параметра выбирается из списка:
- AC — источник переменного тока;
- DC — источник постоянного тока.
Initial amplitude (А) — начальная амплитуда (А). Устанавливается начальное значение выходного тока источника. Параметр доступен, если задана инициализация источника. Phase (deg) — начальная фаза (град). Параметр доступен, если источник инициализируется как источник переменного тока. Initial frequency (Hz) — начальная частота (Гц). Параметр доступен, если источник инициализируется как источник переменного тока. Measurements — измеряемые переменные. Задаются переменные, передаваемые для измерения в блок Multimeter или для наблюдения с помощью блока Scope. Значения параметра выбираются из списка:
- None— переменные не отображаются;
- Current— отображается выходной ток источника.
Блок является идеальным источником тока и имеет бесконечное внутреннее сопротивление.
Трехфазный источник напряжения 3-Phase Source и трехфазный программируемый источник напряжения 3-Phase Programmable Voltage Source предназначены для получения соответственно трехфазного напряжения и трехфазного напряжения с программируемыми во времени изменениями амплитуды, фазы, частоты и гармонического состава. Параметры указанных двух источников не приводятся, а будут рассмотрены по мере необходимости.
Электротехнические элементы (Elements)
Рис. 3. Раздел библиотеки Simulink Library: powerlib2/Elements
Пиктограммы всех элементов этого раздела библиотеки представлены в окне Library: powerlib2/Elements (рис. 3, вызывается щелчком ПКМ по строке Elements дерева SimPowerSystems) или в
правой части окна обозревателя Simulink Library Browser (эта конфигурация раздела не приводится, так как все элементы разместить в окне одновременно не удается из-за ограниченности площади окна). В разделе содержатся пассивные электротехнические элементы, магнито-связанные цепи, трансформаторы и т. п.
Последовательная RLC-цепь (Series RLC Branch)
Назначение: модель цепи из резистора, индуктивности и конденсатора, соединенных последовательно.
Параметры блока (окно настройки параметров блока вызывается двойным щелчком ЛКМ по пиктограмме блока): Resistance R (Ohms) — сопротивление (Ом). Величина активного сопротивления. Для того чтобы исключить резистор из цепи, значение сопротивления в окне параметров блока нужно задать равным нулю. При этом на пиктограмме блока резистор отображаться не будет. Inductance L (H) — индуктивность (Гн). Величина индуктивности. Для исключения индуктивности из цепи ее значение следует задать в окне параметров блока равным нулю. При этом на пиктограмме блока индуктивность отображаться не будет. Capacitance C (F) — емкость (Ф). Величина емкости. Для исключения конденсатора из цепи значение емкости следует задать равным inf (бесконечность). При этом конденсатор на пиктограмме блока отображаться не будет. Measurements — измеряемые переменные. Задаются переменные, передаваемые для измерения в блок Multimeter или для наблюдения с помощью блока Scope. Значение параметра выбирается из списка:
- None — нет переменных для отображения;
- Branch voltage— напряжение на зажимах цепи;
- Branch current — ток цепи;
- Branch voltage and current— напряжение и ток цепи.
Отображаемым сигналам в блоке Multimeter присваиваются обозначения:
Параллельная RLC-цепь (Parallel RLC Branch)
Назначение: модель цепи из резистора, индуктивности и конденсатора, соединенных параллельно.
Параметры блока: Resistance R (Ohms) — сопротивление (Ом). Величина активного сопротивления. Для исключения резистора из цепи значение сопротивления в окне параметров блока нужно задать равным inf (бесконечность). При этом на пиктограмме блока резистор отображаться не будет. Inductance L (H) — индуктивность (Гн). Величина индуктивности. Для исключения индуктивности из цепи ее значение следует задать в окне параметров блока inf (бесконечность). При этом на пиктограмме блока индуктивность отображаться не будет. Capacitance C (F) — емкость (Ф). Величина емкости. Для исключения конденсатора из цепи значение емкости следует задать равным нулю. При этом конденсатор на пиктограмме блока отображаться не будет. Measurements — измеряемые переменные. Задаются переменные, передаваемые для измерения в блок Multimeter или для наблюдения с помощью блока Scope. Значение параметра выбирается из списка:
- None — нет переменных для отображения;
- Branch voltage— напряжение на зажимах цепи;
- Branch current— ток цепи;
- Branch voltage and current— напряжение и ток цепи.
Отображаемым сигналам в блоке Multimeter присваиваются обозначения:
Такие блоки, как последовательная RLC-цепь Series RLC Load и параллельная RLC-цепь Parallel RLC Load, аналогичны рассмотренным выше двум блокам, а их отличие заключается в установке параметров. Параметры этих цепей задаются через мощности элементов при номинальном напряжении и частоте. Остальные блоки будут рассматриваться ниже по мере необходимости.
Измерительные и контрольные устройства (Measurements)
Рис. 4. Правая часть окна браузера с открытым разделом«Измерительные и контрольные устройства» — Measurements
Пиктограммы блоков для выполнения измерительных и контрольных функций расположены в разделе Measurements (рис. 4), открываемом ЛКМ путем активизации одноименной строки в дереве
SimPowerSystems.
Измеритель тока (Current Measurement)
Назначение: измеряет мгновенное значение тока, протекающего через соединительную линию (провод). Выходным сигналом блока является сигнал, который может использоваться любым Simulink-блоком.
Параметры блока: Output signal— выходной сигнал. Вид выходного сигнала блока. Выбор значения параметра возможен только тогда, когда с помощью блока Powergui установлен режим расчета на переменном токе (Phasor simulation). В этом случае значение параметра выбирается из списка:
- Magnitude — амплитуда (скалярный сигнал);
- Complex — комплексный сигнал;
- Real-Imag— вектор, состоящий из двух элементов — действительной и мнимой составляющих сигнала;
- Magnitude-Angle — вектор, состоящий из двух элементов — амплитуды и аргумента сигнала.
Измеритель напряжения (Voltage Measurement)
Назначение: измеряет мгновенное значение напряжения между двумя узлами цепи. На выходе блока имеется сигнал, который может использоваться любым блоком из Simulink.
Параметры блока: Output signal— выходной сигнал. Вид выходного сигнала блока. Выбор значения параметра возможен только тогда, когда с помощью блока Powergui установлен режим расчета на переменном токе (Phasor simulation). В этом случае значение параметра выбирается из списка:
- Magnitude — амплитуда (скалярный сигнал);
- Complex — комплексный сигнал;
- Real-Imag— вектор, состоящий из двух элементов — действительной и мнимой составляющих сигнала;
- Magnitude-Angle — вектор, состоящий из двух элементов — амплитуды и аргумента сигнала.
Мультиметр (Multimeter)
Рис. 5. Окно диалога для настройки мультиметра—Multimeter
Назначение: измеряет токи и напряжения блоков библиотеки SimPowerSystem, для которых в их окне настройки параметров устанавливается параметр Measurements — «измеряемые переменные» (рис. 5).
Параметры блока: Available Measurements — переменные (в левом окне), доступные для измерения. Это токи и напряжения блоков схемы, для которых в окне настройки параметров блока установлен параметр Measurements (измеряемые переменные). Обновление списка переменных можно выполнить с помощью клавиши Update, но предварительно надо внести изменения в окна настройки параметров блока. Selected Measurements — измеряемые переменные (в правом окне). Указываются переменные, которые будут передаваться на выход блока Multimeter. Для управления списком измеряемых переменных можно использовать следующие клавиши (между окнами):
- >> — добавить выделенную переменную в правый список;
- Up — передвинуть вверх выделенную переменную в правом списке;
- Down — передвинуть вниз выделенную переменную в правом списке;
- Remove — удалить выделенную переменную из правого списка;
- +/- — изменить знак выделенной переменной.
Output signal— выходной сигнал. Вид выходного сигнала блока. Выбор значения параметра возможен при условии, что с помощью блока Powergui установлен режим расчета на переменном токе (Phasor simulation). В этом случае значение параметра выбирается из списка:
- Magnitude — амплитуда (скалярный сигнал);
- Complex — комплексный сигнал;
- Real-Imag— вектор, состоящий из двух элементов — действительной и мнимой составляющих сигнала;
- Magnitude-Angle — вектор, состоящий из двух элементов — амплитуды и аргумента сигнала.
Блок может использоваться для измерения напряжений и токов вместо обычных измерителей — Current Measurement и Voltage Measurement. Выходным сигналом блока является вектор всех сигналов, соответствующих измеряемым переменным. Другие измерители, пиктограммы которых располагаются в этом разделе, будут рассмотрены ниже по мере необходимости.
Пиктограммы блоков остальных трех разделов библиотеки SimPowerSystems приведены на рис. 6 (раздел «Устройства силовой электроники» — Power Electronics), рис. 7 (раздел «Электрические машины» — Machines) и рис. 8 (раздел «Соединители» — Connectors).
Рис. 6. Правая часть окна браузера с открытым разделом «Устройства силовой электроники» —Power Electronics
Рис. 7. Правая часть окна браузера с открытым разделом «Электрические машины» — Machines
Рис. 8. Правая часть окна браузера с открытым разделом «Соединители» — Connectors
Теперь приведем несколько относительно простых примеров построения моделей из блоков библиотеки SimPowerSystems.
Построение SPS-моделей
Продемонстрируем порядок действий при построении SPS-модели. Вызываются два окна: окно обозревателя библиотеки Simulink Library Browser (рис. 1) и через File/New/Model — окно модели. Расположим окна рядом на рабочем столе.
Пример 1. Выполнить модель резистивного делителя постоянного напряжения и измерить его входное и выходное напряжения.
Исходные данные для модели: питающее постоянное напряжение 10 В; коэффициент деления 2; входное сопротивление делителя 20 Ом.
В левой части окна обозревателя закрываем дерево Simulink, открываем дерево SimPowerSystems и активизируем строку дерева Electrical Sources (источники электрической энергии). В правой части окна обозревателя открывается этот раздел Electrical Sources (рис. 2). С помощью ЛКМ перетаскиваем пиктограмму источника постоянного напряжения DC Voltage Source в окно модели (рис. 9а). Действуя аналогично, в окно модели поочередно перетаскиваются две пиктограммы последовательной RLC-цепи Series RLC Branch (раздел Elements), две пиктограммы измерителя напряжения Voltage Measurement (раздел Measurements) и две пиктограммы Display из раздела Sinks (приемники и измерители сигналов), но уже из библиотеки Simulink. Заметим, что у двух одинаковых пиктограмм названия отличаются наличием номера 1 (рис. 9а). Для удобства соединения повернем на плоскости пиктограмму блока Series RLC Branch 1 на угол 90°. Для этого ПКМ активируем указанную пиктограмму, по выпадающим меню поочередно выполним действия Format/Rotate Block и в результате осуществим ее поворот на указанный угол по часовой стрелке (опция Flip-Block обеспечивает разворот пиктограммы на 180°). После поворота пиктограмма оказывается «сплюснутой», так как ее горизонтальный размер превращается в вертикальный. Нужные размеры пиктограммы выставляются после ее активации растягиванием за нижний правый угол ЛКМ после превращения указателя в двунаправленную стрелку.

Рис. 9.
а) Подготовка блоков;
б) соединение блоков друг с другом;
в) SPS-модель после настройки и запускаТеперь поочередно производятся соединения. Для этого к выходу пиктограммы подводится указатель, который превращается в крест. Нажимаем ЛКМ, а получаемую линию протягиваем до входа подсоединяемой пиктограммы. После отпускания ЛКМ на конце соединительной линии (на входе соседней пиктограммы) образуется стрелка (рис. 9б). Напомним, что ответвления от соединительного провода выполняются с помощью ПКМ. Измеритель напряжения Voltage Measurement подключается параллельно участку, на котором производится измерение.
Следующий этап — настройка блоков. Начнем с блока Series RLC Branch. Щелкнем дважды по пиктограмме этого блока — и появится окно для настройки его параметров (рис. 10а). Устанавливаем значения сопротивления резистора 10 Ом, индуктивности — 0 Гн и емкости конденсатора — inf (бесконечность), а в текстовом окне оставляем строчку None, так как прибор Multimeter не используется. Закрываем окно кнопкой Ok, и на пиктограмме исчезают изображения индуктивности и емкости (рис. 9в). Аналогично настраиваем блок Series RLC Branch 1, установив такие же значения всех параметров.
Рис. 10. Окна настройки параметров:
а) последовательной RLC-цепи Series RLC Branch;
б) источника постоянного напряжения DC Voltage SourceНастройка блока DC Voltage Source заключается в установке в вызванном окне настройки параметров значения напряжения (в нашем примере равного 10 В, рис. 10б). При измерении постоянного напряжения блок Voltage Measurement не требует настройки, а в блоке Display при необходимости увеличения числа значащих цифр в получаемом результате следует вызвать окно настройки параметров и заменить в его выпадающем меню Format короткий формат Short на длинный формат Long. Оставим формат Short. После запуска модели, которая достаточно проста и по этой причине нет смысла заменять решатель ode45 на более быстрый, получаем результат — напряжение на входе делителя 10 В и на выходе — 5 В (рис. 9в).
Пример 2. Произвести моделирование переходного процесса в интегрирующей RL-цепи с измерением ее тока и напряжения на выходе (на резисторе).
Исходные данные для модели: питающее постоянное напряжение 50 В; для RL-цепи сопротивление резистора 4 Ом, индуктивность катушки 0,5 Гн.
В соответствии с порядком, изложенным выше, соберем схему (рис. 11а), в которой напряжение питания 50 В (источник DC Voltage Source), сопротивление резистора 4 Ом, индуктивность 0,5 Гн в блоках Series RLC Branch выставляются в соответствующих окнах параметров. Отметим две особенности построенной модели. Первая состоит в применении измерителя тока Current Measurement, который включается последовательно с нагрузкой так, чтобы измеряемый ток входил в «+» и выходил из «-». К сигнальному выходу i этого блока подсоединен вход осциллографа Scope. Вторая особенность заключается в том, что выходное напряжение снимается с резистора RL-цепи. Но подключиться к средней точке последовательной цепи (точка внутри блока) не представляется возможным. По этой причине приходится использовать два блока Series RLC Branch, в первом из которых оставлен только резистор, а во втором — индуктивность.

Рис. 11.
а) Модель интегрирующей цепи;
б) временные диаграммы ее тока
в) напряжения на выходеПостоянная времени RL-цепи т = L/R = 0,125 с, и поэтому время моделирования должно составлять более 0,675 с (свыше 5т). Выбирается это время (см. урок 1) в окне модели через меню Simulation/Simulation Parametrs. Открывается окно Simulation Parametrs и в нем задается время Stop time равным 1 с.
Сохраним модель в окне модели через меню File/Save as… под названием DC_Regim_Perechod1, которое автоматически присваивается окну модели (рис. 11а). Для установки начальных условий используем функцию powerinit. У этой функции возможные варианты записи аргумента находятся в справке (команда help powerinit). Для задания нулевых начальных условий в командном окне наберем команду powerinit (‘DC_Regim_Perechod1′,’reset’), в которой в качестве аргумента заносится название модели в апострофах ‘DC_Re gim_Perechod1’ и команда обнуления начальных условий ‘reset’ также в апострофах. Команда выполняется при нажатии на клавиатуре клавиши Enter, и начальные условия становятся нулевыми. После запуска процесса моделирования и после двойного щелчка ПКМ по пиктограммам Scope получим две осциллограммы (рис. 11б и 11в). Первая соответствует экспоненциально нарастающему току цепи, а вторая — напряжению на резисторе. Уместно напомнить, что окна осциллограмм следует настроить выбором соответствующего масштаба по вертикальной оси (см. урок 1). Для этого щелкнем ПКМ в поле осциллограммы, выберем в контекстном меню команду Axes properties… (свойства осей), а затем в появившемся окне ‘Scope‘ properties: axis 1 (свойства графика) выставим максимальное и минимальное значения по оси координат Y.
Предположим, при наборе команды powerinit в командном окне MATLAB произведена ошибка в виде замены буквы n на m, то есть powerimit. Команда не будет выполнена и в командном окне появится запись:
. Undefined function or variable 'powerimit'
(неизвестная функция или переменная ‘powerimit’).
Если функция набрана правильно, но не заданы аргументы, то запись будет другой:
. Error using ==> powerinit Not enough input arguments
(Ошибка пользователя, недостаточное количество аргументов.)
О наличии ошибок в схеме модели в командном окне также появляется сообщение. Например, в рассматриваемой схеме отсутствует соединение выхода измерителя тока Current Measurement с входом осциллографа Scope. В этом случае появятся два сообщения:
Warning: Output port 1 of block 'DC_Regim_Perechod1/Current Measurement' is not connected. Warning: Input port 1 of block 'DC_Regim_Perechod1/Scope' is not connected.
(Предупреждение: Выход/вход порта 1 блока ‘…’ не подключен).
Таким образом, MATLAB выполняет проверку правильности набора команд и сообщает пользователю об имеющихся ошибках с обязательным началом строки с трех знаков вопроса. Аналогично проверяется правильность собранных схем, а в окне дается сообщение. Любые остановки при наличии ошибок комментируются. По этой причине следует при всяких неожиданных остановках смотреть сообщения в командном окне.
Пример 3. Произвести моделирование прерывистого режима работы RL-цепи при питании переменным напряжением.
Исходные данные для модели: питающее напряжение переменного тока с амплитудой 100 В и частотой 50 Гц; прерывистый режим с периодом 0,15 с при относительной длительности импульсов 70% и фазовом сдвиге 0,02 с (указанные данные приведены к виду, удобному для настройки генератора); параметры RL-цепи — сопротивление 0,5 Ом и индуктивность 0,01 Гн. В модели в качестве прерывателя используется блок Breaker (раздел элементов Elements библиотеки SimPowerSystem).
Составленная модель (рис. 12а) содержит источник переменного напряжения AC Voltage Source (блок настройки параметров на рис. 12б), генератор прямоугольных импульсов Pulse Generator (блок настройки параметров на рис. 12в), блок Breaker (блок настройки параметров на рис. 12г). Также в нее входят уже знакомые нам измеритель тока Current Measurement, два осциллографа Scope и блок Series RLC Branch, настройку параметров которых мы уже рассматривали выше. Напомним, что пиктограмма Pulse Generator находится в разделе Sources библиотеки Simulink.

Основная трудность при подготовке модели состоит в ее настройке, а именно: выбор решателя, определение шага дискретизации и модельного времени Stop time. Хотя эти настройки уже выполнялись, проделаем все операции еще раз. В окне модели через меню Simulation/Simulation Parametrs открываем окно Simulation Parametrs. Как и рекомендовалось выше, выберем решатель ode15s. Считаем, что для наблюдения достаточно двух периодов низкочастотной составляющей сигнала по 0,15 с, то есть Stop time равно 0,3 с. Высокочастотная составляющая сигнала имеет период 0,02 с, и для него следует задать хотя бы 10 отсчетов, выбрав шаг дискретизации Max step size равным 0,002 c. После запуска модели получаем временные диаграммы процессов изменения тока в RL-цепи и сигнала на выходе генератора Pulse Generator (рис. 12д и 12е).
Теперь приведем краткую информацию о блоке выключателя переменного тока Breaker, моделирующем устройство включения-выключения переменного тока. Управляется он внешним входным единичным сигналом или от встроенного таймера. Команда на выключение соответствует спаду сигнала на нулевой уровень, но при этом выключение устройства осуществляется только при уменьшении тока в силовой цепи до нуля (рис. 12д). Устройство снабжено искрогасящей RC-це-пью, подключенной параллельно контактам выключателя и называемой Snubber. Откроем окно настройки параметров.
Параметры блока (рис. 12в): Breaker resistance Ron (Ohm) — сопротивление выключателя в замкнутом состоянии (Ом). Initial state (0for ‘open’,1 for ‘closed’) — начальное состояние выключателя (0 — разомкнут, 1 — замкнут). Snubber resistance Rs (Ohm) — сопротивление искрогасящей цепи (Ом). Snubber capacitance Cs(F) — емкость искрогасящей цепи (Ф). Switching times (s) — время срабатывания выключателя (с). Параметр задается в виде вектора, каждая составляющая которого определяет моменты времени срабатывания выключателя. Например, при разомкнутом начальном состоянии ключа значение параметра, заданное вектором [0.005 0.01 0.02 0.03], означает, что замыкание ключа будет выполняться в моменты времени 0,005 с и 0,02 с, а размыкание — в моменты времени 0,01 с и 0,03 с. Sample time of the internal timer Ts (s) — шаг дискретизации встроенного таймера. External control of switching times — внешнее управление временем срабатывания. При установке флажка на пиктограмме блока появляется входной управляющий порт. Единичный уровень управляющего сигнала вызывает замыкание ключа, а нулевой уровень является командой на размыкание ключа, при этом разрыв цепи выполняется при достижении током нулевого уровня. Measurements— измеряемые переменные. Значения параметра выбираются из списка:
- None — нет переменных для отображения;
- Branch voltage — напряжение на зажимах элемента;
- Branch current— ток элемента;
- Branch voltage and current— напряжение и ток элемента.
В соответствии с приведенными рекомендациями выполнена настройка параметров блока Breaker (см. рис. 12в). Особенность подбора параметров элементов искрогасящей цепи состоит в том, чтобы исключить появление колебаний тока в RL-цепи на интервале, когда ключ разомкнут.
Пример 4. Произвести моделирование интегратора из RC-цепи при воздействии импульсного напряжения прямоугольной формы, имеющего постоянную составляющую.
Исходные данные для модели: импульсное напряжение на входе с амплитудой 50 В и частотой 60 Гц; постоянная составляющая 15 В; параметры интегратора — емкость 0,01 Ф, сопротивление параллельного резистора 25 Ом, сопротивление последовательного резистора 1 Ом.
В модели используются генераторы прямоугольных импульсов Signal Generator и постоянного напряжения Constant (раздела Sources) и сумматор Sum (раздела Math Operations) библиотеки Simulink, управляемый источник напряжения Controlled Voltage Source (раздел Electrical Sources), два блока Parallel RLC Branch (раздел Elements), измеритель напряжения Voltage Measurement (раздел Measurements) библиотеки SimPowerSystems, известный читателю измерительный блок Scope и новый — мультиплексор Mux (раздел Signal Routing) библиотеки Simulink. Соединение указанных блоков выполнено в соответствии со схемой на рис. 13а, но имеется одна особенность — подключение блока Parallel RLC Branch к источнику Controlled Voltage Source. Поскольку оказалось, что надо соединить в одну точку два провода со стрелками навстречу друг другу, что недопустимо, то пришлось использовать соединитель типа L connector (раздел Connectors).
Настройка параметров новых для нас блоков осуществлена в соответствии с окнами, приведенными на рис. 13. Установка параметров блока Controlled Voltage Source не вызовет трудностей (рис. 13б). У генератора Signal Generator выставляется форма сигнала прямоугольная (square), амплитуда 50 В, частота 60 Гц (рис. 13в). У мультиплексора Mux выставляются число входов Number of inputs — 2 и способ отображения Display option — signals, тогда получаем пиктограмму в виде прямоугольника с белым фоном и отображением меток входных сигналов, которую надо растянуть до приемлемых размеров (рис. 13г). У блока Sum основные настройки — число входов со знаками |++.

Рис. 13.
а) Модель интегратора;
б) окна настройки параметров Controlled Voltage Source;
в) Signal Generator;
г) Mux;
д) результаты моделированияДлительность процесса моделирования Stop times выбирается 0,08 c, а максимальный шаг дискретизации Max step size — 0,001 c. Результат моделирования после запуска модели представлен на рис. 13д. За счет мультиплексора входные сигналы объединяются в вектор, что позволяет вывести на экран осциллографа сразу два сигнала, наложенных друг на друга. Видно, что переходный процесс, обусловленный наличием постоянной составляющей, заканчивается на втором периоде прямоугольных импульсов, а выходные треугольные импульсы имеют нелинейный характер нарастания и спада напряжения.
Для демонстрации использования различных типов соединителей из раздела Connectors построены две модели (рис. 14), аналогичные модели, приведенной на рис. 13а. Соединитель первого типа T connector (на рис. 14а он выделен в результате активации четырьмя маркерами), предназначен для соединения двух входящих и одного выходящего проводов в отличие от использовавшегося выше соединителя L connector, осуществляющего соединение двух входящих проводов. Второй вариант соединителя реализован на блоках нейтраль Neutral (рис. 14б). Блок позволяет соединять несколько электрических узлов без видимых линий связи (проводов) при условии, что их номера, устанавливаемые в окне настройки параметров, одинаковы. Работа же всех трех указанных моделей протекает аналогично.

Рис. 14. Варианты построения модели с различными типами соединителей:
а) T connector;
б) NeutralПодведем итоги урока 2:
1. Пакет SimPowerSystems обладает библиотекой, состоящей из 7 разделов, включающих:- источники электрической энергии в виде генераторов тока и напряжения;
- пассивные и активные (управляемые) элементы;
- средства измерения и контроля;
- различные дополнительные устройства.
2. Наборы блоков из библиотек Simulink и SimPowerSystems являются основой для построения моделей устройств, состоящих из цепи, включающей в себя пассивные и активные элементы и источники энергии, из системы управления на базе функциональных блоков и из системы контроля, включающей средства измерения.
3. При соединении пассивных и активных элементов, источников и измерителей необходимо учитывать направление тока в соединительных проводах и при отсутствии возможности их соединения применять специальные соединители — коннекторы (Connectors).
4. Созданная SPS-модель при запуске исключает необходимость составления и решения дифференциальных уравнений цепи, что существенно упрощает процесс моделирования.
5. Настройка блоков SPS-модели осуществляется через специальные окна установки значений параметров и дополнительно включает задание начальных условий (значений тока и напряжения).
6. Настройка процесса моделирования заключается в выборе решателя дифференциальных уравнений и расчете максимального шага дискретизации и времени моделирования с учетом минимальной и максимальной частот анализируемых сигналов.
7. Программа MATLAB автоматически выполняет проверку набираемых в командном окне команд и собираемых в окне модели схем, выявляет допущенные пользователем ошибки и письменно сообщает о характере выявленных ошибок, что существенно облегчает процесс настройки моделей.