多行宏变量
多行宏是单行宏的扩展形式。当需要分解因产生代数环而需要拆分的子模型时使用。其工作原理与单行宏类似,区别在于可将关联代码分成多行编写。它实际上是一个双重函数,存储在子模型代码文件中,可以调用Simcenter Amesim工具函数或用户自定义函数。
声明多行宏变量时,只需输入其参数。这些参数从子模型变量列表中选取。子模型编辑器会自动在子模型代码中生成关联函数的框架,用户可根据需求完善该函数。
与单行宏不同,多行宏的维度可以大于1,此时它将作为向量变量而非标量变量。编写向量型多行宏代码时,可参考以下子模型代码示例(来自机械库的PORT_CONVERTER_2DOF子模型):

图2-16. 多行宏代码
如图所示,代码中包含一个额外参数(int *macindex),用于在宏代码中计算向量各分量的结果。本例中,当macindex等于零时对应向量的第一个分量,其他情况(else语句)对应第二个分量。
当该子模型用于Simcenter Amesim模型时,该多行宏会被调用两次(向量每个分量各一次),在生成代码中macindex参数依次设置为0和1。
宏函数总是在子模型计算函数之前调用,因为其输出将作为子模型计算函数的输入。因此定义宏函数参数(输入)时,这些参数不能包含子模型的基本输出变量。
通常使用宏函数(单行或多行)时,用户可访问子模型作用域内的以下变量:
-
特定输入变量:基本输入和带默认值的输入
-
特定外部输出变量:全部变量(不包括基本输出变量),某些情况下包括重复变量(见下方注释)
-
特定内部变量:全部变量(不包括基本内部变量),某些情况下包括重复变量(见下方注释)
当使用重复变量作为宏函数参数时,仅当它们是可接受变量类型的副本时才被允许(见上述列表)。例如,若某变量是基本输出变量的副本,则不能作为宏函数参数。需注意这种重复变量有效性的判定是递归进行的。
此处需要暂停说明为何重复变量和宏变量非常实用。
译文质量与官方无关,仅做辅助学习使用,帮助大家更方便高效的掌握工具.文档网址:www.tech-doc.cn;公众号:Amesim学习与应用、译匠工厂