В этом примере показано, как задать пользовательскую линеаризацию для блока насыщения с помощью функции.
Откройте модель Simulink.
mdl = 'configSatBlockFcn';
open_system(mdl)
В этой модели пределами блока насыщения является –satlimit
и satlimit.
Задайте предел насыщения, который является параметром, требуемым функцией линеаризации блока Saturation.
satlimit = 10;
Линеаризуйте модель в рабочей точке модели с помощью линейных аналитических точек, заданных в модели. Выполнение так возвращает линеаризацию блока насыщения.
io = getlinio(mdl); linsys = linearize(mdl,io)
linsys = D = Constant Saturation 0.5 Static gain.
В рабочей точке модели вход с блоком насыщения равняется 10. Это значение находится на контуре насыщения. В этом значении блок насыщения линеаризует к 1.
Предположим, что вы хотите, чтобы блок линеаризовал к переходному значению 0,5, когда вход падает на контур насыщения. Запишите функцию, которая задает линеаризацию блока насыщения, чтобы вести себя этот путь. В данном примере используйте функцию конфигурирования в mySaturationLinearizationFcn.m
.
function blocklin = mySaturationLinearizationFcn(BlockData) % This function customizes the linearization of a saturation block. The % linearization of the block is as follows % BLOCKLIN = 0 when |U| > saturation limit % BLOCKLIN = 1 when |U| < saturation limit % BLOCKLIN = 0.5 when U = saturation limit % Get the saturation limit specified in the parameters of the block. satlimit = BlockData.Parameters.Value; % Compute the linearization based on the input signal level to the block. if abs(BlockData.Inputs.Values) > satlimit blocklin = 0; elseif abs(BlockData.Inputs.Values) < satlimit blocklin = 1; else blocklin = 0.5; end
Эта функция конфигурирования задает линеаризацию блока насыщения на основе уровня входного сигнала блока. Для входных значений вне пределов насыщения блок линеаризует, чтобы обнулить. В пределах блок линеаризует к 1. Для граничных значений блок линеаризует к интерполированному значению 0,5. Вход к функции, BlockData, является структурой, которую автоматически создает программное обеспечение, когда вы конфигурируете линеаризацию блока Saturation, чтобы использовать функцию. Функция конфигурирования читает пределы насыщения из той структуры данных.
Вход к функции, BlockData
, структура, которую программное обеспечение автоматически создает каждый раз, когда оно линеаризует блок. Когда вы задаете функцию конфигурирования линеаризации блока, программное обеспечение автоматически передает BlockData
к функции. Если ваша функция конфигурирования требует дополнительных параметров, можно сконфигурировать блок, чтобы установить те параметры в BlockData.Parameters
поле .
Задайте mySaturationLinearizationFcn
как линеаризация для блока Controller.
В модели Simulink щелкните правой кнопкой по блоку Saturation и выберите Linear Analysis> Specify Selected Block Linearization.
В диалоговом окне Block Linearization Specification выберите линеаризацию блока Specify с помощью одного из следующих.
В выпадающем списке выберите Configuration Function
.
В текстовом поле введите имя функции mySaturationLinearizationFcn
.
Задайте предел насыщения в качестве параметра для функции. В столбце Значения параметров введите имя переменной satlimit
.
В столбце Названия параметра введите соответствующее описательное имя SaturationLimit
.
Нажать ОК.
В качестве альтернативы можно задать функцию конфигурирования программно.
satblk = 'configSatBlockFcn/Saturation'; set_param(satblk,'SCDEnableBlockLinearizationSpecification','on') rep = struct('Specification','mySaturationLinearizationFcn',... 'Type','Function',... 'ParameterNames','SaturationLimit',... 'ParameterValues','satlimit'); set_param(satblk,'SCDBlockLinearizationSpecification',rep)
Линеаризуйте модель снова. Теперь линеаризация использует пользовательскую линеаризацию блока насыщения.
linsys_cust = linearize(mdl,io)
linsys_cust = D = Constant Saturation 0.5 Static gain.
В рабочей точке модели вход с блоком насыщения равняется 10. Поэтому блок линеаризует к 0,5, значение линеаризации, заданное в функции конфигурирования.