巴勃罗·罗梅罗·坎布雷拉斯,MathWorks
大家好。我叫巴勃罗·罗梅罗。我是MathWorks的应用工程师,是实时仿真和测试专家。今天,我想向大家介绍Simulink中的实时模拟。您可能知道,Simulink Real Time是MathWorks的产品,它允许您从Simulink创建实时应用程序,以便您可以在Speedgoat目标计算机上实时运行任何模型。金宝app
它是为实时仿真和测试任务而设计的,包括快速控制原型和硬件在环仿真。使用Sim金宝appulink real,你可以用Speedgoat I/O驱动程序块扩展你的Simulink模型,自动构建实时应用程序,创建仪表平衡,并在Speedgoat目标计算机上执行交互式或自动运行。
该目标配备了实时内核、多核CPU、I/O和协议接口。此外,对于要求闭环采样率,您可以使用HDL编码器瞄准Speedgoat fpga。金宝appSimulink real和Speedgoat是专门设计用来共同创建桌面、实验室和现场环境的实时系统。这是唯一的软件和硬件解决方案,支持最新版本的MATLAB和Simulink作为MathWorks的官方实时金宝app解决方案。金宝app
在这张幻灯片中,我们看到了传统的V开发周期,从左上方的系统需求到右上方的系统集成和校准。在蓝色部分,我们突出显示了实时仿真的两个主要应用程序。在左边,我们看到了快速控制原型。我的同事Sonja Krzok也在这个领域和我一起工作,她专门做了一个关于快速原型制作的视频。请别忘了去看看。
在右边,我们有硬件在环。这是V-cycle的验证和确认部分所特有的。这是我今天的重点。在考虑认证工作流时,不要忘记在环中的硬件是非常重要的。例如,在这里找到ISO26262的截图,我们会发现硬件在环是许多ASIL级别的关键。
现在,我想向你们展示这个概念是如何运作的。对于硬件在环模拟,我们的出发点总是Simulink模型。金宝app我们已经定义了我们的测试输入、控制器和工厂模型,以及监控结果的一些范围。当我们正在执行硬件在环模拟时,我们已经有了我们想要测试的嵌入式控制器硬件。因此,我们可以用一些I/O驱动程序块来替换控制器模型,这将允许我们与真实的硬件进行交互。
多亏了Simulin金宝appk Real Time,单击Run on target,我们将从Simulink模型中只需单击一次即可生成一个实时应用程序。这将通过以太网连接传输到目标计算机硬件。最后,我们可以实时测试我们的嵌入式控制硬件。
硬件在环是非常重要的,因为实际的控制系统可能是非常复杂的。我们可能需要在最终系统构建或甚至可用之前测试生产控制器,或者因为在最终设计上测试不实用、不安全,或者非常昂贵。因此,我们降低了风险和成本,并确保不同硬件组件的无缝集成。
这是我将在今天的硬件在循环演示中使用的硬件设置。在右边,我有一台运行MATLAB和Simulink的计算机,它通过以太网线连接到左边的Speedgoat基线。金宝appSpeedgoat Baseline是你能找到的最小的Speedgoat计算机之一。
与其他更大的系统的主要区别在于所支持的I/ o的数量和类型。金宝app如果你想知道你可能需要哪个模型;我们的工程师会帮助你找出适合你的系统。
最后,在最左边,绿色的是我要测试的嵌入式控制器硬件。在这个例子中,它是一个德州仪器的板我已经部署了我的磁场定向控制算法。让我们切换到Simulink,看金宝app看它是如何工作的。
这是我将在今天的演示中使金宝app用的Simulink模型。它的布局和我们在上一张幻灯片中看到的一样。在左边,我可以用蓝色标出面向磁场的控制算法。右边是我的植物模型。在这种情况下,它是一个永磁同步电机。
我们可以运行我们的模拟,看看这个模型的行为。这里我要切换到模拟。我可以打开仪表板,它漂浮在我的Simulink模型上。金宝app这是一个非常好的特性,您可以使用它将仪表面板嵌入到您的Simulink模型中。金宝app我们可以运行它们,看看我的模型如何启动,如何加速到这个速度,以弧度/秒为单位。现在正在编译模型,仿真将在几秒钟后开始运行。
顺便说一下,我用的是速度模式。它在闭环中运行,但我也可以使用一些其他的输入。现在我们来看看模型是如何加速的,如何开始的,如何达到这个速度。现在我们可以直接用这个刻度盘来改变速度。我们甚至可以,例如,重新启动马达,看看速度是如何回到零的。我们可以重新启动。我们也有一些反馈关于控制器的状态等。
让我们停止这个模拟,看看我们在这个模型中有什么。我们可以通过双击仪表盘最小化仪表盘。现在我们看看这里有什么。首先,让我们看看我的PMSM工厂模型。
所以,在这个子系统中,我们可以看到组成我的工厂模型的不同组件。我们在这里看到一些模拟器,一个用于传感器,另一个用于编码器。在左边,我看到了永磁同步电机模型。
我可以打开它。然后我看到了这三种不同的变体。因此,在Sim金宝appulink中,有几种方法来实现或建模物理模型。例如,我们可以使用一种基于常微分方程的方法。这是我们用基本的Simulink模型构建的。金宝app我们也可以使用一些工具箱,如电机控制模块集或动力总成模块集,在那里我们可以找到准备使用现成的模块,我们可以使用。或者我们也可以使用Simscape,这是Simulink的物理库。金宝app
在这种情况下,我们不是基于一个常微分方程,而是有不同的物理域,因此我们可以建立图表或电路,以模拟或使我们的工厂模型的可视化表示。
在本视频中,我将重点介绍PMSM模型的Simscape实现。如果你有更多的兴趣,你可以在我们的MathWorks网站上找到更多关于植物模型的不同方法的视频,包括电机模型。
Simscape是来自Simulink的物理建模库。金宝app一方面,我们有Simulink,它可以处理常微分方程。金宝app所以,我们有一个基于时间的模型。在本例中,它是特定于领域的。所以,我们有设备来代表电气,机械,热域。
在这种情况下,例如,如果我看这里的PMSM模型,我将看到我的PMSM不是用一个方程,而是用我从Simscape库中获取的Simulink块表示。金宝app所以,它都是参数化的。这对加速植物建模非常有帮助。
顺便说一下,这不仅仅是为了模拟。所以,正如你稍后将看到的,这是100%兼容Speedgoat目标计算机上的实时模拟。我们可以回到主模型,我回来了。现在我们可以看到控制器模型。在这种情况下,它是一个具有编码器位置的面向字段的控制算法。
基本上,我们有一个状态流程图来表示控制器的不同状态。然后这里是一个原子子系统控制器的不同部分。面向字段的控制在这部分。所以,这基本上是通过一些Simulink块完成的,用于Clarke-Park转金宝app换,控制循环,等等。
我们还可以使用Simulation Data Inspector,在我们有一些可用的新结果来检查我们的模拟结果之后,它会显示为黄色。例如,我们可以在这里画出我们的速度指令和转子速度,我们可以看到我们的模拟是预期的。例如,我还可以在这里显示模型的状态。使用一些数据标签,我可以检查结果。我可以放大,缩小等等。
所以,我做错了。我再做一次。好吧。这就是我想展示的。例如,现在我们可以检查转换。当然,如果我们想要导出或保存结果以供进一步分析,我们也可以直接从模型中轻松地做到这一点。
我把这个关了,回到模型上。现在,我们已经确保了我们的模拟结果我们的控制行为是我们所期望的。现在我们要去硬件测试我们的嵌入式控制器,它已经实现了我们之前在桌面开发的软件。
因此,我们不再需要我的模型的这一部分。现在我们必须用特定的I/O驱动程序块替换幻灯片上看到的。这是我事先做的事情,我已经准备好了。
让我回到我的HIL模型。我可以关闭这个。我使用HIL模型,在这个模型中我已经准备了这些驱动程序块。我来最小化它。你可以看到这个模型和另一个模型基本相同。
所以,我在重复使用植物模型,因为我在使用模型参考。所以,我在两个不同的顶级模特中引用了同一个实体。所以,我可以完全自由地重用它们,这样它们就可以链接内容了。但我有两种不同的模型用于两种不同的目的,一种用于桌面模拟,另一种用于HIL。
这是我选择的方法。但最终,我们也可以使用不同的子系统来有一个单一的主要模型,我们在其中转换,在其中激活我们每时每刻都需要的子系统。现在,我们可以检查TI接口,子系统包含我们特别需要的Speedgoat驱动块。
例如,我们可以先看看输出。这些是Speedgoat的输出,控制器的输入。所以,我们有一些数字线,正交编码器,以及模拟输入。
所以。如您所见,Speedgoat驱动程序块完全集成在Speedgoat驱动程序库中。所以。我们可以像添加其他块一样在每次拖放时添加到模型中。它们有相同的掩码,所以我们可以随意参数化它们。我们甚至可以从物理上改变接口的行为,例如直接从Simulink中改变输出范围。金宝app所以我们不需要任何单独的软件。
强调文档也很有趣。因此,通过单击Help,我们可以打开块文档。它的外观和感觉与其他Simulink模块相同。金宝app它们也可以在线下使用。因此,它们与Speedgoat驱动程序库安装在一起,以便您可以在任何情况下查阅它们,无论您的互联网连接。
这对于很多示例、一些提示和一些使用说明都非常有用。让我关闭这个,然后回到模型。我们还可以看看输入。
例如,我们正在做一个模型控制应用程序。我们有一个PWM捕获模块,如您所见。在这种情况下,脉冲在系统中的FPGA上捕获。我们给CPU一个占空比,这是工厂模型所需要的。
顺便说一下,我们以这种方式使用PWM捕获块,因为我们运行的是逆变器和PMSM模型的平均模型。如果我们需要一个更详细的情况,因为我们是模拟某些故障的情况下,或者我们需要的瞬态行为不同的开关逆变器的元素,我们可以更详细的模型,甚至跑上的永磁同步电动机逆变器的FPGA来捕获所有的动力学系统利率到兆赫频率。
下一步是在Speedgoat上为硬件在环仿真配置模型。因此,我们必须记住两件事。如果我们转到硬件设置,我们必须确保选择了SLRT。正如您在这里看到的,Simulink实时作为目标文件。金宝app
此外,必须有一个固定步长求解器。这是在Speedgoat硬件平台上运行实时仿真的两个主要要求。一旦这个准备好了,我们可以在这里选择目标计算机。在本例中,我有一个基线,我在前面注释过。我可以连接到它。现在我们和目标相连了。点击一下,让我们实时运行这个模型。
我将在这里最大化仪表板,以同样的方式,我们使用它来控制桌面模拟,这是我们可以用于硬件在环的东西。现在,我们想在目标上运行应用程序。因此,点击这个按钮,我们将触发这个过程,在这个过程中,我们将从我们的Simulink模型自动生成C代码。金宝app
然后,Simulin金宝appk实时编译并链接我们生成的C代码中的实时应用程序,同时考虑我们在Simulink块上设置的驱动程序配置。顺便说一句,我们也可以打开诊断查看器来遵循我刚才评论的这个过程。
首先,我们自动生成C代码。然后,Simulin金宝appk real调用C编译器来创建这个实时应用程序。顺便说一下,这是我点击一下就能触发的东西。因此,从Simulin金宝appk模型到让应用程序在Speedgoat平台上实时运行。但我们也可以从图形用户界面一步一步地做,或者我们也可以使用命令,这样我们就可以从MATLAB命令窗口或脚本中以编程方式来做。
因此,我们可以看到应用程序即将启动。这是构建过程的最后一步。这可能需要几秒钟或几分钟,取决于模型的复杂性。当然,我们可以使用一些技术,比如使用模型引用,以减少构建一个新的实时应用程序所需的时间,在这个应用程序中,我们需要重建模型的某些部分。
看起来应用程序已经加载到目标上了。现在要开始模拟了。可以看到,这是一个应用程序就绪后自动启动的进程。现在,S金宝appimulink检查加载在Speedgoat平台上的应用程序是否与我们打开的应用程序相同。它会立即开始实时运行。
我可以关闭诊断查看器,现在我们看到应用程序正在运行。我必须发送一个on命令到嵌入式控制器。现在我们来看看如何直接从目标控制速度。
现在,控制器,TI板得到了速度指令,我在Simulink中通过一些数字输入来设置。金宝app它产生了PWM信号-三相PWM信号,事实上,它控制着我的工厂模型在Speedgoat平台上实时运行。所以,我可以复制之前的行为。
如你所见,我们可以控制,我们可以在Simulink中直接调优参数,而不需要重新构建我们的应用程序,无论是用仪表板还是这些参数所金宝app在的任何地方。无论是在MATLAB工作空间,模型工作空间,Simulink数据字典…金宝app没关系。我们可以在运行时调整它们。
现在我将停止申请。我们也有在模拟数据检查器中可用的结果。你可以看到它还是黄色的。这意味着新的模拟结果是可用的。这里,我们可以关注它们的速度。我来展示一下转子的速度。我们可以直接从目标处得到模拟结果。
再举个例子,这是我关闭模型的时刻。这是我们可以检查的东西。这是我们可以比较的方法,我们可以分析仿真结果,不管仿真平台是什么,不管它们是在实时还是ondesktop中尽可能快地运行,从相同的绘图工具,从相同的数据检查器。
同样的,我们可以使用同样的输出可能性。我们甚至可以通过选择比较块按钮自动进行比较。我们可以将一个信号与另一个信号进行比较,以进行更详细的分析。现在让我关闭仿真数据检查器,回到我的主模型。
因此,在第一次尝试中,我们在Speedgoat平台上手动地实时执行了应用程序。我们用一个随机的目标按钮触发了执行。稍后,我们将直接从Simulink在运行时调优参数时与应用程序进行交互。金宝app
我们还看到了如何使用相同的工具、相同的模拟数据检查器和用于桌面模拟的相同仪表板来检查结果。最终,我们希望实现自动化。特别是对于硬件在环,我们可能有很多不同的测试用例需要重用。我们甚至可能为模型在环仿真开发了它们。我们希望在整个验证和确认过程中重用,包括模型在环、软件在环和硬件在环。
现在,我们将看到如何使用一个工具来自动化整个测试过程,包括与需求链接并生成测试和报告作为工件。为此,我们可以到app标签,在顶部的栏,打开Simulink测试,然后使用Simulink测试管理器。金宝app
测试管理器并不排斥环路中的硬件。但是它为我们提供了一个单一的工具来管理我们所有的测试用例和测试套件,而不管它们运行在什么平台上。在本例中,我将使用之前创建的测试套件。
我可以加载测试。然后我们看到,在左边这一列,我们看到了不同的文件夹和不同的测试用例。对于演示,我们将使用MIL或Model-in-the-Loop测试。如你所见,这是一个模拟测试。这意味着它将在我的桌面上执行。
我们去New。我们发现了许多不同的测试用例,可以用于不同的目的。看看测试用例定义,有不同的字段。我们可以向测试用例添加不同的任务、描述和需求。顺便说一下,如果我们打开需求,我们可以看到在需求和测试用例上的验证之间有一个双向的链接。以同样的方式,我们可以在Simulink模型中找到需求及其实现之间的双向链接和完整的可跟踪性。金宝app
如果我们进入这个灰色区域,我们可以找到允许我们定义测试用例的不同字段。我们可以选择我们想要测试的模型,不同的测试硬度,在那里我们定义了额外的测试输入或者我们的模型必须完成的验证评估。在测试用例中,我们有可能定义我们想在模型中覆盖的任何配置、任何设置或参数。
让我们进入下一节,在参数覆盖中,我们可以覆盖Simulink模型的任何参数,不管它们存储在哪里。金宝app我们可以在MATLAB工作空间中重写它们,在模型工作空间中,或者在本例中,在Simulink数据字典中。金宝app
在这个场景中,我们用三个不同的值覆盖一个参数。但我们也可以对完整的参数集做同样的事情。在这种情况下,我们所做的是,我们有一个圆盘连接到模型的转子轴,它在旋转,我们想要改变它的惯性。
而不是维护三个不同的模型或三个不同的参数集,我们可以使用测试管理器,特别是这个参数覆盖部分来使用我们到目前为止所做的所有事情,测试定义,以及一个单一的模型。而是用不同的参数组合或验证我们的行为。因此,这样做的好处是,我们有更少的模型、更少的文件或工件需要维护,但我们仍然有灵活性,可以从test Manager轻松快速地测试不同配置下的系统。
如果有一些我想定制的东西,我们总是可以使用回调来定义MATLAB脚本或我们想要执行的命令。以同样的方式,如果我们还没有在模型上定义输入,我们可以进一步定义我们想要用于测试用例的输入。
我们还可以使用其他信号来记录不同的配置设置,比如覆盖一个完整的配置集,并最终基于我们在本页中定义的前面的数据定义迭代。如果我们想更详细地了解如何控制如何检查需求是否得到满足,我们还可以使用这些逻辑和时间评估。
在这里,我们可以转换或实现基于文本的需求,以一种更容易理解和在我们的测试用例中验证的方式。我们可以定义一些符号。这些是对我们模型的引用,也是数值参数。
我们可以添加不同的评估,一些基本的逻辑评估,比如绑定检查和自定义。但我们也可以使用更复杂的时间评估。在这个例子中,我有两个逻辑的和一个时间的,正如你在这里看到的。每一个都与不同的需求相关联。
如果我们点击这里,我们在需求及其验证之间就有了相同的双向可追溯性。我们还可以看到正在验证的需求的可视化表示。如果需要的话,还可以添加想要执行的附加条件。我们可以使用相同的测试用例来收集覆盖率数据。
现在,我要在我的桌面上运行它。正如您在本例中看到的,我为这个测试定义运行了三个不同的测试用例。MATLAB会自动创建三个不同的执行,就像你在这里看到的。他们现在正在排队。
我还可以通过启用这个按钮来使用并行执行。在这种情况下,我们会同时执行三种不同的执行。现在,它们是顺序的。我们将一个接一个地跑。
你总是可以在屏幕的中间看到一个关于测试执行状态的反馈。第一次执行的时间要长一些,因为必须加载和编译模型。但是我们会看到,由于快速重启,以后的执行会快得多。
第一次执行已经开始。我们可以看到队列中有两个,其中一个已经在运行。这个还没有加载。好了。我们可以手动检查结果,尽管我们已经看到了关于结果的即时反馈。我们在这里看到,它们已经通过,它们从详细的核查到全球结果。
我们可以画出,例如,转子速度,我们可以看到,作为模型输入的双步。例如,我在这里看到了我之前定义的三个评估。例如,我们可以看到它们已经实现了。
如果有什么东西没有通过,一个标准失败了,我们会立即在状态图标上看到。我们也可以检查这个模型。因此,例如,编码器校准要求没有得到满足。我们在这里看到了它不存在的原因。
在本例中,我已经执行了结果并手动检查了它们。但我们也可以根据这些结果生成报告。例如,使用这个标准配置,我们可以使用不同的格式来导出结果
我将以PDF为例。现在我们将根据Simulink结果自动创建一个PDF文档。金宝app这是一个我们也可以在测试执行结束时自动化的操作,这样我们就可以稍后检查我们的测试用例的结果,而不必打开MATLAB或测试管理器。
例如,我们可以让这个测试执行自动运行。例如,我们正在一个持续集成环境中运行它。然后在模拟的最后,第二天我们可以打开我们的文件夹里面有我们的结果,比如,这个PDF文档里面有很多我们的结果,就像你在这里看到的。
正如我刚才所说的,Simulink测试是一金宝app个测试框架,您也可以在持续集成工作流中使用它。在本例中,我实现了这个任务来验证我的HIL测试用例,Jenkins服务器中的PMSM场景。例如,这是工作看起来的样子。我可以直接看到我之前展示的测试报告。
我还可以使用任何测试协议,以非常迅速地看到我的结果。例如,如果我打开我的最后一个工作,我有一个总结直接在Jenkins上,而不需要打开MATLAB或Simulink测试通过或失败的测试用例,甚至查看错误日志,正如你在这里看到的。金宝app
如果我回到我的主要工作网站,我现在进入我的配置网站。我可以看到,例如,我们有一个MATLAB插件,这样我们就可以直接从Jenkins运行MATLAB测试用例或MATLAB命令。这个用于Jenkins的MATLAB插件可以自动打开这里给出的路径中的MATLAB安装,并根据需要运行测试用例。我们可以很容易地将Simulink上的测试框架与一些自动化或持续集成工作流结合金宝app起来。
如果我们回到我们的测试浏览器,我们可以看到我们有其他的测试用例。例如,这是一个model -in- loop测试。但是,将其转换为软件在环(Software-in-the-Loop)是非常容易的,这将是验证过程的下一步。我们可以打开模拟模式并覆盖它,这样我们就可以自动使用软件在环。
对于环路中的硬件,我们需要指定一个称为实时测试的测试用例。我们不需要重复我们的测试用例。我们可以复制它,然后在测试面板上轻松地将它转换为实时测试。这就是我所做的,所以我创建了另一个测试用例,它将在Speedgoat平台上运行,我称之为HIL。
我使用的是相同的测试定义。我正在检查或验证相同的需求,并使用相同的测试迭代,相同的参数覆盖。但主要的区别是,我将使用HIL模型,其中我已经配置了Speedgoat I/O驱动程序块。并且,测试用例将在Speedgoat上运行,而不是在桌面上运行。
如果我单击Run,现在Simulink Tes金宝appt Manager将执行与我先前手动执行的相同的测试。正如您现在看到的,它正在构建模型。它通常会再次编译C代码,编译并创建这个实时应用程序,它将被转移到目标,这样我们就不必手动操作,打开模型,点击并在目标上运行,直到执行完成。
同样,第一次迭代将花费更长的时间,因为它必须构建模型。但是Test Manager可以自动检测何时需要构建。第二和第三次迭代将在第一次迭代之后立即开始,因为我们利用了可调参数不需要新的构建的优势。
一个优点是我们可以单独执行测试用例,就像我在这里所做的那样。或者,一旦我们定义了完整的测试套件,我们就可以打开或单击测试用例的根定义并执行一切,结合各种测试用例——模型在循环、软件在循环、处理器在循环、在Speedgoat上实时运行的测试,这些测试具有不同的模型和不同的验证需求。
我们可以看到应用程序是如何构建并转移到Speedgoat的。现在第一次迭代开始了。结果将立即弹出,同样,在这个左列。随后将立即执行进一步的迭代。
我们可以打开结果,我们有相同的执行,相同的结果,在这个场景中我们之前有过。案件是在Speedgoat平台上实时执行的。我们的硬件在环测试用例已经被执行了。我们有所有可用的结果,以及之前在桌面上执行的结果。
因此,我们已经把我们的模型,我们的测试用例,我们的验证语句从桌面仿真到硬件在环多亏了Simulink实时和Speedgoat目标计算机。金宝app
谢谢收看。请不要犹豫,希望你对我们的实时仿真解决方案有进一步的兴趣。再一次,请让我提醒你们看我的同事Sonja为快速控制原型制作的视频。
你也可以从以下列表中选择一个网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家/地区网站未针对您所在地的访问进行优化。