IEC61131-3 PLC编程入门(4) - 任务Task(PLC逻辑代码执行基础)

发表时间:2019-10-31 15:19作者:翌控科技网址:http://www.nxtrol.com/logiclab_manual_04.html

接下来几个章节,我们一起来学习IEC61131-3标准中重要的一些基础概念,这也是从传统PLC切换到目前支持IEC61131-3标准的PLC的必经之路。


在此之前我们首先看看IEC国际电工委员会对PLC(Progammadble Logic Comtroller)可编程逻辑控制器的书面定义:


可编程序控制器是一种数字运算操作的电子系统,专为在工业环境下应用而设计;它采用一类可编程的存储器,用于其内部存储程序,执行逻辑运算、顺序控制、定时、计数和算术操作等面向用户的指令;并通过数字式或模拟式输入/输出控制各种类型的机械或生产过程。


简单来说,PLC就是一台包含了处理器的运算设备,可以通过指定的逻辑编程方式来实现输入以及输出信号的处理。更形象一点,PLC好比我们的大脑在不断进行如下过程,接受外界的信息(接收外部信号),进行思考(通过编程的逻辑进行运算),做出动作响应(控制信号输出):

04_01.png


每种PLC设备都有对应的逻辑编程工具,并且最新的编程工具均支持IEC61131-3标准,例如西门子公司的STEP7 Microwin到现在最新的STEP7 V11 - TIA Portal;三菱公司的GX Developer到现在的GX Works3;欧姆龙公司的CX-Programmer到现在最新的Sysmac Studio;施耐德公司的Somachine系列;贝加莱公司的Automation Studio;倍福公司的TwinCAT3


当然回归到PLC的本质,其主要工作过程就是不断重复循环执行下面流程:

  1. 读输入信号

  2. 执行PLC逻辑代码

  3. 写输出信号

04_02.png


因此面向传统的PLC进行编程,我们将整个对象的工艺通过逻辑方式进行开发,并且放入在PLC的主循环中进行执行,对于一些时间要求更严格的场合,传统PLC可以通过中断的方式进行实现。从软件设计角度来说,这种方式的确比较有效,但是也存在一些并不重要的应用逻辑占用了大量的处理器运行时间,并且应用逻辑设计的层次不清晰,面对更复杂的应用会造成逻辑设计难度大量增加。


为了面对更加复杂的工业应用场合,早在90年代初由PLCopen组织提出的IEC61131-3标准就借鉴了计算机领域的相关技术概念,提出在PLC架构中实现多任务的思路,并且不同任务之间可以进行优先级抢占,高优先级任务优先执行,而低优先级任务需要等待高优先级任务执行完才可以继续执行。这样在面对更复杂的应用场合,可以通过多个任务的规划实现更优的应用逻辑开发架构。


任务(Task)基本概念


回归到本章节需要介绍的概念 - 任务(Task)。任务对于PLC来说,到底是什么含义?如果熟悉C/C++以及操作系统概念的朋友们就比较容易理解了,IEC61131-3标准中任务(Task)与操作系统上的任务(Task)/线程(Thread)是一致的,可以执行对应的代码,具有优先级,可以相互根据优先级大小来抢占。


我们可以这样来思考任务(Task)的概念,还是以我们日常工作开始分析,一台支持多任务架构的PLC就像我们自己正在进行日常的工作,同一时间我们只能进行一个工作内容,但是不同的角色交给我们的任务是有优先级的,我们要及时响应高优先级的角色分配的工作,如下面的示例:

04_03.png


对于仅仅了解传统PLC的朋友们来说,任务(Task)就是PLC中执行逻辑的一个基础单元,任何PLC逻辑都需要放在任务(Task)上才可以执行,不同类型的任务(Task)具有其特定的执行特性,而与这些不同任务(Task)关联的PLC逻辑也会具有对应的执行特性,重要的逻辑工作可以使用更高优先级的任务,而不是太重要的工作则可以放在低优先级任务中执行。例如在LogicLab中具有如下几种任务类型:

  1. 周期Cyclic任务

    按照指定周期严格定时执行的任务,优先级一般由OEM厂商预先定义。所有运行在该任务下的程序Program会按照顺序根据周期任务调度执行,当执行完该任务下所有程序时,该任务将进入休眠状态等待下一次定时周期重新执行。

  2. 单次Single任务

    根据特定情况单次执行的任务。例如boot任务只会在系统启动时执行一次,由OEM厂商定义的中断或者同步任务,优先级较高,在特定的时间点会被调用。在IEC61131-3标准中,该任务等同为Event任务,Single名称则更加形象容易理解。


  3. 后台Backgroud任务

    后台循环任务,属于特殊类型的周期Cyclic任务,没有特定周期,优先级较低,类似于传统PLC的主循环,一般用于完成对实时性以及执行时间要求不高的工作,任何的Cyclic以及Single任务都可以打断该任务的执行从而优先获得PLC的执行,从而Cyclic以及Single任务可以根据优先级获得更高的实时。

