摘要
S-function是系统函数(System Function)的简称,可以十分方便地用来描述各种动态系统,尤其是复杂的动态系统,属于Simulink动态系统的核心。
它的一项关键功能是可以集成自定义模型,通过将自己编写的模型封装为 S-function,可以将其集成到Simulink中进行仿真,这意味着我们可以将GCKontrol建立的模型通过生成S-function函数功能移植到Simulink平台中,这样一来,我们能够充分利用GCKontrol和Simulink的优势,使得GCKontrol可以更灵活地在更多样化的环境中进行系统仿真,可以在Simulink中使用其强大的仿真和分析工具,与其他Simulink模块如控制器、传感器、执行器等相互配合,实现对复杂系统的全局仿真分析,适应不同的应用场景和需求。

图1 GCKontrol与Simulink
案例介绍
GCKontrol生成S-function函数导入Simulink
GCKontrol通过生成S函数功能,将建立的模型生成S-function的c文件,可以在 Matlab/Simulink中的S-Function模块中进行调用,实现与其他 Simulink 模块进行集成,比如控制器、传感器、执行器等,实现复杂系统的全局仿真分析。
GCKontrol中建立仿真模型
在GCKontrol建立舵机模型,以及设定输入输出接口,输入为期望舵角,输出为实际舵角,然后在上方菜单栏选择生成S函数。

图2 GCKontrol舵机仿真模型

图3 S函数生成页面
生成S函数配置时选择导出路径,生成出sfcn_+模型名称的文件夹,文件夹中包含S函数的C文件。

图4 生成S函数文件夹
导入到Simulink中建立测试模型
将Matlab路径切换到导出的S-function文件夹下。

图5 切换到生成的S函数文件夹
打开Simulink,在Simulink中添加S-function模块,双击导入文件,选择生成的S函数名.c文件,导入成功后将S-function名称改为与文件名一致,并搭建测试所需的模型,如下图所示。

图6 S-function导入文件

图7 选择文件夹
在Matlab中编译已经生成的脚本。在导出S-function路径下有compile.m,将该脚本拖拽到Matlab命令行执行即可。

图8 Compile文件

图9 编译完成
设置仿真步长,改为定步长。

图10 设置步长

图11 设置Simulink求解器步长
连接输入,在Simulink进行仿真。
仿真测试及结果
在Simulink求解器中,选择定步长求解0.01s,仿真结果如下图所示。

图12 Simulink仿真结果
与GCKontrol仿真结果对比如下图所示:

图13 联合仿真结果
将舵机、潜艇模型、控制器三个子系统分别生成S-function函数导入到Simulink中建立潜艇自动控制模型,运行仿真对比结果。

图14 GCK仿真模型

图15 生成S函数导入到Simulink
下面是执行器舵角和潜艇实际航向角的结果在GCKontrol和Simulink中的对比,可以看出结果一致。

图16 仿真结果对比
总结
从上述案例可以看出,通过GCKontrol可以很方便快捷地将在GCK中搭建的模型转换成S-function导入到Simulink中进行仿真,从而更好地实现对大型复杂系统进行模型集成,以及可以直接使用MATLAB的分析和优化工具,便于优化模型的性能,提高仿真效率。同时S-function是一种通用的模型表示形式,可以在多种不同的应用中使用,从而实现更广泛的应用。