exponenta event banner

Сдвиг переменных MATLAB с помощью сценария MATLAB

Можно встроить переменные MATLAB ® в базовую рабочую область с помощью команд MATLAB и использовать язык MATLAB для изменения их значений во время выполнения. В обычном режиме или в режиме ускорения Simulink ® переносит новые значения в моделируемую модель. Во внешнем режиме Simulink передает новые значения приложению реального времени, работающему в режиме ядра.

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

Объекты параметров и другие внешние данные можно постоянно хранить в словаре данных.

Эта процедура использует модель квадратно-волновой передаточной функции sldrtex_inlined. Чтобы открыть эту модель, в окне команды MATLAB введите:

open_system(docpath(fullfile(docroot,'toolbox',...
    'sldrt','examples','sldrtex_inlined')))

Сначала установите ядро Simulink Desktop Real-Time™ и cd в рабочую папку.

  1. Открытый sldrtex_inlined и блок Scope.

    model = 'sldrtex_inlined';
    open_system(fullfile(docroot, 'toolbox', 'sldrt', 'examples', model));
    scname = [model '/Scope'];
    open_system(scname)
  2. В базовой рабочей области создайте объект параметра, настроенный для сохранения параметра в качестве глобальной переменной.

    Dmp = Simulink.Parameter([1 70 10000]);
    Dmp.StorageClass='ExportedGlobal';
  3. Замените параметр блока Transfer Fcn Denominator с объектом параметра.

    xfername = [model '/Transfer Fcn'];
    set_param(xfername,'Denominator','Dmp');
  4. Начать выполнение с оригинала Dmp значение переменной.

    set_param(model,'StopTime','Inf');
    set_param(model,'SimulationMode','external')
    set_param(model,'SimulationCommand','connect')
    set_param(model,'SimulationCommand','start')
  5. Протянуть Dmp переменная из 30 кому 180 около 30.

    for Val = 30 : 30 : 180
        Dmp.Value = [1 Val 10000];
        set_param(model,'SimulationCommand','update')
        
        pause(2.0)
    end

    Блок Scope отображает изменения с интервалом в 30 единиц. На рисунках показаны ключевые изменения.

    Val == 30

    Val == 90

    Val == 180

  6. Остановить исполнение.

    set_param(model,'SimulationCommand','stop');

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