zoukankan      html  css  js  c++  java
  • Simulink仿真入门到精通(八) M语言对Simulink模型的自动化操作及配置

    8.1 M语言控制模型的仿真

    M语言与Simulink结合的方式:

    • 在Simulink模型或模块中使用回调函数
    • 在M语言中调用与模型相关的命令,控制模型的建立,设置模块的属性,增删信号线,以及运行模型仿真等

    为了调用和操作Simulink模型,M语言中最常用的函数有sim、set_param、get_param。

    8.1.1 sim控制模型仿真及参数配置

    (1)simOut=sim('model','ParameterName1',value1,'ParameterName2',value2,...);

    对名为model的模型进行仿真,仿真时将其参数通过[参数名,参数值]的方式进行配置。

    simOut是一个Simulink.SimulationOutput对象,包含了仿真的输出:仿真采样时间、状态值和信号值。

    sim_out=sim('mymodel','SimulationMode','Normal','stoptime','30');

    (2)simOut=sim('model',ParameterStruct);

    仿真时通过结构体变量配置参数。

    param_struct=struct('SimulationMode','Normal','stoptime','30');
    sim_out=sim('mymodel',param_struct);

    (3)simOut=sim('model',ConfigSet);

    仿真时通过配置集合来配置参数。

    getActiveConfigSet()        %获取模型的配置集合变量
    attachConfigSet()           %绑定参数配置集合到模型
    setActiveConfigSet()        %激活模型的某个参数配置

    对ConfigSet对象进行参数获取/设定也使用set_param()/get_param()。

    (4)sim('model');

    当不需要该表模型的参数配置,也不关心模型仿真的输出时,可以直接sim。

    使用上述命令运行仿真时,并不修改模型的配置,而是通过sim函数暂时设置某个参数应用于此次仿真,仿真后模型的配置参数仍然保持之前的设定不受影响。

    当希望观察模型参数配置不同对仿真结果有何影响时,直接使用多个sim语句带上不同的参数配置作为M脚本运行即可。

    示例:

    Data Export选Array。

    param_struct1.SaveState      = 'on';
    param_struct1.StateSaveName  = 'xout1';
    param_struct1.SaveOutput     = 'on';
    param_struct1.OutputSaveName = 'yout1';
    param_struct1.SolverType     = 'Fixed-step';
    param_struct1.Solver         = 'FixedStepDiscrete';
    param_struct1.FixedStep      = '0.01';
    sim_out1 = sim('mymodel',param_struct1);
    param_struct2 = param_struct1;
    param_struct2.FixedStep      = '2';
    param_struct2.OutputSaveName ='yout2';
    sim_out2 = sim('mymodel',param_struct2);
    t1 = get(sim_out1, 'tout');
    t2 = get(sim_out2, 'tout');
    y1 = get(sim_out1, 'yout1');
    y2 = get(sim_out2, 'yout2');
    figure;
    title('Sim a model with different config parameters');
    subplot(211);
    plot(t1,y1);
    xlabel('time(s)');
    ylabel('yout1');
    subplot(212);
    plot(t2,y2);
    xlabel('time(s)');
    ylabel('yout2');
    

    8.1.2 set_param控制模型仿真过程

    set_param(object,param1,value1,param2,value2,...);
    
    • object:模型或模块对象,既可以使用路径表示,也可以使用句柄表示;
    • paramX:模型或模块的参数名;
    • valueX:对应于paramX的参数值。

    获取参数则使用get_param(object,param),每次只能获取一个参数的值。

    有一个参数名为SimulationCommand,可由set_param设置不同的值来控制模型仿真的过程。

    功能说明
    start 启动模型仿真
    pause 暂停模型仿真
    step 单步执行仿真
    continue 继续模型放着
    stop 停止模型仿真

    例:在仿真过程中某些时刻改变某些参数的值。

    set_param('mymodel','SolverType','Fixed-step','Solver','FixedStepDiscrete','FixedStep','0.1');
    set_param('mymodel', 'SimulationCommand', 'start');
    set_param('mymodel', 'SimulationCommand', 'pause');
    set_param('mymodel', 'SimulationCommand', 'step');
    pause(0.2);
    t = get_param('mymodel', 'SimulationTime')  % get current simulation time
    while t~=0
        t = get_param('mymodel', 'SimulationTime');  % get current simulation time
        if t < 30
            set_param('mymodel/Gain', 'Gain','3');
        elseif t < 80
            set_param('mymodel/Gain', 'Gain','1.5');
        else
            set_param('mymodel/Gain', 'Gain','-0.3');
        end
        set_param('mymodel', 'SimulationCommand', 'step');
        pause(0.2);
    end
    set_param('mymodel', 'SimulationCommand', 'stop');
    

     8.2 M语言修改模块属性

    set_param('m_control_05','SimulationCommand','start');
    scope_h = find_system('m_control_05', 'findall','on','blockType','Scope');
    num_scope = length(scope_h);
    for ii = 1: num_scope
        set(scope_h(ii), 'Open', 'on');
    end
    

    8.3 M语言自动建立模型

    几个重要的函数:

    1. 模型相关:new_system创建新模型,load_system将模型加载到内存(不可见),open_system打开模型使可视化;
    2. 模块相关:add_block向模型中追加模块,delete_block删除模块,replace_block替换模块;
    3. 信号线相关:add_line在模块输入/输出口之间连线,delete_line将既存的信号线删除。

    8.3.1 模型的建立及打开

    new_system可以有返回值,返回模型的句柄。

    >> h=new_system('new')
    
    h =
    
       1.8480e+03

    save_system可以与new_system连用而直接将模型保存在硬盘上。

    load_system将模型隐式打开。

    close_system关闭模型,参数为模型名,不写参数时关闭选中的模型(gcs)。

    bdclose all可以无条件关闭所有隐式或显示打开的模型,即使模型存在改动也不提示保存,谨慎使用。

    8.3.2 模块的添加、删除及替换

    add_block('src','dest')

    src指所添加的模块的路径,dest表示这个源模块添加到的目标路径。

    add_block('simulink/Sources/Constant','mymodel/Constant')
    

    add_block('src','dest','param1','value1',...)

    可以在添加模块的同时对其参数进行设定。

    注意:在添加模块时应避免命名的重复,否则会导致错误;在添加模块之前,要先显示或隐式的将模型打开。

    replace_block('sys','old_blk','new_blk')

    sys为模型名,old_blk为需要被替换的模块类型名,new_blk为用来替换其他模块的模块名。

    当模型中被替换的模块类型存在多个模块时,会弹出对话框供用户选择。

    替换后模块名没有改变。

    replace_block('mymodel','Scope','simulink/Sinks/Out1')

    delete_block('blk')将此类模块全部删掉。

    8.3.3 信号线的添加及删除

    h=add_line('sys','oport','iport')

    在模型sys中追加从输出口oport到输入口iport的信号线,并返回其句柄h。

    输入输出端口都需要在模块名后追加斜杠和端口序号。

    add_block('simulink/Sources/In1','mymodel/In1');
    add_block('simulink/Sinks/Out1','mymodel/Out1');
    add_line('mymodel','In1/1','Out1/1','autorouting','on');
    

    autorouting可以使连线仅保持水平和竖直两个方向。

    8.3.4 M语言自动创建模型

    自动创建switch模型。

    function varargout = section_model(varargin)
    % SECTION_MODEL MATLAB code for section_model.fig
    %      SECTION_MODEL, by itself, creates a new SECTION_MODEL or raises the existing
    %      singleton*.
    %
    %      H = SECTION_MODEL returns the handle to a new SECTION_MODEL or the handle to
    %      the existing singleton*.
    %
    %      SECTION_MODEL('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in SECTION_MODEL.M with the given input arguments.
    %
    %      SECTION_MODEL('Property','Value',...) creates a new SECTION_MODEL or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before section_model_OpeningFcn gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to section_model_OpeningFcn via varargin.
    %
    %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
    %      instance to run (singleton)".
    %
    % See also: GUIDE, GUIDATA, GUIHANDLES
    
    % Edit the above text to modify the response to help section_model
    
    % Last Modified by GUIDE v2.5 02-Jan-2015 09:24:44
    
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @section_model_OpeningFcn, ...
                       'gui_OutputFcn',  @section_model_OutputFcn, ...
                       'gui_LayoutFcn',  [] , ...
                       'gui_Callback',   []);
    if nargin && ischar(varargin{1})
        gui_State.gui_Callback = str2func(varargin{1});
    end
    
    if nargout
        [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
        gui_mainfcn(gui_State, varargin{:});
    end
    % End initialization code - DO NOT EDIT
    
    
    % --- Executes just before section_model is made visible.
    function section_model_OpeningFcn(hObject, eventdata, handles, varargin)
    % This function has no output args, see OutputFcn.
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    % varargin   command line arguments to section_model (see VARARGIN)
    
    % Choose default command line output for section_model
    handles.output = hObject;
    
    % Update handles structure
    guidata(hObject, handles);
    
    % UIWAIT makes section_model wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
    
    
    % --- Outputs from this function are returned to the command line.
    function varargout = section_model_OutputFcn(hObject, eventdata, handles) 
    % varargout  cell array for returning output args (see VARARGOUT);
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Get default command line output from handles structure
    varargout{1} = handles.output;
    
    
    
    function edit1_Callback(hObject, eventdata, handles)
    % hObject    handle to edit1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Hints: get(hObject,'String') returns contents of edit1 as text
    %        str2double(get(hObject,'String')) returns contents of edit1 as a double
    
    
    % --- Executes during object creation, after setting all properties.
    function edit1_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to edit1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
    
    % Hint: edit controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end
    
    
    
    function edit2_Callback(hObject, eventdata, handles)
    % hObject    handle to edit2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Hints: get(hObject,'String') returns contents of edit2 as text
    %        str2double(get(hObject,'String')) returns contents of edit2 as a double
    
    
    % --- Executes during object creation, after setting all properties.
    function edit2_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to edit2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
    
    % Hint: edit controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end
    
    
    
    function edit3_Callback(hObject, eventdata, handles)
    % hObject    handle to edit3 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Hints: get(hObject,'String') returns contents of edit3 as text
    %        str2double(get(hObject,'String')) returns contents of edit3 as a double
    
    
    % --- Executes during object creation, after setting all properties.
    function edit3_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to edit3 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
    
    % Hint: edit controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end
    
    
    % --------------------------------------------------------------------
    function Untitled_1_Callback(hObject, eventdata, handles)
    % hObject    handle to Untitled_1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    
    % --------------------------------------------------------------------
    function Untitled_2_Callback(hObject, eventdata, handles)
    % hObject    handle to Untitled_2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    bdclose all;
    threshold = get(handles.edit1,'string');
    up_out = get(handles.edit2, 'string');
    down_out = get(handles.edit3, 'string');
    rel = get(handles.popupmenu1,'Value');
    
    mdl_name = 'switch_section';
    mdl_handle = new_system(mdl_name);
    open_system(mdl_handle);
    add_block('simulink/Signal Routing/Switch',[mdl_name,'/Switch']);
    add_block('simulink/Commonly Used Blocks/In1',[mdl_name,'/In1'],'Position',[35   213    65   227]);
    add_block('simulink/Commonly Used Blocks/Out1',[mdl_name, '/Out1'],'Position',[345   213   375   227]);
    add_block('simulink/Commonly Used Blocks/Constant',[mdl_name, '/Constant'],'Position',[125   150   155   180]);
    add_block('simulink/Commonly Used Blocks/Constant',[mdl_name, '/Constant1'],'Position',[125   265   155   295]);
    if rel == 2
        criterial = 'u2 > Threshold';
    elseif rel == 1
        criterial = 'u2 >= Threshold';
    else
        criterial = 'u2 ~= 0';
    end
    set_param([mdl_name,'/Switch'], 'Criteria', criterial, 'Threshold', threshold);
    set_param([mdl_name, '/Constant'],'Value', up_out);
    set_param([mdl_name, '/Constant1'],'Value', down_out);
    autorouting = get(handles.checkbox1, 'value');
    if isequal(autorouting, 0)
        add_line(mdl_name,'In1/1','Switch/2');
        add_line(mdl_name,'Switch/1','Out1/1');
        add_line(mdl_name,'Constant/1','Switch/1');
        add_line(mdl_name,'Constant1/1','Switch/3');
    else
        add_line(mdl_name,'In1/1','Switch/2','autorouting','on');
        add_line(mdl_name,'Switch/1','Out1/1','autorouting','on');
        add_line(mdl_name,'Constant/1','Switch/1','autorouting','on');
        add_line(mdl_name,'Constant1/1','Switch/3','autorouting','on');
    end
    
    
    % --------------------------------------------------------------------
    function Untitled_5_Callback(hObject, eventdata, handles)
    % hObject    handle to Untitled_5 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    web('http://www.ilovematlab.cn/article-29-1.html');
    
    % --------------------------------------------------------------------
    function Untitled_4_Callback(hObject, eventdata, handles)
    % hObject    handle to Untitled_4 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    bdclose all;
    close(gcf);
    
    
    % --------------------------------------------------------------------
    function Untitled_7_Callback(hObject, eventdata, handles)
    % hObject    handle to Untitled_7 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    
    % --------------------------------------------------------------------
    function Untitled_8_Callback(hObject, eventdata, handles)
    % hObject    handle to Untitled_8 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    web('http://weibo.com/u/2300570331');
    
    
    % --- Executes on selection change in popupmenu1.
    function popupmenu1_Callback(hObject, eventdata, handles)
    % hObject    handle to popupmenu1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array
    %        contents{get(hObject,'Value')} returns selected item from popupmenu1
    if 3 == get(hObject,'Value')
        set(handles.edit1, 'Enable', 'off', 'string','0');
    else
        set(handles.edit1, 'Enable', 'on');
    end
    
    % --- Executes during object creation, after setting all properties.
    function popupmenu1_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to popupmenu1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
    
    % Hint: popupmenu controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end
    
    
    % --- Executes on button press in checkbox1.
    function checkbox1_Callback(hObject, eventdata, handles)
    % hObject    handle to checkbox1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Hint: get(hObject,'Value') returns toggle state of checkbox1
    

  • 相关阅读:
    siamese跟踪论文思考
    卷积与相关
    pytorch保存模型等相关参数,利用torch.save(),以及读取保存之后的文件
    发表在 Science 上的一种新聚类算法
    word2vec 中的数学原理详解
    一种并行随机梯度下降法
    一种利用 Cumulative Penalty 训练 L1 正则 Log-linear 模型的随机梯度下降法
    最大熵学习笔记(六)优缺点分析
    最大熵学习笔记(四)模型求解
    最大熵学习笔记(三)最大熵模型
  • 原文地址:https://www.cnblogs.com/dingdangsunny/p/12248451.html
Copyright © 2011-2022 走看看