1. 引子
在大多是情况下我们是使用“交互式模型编辑”,我们使用键盘命令和鼠标操作与 Simulink Editor 交互,构建模块图,执行仿真并且查看结果。这个情况在大部分的仿真中都非常合适。然而总有那么些人给工作出难题,他们希望在复杂的模型中,模型可以根据参数文件自动完成建模,那么以下方式可以达成该目标。
2. 执行思路
利用代码执行建模我们需要解决几个问题,首先是添加模块,我们需要利用脚本把这些模块放入模型中,同时我们可以将各个模块之间以我们期望的方式用脚本连接起来,并且这些连接是可以通过更改输入变量随意更改,不需要更改主程序,既这个程序是通用的。在逐渐理清了我们需要什么之后,可以暂定变量为下:
- 模块名字 - 既模块在这个模型中的名字
- 模块在Library中的地址 - 添加模块时该模块在Library中的位置
- 连接节点 - 定义哪几个模块的哪几个端口相连
个人理解中,这个步骤的难点在于第三步,因为我们需要想出一个赋值方案,能够令Matlab理解到我们希望连接的端口地址,并且执行连线命令。从Matpower得到的灵感,我们可以设定Point of Common Connection这个概念,既数字命名节点,并且对模块端口赋这些节点名,相同节点名的端口既为相连端口。
在确认这些变量后,我们可以依照这些变量来进行脚本的建立了。
3. 基础函数
3.1 添加模块
最基本的模块添加为add_blocb这个命令,我使用MakeNameUnique这个参数是为了预防可能造成的重名问题,但是具体是否使用得根据实际情况来进行(这部分我没有测试过,有点想当然,觉得加上比较好)。
add_block(LibraryLocation,BlockPath,'MakeNameUnique','on');
3.2 模组之间连线
命令也很简单,是add_line这个命令。然而需要考虑几个情景。首先,这个命令既可以通过输入坐标进行连线,也可以通过port的句柄来连线。
首先我们考虑Simulink中port的种类。在Simpowersystem中,通常用的信号类型有两类,一个是Simulink的普通信号,这个信号带指向方向,是单向的,只能出口指向入口这一种连接方式。另一个是电气信号种类,这个是双向的,可以在同种电气信号接口随意连接。所以在接口种类中,我们需要暂时定义三种。
- Outport种类
- Inport种类
- 电气信号种类
第二个我们需要考虑的是模块。Simulink在用脚本建模的时候有这个问题,同种类模块在生成的时候坐标是一样的,意思就是,如果我们建模时候需要放入多个同种类模块,那么他们的坐标是相同的,接口坐标也会是相同的,在执行add_line这个语句的坐标连线功能时,Matlab没法确认我们需要连接的端口是哪个。同时,坐标连接的判断依据是所