我可以通过某些命令在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/localFunction
和open mainModel/localFunction
。我可以访问其edit mainModel/localFunction
对象的句柄。
编辑:最少(希望)完整且可验证的示例
我的最小Simulink模型如下图所示。代码在其下方。出于可读性考虑,我没有解决错误或故障。不能用于一般用途。
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编辑器中将其打开。
答案 0 :(得分:2)
您可以使用以下方式在编辑器中打开代码
view(blockHandles(iHandle))
答案 1 :(得分:0)
您可以将Matlab function
块更改为Interpreted Matlab function
块。
这确实有一个限制,即它只能具有一个输入和一个输出(可以是矢量),因此根据您的问题,您可能必须对某些数据进行多路复用/多路分解。
或者,您可以更改为S-function
,这样可以提供更大的灵活性,但设置起来可能会有些复杂。