目录
PIL处理器在环测试介绍
PIL测试过程
编译模块
测试结果
PIL处理器在环测试介绍
SIL测试是验证代码和模型的一致性,代码运行在Windows平台上,某种程度上说,这并不能保证代码到目标处理器上的运行结果也能够和模型保持一致。所以,就有了PIL测试。 PIL和SIL的不同之处在于,SIL将生成的代码通过DLL的方式运行在Windows平台上,而PIL,是将生成的代码运行到目标处理器上,两种模式使用的编译器也是不同的,SIL使用的就是Windows下的编译器,比如Visual Studio C++或者LCC编译器,而PIL使用的是目标编译器。 前面说过,等效性测试的目的是为了防止代码生成过程出错,同样,编译过程也可能出错,编译器也可能有bug,综合模型测试、SIL测试和PIL测试的结果,也可以帮助我们发现编译器出错可能引入的bug。 SIL和PIL是等效性测试,测试的目的是为了验证自动生成的代码和模型具有相同的行为,既然如此,对于SIL和PIL的测试用例就没有功能意义上的要求,只要要求代码和模型输入的测试数据相同即可,当然希望数据量足够大,能够覆盖各种路径以及各种信号范围。 另外,因为PIL测试中代码运行在实际的控制器上,所以PIL测试除了可以验证代码和模型是否一致之外,还可以获得算法在实际控制器上的最长运行时间,而这个最长时间的价值,做嵌入式实时软件开发的工程师都懂得。
PIL测试过程
在PIL测试中,生成的代码运行在TexasInstrumentsC2000处理器上。将PIL仿真结果传递给Simulink,验证仿真结果的数值等效性和代码生成结果。PIL验证过程是开发周期的一个关键部分,以确保部署代码的行为与设计相匹配。 本实验将采用Mathworks官方提供的例子来介绍如何使用子系统创建PIL Block方法配置用于代码生成和验证的Simulink模型。
我们提供的板子不支持通过USB数据线与Simulink通信,需要用到USB转TLL模块实现,前面已经介绍USB转TTL模块如何与主控板的连接,这里就不再介绍。
第一步:首先在电脑的设备管理器找到USB转TTL对应的COM口,然后在MATLAB中打开此模型所在的文件路径,里面一个Simulink模型和PIL通讯说明。
第二步:在MALAB命令行窗口输入如下命令
按上述方法设置COM端口,并将以下命令中的“COM1”替换为与主控板对应的正确串行端口:setpref('MathWorks_Embedded_IDE_Link_PIL_Preferences','COMPort','COM1');%选择对应的COM 通过输入波特率设置PIL通信的波特率为setpref('MathWorks_Embedded_IDE_Link_PIL_Preferences','BaudRate',115200); 通过以下命令启用串行通信PIL:setpref('MathWorks_Embedded_IDE_Link_PIL_Preferences','enableserial',true);
第三步:打开c2000_pil_block.slx,看见Controller下方有一个需要连接的模块,这个就是需要将Controller生成PIL的模块。
第四步:我们首先在All Parameters中输入Create Block找到对应的参数设置,我们选择PIL,选择Ode3求解器,定步长为0.01s,选择在将程序烧写到RAM减少编译时间。
编译模块
第五步:我们选择Controller子系统单击鼠标右键,在C/C++Code中选择将此子系统部署到硬件,
随后会出现下图的界面,然后点击Build,稍等片刻我们可以看见会出现一个新的模块以及在MATLAB的当前文件夹生成了一个Controller_pbs.mexw64和代码文件。
测试结果
第六步:将生成的Controller模块复制到c2000_pil_block.slx模型缺少的模块那里,Manual Switch开关选择与上面的子系统连接,然后在点击Run按钮,稍等片刻可以看见Scope会生成一条曲线,然后将Manual Switch开关选择与下面的子系统连接,可以看见Scope的数据和Controller连接是的曲线一样,说明代码到目标处理器上的运行结果也能够和模型保持一致。