运用S-function调用外部C函数完成手写代码基于模型的测试

      由于工作需求,前段时间在做SIL测试,最开始打算采用最简单粗暴的方法,利用S-FUNCITON手动集成外部C,但是本人编程水平还停留在学校那种教学式C语言上,所以走了很多弯路,最终改选采用更加自动化的方法完成。(PS:说实话心里并不是很服气,所以就慢慢研究。)

      最终发掘了问题所在,下面就简单介绍我的Debug过程:

       1、首先确认SIMULINK模型运行无误。

       2、通过S-FUNCTION自带模板调用外部C文件(我称之为集成,该外部C是我通过simulink自动生成代码功能自动生成的)。

       3、下载编译器,在命令运行窗口执行MEX指令,包括修改后的模板C文件和外部C文件。

       4、随后将MEX得到的MATLAB MEX文件导入到S-function中就手动搭建完成了SIL测试平台。

第1步、第2步、第3步虽然坎坷,不过顺利完成,最终卡在了第4步,我简直不敢相信自己的眼睛,真的!!!!最终在通过自动化测试时发现了问题所在:

问题描述:

        在第3步已经完成,且第4步的时候,S-FUNCTION输入输出端口已经出来,但命令窗口显示无法编译该MATLAB MEX文件。

问题发现过程:

         随后发现问题所在是在利用自动化测试SIL过程中发现的,自动测试过程会自动编译文件,并自动检测信号存储类型(这时关键点),这时候就发现了unresolve signal的提示,最开始我是懵逼的,因为如果出现这个问题的时候往往是数据类型的锅,但是一般在模型阶段此问题就会被Debug掉,百思不得其解,百般纠结,最终寻求帮助,在某位不知名的大神帮助下,自己修改了workspace中数据存储类型完成了该测试。

问题总结:在MBD开发过程中,模型生成代码,我们会定义数据类型,以及数据存储类型,数据类型的定义在模型阶段就可以DEBUG但是数据存储类型却是用户自行定义,只要不违反语法,不会提示BUG但是在集成到C环境下就会出现不匹配的现象发生。

          最近又突然发现了这个:运用S-function调用外部C函数完成手写代码基于模型的测试_第1张图片

为定点化数据提供解决方案,该文章可能对于目前通过撸代码而不是进行MBD开发的C语言工程师有所帮助,C语言工程师可以通过将手写代码集成到SIMULINK环境中进行基于模型的测试。

你可能感兴趣的:(运用S-function调用外部C函数完成手写代码基于模型的测试)