Чтобы сократить количество переменных рабочей области, необходимо обеспечить и избежать конфликтов по совпадению имен, можно сгруппировать тесно связанные параметры в структуры (см., Организуют Связанные Определения Параметров блоков в Структурах (Simulink)).
В этом примере, первоначальной модели xpcosc
имеет четыре параметра, которые среди них определяют форму выходной формы волны.
Блок | Параметр | Полевое выражение структуры | Начальное значение |
---|---|---|---|
| Freq |
| 20 |
| Gain |
| 1000^2 |
| Gain |
| 2*0.2*1000 |
| Gain |
| 1000^2 |
Открытая модель xpcosc
и сохраните копию в рабочую папку.
Создать структуру параметра, в Командном окне MATLAB®, введите:
kp = struct(... 'sg_freq', 20, ... 'g2_gain',1000^2, ... 'g1_gain', 2*0.2*1000, ... 'g_gain',1000^2)
kp = struct with fields: sg_freq: 20 g2_gain: 1000000 g1_gain: 400 g_gain: 1000000
Сделать структуру параметра настраиваемой на целевом компьютере:
spkp = Simulink.Parameter(kp);
spkp.StorageClass = 'ExportedGlobal';
spkp.Value
ans = struct with fields: sg_freq: 20 g2_gain: 1000000 g1_gain: 400 g_gain: 1000000
В Signal Generator
блокируйте, замените значение параметра Frequency с spkp.sg_freq
.
В Gain
блокируйте, замените значение параметра Gain с spkp.g_gain
.
В Gain1
блокируйте, замените значение параметра Gain с spkp.g1_gain
.
В Gain2
блокируйте, замените значение параметра Gain с spkp.g2_gain
.
Создайте и загрузите модель на целевой компьютер.
rtwbuild('xpcosc'); tg = slrt('TargetPC1'); load(tg,'xpcosc');
Установите время остановки на inf
.
tg.StopTime = inf;
Разверните Gain
значение Gain1
блок из 200
к 800
.
start(tg); for g = 200 : 200 : 800 setparam(tg, 'spkp.g1_gain', g); pause(1); end stop(tg);
Постройте график результатов.
time = tg.TimeLog; output = tg.OutputLog; plot(time, output);
Сохранить структуру параметра spkp
для дальнейшего использования введите:
save 'ex_slrt_osc_struct.mat', 'spkp'
Чтобы загрузить структуру параметра, когда вы откроете модель, добавьте load
команда к PreLoadFcn
'callback'. Чтобы удалить структуру параметра из рабочей области, когда вы закроете модель, добавьте clear
команда к CloseFcn
'callback'. Для получения дополнительной информации смотрите Коллбэки Модели (Simulink).