摘要:随着信息化与工业自动化和智能制造领域深度融合,诸如C或C++等高级语言均在控制领域有了突破性应用。然而,标准C或C++无法很好地适应工业自动化生产中针对实时性控制的需求。德国BECKHOFF公司基于其集成自动化开发环境TwinCAT 3软件平台,提出了模块化C/C++的概念。本文介绍代码封装成通用模块过程,如何分配相应的task周期地运行,从而解决了高级语言代码实时性问题,同时可以达到较高的软件开发灵活性。
关键词:智能制造;工业自动化;TwinCAT 3;模块化C/C++
1.引言
近年来,随着“工业4.0”和“中国制造2025”的提出,国内智能制造行业迅猛发展[1,2,3],运动控制设备和逻辑控制设备被广泛利用与新能源汽车制造业、金属加工、材料成型、食品生产与检测等行业中[4,5]。在生产制造中常用的控制单元有可编程逻辑控制器(Programmable Logic Controller,PLC)、离散控制系统(Discrete Control System,DCS)等[6,7]。这些设备为工业制造提供了安全、可靠的控制模式,然而随着机器人行业和智能制造领域的进一步深化,以上设备的不足之处逐渐暴露出来。
针对这种情况,德国BECKHOFF自动化公司在已有的开发套件TwinCAT 2基础上[8,9],研发了基于Microsoft Visual Studio的TwinCAT 3工业控制开发环境[10],可以通过模块封装的形式在面向PLC控制的程序开发中调用已经编译好的C/C++代码,较大地提高算法代码的运行效率,便于信息/计算机从业人员进行工业控制中特定功能的模块开发,降低代码的开发和维护成本,加快开发流程。
2.基于BECKHOFF TwinCAT 3模块化设计
2.1 现有工业控制开发中的问题
首先,PLC作为可靠的工业控制单元,其设计初衷是为工业控制提供高可靠的设备,然而计算能力却往往较低,无法实现高精度的运动位置插补算法与复杂度较高的信号处理算法。在以往的工业应用中,以上问题往往通过具有较高计算能力的工控机或专门的运动控制卡实现,这就在无形中提升了生产成本、提高了系统开发难度,同时由于控制设备与运算设备之间需要进行通信,这就对总线通信的实时性带来了更高的要求。
其次,全球范围内,生产PLC生产厂家众多,例如美国Rockwell Automation公司、德国Siemens公司、日本的Omron与Mitsubishi公司等,国内生产PLC厂家如南大傲拓、无锡泊昂等。针对PLC控制系统的开发语言有多种,例如梯形图(LD)、指令表(IL)、顺序功能图(SFC)、结构化文本语言(ST)等,这些语言均为IEC 61131标准下规定的PLC语言。然而,针对不同的硬件版本,以Siemens公司为例,提供的开发环境也有区别,如Step 7和TIA Portal软件,这些软件不同的架构和开发流程无疑也带来了较高的开发成本。
最后,随着人工智能和机器学习向传统制造业和先进制造业的深入,计算机控制技术和高级语言正在工业控制中发挥着更大的作用。然而由于PLC控制系统开发的封闭性,很难引入相应的高级语言编译及开发模块,同时难以解决高级语言执行相应控制任务时的实时性问题。由于以上存在的问题,很难将高级语言编写程序时的灵活性与代码编译执行的高效性与工业实时控制相结合,局限了高级语言在工业现场中的应用。
2.2 BECKHOFF TwinCAT 3模块化设计机制
随着工业产品设计复杂化、精细化和高精度的要求日益加剧,为减少开发成本,提高设计再利用率,制造企业在设计之初就对产品进行模块化设计。这里的模块化设计分为两个部分,在硬件上根据产品的功能,设计实现不同功能的结构及结构原型,并保存设计信息,在其他具有同样或类似功能的结构上采用近似设计方案;其次,在软件开发中,将具有通用功能的算法或的控制流程封装成库文件或模块,以备之后调用,降低代码二次开发量,节约开发成本。
在BECKHOFF TwinCAT 3集成开发环境中,TwinCAT运行时(Runtime)为加载、应用和管理TwinCAT模块提供了必要的环境支持。通过分配合理的系统和硬件资源,例如内存、硬件访问、任务优先级和总线通信资源等,实现了模块化设计的基础。尽管不同的C/C++模块在编译时采用的编译器不同,在经过封装之后,可以脱开其原始编译执行环境在不同开发环境中调用,完成相同功能。与PLC控制程序需要在TwinCAT运行时环境中运行不同,TwinCAT C++模块可以无需在宿主环境中运行,如图1所示,支持这个模块运行的是系统内核模块(.sys)。
图1 TwinCAT PLC和C/C++模块运行环境示意图
然而,如何在依靠系统内核实现TwinCAT C/C++模块运行的实时性是Windows操作系统面临的一大挑战。众所周知,Windows操作系统是一个非实时系统,无法自发地完成具有实时性属性任务的调度。在Windows操作系统内进行高级语言的开发,以C#为例,当创建和编译完成程序之后,这段程序执行所需的资源的任务调度工作就交给了操作系统。由于Windows操作系统多线程、多任务的特点,可能在任何时间点中断原有程序的运行,并且何时回复执行原程序也是未知的,如图2所示,这无法满足任务实时性要求。
图2 Windows操作系统的程序执行过程示意图
因此在TwinCAT C/C++模块调用执行时采用类似PLC扫描周期的方式通过周期性函数回调管理实时性任务,在一个周期内必须完成程序的执行,如图3所示。
图3 实时性TwinCAT C/C++模块执行流程
图4 并发多任务实现示意图
在传统意义上的操作系统级代码开发过程中,并发特性是通过程序自身来控制的,也就是说通过程序自身控制在何处激活新的线程,在何时进行线程间的通信。所有这些任务的实现都需要依靠一定的资源,这些资源的分配会进一步的危害到任务执行的实时性。同时由于线程间的通信是事件驱动的,也就是说当有事件触发时才会在线程间开始或终止通信,这样就使得通信进程更加不可控。为了解决这一问题,在TwinCAT中,通过任务(tasks)而非线程来调用模块。在多核操作系统中,任务可以被分配给一个或多个CPU核,这些任务通常都带有任务周期和优先级属性(高优先级任务可以抢占低优先级任务的运行资源)。当这些任务被分配到不同的CPU核上时,就实现了并发任务,如图4所示。
在内存管理方面,TwinCAT有自身的实时内存管理方式。所有的内存资源均来自于操作系统分配的非页面内存池。此外,在同样的内存区域内,TwinCAT提供了一种形式的“路由内存”,利用这些内存资源,TcCOM模块可以在实时性环境下动态的分配内存资源,如图5所示。
图5 TwinCAT内存管理示意图
3.实例化TwinCAT 3 C/C++模块流程
第一步,在安装有TwinCAT 3 XAE集成开发环境的计算机中打开Micro Visual Studio软件,并通过文件菜单新建一个TwinCAT工程。之后在解决方案窗口中单击“C++”选择新建项目,并在接下来的窗口中选择TwinCAT驱动器项目,或者通过TwinCAT静态库项目新建静态TC-C++库文件。在接下来的对话框中选择带有周期性I/O的TwinCAT模块类。之后,带有驱动的TwinCAT 3 C++工程就创建完毕,如图6所示。
第二步,通过具体需求实现所需的TwinCAT 3 C++模块,并进行编译生成。在编译生成时注意选择目标平台,如图7所示。
图7 目标平台选择
第三步,实例化TwinCAT 3 C++模块。在执行C++模块之前需要对模块进行实例化,同一个模块可以存在多个实例。在C++ Configuration中通过添加新项目实例化一个对象,如图8所示。
图6 创建完成
图8 实例化C++模块
最后,将通过创建TwinCAT task并将其挂载实例化的模块上即可实现周期的调用模块对应的任务。
4.实验流程
4.1 实验设备
硬件:
Thinkpad X270笔记本,CPU intel I7-7700,16G RAM,512G SSD。
软件:
操作系统:WIN7 Ultimate,Microsoft Visual Studio 2012,TwinCAT 3 installation XAE Engineering,Microsoft Windows Driver Kit。
4.2 实验目标
实现TwinCAT 3中实现PLC程序对C++模块的调用。
4.3 实验步骤
(1)创建TwinCAT 3 C++模块,对其实例化,并将实例分配至某一任务。
(2)创建PLC项目:
首先,在Microsoft Visual Studio中新建TwinCAT项目,并在其中创建标准PLC任务。
其次,在PLC文件中添加PLC代码,如图9所示。并通过添加Function Block实现对Module实例对应的task的调用,结果如图10所示。
图9 PLC程序
图10 调用结果
5.结束语
在工业控制集成开发环境中利用C/C++实现相应的算法,并利用模块化封装,可以大大提升代码利用率,在计算机控制环境模式下大大提升控制性能。BECKHOFF公司提供的自动化控制集成开发环境TwinCAT 3,在Windows下实现C/C++模块的封装,并可通过PLC实现对C/C++模块的调用。在满足实时性前提下,提高工业控制中算法的性能,为工业控制的实时性、可靠性和高性能提供了新的途径。
参考文献
[1]胡振豪,左小五,万红平.工业以太网EtherCAT的实时性研究[J].软件导刊,2018,17(02):179-181+185.
[2]闫高斌,王军,王金涛.面向工业无线控制网络的业务传输机制[J].计算机工程与设计,2017,38(11):3007-3010+3117.
[3]郭秦.实时性容错以太网交换机的电路设计[D].北京交通大学,2017.
[4]南扬.EtherCAT工业以太网控制系统主站设计与实现[D].西安电子科技大学,2017.
[5]姚舜.工业机器人控制器实时多任务软件设计与实现[D].东南大学,2017.
[6]赵新亚.网络实时通信技术在工业控制上的研究[J].科技经济导刊,2017(06):29.
[7]李侃.工业无线控制网络中的实时性问题研究[J].科技视界,2015(26):332+341.
[8]袁熹.高可靠网络中实时性保障技术研究与应用[D].南华大学,2015.
[9]杨明.工业以太网实时任务调度算法的研究[D].浙江理工大学,2015.
[10]邓尚伟.工业以太网实时通信技术及进展[J].中国新通信,2015,17(03):24.
论文作者:孟勇,左根明,唐晨,李恬
论文发表刊物:《电力设备》2018年第23期
论文发表时间:2019/1/2
标签:模块论文; 实时论文; 如图论文; 所示论文; 环境论文; 工业论文; 语言论文; 《电力设备》2018年第23期论文;