内容概述
本篇FAQ为利用Sysblock软件搭建模型,对模型结果进行观测记录。然后针对模型进行代码生成,编写主函数与模型生成代码的集成为工程。运行相应的工程,输出结果。代码运行结果与模型运行的结果进行对比,作为软件在环验证,证明模型仿真运行与代码运行结果的一致性。
模型搭建并仿真验证
准备搭建一个小球自由落体的案例进行相关验证。利用状态机构建模型,小球状态设置为三种,下落状态、反弹状态、静止状态。将每次下落和回弹过程中的能量损耗记为0.2,在每次反弹时速度变为原速度的0.8进行能量损失的描述。最终,小球高度为0,同时小球速度趋近于0时,视作小球已经进入静止状态。
按照上述信息在状态机中构建如下几个变量:代表小球高度的变量Height;代表小球速度的V;代表重力加速度的G取为9.8;代表状态机步长的stepSize;
状态机变量表
从起始高度Height高度处,静止做自由落体运动,初始高度记为10,速度初值为0,每次反弹时速度记为原速度的0.8;

下落状态
在下落时,Height = Height - G * t ; V =V + G * t ;

反弹状态
反弹时,计算下落过程的能量消耗,且速度方向相反,V= - V *0.8。

静止状态
静止时,高度为0,速度为0。

转移条件
高度小于0.01且速度大于0.01时,记为接触地面但是尚未静止,此时由下落状态转移至反弹状态。
高度小于0.01且速度小于0.01时,几位接触地面且达到静止条件。
综合上述信息构建如图状态机。

仿真验证
仿真结果如下,随着能量损耗,小球自由落体后的最大回弹高度逐渐降低,能达到的最大速度也在逐渐减小,直至最终趋于0。

构建数据字典并管理输出变量
在“建模”中点击“数据字典”调出数据字典界面,在数据字典界面中点击按键“新建数据字典并与模型绑定”(鼠标悬停在数据字典按键上,可以观测按键功能)。
在数据字典中新增变量,有两种方法。
一、将输出端口的信号线命名,然后在数据字典中新增相同名称的信号。

二、命名输出端口信号线,右击信号线点击“绑定信号名称到数据字典”。

在数据字典的“存储类型”设置为"ExportedGlobal",代表变量在生成代码时会以全局变量的形式生成代码。
生成代码
点击导航栏中的“代码生成”,可以看到代码生成的相关选项包含代码配置、代码生成、查看代码。
代码配置选项帮助文档中有相关说明,可以直接使用默认设置,直接点击“代码生成”即可。

代码生成后会自动弹出生成代码的路径

构建C代码工程
以使用Visual Studio搭建工程为例,将生成代码中的mwb_main.c添加至源文件,其余生成的代码封装至头文件中。
在mwc_main.c的主函数中添加输出端口的打印代码,从而观测生成代码中的输出端口变量值。

添加打印代码
printf("height = %f\n", height);
printf("v = %f\n", v);
printf("%d\n", i + 1);
printf("~~~~~~~~\n");
结果对比
代码工程软件控制台中会打印相应变量的值,将该值与MWORKS.Sysblock仿真结果值进行对比,即可完成一次生成代码与代码运行的代码在环结果对比。经过观察对比,发现两者结果一致,则说明测试无误。

Sysblock仿真结果有两种观察方式
①通过游标卡尺直接在仿真结果曲线中观测仿真结果。

②将仿真结果导出为CSV文件进行观察。

