背景技术
自从1969年发明并运用了第一台PLC以来,PLC作为工业控制的核心部分,在各种领域得到了广泛的应用,如:火车信号灯的控制、电梯控制、供电***自动控制、机床逻辑控制等。经过在自动控制领域的多年应用,传统PLC技术已十分成熟,凭借其运行的可靠性和稳定性,在工业控制中得到了广泛的应用,成为了自动控制领域的一大利器。
但是,传统的PLC依赖特定的软件和硬件,结构封闭,难以对其功能进行更改,开放性不足,机型互不相容,维修困难,编程标准不统一,价格昂贵等缺点,严重制约了其发展。同时,以微处理器为核心的自动化***虽然发生了巨大的变化,例如从早期的PLC***发展到今天的PLC***,但是近些年芯片水平的不断提高,使得自动化控制***的更新落后于硬件的发展速度。
随着计算机的迅速发展,以及自动控制技术、网络技术以及信息技术等不断的提高,在各种控制领域中对开放式的控制***(控制器)的需求进一步增强,使得传统的硬PLC的弊端愈加凸显。在此背景下,一些具有远见的PLC生产商,为了提高市场竞争能力,提出了“软PLC”的构想。
软PLC不依赖于特定的硬件,以通用的硬件平台或控制卡作为硬件基础,基于各种开放式的工业计算机,依托软件的形式,实现PLC的各种功能,它是一种软逻辑控制***。它有如下优点:
1.体系开放,不依赖于特定的硬件,结构紧凑、配置灵活,解除了硬件设备对PLC发展的制约,同时可以根据功能的需要,可以灵活的拓展。
2.性能强,最大限度的利用PC机的各种资源,使得PLC的性能大幅提高。例如,软PLC的数据计算使用的都是PC机的CPU,可以计算一些更复杂的数据类型,极大的提升了数据的计算速度。
3.用户程序可以直接在PC机或工控机上进行设计,然后直接用于***的控制,同时软PLC也具有良好的人机界面,简单易学和强大的网络通讯能力。
发明内容
为克服上述现有技术中的不足,本发明目的在于提供一种基于X86平台的软PLC***。
为实现上述目的及其他相关目的,本发明提供的技术方案是:一种基于X86平台的软PLC***,其特征在于:包括底层内核和上层应用两个部分;
所述底层内核包括软PLC内核、PLC模拟器和判分内核,所述软PLC内核用于对传统PLC进行模拟,并完成存储、指令读取、解释等功能;所述PLC模拟器用于运行所述软PLC内核以使PLC的各种功能得以在PC端实现;所述判分内核用于对PLC程序和接线的实验结果进行查看;
所述上层应用包括PLC实验模拟仿真器和PLC自动化测试***,所述PLC实验模拟仿真器用于对PLC实验进行模拟;所述PLC自动化测试***用于对PLC程序和接线的验证;
所述上层应用基于Socket与所述底层内核进行通讯,所述上层应用与所述底层内核的协议规范依赖于自定义的交互语言,所述交互语言用于通讯以及对所述PLC实验模拟仿真器和所述判分内核进行配置。
优选的技术方案为:基于所述判分内核,还开发了判分程序,所述判分程序遵循所述PLC自动化测试***的API规范,用于对所述PLC自动化测试***中特定的语言进行判分;同时,符合所述PLC自动化测试***的API,可以对不同的语言编写不同的判分程序,从而接入所述PLC自动化测试***。
优选的技术方案为:所述软PLC内核包括存储器和控制器,所述控制器通过调用解释器来对所述存储器中存储的内容进行操作,以模拟传统PLC进行周期扫描,从而完成对单个扫描周期的运行。
优选的技术方案为:所述软PLC内核的配置文件中配置了不同语句对应的处理程序,当所述解释器读取到未知命令时会根据配置文件进行查找对应的处理程序,并通过Socket传输序列化的存储器数据以及运行的命令;对应的,处理程序接收到所述解释器传递的内容时,则可以进行解析、运行,并最终将运行结果反映在所述存储器中,再通过Socket返回给所述解释器。
优选的技术方案为:所述交互语言的结构如下:
关键字1start
关键字1.1值
关键字1.2start
关键字1.2.1值
关键字1.2end
关键字1end
关键字2start
关键字2.1值
关键字2end
所述交互语言每个上级关键字包含了若干个下级关键字;所述关键字分为两类,第一类是域配置关键字,由关键字+start开始,关键字+end结束,表示这个区域对应了某一块的数据;第二类是值配置关键字,若一个关键字后有数个值,则值与值之间用空格分开,值关键字的配置说明了在外部域配置关键字所对应的配置数据中具体数据的具体值;并且每个关键字仅在它相应的级中生效。
优选的技术方案为:所述自动化测试***采用RESTFUL架构,并使用SSM+Vue编写。
一个完整的软PLC***需要能够对PLC程序进行编译、运行、仿真、自动化测试,从而完成整个PLC的学习、测试、运行流程。在现有的软PLC方案中,仅仅是实现了这些功能的一个或几个,但是却难以形成一个完整的体系。同时,这些软PLC通常针对某一个特定品牌的PLC进行模拟,或者运行于某个特定的***上,缺乏灵活性。
而本软PLC***完成了上述的功能,并形成了一个完整的软PLC***。同时,该***采用模块化设计,将软PLC内核与外部程序进行了分离,使用自行设计、研发的交互语言进行配置与交互,使得***灵活性大大提升。在PLC语言方面,***使用三菱Q系列PLC所使用的指令集为范例,作为内核与外部PLC程序的中间语言,并使用JAVA完成软PLC内核,使其兼容性、可移植性大大提升。
具体实施方式
实施例:
如图1所示,本申请提出的软PLC***包含底层内核和上层应用。底层内核包括软PLC内核、PLC模拟器和判分内核,上层应用包括PLC实验模拟仿真器和PLC自动化测试***。上层应用和底层内核的协议规范依赖于自定义的交互语言,交互语言用于通讯以及对判分内核、PLC实验模拟仿真器进行配置。
软PLC***的核心是软PLC内核。PLC模拟器与判分内核则是对软PLC内核的封装,调用了软PLC内核的功能。交互语言是受到Basic的启发,并结合整个***的需求,设计并实现的一种交互、配置语言。PLC实验模拟仿真器通过交互语言与底层内核进行通讯,从而实现对PLC实验的模拟与仿真。同时,这些部件也可以利用交互语言进行配置。在模拟与仿真的基础上,PLC自动化测试***是对编写、仿真、调试的PLC程序以及接线进行验证的工具,其通过与不同的判分程序结合,完成对PLC程序及接线的测试以及判分。
下面结合附图对各个模块进行详细说明:
1.底层内核
如图2所示,为软PLC内核的体系结构。软PLC内核是以存储器为核心,通过调用解释器来对存储器进行操作的控制器。用户的输入与输出都会存储在存储器中。
1.1存储器
如图3所示,存储器参照了传统PLC的存储器,结合PC机自身特性,对各类软元件及内部存储器进行了模拟。在模拟的过程中,参照传统PLC的数据模型,使其对应至X86平台的数据类型,例如原有的X软元件是由位组成的,对应X86架构中的数据类型则是布尔型;而原有的D软元件是由8位组成的,对应X86架构中的数据类型则是整型。这些单个的软元件通过数组的组织方式组成了软元件组。存储器中的每个部分都具有深拷贝方法,这使得外部程序可以获取到任一时刻时软PLC内核存储器的副本,从而使得在调试的过程中可以实现逐语句调试,甚至逐语句回退。
1.2解释器和控制器
如图4所示,为控制器的运行过程。解释器通过解释指令对存储器中存储的内容进行操作,而控制器则通过对解释器进行操作,并模拟传统PLC进行周期扫描,从而完成软PLC内核对单个扫描周期的运行。
软PLC内核作为PLC模拟器与判分内核的基础,有着明确的软件边界,它仅仅完成运行单个扫描周期的任务,并预留接口以及与外部交互的方法,使得软件耦合度降低,对于外部的封装而言,PLC模拟器与判分内核可以根据其特性对其进行调用,并实现自己的功能。
软PLC内核与外部交互有两种方案,即API调用与回调函数。调用软PLC内核的外部程序可以通过API对软PLC内核进行操作,并直接读取软PLC内核中的信息。同时,外部程序还可以通过引入回调函数,每当软PLC内核运行一行或者一个周期后,软PLC内核会自动调用回调函数,运行函数中的内容。
1.3插件生态
在解释器中,为使整个软PLC内核可以充分运用PC机的逻辑运算能力,软PLC内核实现了整个插件生态。在软PLC内核的配置文件中,配置了不同语句对应的处理程序,当解释器读取到未知命令时,会根据配置文件进行查找其对应的处理程序,并通过Socket传输序列化的存储器数据以及运行的命令。而对应的,处理程序接收解释器传递的内容,则可以对其进行解析、运行,最终将运行结果反映在存储器中,并通过Socket返回给解释器。如此一来,通过插件的方式,软PLC内核可以完成传统PLC无法完成的逻辑运算。
2.交互语言
如图5所示,为该交互语言的解析示意图。
交互语言的结构如下:
关键字1start
关键字1.1值
关键字1.2start
关键字1.2.1值
关键字1.2end
关键字1end
关键字2start
关键字2.1值
关键字2end
该交互语言类似于目录章节的结构,每个上级关键字包含了若干个下级关键字。
关键字分为两类,第一类是域配置关键字,由关键字+start开始,关键字+end结束。这说明了这个区域对应了某一块的数据。第二类是值配置关键字,如果一个关键字后有数个值,则值与值之间用空格分开。值关键字的配置说明了在外部域配置关键字所对应的配置数据中具体数据的具体值。
每个关键字仅在它相应的级中生效。这意味着关键字2.1无法在关键字1的区域中使用。
该交互语言具有如下优势:
1)纯文本,无需编译,可读性好。
2)解析的结构与逻辑简单,可以轻松扩展自定义关键字,可定制化强。
3)基本满足绝大多数配置与交互场景。
3.PLC模拟器
如图6所示,为PLC模拟器与传统PLC运行过程对比图。
如图7所示,为PLC模拟器的扫描周期示意图。
本申请中的PLC模拟器通过创建、配置并调用软PLC内核,并对其加以控制,从而模拟出传统PLC的运行过程。PLC模拟器与软PLC内核具有明确的边界,软PLC内核完成了PLC每个扫描周期所需要进行的工作,PLC模拟器在扫描周期开始前进行用户输入,并在其扫描周期结束后进行回调与后处理,并重复进行这一操作,使得PLC模拟器得以如同现实中的PLC一样运行。
4.判分内核
如图8所示,为本申请中判分用例的结构示意图。
如图9所示,为本申请中判分过程示意图。
PLC判分是自动化测试的重要组成部分,其包含使用交互语言进行配置的判分用例,并针对通过交互语言传入的程序和接线,通过创建软PLC内核,并使用其结构,对其进行操作、运行,从而对判分用例进行评分,判断其对错。
5.PLC实验模拟仿真器
如图10所示,为本申请中PLC实验模拟仿真器结构示意图。
在PLC实验中,通常是由简单的外部电路与PLC相连接,通过PLC的逻辑运算能力,对外部电路进行控制。本申请中,PLC实验模拟仿真器通过交互语言与PLC模拟器和判分内核进行通讯,完成对整个PLC实验的模拟。
5.1针脚
如图11所示,为本申请中针脚值改变示意图。
如图12所示,为本申请中针脚发生连接时,连接过程示意图。
对于电路而言,各元件与外界的连接是通过针脚构成的。针脚具有输入与输出两种模式,电路间信息传递的实质是电信号在针脚之间流动。在软件层面上,对针脚的模拟实际是将针脚抽象为类,输出针脚可以主动向其它针脚传递信息,输入针脚可以接收输入信息,并通知其所属的父元件其值发生改变。
5.2元件
实验所使用的元件采用动态渲染的方式呈现在程序中,元件(外部设备)结构如图13所示。
不同的元件可以对针脚的值做出不同的反应,当针脚的值发生改变时,针脚类会对其父类的PinChanged方法进行调用,从而使得父元件对针脚变化进行处理。
5.3连线
在元件中,存在可以被用户进行手动连接的特殊元件,这些特殊元件为接口元件。接口元件通过连线适配器响应用户的点击事件,连线适配器通过对点击接口的类型以及点击的情况对其进行连线、断开连线等操作。如图14所示,为本申请用户连线示意图。
6.自动化测试***
自动化测试***采用RESTFUL架构,使用SSM+Vue编写。为了使得自动化测试***可以匹配多个PLC语言,因此使用了RESTFUL架构,使得前后端进行了适当的分离,一个后端可以对应多个判分程序。只要判分程序符合后端API接口,就可以耦合入整个自动化测试***,该自动化测试***交互结构如图15所示。
7.外部输出
由于软PLC内核具备逻辑运算的能力,并且易于与其它程序结合,因此,通过交互语言可以传递序列化之后的PLC内核中的存储器内容。在不同的硬件平台中,通常可以利用串口在硬件与硬件之间通信,而宿主机可以通过读取、解析序列化后的存储器内容,并将其通过串口通讯传递给外部硬件,最后外部硬件可以将实实在在的电信号输出给外部电路,投入生产。其中,控制整个逻辑的内核通常运行在实时***中(如LinuxwithRT-Patch),整个过程的结构如图16所示。
进一步的,图17为该软件的仿真界面示意图。
进一步的,图18为该软件的用例测试界面。
进一步的,图19为该软件模拟交通信号灯实验示意图。
进一步的,图20为该软件模拟电机控制实验示意图。
进一步的,图21为该软件自动化测试题集界面示意图。
进一步的,图22为该软件自动化测试题集提交测试答案的界面示意图。
进一步的,图23为该软件自动化测试结果界面示意图。
本***将软PLC***分成了软PLC内核、交互语言、PLC模拟器、判分内核、PLC实验模拟仿真器(仿真***)和自动化测试***六个模块,最终完成了一个完整的,可扩展性强,跨平台的软PLC***。
在运用本***的情况下,对于工业生产环境的用户可以利用整个***完成PLC程序与实验的仿真与自动化测试,大大简化了工业生产中对PLC程序的编写、调试、测试的流程,加快生产进度,节约生产成本。而对于PLC的学习者,也可以克服PLC硬件价格高、占地面积大的劣势,仅使用一台电脑就可以完成对PLC程序的仿真与验证,完成PLC的学习。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神和技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。