其实我们可以看出,IEC61131-3标准中定义的多任务(Task)概念基本是在传统的PLC系统上做了扩展而已,传统PLC的主循环对应于IEC61131-3Background后台任务,而中断对应于Single任务,IEC61131-3额外扩展了Cyclic周期任务。


为了更好让应用人员稳定可靠应用多任务的框架,使用LogicLab解决方案开发PLCOEM厂商会定义好可使用的任务,并且对任务可配置的参数进行限定,这样更有利于使用LogicLab编程工具的应用工程师从传统PLC切换到LogicLab系统的PLC上,不同的控制器类型可能根据实际情况开放不同的任务。


LogicLab中的IEC61131-3任务类型


例如在仿真平台VPLC1上,开放的任务类型如下:

- Fast周期Cyclic任务,可以设置周期参数

- Slow周期Cyclic任务,固定周期为100ms

- Init单次Single任务,PLC工程初始化时执行

04_04.png



在树莓派PLC上,开放的任务类型如下:

- Fast周期Cyclic任务,可以设置周期参数

- Slow周期Cyclic任务,固定周期为100ms

- Background后台Backgroud任务,优先级最低,当前PLC没有执行其他任务时才执行

- Boot单次Single任务,PLC启动时执行

- Init单次Single任务,PLC工程初始化时执行

- ECAT_Resync单次Single任务,与EtherCAT主站任务周期同步执行

- ECAT_Resync单次Single任务,EtherCAT主站状态发生改变时执行

04_05.png



如果您使用的是采用LogicLab解决方案的其他OEM厂商的PLC产品,请参阅该产品帮助手册中对支持的任务(Task)描述。


IEC61131-3多任务执行案例分析


我们将以一个简单的例子分析多任务之间的优先级抢占与周期任务调度,这里我们以Fast任务以10ms周期运行程序A,B,另外一个Background任务运行程序C,D为例,简单分析IEC61131-3标准中多任务之间的关系。


当前PLC系统设计调度周期为1ms,因此周期Cyclic任务一般最快可以设置为1ms的任务周期。在本例子中Fast任务以10ms为周期执行程序A,B,可以看到每个Fast执行周期,运行完程序A,B后,Fast任务便进入休眠状态,释放处理器资源,此时低优先级的Background才可以执行程序C,D


当Background任务第一次执行程序D时,此时PLC系统时间已经到了10msFast任务需要开始执行,因此PLC系统需要根据任务优先级判定Fast任务应该更优先得到执行,因此Fast任务抢占了Background任务的处理器资源,并且可以严格按照10ms的周期执行,从而保证了程序A,B的实时性。


如下图所示:

04_06.png


根据我们经验总结,针对一般的小型PLC应用场合,一个周期任务,后台任务,若干中断Single任务一般都可以满足实际的现场应用需求。中大型PLC系统控制对象更复杂,I/O基本上使用到1000点以上,因此为了更好对工业现场对象进行控制,需要更深入规划多个任务分别执行不同的控制逻辑。因此IEC61131-3标准定义的多任务系统实际可以适应从小型到大型控制系统的PLC控制需求。


LogicLab任务与程序关联以及参数设定

我们可以在LogicLab中通过很简单的操作将程序与对应的任务关联在一起,从而由指定的任务来执行对应的程序逻辑,可以直接拖拽程序到指定的任务中,如下图所示:

04_07_p.png


也可以通过右键菜单在任务下面添加程序,如下图所示:

04_08_p.png



一般情况下,在LogicLab中所有的任务都是由OEM厂商预先定义完毕,在PLC系统启动时,所有的PLC任务将会被启动,运行过程中不再动态进行任务分配,提供了PLC系统的稳定性,如果PLC任务下面没有程序,那么该PLC任务将不会执行任何逻辑代码。任务参数可以进行有限的调整,并不是可以随意调整为非法的值,而是在OEM厂商限定的范围内进行调整,这样可以达到最佳的系统稳定性,如下树莓派PLC中任务属性中可以有限调整FastSlow任务的周期参数,其他任务参数不可调整:

04_09_p.png


本章小结:


在本章节中,我们将IEC61131-3标准的PLC与传统PLC对比,一起学习了任务(Task)概念,了解到多任务的PLC执行逻辑代码的基础,并且也学习如何在LogicLab编程工具中如何管理任务相关的参数。学习多任务概念为我们将来更深入应用IEC61131-3编程打下了良好的基础,在实际现场应用调试,诊断以及优化控制逻辑中占据比较重要的位置。

关注我们
产品中心
联系我们

服务电话:021-64190729

                 13764507241


咨询邮箱:support@nxtrol.com

关注我们微信公众号
获得最新技术与资讯