表达式到 Simulink 模型的转换

问题描述 投票:0回答:1

输入将是一个字符串(例如“X+Y+Z”),输出必须是 Simulink 模型(slx 文件)。这应该使用 m 脚本来完成。 Simulink模型应该是动态的(模型必须根据提供的输入表达式 - 如果输入表达式发生变化,生成的模型必须与输入表达式相对应。X,Y,Z是值为X,Y的常量块,分别是Z。

假设- -> 变量仅为 X、Y 和 Z。运算符可以是以下任意一种(+、-、*、/)。 ->使用乘积块实现乘法运算符。 ->X、Y、Z 变量不存在系数。

我的方法 - 我使用 RegExp 来提取术语和运算符。所有术语(X,Y,Z)都存在于“terms”元胞数组中,并且运算符在“operators”元胞数组中获得。

接下来,我想到用“Stack”的概念来解决这个问题。我首先将术语(X,Y,Z)按照它们在表达式中出现的相反顺序存储在堆栈中。然后,我使用堆栈中的前 2 个术语来创建它们各自的添加块。为此,我使用了“add_block”函数。但我无法为这些块提供唯一的名称,因为块名称必须是唯一的。

而且,我无法将这些常量块连接到添加块。

我被困在这个位置了。请为我提供解决此问题的最佳和优化方法。

matlab scripting simulink
1个回答
0
投票

为了在以编程方式将模块添加到 simulink 模型时使名称唯一,

add_block
中有一个名称-值字段。请参考add_block文档

h = add_block(source,dest,'MakeNameUnique','on')
确保 目标块名称在模型中是唯一的。该语法添加了一个 编号到目标块名称(如果存在具有该名称的块), 递增以确保名称唯一。

所以:

add_block('Simulink/Math Operations/Sum','<yourprojectname>/<nonuniquename>','MakeNameUnique','on')

否则,由于您不是盲目生成,但块的结构和数量已知,您可以在创建时使用

add_block
dest 字段本身设置块的名称:

add_block('Simulink/Math Operations/Sum','<yourprojectname>/<uniquename>');

例如:

add_block('Simulink/Math Operations/Sum','<yourprojectname>/XYaddition');
add_block('Simulink/Math Operations/Sum','<yourprojectname>/XYaddition');
© www.soinside.com 2019 - 2024. All rights reserved.