面向PLC的自动代码生成基础

面向PLC的自动代码生成基础,第1张

面向PLC的自动代码生成基础

 

PLC可编程逻辑控制器)是在工业控制领域广泛应用的嵌入式处理器,它是专门为工业环境下的数字化 *** 作而设计的电子设备。基于 PLC 的工业控制软件开发是应用 PLC 的一项核心任务。随着工业控制场景下控制软件复杂度的提升,基于文本的开发方式,即根据文本形式的规格说明书进行编码实现,然后通过在原型系统或实物系统上的运行来开展测试调试,已经很难满足当前在高质量保证的基础上,快速进行产品或系统交付的市场需求。而基于模型的设计(Model Based Design, MBD),即在产品规格设计阶段就使用模型对产品规格进行描述,形成“可执行”的规格说明之后,利用自动代码生成工具将规格模型直接转化为可以运行的产品级代码,是应对这种开发挑战的有效手段。


点击查看“基于模型设计”专题页面,或访问基于模型的设计 MathWorks 官网页面, 您将获取更丰富的有关 MBD 的详细内容。

本文将详细介绍 MBD 中一个核心技术,即从模型到 PLC 代码的自动生成技术。

一、面向 PLC 的 MBD 工作流

在进入自动代码生成技术介绍之前,我们先来看看面向 PLC 控制软件开发的 MBD 工作流:




在集成建模仿真环境 Simulink 中,对控制器和被控对象进行建模,当通过系统仿真对控制器的行为进行验证和确认后,利用自动代码生成工具,将控制器模型,生成面向PLC的可执行代码,再经由第三方 IDE,部署到 PLC 上,上图中的下半部分展示的就是这个过程。而正如图中上半部分展示的,我们可以将被控对象模型生成可运行的代码,部署到实时运行环境下,这样就可以和PLC控制器部分进行闭环仿真,来对控制器进行硬件在环测试。从这个工作流我们可以看到,采用了自动代码生成技术的基于模型设计,不仅让我们的代码实现环节非常高效(一键自动生成),并且,基于模型设计也赋予了我们在不同的开发阶段进行持续的测试与验证的能力。

二、面向 PLC 的自动代码生成基础

MATLAB/Simulink 提供了 ST(结构化文本)代码和 C/C++ 代码的生成工具,用于 PLC 开发。本文重点介绍ST的代码生成技术,其对应的工具为 Simulink PLC Coder。

从模型到代码的基本步骤

MATLAB/Simulink 提供的代码生成技术,可以帮助我们通过简单的三个步骤,就将控制器模型生成 ST 代码:1. 将控制器模型设置为原子子系统;2. 选择目标 IDE;3. 执行代码生成。



支持生成 ST 代码的模型种类

当前支持的模块种类非常丰富,从大类上来讲,Simulink模块、Stateflow 图形以及 m 语言的 MATLAB FuncTIon,都支持生成符合 IEC 61131-3 标准的 ST 代码。



在 MATLAB 命令行中运行 plclib 命令,即可打开查看所有支持生成ST代码的模块。
  •  
>> plclib
控制软件模型与硬件 PLC 的解耦

我们知道,提供 PLC 的厂家非常多,也都有各自的 IDE(集成开发环境)。各类 IDE 在集成 ST 代码的时候,使用的文件格式和支持的 ST 语言特性还存在一些差异。这往往会导致我们在某一特定 IDE 下编写的 PLC应用程序,很难移植到其他厂家 PLC 所支持的 IDE 环境下。程序可移植性的限制,也会间接影响我们在方案设计阶段对硬件 PLC 选型的灵活性(涉及成本、供应链稳定性等方面的考量)。在自动代码生成技术支持下,利用模型对运行在 PLC 上的应用程序进行开发,可以解决这一问题。即通过 Simulink PLC Coder 工具内嵌的对多种IDE的支持,帮助开发者获得一套模型对应多个 PLC 硬件平台的“一对多”的程序可移植性,实现控制软件与硬件PLC的解耦。
 


从图中也可以看到,同一个模型,我们还可以生成 C/C++ 代码,相关的技术我们将另起文章介绍。访问这个链接(https://www.mathworks.com/help/plccoder/gs/supported-ide-platforms.html) 可以看到对各类 PLC IDE 的支持情况。

三、几个核心技术细节

基本语法



如上图所示,Simulink 中的原子子系统模型对应生成 ST 代码中的 FUNCTION_BLOCK, 模型中的输入输入端口分别对应 ST 代码中的 VAR_INPUT 和 VAR_OUTPUT,而模型中包含的状态变量,对应 ST 代码中的本地变量 VAR,模型所描述的算法对应 ST 的函数体部分。
  •  
>> web(fullfile(docroot, 'plccoder/ug/generaTIng-structured-text-for-a-simple-simulink-subsystem.html'))
 可调参数如果模型中包括可调参数,通过在模型中配置 Storage Class 属性,可以控制这些可调参数在生成的 ST 代码中的字段位置。如下图中的 K1,K2,K3,在模型中都是代表增益的可调参数,对这些参数的 Storage Class 进行不同的设置(Model default, Const, ExportedGlobal),经过代码生成后,K1 将生成为局部变量(VAR),K3 生成了全局变量(VAR_GLOBAL),而 K2 生成了全局常量(VAR_GLOBAL CONSTANT)。

  •  
>> web(fullfile(docroot, 'plccoder/ug/mapping-tunable-parameters-defined-using-simulink-parameter-objects-to-structured-text.html'))
 复杂数据结构


对于复杂的数据结构,在模型中也有很便捷的建模方式。比如,在 Simulink 中的 Bus 对象,在生成代码时,将生成ST代码中的结构体 STRUCT。




利用 Simulink 中的 Bus Editor 工具,可以很方便的以图形化的方式对 Bus 对象进行创建和管理。



四、模型与代码的追溯

“追溯”通常被作为一种验证(VerificaTIon)活动,来审查通过工具生成的代码是否与模型相一致。在将程序代码部署到 PLC 上开展调试时,一般也希望在代码中定位的故障点,能够反映到模型中,从而对模型进行修改。PLC 代码生成工具,在将模型生成代码的时候,支持生成带有追溯信息的报告,建立并管理模型和代码之间的双向追溯关系,从而支持在模型和代码之间导航,便于开展代码评审和代码验证。同时,利用内嵌Web视图功能,还可以在脱离 MATLAB 的环境下,使用浏览器查看模型和代码间的这种追溯。



五、测试程序 Testbench 的自动生成

如前面第一部分提到的,MBD让我们能够在对控制软件进行建模后,就通过仿真的方式对控制软件进行测试。而进入ST代码实现阶段,在利用代码生成技术自动生成控制软件代码—— ST 代码的同时,也可以将已经在模型中创建的测试激励连同被测单元一同生成测试程序 Testbench,方便在代码级进行进一步的验证/测试。



这部分测试一般被称为等效性测试或“背靠背”测试,在具有功能安全要求的场合,这种测试是必不可少的。



更多信息

面向 PLC 的代码生成技术还有很多内容,限于篇幅,本文仅就其中比较核心的部分进行了阐述。在 MATLAB 命令行中执行下面这条命令,丰富的特性展示示例将很好的帮助您进行进一步的功能特性探索。
  •  
>> plccoderdemos

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2418574.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-01
下一篇 2022-08-01

发表评论

登录后才能评论

评论列表(0条)

保存