以编程方式打开Simulink MATLAB功能块的代码

时间:2018-11-13 10:45:57

标签: matlab simulink stateflow

我可以通过某些命令在MATLAB编辑器中打开本地Simulink MATLAB功能块的代码吗?

例如,假设我有一个名为 mainModel.slx 的Simulink模型。

其中包含一个名为 localFunction 的MATLAB功能块。 .m文件中未定义。

我将能够编辑路径为var db = require("../db/mysqlconnection"); function users(app){ app.get("/users",async function(req, res, next){ let bankDetail = await getBankDetail(); console.log("bankDetail",bankDetail); //Here I do not got result return res.send(bankDetail); }); } async function getBankDetail(){ db.getConnection(async function(err, connection) { if (err) throw err; // not connected! await connection.query('SELECT * FROM bank', function (error, results, fields) { connection.release(); if (error) throw error; console.log("bank result",results); //Here I got result return results; }); }); } module.exports = users; 的函数,而无需打开simulink窗口并双击功能块。这可能吗?

我当然已经尝试过mainModel/localFunctionopen mainModel/localFunction。我可以访问其edit mainModel/localFunction对象的句柄。


编辑:最少(希望)完整且可验证的示例

我的最小Simulink模型如下图所示。代码在其下方。出于可读性考虑,我没有解决错误或故障。不能用于一般用途。

enter image description here

MATLAB功能块 localFunction 的功能代码为

StateFlow.EMChart

我正在使用以下代码来加载模型,搜索所有MATLAB功能块并找到包含字符串function y = fcn(u) y = 'findThis'; % I want to end up here, in the MATLAB editor! end 的功能块。然后应找到名为'findThis'的MATLAB功能块。同样,请忽略这些错误。该代码保存在名为'localFunction'的脚本中。

tmpScript.m

在此示例中,路径应为% User set model = 'mainModel'; expression = 'findThis'; blockType = 'Stateflow.EMChart'; % MATLAB function block, right? % Load model load_system(model) % Find all MATLAB function block handles blockHandles = find(slroot, '-isa', blockType); % Find first block containing the defined expression for iHandle = 1:numel(blockHandles) tmpFind = strfind(blockHandles(iHandle).Script, expression); if ~isempty(tmpFind) break end end foundBlockPath = blockHandles(iHandle ).Path; % Function block path foundCharIdx = tmpFind; % Character index % Print results in command window fprintf('Function path: %s\n', foundBlockPath) fprintf('Character index: %d\n', foundCharIdx) ,字符索引应为mainModel/localFunction(请注意函数第二行上的三个前导空格,并且换行符29值得一个字符)。命令窗口显示

'\n'

因此,我可以加载模型并在其MATLAB功能块中搜索特定的字符串。找到此功能后,我希望能够在matlab编辑器中将其打开。当我双击Simulink窗口中的块时,该怎么办?

这些有效

>> tmpScript
Function path: mainModel/localFunction
Character index: 29
>>

我无法更改Simulink模型本身。我不是要更改功能脚本。我只希望能够在MATLAB编辑器中将其打开。

2 个答案:

答案 0 :(得分:2)

您可以使用以下方式在编辑器中打开代码

view(blockHandles(iHandle))

答案 1 :(得分:0)

您可以将Matlab function块更改为Interpreted Matlab function块。

这确实有一个限制,即它只能具有一个输入和一个输出(可以是矢量),因此根据您的问题,您可能必须对某些数据进行多路复用/多路分解。

或者,您可以更改为S-function,这样可以提供更大的灵活性,但设置起来可能会有些复杂。