You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Simulink的多个M函数模块间共享Python对象

解决Simulink复用Python类实例的可行方案

方案1:用MATLAB基础工作区存实例

  • 在Simulink模型的初始化回调里创建实例并写入基础工作区:
    打开模型属性→回调→InitFcn,添加代码:
    % 先确保Python环境初始化
    if ~py.isinitialized()
        pyenv('Version','你的Python安装路径'); % 比如'C:\Python39\python.exe'
    end
    % 创建实例并存到基础工作区
    x = py.your_module.ExampleClass();
    assignin('base', 'x', x);
    
  • M函数模块里直接调用:
    function y = fcn(u)
        % 从基础工作区拿实例
        x = evalin('base', 'x');
        y = x.get_property(u);
    
  • 注意:要保证模型运行期间基础工作区的x不会被误删或覆盖。

方案2:用Simulink数据字典存储

  • 创建.sldd数据字典,在字典里添加MATLAB变量存储Python实例:
    1. 新建数据字典后,在命令行执行:
      dict = Simulink.data.dictionary.open('your_dict.sldd');
       % 创建Python实例
       x = py.your_module.ExampleClass();
       % 把实例存入字典的设计数据区
       dict.getSection('Design Data').addEntry('x', x);
       save(dict);
      
  • M函数模块中从字典取实例:
    function y = fcn(u)
        dict = Simulink.data.dictionary.open('your_dict.sldd');
        x = dict.getSection('Design Data').getEntry('x').getValue();
        y = x.get_property(u);
    
  • 好处:数据字典和模型绑定,不会和基础工作区的其他变量冲突,适合团队协作。

方案3:封装MATLAB句柄类做中间层

  • 写一个MATLAB类,内部持有Python实例,对外提供调用接口:
    classdef ExampleWrapper < handle
        properties (Access = private)
            pyInstance
        end
        methods
            function obj = ExampleWrapper()
                % 构造函数里只创建一次Python实例
                if ~py.isinitialized()
                    pyenv('Version','你的Python安装路径');
                end
                obj.pyInstance = py.your_module.ExampleClass();
            end
            function val = get_property(obj, input)
                val = obj.pyInstance.get_property(input);
            end
        end
    end
    
  • 在Simulink初始化回调里创建这个MATLAB类的实例:
    wrapper = ExampleWrapper();
    assignin('base', 'wrapper', wrapper);
    
  • M函数模块里调用:
    function y = fcn(u)
        wrapper = evalin('base', 'wrapper');
        y = wrapper.get_property(u);
    
  • 优势:MATLAB句柄类可以通过Simulink掩码参数传递(解决之前的类型报错问题),同时隐藏Python调用细节,更易维护。

内容的提问来源于stack exchange,提问作者Arthur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 02:24:57