【问题标题】:How to call M file to Simulink model?如何调用 M 文件到 Simulink 模型?
【发布时间】:2018-12-18 13:44:52
【问题描述】:

我从link 得到了一个脚本,它在 MATLAB 中运行正常。但是,当我创建一个 Simulink 模型时,它运行正常,但我可以从 m 文件中获取数据。

MATLAB 脚本:

function data = Loadcell()
    eml.extrinsic('arduino','addon','read_HX711')
    a = arduino('COM5','Mega2560','libraries','ExampleAddon/HX711');
    while 1
        LoadCell = addon(a, 'ExampleAddon/HX711',{'D2','D3'});
    data = read_HX711(LoadCell)
    end
end

Simulink 函数

function data = Loadcell()
    coder.extrinsic('Loadcell');
    Loadcell = zeros('double');
    data = zeros('double');
    data = Loadcell
end

我使用 Arduino 在外部模式下运行 Simulink,但我没有从该代码中获取数据。如何使用该 MATLAB 脚本在 Simulink 模块模型中使用它并获取数据?

【问题讨论】:

    标签: matlab arduino simulink


    【解决方案1】:

    这很可能是几个问题

    1. 在 Simulink 中将嵌入式 MATLAB 函数命名为与 MATLAB 函数相同。 (您希望 Simulink 如何知道它应该调用哪个函数?MATLAB 函数,还是重新进入 Embedded MATLAB 函数?)

    2. Loadcell 定义为extrinsic 函数,然后(重新)将其定义为双重0.0,然后尝试将其作为函数执行。

    我怀疑你想要类似的东西,

    function data = Loadcell_Wrapper()
        coder.extrinsic('Loadcell');
        data = zeros(1,1,'double');
        data = Loadcell()
    end
    

    (另外,不是您的问题的一部分,但 MATLAB 代码中没有无限循环吗?)

    【讨论】:

    • 是的,当我在 MATLAB 中调用包含 MATLAB 代码的 .m 文件时,MATLAB 中有一个无限循环,所以我不得不停止脚本。而且我认为MATLAB中的脚本可以正常运行。
    • 但是当我使用我使用的代码在simulink中调用它时,simulink可以运行但是我在MATLAB中看到的无限循环中的数据不会出现在simulink中
    • 我已经尝试了您提供的代码,但它给出了错误“外部函数'Loadcell'不适用于独立代码生成。必须消除它才能使独立代码成为生成。无法消除它,因为它的输出似乎会影响调用函数。通过不使用“Loadcell”或确保其输出未被使用来修复此错误。”
    • Simulink 单步执行时间(仿真停止时间为inf)通常相当于具有无限循环的 MATLAB。所以你可能需要删除无限循环,我假设你也只想做一次初始化(我假设代码中的a = ... 行正在做)一次(不是在每个时间步)。我建议查看arduino 包的文档,了解如何从 Simulink 模型调用其函数。
    猜你喜欢
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多