以基于模型的设计(MBD)的软件开发时,需要进行SIL(软件在环测试)。SIL测试就是在PC上验证模型是否与代码功能一致。在项目开展中,用在需要将控制器生成移植到硬件前,把控制器的模块生成代码,与对应的控制器模块做等效性测试。
1.Simulink的SIL软件在环测试
MBD开发是将Simulink中开发的算法自动生成为c代码。但是代码自动生成工具本身的原因或者代码生成工具没有正确设置或者其他未知原因,自动生成代码过程可能会引入一些错误。所以我们需要验证自动生成的代码与算法模型的一致性。
方法:SIL测试使用与MIL(模型在环测试)相同的测试用例,查看对于相同的测试用例,其输出是否与MIL阶段一致。为了测试的高效性,有时甚至不接入被控对象模型,而是对算法模型和生成代码进行相同的输入,查看输出是否一致。
新建一个文件夹,建立一个简单算法的Simulink模型:
子系统内部逻辑
2.配置模型参数设置
设定固定步长,将求解器设置为离散,固定步长为0.01。
在Code Generation中选代码生成系统文件(ert.tlc选嵌入式(Embedder Coder),不选嵌入式的那个会报错,Generate code only不要勾选,因为要生成SIL。
在Code Generation的子选项Verification中选择生成SIL模型。
设置代码生成的文件存储路径,点击主页菜单中的预设,在预设项中选择Simulink,然后选择Open Simulink Preference。
在Simulink Preference中选择模型自动生成嵌入式c代码以及相关文件的路径。
在此之前,需要先查看电脑的MATLAB是否安装了编译器,在命令窗口输入:
mex -setup -v
如果显示没有安装MinGW-w64 C/C++编译器,需要安装好。编译器网址,登录账号或者注册一个账号登录:
https://ww2.mathworks.cn/support/requirements/supported-compilers.html
下载之后获得mingw.mlpkginstall文件,在MATLAB的环境下打开,登录注册的账号开始在附加功能管理器中下载MinGW-w64编译器。
编译 yprime.c 示例
可以通过编译 yprime.c 示例来测试 MinGW编译器。将源文件复制到可写文件夹。
copyfile(fullfile(matlabroot,'extern','examples','mex','yprime.c'),'.','f')
如在系统中仅安装了 MinGW 编译器,则 mex 命令会自动选择 MinGW。但如果有多个 C 或 C++ 编译器,请使用 mex -setup 选择 MinGW。
mex -setup
编译该 MEX 文件:
mex yprime.c
MATLAB 将显示“编译工具”消息,其中显示了用于编译 MEX 文件的编译器。
yprime(1,1:4)
3.生成SIL模块
右击选择子系统,选择C/C++ Code,选择Build this Subsystem:
在弹出的窗口中,选择Build:
如果没有安装MinGW-w64 C/C++编译器,就会报错。
正常安装了编译器之后就可以生成SIL文件:
会在当前文件夹下生成模型的代码相关的文件:
4.测试结果和问题
把SIL模块复制到自建模型中,进行等效性测试,看MIL和SIL测试结果是否相同:
从结果可以看出,两者结果是一致的。
在上述操作结束后,自动代码生成过程中会出现一个slprj文件,在使用过程中有时候第一次可以生成SIL,后面生成会出现这个错误“引用了不存在的字段 ‘Version’”,在matlab官方网站论坛找到的解决答案,把slprj文件删除了就行了。
在删除slprj文件会遇到只能管理员才能删除的问题,可以在Win10弹出需要管理员权限才能删除文件夹。