CN106527335B - 一种支持协程功能的plc控制器 - Google Patents
一种支持协程功能的plc控制器 Download PDFInfo
- Publication number
- CN106527335B CN106527335B CN201611123603.6A CN201611123603A CN106527335B CN 106527335 B CN106527335 B CN 106527335B CN 201611123603 A CN201611123603 A CN 201611123603A CN 106527335 B CN106527335 B CN 106527335B
- Authority
- CN
- China
- Prior art keywords
- plc controller
- association
- bytecode
- journey
- virtual machine
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B19/00—Programme-control systems
- G05B19/02—Programme-control systems electric
- G05B19/04—Programme control other than numerical control, i.e. in sequence controllers or logic controllers
- G05B19/05—Programmable logic controllers, e.g. simulating logic interconnections of signals according to ladder diagrams or function charts
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Automation & Control Theory (AREA)
- Programmable Controllers (AREA)
Abstract
本发明提供一种支持协程功能的PLC控制器,包括:中央处理单元,存储器,电源模块,程式输入装置,输入输出回路;在中央处理单元中扩展了对程序协程功能的支持,包括:在用于所述PLC控制器编程的ST语言中加入协程的关键词,用于标记程序协程的起始和结束;用于所述PLC控制器编程的ST语言中加入协程基本操作的库函数的支持,PLC控制器编程的ST语言编译器独立编译各协程段,每一个协程拥有自己的寄存器上下文和栈;用于所述PLC控制器编程的ST语言编译器编译生成字节码,下载至PLC控制器,PLC控制器的字节码虚拟机执行此字节码;在PLC控制器字节码虚拟机中增加了对协程指令集的支持。简化了过程控制的编程复杂度,多任务执行的实时性、执行效率大大提升。
Description
技术领域
本发明涉及控制领域,特别是指一种支持协程功能的PLC控制器。
背景技术
在工业控制领域,从控制指令的发出,到控制指令的执行,中间往往需要延时。因此当一个指令执行后,要等待这个指令执行完毕才能执行下一个指令,这个过程称作阻塞。阻塞使控制器的效率和实时性大大降低。因此我们往往要采取非阻塞的编程策略,即当一个指令执行后,不必等待这个指令执行完毕才能执行下一个指令,但是这种情况下执行后续指令时要不停检查当前指令是否结束,否则会造成时序错误。这样编程的复杂性就增大了。
协程是一种用户级的轻量级线程。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。协程可以大大简化多任务并行执行的编程。比如,我们控制4台机械手的运动,当第一台机械手的控制指令下达后,这台机械手的协程被挂起;系统切换至等待指令执行的下一个协程控制;这样控制系统的效率和实时性就大大地提高了。同时,每台机械手的控制程序在一个协程之中,编程的复杂度也得到降低。
PLC控制器的IEC61131-3国际标准的编程语言包括图形化编程语言和文本化编程语言ST。然而标准ST语言不包含协程功能。
发明内容
鉴于协程功能在工业控制领域的重要性,本发明提出一种支持协程功能的PLC控制器,
包括:中央处理单元,存储器,电源模块,程式输入装置,输入输出回路;其特征在于,
在中央处理单元中扩展了对程序协程功能的支持,包括以下方案:
在用于所述PLC控制器编程的ST语言中加入协程的关键词,用于标记程序协程的起始和结束;
在用于所述PLC控制器编程的ST语言中加入协程基本操作的库函数的支持;
用于所述PLC控制器编程的ST语言编译器独立编译各协程段,每一个协程拥有自己的寄存器上下文和栈;
用于所述PLC控制器编程的ST语言编译器编译生成字节码,下载至PLC控制器,PLC控制器的字节码虚拟机执行此字节码;
在所述PLC控制器字节码虚拟机中增加了对协程指令集的支持。
进一步的,所述字节码虚拟机运行在一个实时操作系统的环境下,一个字节码虚拟机占用一个线程,这个系统下有独立于字节码虚拟机的线程对字节码虚拟机进行监视,并进行异常处理;此监视线程有独立于字节码虚拟机的寄存器上下文和栈,一旦字节码虚拟机异常,监视线程仍可正常运行,其对字节码虚拟机的监视和异常处理能正常运行。
进一步的,一个PLC控制器可以运行多个字节码虚拟机。
本发明的有益效果是:简化了过程控制的编程复杂度;多任务执行的实时性、执行效率大大提升。
附图说明
图1为协程调度切换原理图。
具体实施方式
PLC控制器的IEC61131-3国际标准的编程语言包括图形化编程语言和文本化编程语言(ST语言)。ST语言具有编程功能强大高效的特点,然而标准ST语言不包含协程功能。
要实现支持协程功能,必须先让ST语言编译器加入支持协程的功能。因此首先要在ST语言中加入协程的关键词,用于标记协程的起始和结束;同时在ST语言中加入协程基本操作的库函数的支持。在ST语言编译器编译时,要独立编译各协程段,每一个协程拥有自己的寄存器上下文和栈。
ST语言编译器编译生成字节码,字节码类似于在CPU上运行的机器码。把字节码下载至PLC控制器,PLC控制器的字节码虚拟机模拟CPU运行,执行此字节码。要实现在所述字节码虚拟机对协程的支持,就必须增加字节码虚拟机协程指令集;另外还必须将协程操作以库函数进行处理。
下面,结合一个具体的实施例来说明在ST语言中扩展协程的方法。
首先,在ST语言中增加TASK,END_TASK两个关键词标记协程的起始和结束。
如代码:
TASK taskA
……
END_TASK
TASK taskB
……
END_TASK
含义是标记2个协程,在ST语言编译器编译时,要独立编译各协程段,每一个协程拥有自己的寄存器上下文和栈,但是不同的协程可以有公共的全局变量。
增加Start(taskA),End(taskA),Yiled(taskA),Resum(taskA)几个函数进行协程的基本操作,编程用户调用这些函数就能实现协程功能,这些函数构成协程函数库。ST语言编译器按系统默认的库函数编译这些函数,这些函数编译成的字节码含有协程指令集指令,从而实现对协程的支持。因为字节码虚拟机是模拟CPU的运行机制,对协程的支持表现在协程拥有自己的寄存器上下文和栈,即字节码虚拟机为每一个协程定义了独立的上下文寄存器,并分配独立的栈空间;字节码虚拟机执行每一个协程程序就好比不同的PLC控制器执行他们独立的程序一样;协程调度切换时,字节码虚拟机将协程寄存器上下文和栈保存起来,在切回来的时候,恢复先前保存的寄存器上下文和栈。这种模拟的协程与真实的协程一样的原理,如图1所示,为协程调度切换原理图,字节码虚拟机增加了协程调度器,用于实现协程的调度,原理和C语言下的协程是一样的。
为了提高单片机的效率和安全性,PLC控制器字节码虚拟机运行在一个实时操作系统的环境下,一个字节码虚拟机占用一个线程,一个线程不会干扰另外线程,从而保证系统的安全性,同时也能让一个PLC控制器可以运行多个字节码虚拟机。另外,这个系统下有独立于字节码虚拟机的线程对字节码虚拟机进行监视管控,并进行异常处理;此监视线程有独立于字节码虚拟机的寄存器上下文和栈,一旦字节码虚拟机异常,监视线程仍可正常运行,其对字节码虚拟机的监视和异常处理能正常运行。这样一旦字节码虚拟机异常,整个单片机系统不会全面崩溃,系统的会保存关键数据,并从异常中自动恢复。
由于PLC控制器字节码虚拟机运行在一个实时操作系统的环境下,因此可以运行多个字节码虚拟机,只要PLC控制器有足够的内存空间运行这些字节码虚拟机并且在运行速度上能达到目标要求,这样就能模拟运行多个PLC控制器。
需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本发明的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本发明的不同方面的许多其它变化,为了简明它们没有在细节中提供。
另外,为简化说明和讨论,并且为了不会使本发明难以理解,在所提供的附图中可以示出或可以不示出与集成电路(IC)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本发明难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本发明的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本发明的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本发明。因此,这些描述应被认为是说明性的而不是限制性的。
尽管已经结合了本发明的具体实施例对本发明进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施例。
本发明的实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本发明的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (3)
1.一种支持协程功能的PLC控制器,包括:中央处理单元,存储器,电源模块,程式输入装置,输入输出回路;其特征在于,
在中央处理单元中扩展了对程序协程功能的支持,包括以下方案:
在用于所述PLC控制器编程的ST语言中加入协程的关键词,用于标记程序协程的起始和结束;
在用于所述PLC控制器编程的ST语言中加入协程基本操作的库函数的支持;
用于所述PLC控制器编程的ST语言编译器独立编译各协程段,每一个协程拥有自己的寄存器上下文和栈;
用于所述PLC控制器编程的ST语言编译器编译生成字节码,下载至PLC控制器,PLC控制器的字节码虚拟机执行此字节码;
在所述PLC控制器字节码虚拟机中增加了对协程指令集的支持。
2.根据权利要求1所述的支持协程功能的PLC控制器,其特征在于,所述字节码虚拟机运行在一个实时操作系统的环境下,一个字节码虚拟机占用一个线程,这个系统下有独立于字节码虚拟机的线程对字节码虚拟机进行监视,并进行异常处理;此监视线程有独立于字节码虚拟机的寄存器上下文和栈,一旦字节码虚拟机异常,监视线程仍可正常运行,其对虚拟机的监视和异常处理能正常运行。
3.根据权利要求1所述的支持协程功能的PLC控制器,其特征在于,一个PLC控制器可以运行多个字节码虚拟机。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611123603.6A CN106527335B (zh) | 2016-12-08 | 2016-12-08 | 一种支持协程功能的plc控制器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611123603.6A CN106527335B (zh) | 2016-12-08 | 2016-12-08 | 一种支持协程功能的plc控制器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106527335A CN106527335A (zh) | 2017-03-22 |
CN106527335B true CN106527335B (zh) | 2019-03-19 |
Family
ID=58342215
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611123603.6A Active CN106527335B (zh) | 2016-12-08 | 2016-12-08 | 一种支持协程功能的plc控制器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106527335B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109213591B (zh) * | 2017-06-30 | 2021-06-04 | 阿里巴巴(中国)有限公司 | 协程运行栈的分配方法和装置 |
TWI637277B (zh) * | 2017-10-27 | 2018-10-01 | 直得科技股份有限公司 | 標準程式語言腳本架構結合虛擬機的控制方法及程式產品 |
CN112905267B (zh) * | 2019-12-03 | 2024-05-10 | 阿里巴巴集团控股有限公司 | 虚拟机接入协程库的方法、装置及设备 |
CN112549023B (zh) * | 2020-11-25 | 2022-05-27 | 浙江同善人工智能技术有限公司 | 基于TCP socket接口工业机器人示教器模式与协程控制方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1636185A (zh) * | 2001-12-28 | 2005-07-06 | 东京威力科创迪拜思股份有限公司 | 逻辑计算系统和方法 |
CN101815984A (zh) * | 2007-10-05 | 2010-08-25 | 高通股份有限公司 | 错误的推测性更新的链接栈修复 |
CN102640112A (zh) * | 2009-12-28 | 2012-08-15 | 三菱电机株式会社 | 程序制作支援装置 |
KR20140031765A (ko) * | 2012-09-05 | 2014-03-13 | 엘에스산전 주식회사 | 데이터 처리 장치 및 데이터 처리 방법 |
JP2014119776A (ja) * | 2012-12-13 | 2014-06-30 | Azbil Corp | プログラミング方法および装置 |
CN104346224A (zh) * | 2013-08-05 | 2015-02-11 | 英特尔公司 | 使用组页面错误描述符来处理上下文切换和进程终止 |
CN104885092A (zh) * | 2012-11-13 | 2015-09-02 | 奥克兰服务有限公司 | 用于操作系统的安全系统和方法 |
-
2016
- 2016-12-08 CN CN201611123603.6A patent/CN106527335B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1636185A (zh) * | 2001-12-28 | 2005-07-06 | 东京威力科创迪拜思股份有限公司 | 逻辑计算系统和方法 |
CN101815984A (zh) * | 2007-10-05 | 2010-08-25 | 高通股份有限公司 | 错误的推测性更新的链接栈修复 |
CN102640112A (zh) * | 2009-12-28 | 2012-08-15 | 三菱电机株式会社 | 程序制作支援装置 |
KR20140031765A (ko) * | 2012-09-05 | 2014-03-13 | 엘에스산전 주식회사 | 데이터 처리 장치 및 데이터 처리 방법 |
CN104885092A (zh) * | 2012-11-13 | 2015-09-02 | 奥克兰服务有限公司 | 用于操作系统的安全系统和方法 |
JP2014119776A (ja) * | 2012-12-13 | 2014-06-30 | Azbil Corp | プログラミング方法および装置 |
CN104346224A (zh) * | 2013-08-05 | 2015-02-11 | 英特尔公司 | 使用组页面错误描述符来处理上下文切换和进程终止 |
Also Published As
Publication number | Publication date |
---|---|
CN106527335A (zh) | 2017-03-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106527335B (zh) | 一种支持协程功能的plc控制器 | |
CN102063286B (zh) | 程序流控制 | |
EP2169547A1 (en) | Compilation model for programmable logic controllers (PLC) | |
CN101976187B (zh) | 反编译过程中的堆栈跟踪方法、装置及反编译器 | |
CN105204913A (zh) | 一种在Android操作系统上运行Linux应用程序的方法及系统 | |
CN105164638A (zh) | 控制由计算系统执行的任务 | |
US20160091882A1 (en) | System and method of multi-core based software execution for programmable logic controllers | |
CN105137817B (zh) | 控制程序处理器的片上系统的控制程序执行方法 | |
EP3301526A1 (en) | Controller, control method, and program | |
CN106062648A (zh) | 控制器 | |
US9152454B2 (en) | Method for enabling sequential, non-blocking processing of statements in concurrent tasks in a control device | |
CN109983411A (zh) | 程序模块的流程控制 | |
US9547296B2 (en) | Method for operating an industrial controller and industrial controller | |
EP2733613B1 (en) | Controller and program | |
US9323242B2 (en) | Method for setting an operating status | |
CN102789206B (zh) | 机床数控中集中式和分布式控制混合的安全逻辑控制系统 | |
CN104597832B (zh) | 一种基于amba总线的plc程序调度器ip核 | |
CN114327628A (zh) | 分层控制方法、系统、终端设备及存储介质 | |
KR20040004617A (ko) | 컴퓨팅 시스템 | |
CN102141915B (zh) | 一种基于RTLinux的设备实时控制方法 | |
Rozov et al. | Adaptation of the process-oriented approach to the development of embedded microcontroller systems | |
US20220402121A1 (en) | Control and monitoring of a machine arrangement | |
JP7112058B2 (ja) | リアルタイム処理装置及びその作製方法 | |
CN104461566B (zh) | 一种基于对象实例的行为变体的jcop扩展实现方法 | |
US6941175B2 (en) | Method of operating an industrial controller |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |