在我的Simulink模型中,我有一个MATLAB函数 this_function
,它使用Simulink模型的名称作为一个参数, modelname
. 该名称在额外的参数文件中定义,其中包含所有其他参数 . 加载参数文件会将 modelname
加载到工作区中 . 问题是, this_function
无法在工作空间中访问 modelname
,因此模型无法运行 .
我试图使用 modelname
作为 this_function
的常量输入源,我以前曾用它作为解决方法,但Simulink不接受字符/字符串作为信号 . 此外,将 modelname
设置为全局也不起作用 .
有没有办法在参数文件中保留 modelname
而不是直接将其写入 this_function
?
1 回答
Simulink不支持字符串 . 喜欢,任何地方 . 它真的很糟糕,我不知道为什么存在这种限制 - 对我来说这似乎是一个非常糟糕的设计选择 .
我找到了以下解决方法:
脏铸造
让
是您在Simulink块内的MATLAB函数,
str_param
是您想要成为字符串的参数,以及num_param[X]
任何其他参数 . 然后将字符串信号传递给函数,如下所示:注意'
+0
'在最后;这是将字符串转换为整数数组的简写,对应于字符串中每个字符的ASCII代码 . 然后,在函数内部,您可以通过执行反向来获取字符串:但通常以后会导致问题(不支持
strcmp
,不支持_1418658等) . 所以,你可以用类似的方式进行字符串比较(和类似的操作):这具有字符串的所有好处,而不实际使用字符串 .
当然,'
+0
'技巧也可用于常量块内,模型回调可转换preLoad
上的工作空间变量等 .请注意,必须在MATLAB函数中启用对可变大小数组的支持 .
固定选项集
您可以传递一个数字标量,而不是传递一个字符串,该数字标量对应于固定的硬编码选项列表中的选择:
两种选择都不理想,两者都是人为的,并且都容易出错和/或具有可重用性和可伸缩性问题 . 这很无望 .
Simulink应该开始本地支持字符串,我的意思是,来吧 .