巴勃罗·罗梅罗·坎布雷拉斯,MathWorks
大家好!我叫巴勃罗·罗梅罗。我是MathWorks的应用工程师,是实时仿真和测试方面的专家。今天我想告诉你关于Simulink中的实时仿真。金宝app如您所知,Simulink rea金宝appl是MathWorks的产品,它允许您从Simulink创建实时应用程序,以便您可以在Speedgoat目标计算机上以硬实时方式运行任何模型。
它是为实时仿真和测试任务而设计的,包括快速控制原型和硬件在环仿真。使用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,点击Run on target,我们将从我们的Simulink模型中一次点击生成一个实时应用程序。这将通过以太网连接传输到目标计算机硬件。最后,我们可以实时测试我们的嵌入式控制硬件。
硬件在环是非常重要的,因为实际的控制系统可能是非常复杂的。我们可能需要在最终系统构建或甚至可用之前测试生产控制器,或者因为在最终设计上测试不实用、不安全,或者非常昂贵。因此,我们降低了风险和成本,并确保不同硬件组件的无缝集成。
这是我将用于当今硬件In-in-Loop演示的硬件设置。在右侧,我有一个运行MATLAB和SIMULINK的计算机,它通过以太网电缆连接到左侧的SpeedGoat基准。金宝appSpeedGoat基线是您可以找到的最小Speedgoat计算机之一。
与其他更大系统的主要区别是支持的I / O的数量和类型。金宝app如果您想知道您可能需要哪种型号;我们的工程师将帮助您弄清楚合适的系统。
最后,在左侧,您在绿色中看到了我要测试的嵌入式控制器硬件。在这种情况下,它是一个德克萨斯乐器板,我已经部署了我的现场控制算法。让我们切换到Simulink,看金宝app看这是有效的。
这是我将用于今天的演示的金宝appSimulink模型。它具有与我们在上一个幻灯片中看到的布局相同的布局。所以,在左侧,我可以在这里标记为面向现场的控制算法。在右侧,我有我的植物模型。在这种情况下,它是永磁同步机。
我们可以运行我们的模拟,看看该模型如何表现。所以,我在这里切换到模拟。我可以打开乐器面板,漂浮在我的Simulink模型上。金宝app这是一个非常好的功能,您可以用来将乐器面板嵌入到Simulink模型中。金宝app所以,我们可以运行它们,看看我的模型将如何开始,并加快我在这里每秒弧度的这种速度。现在正在编译模型,并且模拟将在几秒钟内开始运行。
顺便说一下,我用的是速度模式。它在闭环中运行,但我也可以使用一些其他的输入。现在我们来看看模型是如何加速的,如何开始的,如何达到这个速度。现在我们可以直接用这个刻度盘来改变速度。我们甚至可以,例如,重新启动马达,看看速度是如何回到零的。我们可以重新启动。我们也有一些反馈关于控制器的状态等。
让我们停止这个模拟,看看我们在这个模型中拥有的内容。我们可以通过双击它们来最小化仪表板。现在让我们看看我们在这里有什么。首先,让我们看看我的PMSM工厂模型。
因此,在这个子系统中,我们可以看到构成我植物模型的不同组件。我们在这里看到一些模拟器,一个用于传感器,另一个用于编码器。在左侧部分,我实际上看到了PMSM植物模型。
我可以打开它。然后我看到这三种不同的变体。因此,在Sim金宝appulink中,有几种方法可以实现或模拟物理模型。因此,例如,我们可以使用基于常微分方程的方法。这是我们将使用基本的Simulink模型构建的东西。金宝app我们还可以使用一些工具箱,如电机控制块集或动力总成块集,在那里我们可以找到准备使用我们可以使用的现成块。或者我们也可以使用Simscape,这是Simulink的物理库。金宝app
在这种情况下,我们没有基于普通微分方程,我们有不同的物理域,以便我们可以构建模拟或造型的视觉表示的图表或电路。
在此视频中,我将专注于PMSM模型的Simscape实现。如果您有更多的兴趣,您可以找到更多关于模拟工厂的不同方式的视频,包括Mathworks网站上的电机。
Simscape是来自Simulink的物理建模库。金宝app所以,一方面,我们有Simulink,它适用于普通微分方程金宝app。所以,我们有一个基于时间的建模。在这种情况下,它是特定于域的。因此,我们有代表电气,机械,热域的设施。
在这种情况下,例如,如果我在PMSM模型中查看这里,我会看到我的PMSM没有用等式表示,但是使用我从Simscapt库中取出的Simulink块。金宝app所以,它都是参数化的。这非常有助于加速植物建模。
顺便说一下,这不仅仅是为了模拟。所以,正如你稍后将看到的,这是100%兼容Speedgoat目标计算机上的实时模拟。我们可以回到主模型,我回来了。现在我们可以看到控制器模型。在这种情况下,它是一个具有编码器位置的面向字段的控制算法。
所以基本上,我们有一个状态溢图表,它代表了我的控制器的不同状态。然后我在这里作为原子子系统,我的控制器的不同部分。因此,面向现场的控制在此部分就在此处。因此,这基本上是这样做的,对于Clarke-Park变换,控制循环等一些Sim金宝appulink块,等等。
我们还可以使用模拟数据检查器,在我们有一些新的结果可用以检查我们的模拟结果后,这会使用黄色。因此,例如,我们可以在这里绘制我们可以看到OUT模拟的转子速度如预期的那样。例如,我也可以在这里显示我的模型的状态。并使用某些数据标签,我可以检查结果。我可以显然放大,缩小等等。
所以,我做错了。让我再做一次。好的。这是我想展示的那个。例如,现在我们可以检查过渡。当然,如果我们想导出或保存进一步分析的结果,那就是我们也可以直接从模型中轻松完成的东西。
我把这个关了,回到模型上。因此,现在,我们确保我们的模拟结果我们的控制行为是我们所预期的。因此,现在我们想转到硬件并测试我们的嵌入式控制器,已经已经实现了我们先前在桌面上开发的软件。
因此,我们不再需要模型的这一部分了。现在我们要替换它,就像我们在幻灯片上看到的,用特定的I/O驱动程序块。这是我事先做过的事情,我已经有空了。
所以,让我恢复到我的HIL模型。我可以接近那个。我使用我已经准备了这些驱动程序块的HIL模型。所以,让我尽量减少这个。而且你看得,所以模型看起来与另一个基本相同。
所以,我正在重用植物模型,因为我正在使用模型引用。因此,我在两个不同的顶级模型中具有相同的实体。所以,我可以用这种完全自由来重复使用它们,以便他们正在链接内容。但是我有两种不同的模型,两种不同的目的,一个用于桌面模拟,另一个用于HIL。
这是我选择的方法。但最终,我们还可以使用Variant子系统来拥有一个单一的主模型,我们正在切换,其中我们激活了我们每时每刻所需的那个子系统。现在,我们可以检查TI接口,子系统包含我们专门针对此应用程序所需的SpeedGoat驱动程序块。
因此,例如,我们可以首先查看输出。因此,这些是SpeedGoat的输出,控制器的输入。因此,我们也有一些数字线,正交编码器和模拟输入。
所以。如您所见,Speedgoat驱动程序块完全集成在Speedgoat驱动程序库中。所以。我们可以像添加其他块一样在每次拖放时添加到模型中。它们有相同的掩码,所以我们可以随意参数化它们。我们甚至可以从物理上改变接口的行为,例如直接从Simulink中改变输出范围。金宝app所以我们不需要任何单独的软件。
强调文件也很有意思。因此,通过单击帮助,我们可以打开块文档。它具有相同的外观和感觉任何其他Simulink块。金宝app它们也可以离线提供。因此,它们与Speedgoat驱动程序库一起安装,以便您可以在任何情况下咨询它们,无论您的Internet连接如何。
这是非常有用的,有很多例子,一些技巧,一些使用说明,总是非常有用的。我把这个关了,回到模型上。我们还可以看看输入。
例如,当我们在做一个模型控制应用程序时。我们有一个PWM捕获块,你可以在这里看到。在这种情况下,脉冲被捕获在我们在系统中的FPGA上。我们给CPU占空比,这是我们需要的工厂模型。
顺便说一下,我们通过这种方式使用PWM捕获块,因为我们正在运行逆变器和PMSM模型的平均模型。在我们需要更详细的情况下,我们需要更详细的场景,因为我们正在模拟一些故障情况,或者我们需要逆变器的不同开关元件的瞬态行为,我们可以运行更详细的模型,甚至在变频器上运行PMSMFPGA以频率速率捕获我们系统的所有动态,直到Megahertz。
下一步是在Speedgoat上配置硬件在环仿真模型。所以,基本上有两件事我们必须记住。如果我们进入硬件设置,我们必须确保我们选择了SLRT。正如你在这里看到的,Simulink实时作金宝app为目标文件。
此外,必须有一个固定步长求解器。这是在Speedgoat硬件平台上运行实时仿真的两个主要要求。一旦这个准备好了,我们可以在这里选择目标计算机。在本例中,我有一个基线,我在前面注释过。我可以连接到它。现在我们和目标相连了。点击一下,让我们实时运行这个模型。
我将在此最大化仪器面板,因此我们使用它的方式与 - 或控制桌面模拟,是我们可以用于硬件循环的东西。现在,我们想在目标上运行应用程序。因此,单击此按钮,我们将触发此过程,其中我们从我们的Simulink模型中自动生成C代码。金宝app
然后,Simulin金宝appk Real-Time从我们生成的C代码编译和链接实时应用程序,同时也考虑我们在Simulink块上设置的驱动配置。顺便说一下,我们还可以打开诊断查看器来遵循我刚才评论的这个过程。
首先,我们会自动生成C代码。然后,Simulin金宝appk实时调用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或循环模型测试。如您所知,这是一个模拟测试。这意味着它将在桌面上执行。
我们去了新的。我们发现我们可以用于不同目的的许多不同的测试用例。查看测试用例定义,有不同的字段。我们可以为我们的测试用例添加不同的任务,描述和要求。顺便说一下,如果我们打开要求,我们可以看到,在测试用例之间的要求及其验证之间存在双向链路。在同样的方式,我们可以在Simulink模型中找到一个双向链接和完整的可追溯性和其在Simulink模型中的实现。金宝app
如果我们进入这个灰色区域,我们可以找到允许我们定义测试用例的不同字段。我们可以选择我们想要测试的模型,不同的测试硬度,在那里我们定义了额外的测试输入或者我们的模型必须完成的验证评估。在测试用例中,我们有可能定义我们想在模型中覆盖的任何配置、任何设置或参数。
让我们转到下一部分,这里参数覆盖我们有可能覆盖我们的Simulink模型的任何参数,无论它们存储在哪里。金宝app我们可以在Matlab工作区中覆盖它们,在模型工作区中或在这种情况下,在Simulink数据字典中。金宝app
在这个场景中,我们用三个不同的值覆盖一个参数。但我们也可以对完整的参数集做同样的事情。在这种情况下,我们所做的是,我们有一个圆盘连接到模型的转子轴,它在旋转,我们想要改变它的惯性。
我们可以使用测试管理器,而不是维护三种不同的型号或三个不同的参数集,而是使用此参数覆盖部分以使用所有我们所做的所有我们所做的一切,测试定义以及一个单一模型。但结合或验证我们对不同参数集的行为是什么。因此,这具有以下优点:我们具有更少的模型,更少的文件或伪像来维护,但我们仍然可以灵活地从测试管理器轻松快速地测试我们的系统以不同的配置。
如果有一些我想定制的东西,我们总是可以使用回调来定义MATLAB脚本或我们想要执行的命令。以同样的方式,如果我们还没有在模型上定义输入,我们可以进一步定义我们想要用于测试用例的输入。
我们还可以使用其他信号来记录不同的配置设置,比如覆盖一个完整的配置集,并最终基于我们在本页中定义的前面的数据定义迭代。如果我们想更详细地了解如何控制如何检查需求是否得到满足,我们还可以使用这些逻辑和时间评估。
在这里,我们可以转换或实现基于文本的需求,以一种更容易理解和在我们的测试用例中验证的方式。我们可以定义一些符号。这些是对我们模型的引用,也是数值参数。
我们可以添加不同的评估,因此在逻辑评估等逻辑评估中的基础知识如绑定的检查和自定义。但我们也可以使用更复杂的时间评估。在这种情况下,我有两个逻辑和一个时间,正如您在这里看到的那样。每个人都与不同的要求相关联。
如果我们点击此处,我们在要求之间具有相同的双向可追溯性及其验证。我们还看到了我们正在验证的要求的视觉表现。如果我们需要它,我们还可以添加要执行的其他标准。我们可以使用相同的测试用例来收集覆盖数据。
现在,我要在我的桌面上运行它。正如您在本例中看到的,我为这个测试定义运行了三个不同的测试用例。MATLAB会自动创建三个不同的执行,就像你在这里看到的。他们现在正在排队。
我还可以通过启用这个按钮来使用并行执行。在这种情况下,我们会同时执行三种不同的执行。现在,它们是顺序的。我们将一个接一个地跑。
你总是可以在屏幕的中间看到一个关于测试执行状态的反馈。第一次执行的时间要长一些,因为必须加载和编译模型。但是我们会看到,由于快速重启,以后的执行会快得多。
第一次执行已经开始。我们可以看到队列中有两个,其中一个已经在运行。这个还没有加载。好了。我们可以手动检查结果,尽管我们已经看到了关于结果的即时反馈。我们在这里看到,它们已经通过,它们从详细的核查到全球结果。
我们可以画出,例如,转子速度,我们可以看到,作为模型输入的双步。例如,我在这里看到了我之前定义的三个评估。例如,我们可以看到它们已经实现了。
如果有什么没有通过,一个标准失败了,我们会立即在状态图标上看到。我们也可以检查这个模型。例如,这个编码器的校准要求没有得到满足。我们在这里看到为什么它不是。
在本例中,我执行了结果并手动检查了它们。但我们也可以根据这些结果生成一份报告。例如,使用这个标准配置,我们可以使用不同的格式来导出结果
我将以PDF为例。现在我们将自动从我们的Simulink结果创建PDF文档。金宝app这是我们还可以在测试执行结束时自动化的操作,以便我们可以在不必打开MATLAB或测试管理器的情况下检查我们的测试用例的结果。
例如,我们可以让此测试执行自动运行。例如,我们在连续的集成环境中运行它。然后在模拟结束时,我们可以在我们的结果中打开我们的结果,并且只是咨询的那一天,例如,这款PDF文件与我们在此处看到的许多结果。
正如我刚才所说,Simulink测试是您也金宝app可以在连续集成工作流程中使用的测试框架。在这种情况下,我已经实现了此作业来验证我的HIL测试用例,我的Jenkins服务器中的PMSM方案。例如,这就是作业的样子。我直接访问我早先显示的测试报告。
我还可以使用任何测试协议,以非常迅速地看到我的结果。例如,如果我打开我的最后一个工作,我有一个总结直接在Jenkins上,而不需要打开MATLAB或Simulink测试通过或失败的测试用例,甚至查看错误日志,正如你在这里看到的。金宝app
如果我回到我的主营工作网站,我现在转到我的配置网站。例如,我可以看到,我们可以使用Matlab插件,以便我们可以直接从Jenkins运行Matlab测试用例或MATLAB命令。此MATLAB插件用于JENKINS可以自动打开MATLAB安装,如在路径中的此处给出,并根据需要运行测试用例。我们可以使用一些自动化或连续集成工作流程来将我们的测试框架耦合在Simulin金宝appk上。
如果我们回到我们的测试浏览器,我们可以看到我们有其他测试用例。例如,这是一个型号循环测试。但例如,将其转换为循环,例如,这将是非常容易的,例如,这将是验证过程中的下一步。我们可以打开模拟模式并覆盖它,以便我们可以自动使用软件循环。
对于循环硬件,我们需要指定称为实时测试的测试用例。我们不需要复制我们的测试案例。我们可以复制它,然后在测试面板上轻松转换为实时测试。这就是我所做的事情,以便我创建了另一个测试案例,该测试案例将在我打电话给hil的speedgoat平台上运行。
我正在使用相同的测试定义。我正在检查或验证相同的要求并使用相同的测试迭代,相同的参数覆盖。但主要区别在于我将使用我已配置SpeedgoAT I / O驱动程序块的HIL模型。并且,测试用例将在SpeedGoat上运行而不是桌面上的。
如果我点击运行,现在Simulink测试管理器金宝app将执行与我手动前面的相同的测试。正如您现在所看到的,它正在构建模型。它通常会再次编译和创建将传输到目标的实时应用程序,以便我们不必手动进行,打开模型,单击并在目标上运行,然后等待直到执行完成了。
同样,第一次迭代将需要一点,因为它必须构建模型。但是测试管理器可以自动检测构建时。第二和第三次迭代将在第一个之后立即开始,因为我们使用的优势可调参数不需要新构建。
一个好处是我们可以单独执行测试用例,就像我在这里做的。或者一旦我们定义了完整的测试套件,我们可以打开或点击根定义我们的测试用例和执行一切,结合各种测试用例——Model-in-the-Loop Software-in-the-Loop, Processor-in-the-Loop,测试运行在实时Speedgoat与不同的模型和不同的需求来验证。
我们可以看到应用程序是如何构建并转移到Speedgoat的。现在第一次迭代开始了。结果将立即弹出,同样,在这个左列。随后将立即执行进一步的迭代。
我们可以打开结果,我们有相同的执行,相同的结果,在这个场景中我们之前有过。案件是在Speedgoat平台上实时执行的。我们的硬件在环测试用例已经被执行了。我们有所有可用的结果,以及之前在桌面上执行的结果。
因此,我们已经把我们的模型,我们的测试用例,我们的验证语句从桌面仿真到硬件在环多亏了Simulink实时和Speedgoat目标计算机。金宝app
谢谢你的观点。请不要犹豫,伸出援手,愿您对我们的解决方案进行进一步兴趣,以进行实时模拟。又一次,请让我提醒您查看视频我的同事Sonja为快速控制原型设计。
您还可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。