发明内容
有鉴于此,本发明实施例提供一种PLC任务调度方法和装置,以实现PLC 进行多任务调度的调度机制。
为实现上述目的,本发明实施例提供如下技术方案:
一种PLC任务调度方法,包括:
检测中断调度任务注册时钟的中断状态;
当所述时钟的中断到来时,触发中断调度任务获取各个PLC中IEC任务的调度状态;
基于所述调度状态判断是否存在满足调度条件的IEC任务;
当存在满足调度条件的IEC任务时,控制调度器调度满足条件的IEC任务。
可选的,上述PLC任务调度方法中,所述基于所述调度状态判断是否存在满足调度条件的IEC任务,包括:
判断与各个所述IEC任务相匹配的调度码的类型;
当与所述IEC任务相匹配的调度码的类型为第一类型时,表明所述IEC 任务满足调度条件,否则,表明所述IEC任务不满足调度条件;
其中,所述调度码为用于表征所述IEC任务是否满足调度条件的二进制码。
可选的,上述PLC任务调度方法中,当所述IEC任务为周期型任务时,且当所述PLC中周期型任务的预设运行周期TRunCycle的时长大于所述IEC 任务的执行时间TRunTime时,所述IEC任务的调度码的计算规则为:
基于公式TCount=TRunCycle/TScheduleInterval计算得到所述IEC任务的调度计数量TCount,其中,所述TScheduleInterval为中断调度任务的调度间隔时间;
依据公式TRunCount=TRunTime/TScheduleInterval和TSleepCount= TCount–TRunCount,计算得到TSleepCount,将所述TSleepCount的值作为所述IEC任务的调度码,所述TSleepCount的值作为值为0时,表明所述IEC 任务的调度码的类型为第一类型。
可选的,上述PLC任务调度方法中,当所述PLC中周期型任务的预设运行周期TRunCycle的时长小于所述IEC任务的执行时间TRunTime时,所述 IEC任务的调度码的计算规则为:
基于公式TCount=TRunCycle/TScheduleInterval计算得到所述IEC任务的调度计数量TCount,其中,所述TScheduleInterval为中断调度任务的调度间隔时间;
依据公式TRunCount=TRunTime/TScheduleInterval和TSleepCount= TCount–(TRunCount%TCount),计算得到TSleepCount,将所述TSleepCount 的值作为所述IEC任务的调度码,所述TSleepCount的值作为值为0时,表明所述IEC任务的调度码的类型为第一类型。
可选的,上述PLC任务调度方法中,当所述IEC任务为事件型任务时,当满足与所述IEC任务相匹配的调度的条件时,所述IEC任务对应的调度码的类型切换为第一类型1,当所述IEC任务执行完毕后,所述IEC任务对应的调度码切换至第二类型0。
可选的,上述PLC任务调度方法中,当所述IEC任务为状态型任务时,当与所述IEC任务相匹配的预设条件保持在满足状态时,所述IEC任务对应的调度码的类型切换为第一类型1,当所述与所述IEC任务相匹配的预设条件保持在不满足状态时,所述IEC任务对应的调度码切换至第二类型0。
一种PLC任务调度装置,包括:
时钟状态判断单元,用于检测中断调度任务注册时钟的中断状态;
调度状态判断单元,用于当所述时钟的中断到来时,触发中断调度任务获取各个PLC中IEC任务的调度状态;基于所述调度状态判断是否存在满足调度条件的IEC任务;
调度执行单元,用于当存在满足调度条件的IEC任务时,控制调度器调度满足条件的IEC任务。
可选的,上述PLC任务调度装置中,所述调度状态判断单元在基于所述调度状态判断是否存在满足调度条件的IEC任务时,包括:
判断与各个所述IEC任务相匹配的调度码的类型;
当与所述IEC任务相匹配的调度码的类型为第一类型时,表明所述IEC 任务满足调度条件,否则,表明所述IEC任务不满足调度条件;
其中,所述调度码为用于表征所述IEC任务是否满足调度条件的二进制码。
可选的,上述PLC任务调度装置中,还包括:
IEC任务调度码配置单元,用于当所述IEC任务为周期型任务时,且当所述PLC中周期型任务的预设运行周期TRunCycle的时长大于所述IEC任务的执行时间TRunTime时,依据以下规则配置所述IEC任务的调度码:
基于公式TCount=TRunCycle/TScheduleInterval计算得到所述IEC任务的调度计数量TCount,其中,所述TScheduleInterval为中断调度任务的调度间隔时间;
依据公式TRunCount=TRunTime/TScheduleInterval和TSleepCount= TCount–TRunCount,计算得到TSleepCount,将所述TSleepCount的值作为所述IEC任务的调度码,所述TSleepCount的值作为值为0时,表明所述IEC 任务的调度码的类型为第一类型。
可选的,上述PLC任务调度装置中,当所述PLC中周期型任务的预设运行周期TRunCycle的时长小于所述IEC任务的执行时间TRunTime时,所述 IEC任务调度码配置单元依据以下规则配置所述IEC任务的调度码:
基于公式TCount=TRunCycle/TScheduleInterval计算得到所述IEC任务的调度计数量TCount,其中,所述TScheduleInterval为中断调度任务的调度间隔时间;
依据公式TRunCount=TRunTime/TScheduleInterval和TSleepCount= TCount–(TRunCount%TCount),计算得到TSleepCount,将所述TSleepCount 的值作为所述IEC任务的调度码,所述TSleepCount的值作为值为0时,表明所述IEC任务的调度码的类型为第一类型。
基于上述技术方案,本发明实施例提供的上述方案,利用当前操作系统中的中断和多任务的技术,实现一个中断调度任务和其它被调度的任务(IEC 任务),中断调度任务通过调度状态来决定被调度任务(IEC任务)的调度时机,进而唤醒被调度任务,周而复始,实现PLC的多任务调度机制。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请提供了一种适用于PLC的任务调度方法,参见图1,方法包括:
步骤S101:检测中断调度任务注册时钟的中断状态;
在本申请实施例公开的技术方案中,中断调度任务注册时钟中断,作为时钟中断处理函数,该时钟可以为周期为1ms的时钟信号或者是其他时长的时钟信号,实时对该时钟信号进行监测,判断时钟中断是否到来;
步骤S102:当所述时钟的中断到来时,触发中断调度任务,获取各个PLC 中IEC任务的调度状态;
所述IEC任务即,IEC61131-3软件模型中的任务,由用户组态完成特定功能,IEC任务是整个PLC控制系统的核心,他的可靠性最为重要,IEC任务调度的关键是保证系统稳定性和实时性的同一。
在本步骤中,当时钟中断到来时,所述PLC会调用PLC中的TMHandle 任务(中断调度任务)进行处理,所述TMHandle任务为中断触发执行任务,其被调用后会获取所述PLC中各个IEC任务的调度状态,所述调度状态,记为用于判断所述IEC任务是否能够被执行的状态。
步骤S103:基于所述调度状态判断是否存在满足调度条件的IEC任务;
本步骤中,通过判断每个IEC任务所对应的调度状态标识,来判断是否满足调度条件的IEC任务,当某个IEC任务所对应的调度状态标识的为第一预设类型时,例如,其调度标识为1,则表明该IEC任务能够被调度执行,如果调度状态标识的类型不为第一预设类型时,例如,其调度标识为0,表明该 IEC任务不满足调度条件,
步骤S104:当存在满足调度条件的IEC任务时,控制调度器调度满足条件的IEC任务。
中断调度任务TMHandle作为时钟中断处理函数,必然要求中断调度任务执行时间要短,否则会拖累其它中断的处理和整个PLC系统的时效性。对于中断调度任务TMHandle的控制IEC任务能被调度的机制,非常符合生产者消费者模型,当中断调度任务TMHandle检测IEC任务满足调度条件时,使能调度状态,调度并执行满足调度条件的IEC任务,当IEC任务调度完成后,中断调度任务TMHandle等待下一次的唤醒(时钟的中断到来)。
可见,在本申请实施例提供的PLC任务调度方法中,主要利用当前操作系统中的中断和多任务的技术,实现一个中断级的调度任务(TMHandle任务) 和其它被调度的任务(IEC任务),调度任务(TMHandle任务)通过调度状态来决定被调度任务(IEC任务)的调度时机,进而唤醒被调度任务,周而复始,实现PLC的多任务调度机制。
在本申请上述实施例公开的技术方案中,所述PLC中需要执行的IEC任务的类型有多重,其总体可以分为,周期型任务,事件型任务,状态型任务以及全速运行的任务,其中,所述周期型任务指的是,任务以一定的周期循环运行,每隔固定的周期运行一次,所述事件型任务是任务以某个具体的事件作为唤醒机制,如某个输入点产生一个上升沿或下降沿等,就会立即让这个任务运行,运行完毕后,再等待下一次事件的产生,所述状态型任务是任务判定某个状态是否满足,满足则调度任务执行,如果该状态一直满足条件则任务一直运行,全速运行的任务就是一直运行的任务。在本申请实施例公开的技术方案中,会预先为每一个调度任务分配一个调度码,所述调度码用于表征所述调度任务是否满足调度条件,具体的,在本申请上述实施例公开 的技术方案中,所述基于所述调度状态判断是否存在满足调度条件的IEC 任务,具体可以包括:获取与各个所述IEC任务相匹配的调度码,并判断各个调度码的类型,当调度码的类型为第一类型时,表明所述调度码对应的调度任务满足调度条件,当调度码的类型并非为第一类型时,表明所述IEC任务不满足调度条件,在本申请实施例公开的技术方案中,所述调度码仅为一状态标识,其类型可以依据用户需求自行设定,例如,在本申请实施例公开的技术方案中,所述调度码为二进制码,更为具体的,其可以为一个由0或1 构成的二值信号,即,该调度码的值可以为1或0,当其为1时,认为调度码的类型为第一类型,在本申请实施例公开的技术方案中,每个IEC任务的调度码的初始量均为0,将各个IEC任务阻塞在各自的调度码上,等待调度状态成立(调度码变为第一状态时),中断调度任务在判定各IEC任务满足调度条件时,获取调度码,此时,调度器CS就会由进程池中立即唤醒该调度码对应的IEC任务。
在本申请实施例公开的技术方案中,中断调度任务需要维护各IEC任务的调度状态,便于在合适的时机控制IEC任务能被调度器调度,调度状态的控制对于不同类型的IEC任务的检测条件不一样。
针对于周期型任务而言,周期型任务以一定的周期运行,这个周期包含自身的执行时间图2所示,例如,周期型任务的运行周期TRunCycle为8秒,其执行时间为TRunTime为4秒,如图2中高低电平信号,高电平持续的时间为4秒即为周期型任务的执行时间,即满足如下公式TRunTime< TRunCycle,周期性任务执行完毕后,会进行一段时间的休眠状态,等待下一次唤醒,休眠的时间为TSleep=TRunCycle–TRunTime。
针对这种周期型任务,中断调度任务控制的机制为,在创建IEC任务时,先得到该IEC任务的调度计数量为TCount=TRunCycle/TScheduleInterval。其中,所述TScheduleInterval为中断调度任务的调度间隔时间。IEC任务运行结束后,计算TRunCount=TRunTime/TScheduleInterval,同时计算 TSleepCount=TCount–TRunCount。此时,将所述TSleepCount作为该调度任务的调度码,当IEC任务运行完毕后,就阻塞在调度码TSleepCount上,中断调度任务每执行一次,对TSleepCount做减1操作,当TSleepCount为0时,表明所述IEC任务的调度码的类型为第一类型,即可唤醒该任务运行。对于这种周期型任务,间隔TRunCycle时间执行一次。
当所述PLC中周期型任务的预设运行周期TRunCycle的时长小于所述 IEC任务的执行时间TRunTime,且2*TRunCycle大于TRunTime时,例如,参见图3,TRunCycle为8秒,而TRunTime为10秒,此时,则休眠时间TSleep =TRunCycle–(TRunTime%TRunCycle),其中,所述TRunTime%TRunCycle 为用TRunCycle对TRunTime进行求余,TSleepCount=TCount–(TRunCount%TCount),此时的IEC任务是间隔2个周期运行一次。以上为了说明算法,将TRunCycle和TRunTime进行了实例化,不同的周期和运行时间,算法一样,即周期型任务的运行间隔周期为n*TRunCycle(n为大于1的正整数)。
也就是说,所述周期型任务的调度码的计算规则为:当所述第 n*TRunCycle到来时,所述周期型任务的调度码切换为第一状态,其中,所述 TRunCycle为所述调度码的运行周期,当所述周期型任务的执行时间TRunTime小于所述运行周期TRunCycle时,所述n为1,当所述周期型任务的执行时间TRunTime大于所述运行周期TRunCycle时,所述n的值为TRunTime/TRunCycle取整后加1。例如,以上文TRunCycle为8秒,而 TRunTime为10秒,所述n的值为2。
对于事件型任务而言,事件型任务产生一个事件,即该任务满足调度的条件,该事件产生后,表明满足与所述IEC任务相匹配的调度的条件,所述事件型任务对应的IEC码切换至第一状态,所述IEC任务对应的调度码的类型切换为第一类型1,当所述IEC任务执行完毕后,所述IEC任务对应的调度码切换至第二类型0,此时,这个事件回到初始状态,等待事件的下一次产生,例如参见图4所示。例如,事件在产生时,与事件对应的电平信号上会对应生成一个上升沿或下降沿,所述上升沿或下降沿与所述调度码状态相匹配。事件型任务阻塞在该电平信号的信号量上等待被唤醒,中断调度任务通过检测该电平信号检测事件是否产生,若事件产生,中断调度任务post信号量,唤醒该事件型IEC任务,任务执行完毕后,该电平信号变为常低电平或常高电平,IEC任务再一次阻塞在信号量上,等待下一次事件的产生。当然,在本申请实施例公开的技术方案中,也可以通过其他信号来表征是否产生该时间,这些信号可以统称为与该事件相匹配的事件信号标识,通过该事件信号标识判断事件是否产生,而并不一定要通过电平信号的上升沿和下降沿的方式来判断事件是否产生。
当所述IEC任务为状态型任务时,参见图5,当与所述IEC任务相匹配的预设条件保持在满足状态时,所述IEC任务对应的调度码的类型切换为第一类型1,当所述与所述IEC任务相匹配的预设条件保持在不满足状态时,所述IEC任务对应的调度码切换至第二类型0。
参见图6,对于全速型运行的IEC任务而言,其调度码一直保持在第一类型,即,该IEC任务创建即开始运行,对于状态型任务和全速型运行任务,可能会出现任务一直运行的状态,这样会导致系统硬件资源被耗尽,因此对于这两种类型的任务,在本方案中,在运行这些长时间处于运行状态的任务而言,在这些IEC任务运行第一预设时长后,都需要将其调度码切换出第一类型一段时间,这段时间可以记为第二预设时长,使得PLC主动休眠一段时间,让出cpu资源,其中,所述第一预设时长和第二预设时长的具体时长可以依据用户需求自行设定。
本实施例中公开了一种PLC任务调度装置,该装置中各个单元的具体工作内容,请参见上述方法实施例的内容,下面对本发明实施例提供的PLC任务调度装置进行描述,下文描述的PLC任务调度装置与上文描述的PLC任务调度方法可相互对应参照。
参见图7,该PLC任务调度装置,包括:
时钟状态判断单元100,用于检测中断调度任务注册时钟的中断状态;
调度状态判断单元200,用于当所述时钟的中断到来时,触发中断调度任务获取各个PLC中IEC任务的调度状态;基于所述调度状态判断是否存在满足调度条件的IEC任务;
调度执行单元300,用于当存在满足调度条件的IEC任务时,控制调度器调度满足条件的IEC任务。
与上述方法相对应,所述调度状态判断单元在基于所述调度状态判断是否存在满足调度条件的IEC任务时,包括:
判断与各个所述IEC任务相匹配的调度码的类型;
当与所述IEC任务相匹配的调度码的类型为第一类型时,表明所述IEC 任务满足调度条件,否则,表明所述IEC任务不满足调度条件;
其中,所述调度码为用于表征所述IEC任务是否满足调度条件的二进制码。
与上述方法相对应,还包括:
IEC任务调度码配置单元,用于当所述IEC任务为周期型任务时,且当所述PLC中周期型任务的预设运行周期TRunCycle的时长大于所述IEC任务的执行时间TRunTime时,依据以下规则配置所述IEC任务的调度码:
基于公式TCount=TRunCycle/TScheduleInterval计算得到所述IEC任务的调度计数量TCount,其中,所述TScheduleInterval为中断调度任务的调度间隔时间;
依据公式TRunCount=TRunTime/TScheduleInterval和TSleepCount= TCount–TRunCount,计算得到TSleepCount,将所述TSleepCount的值作为所述IEC任务的调度码,所述TSleepCount的值作为值为0时,表明所述IEC 任务的调度码的类型为第一类型。
与上述方法相对应,当所述PLC中周期型任务的预设运行周期TRunCycle 的时长小于所述IEC任务的执行时间TRunTime时,所述IEC任务调度码配置单元依据以下规则配置所述IEC任务的调度码:
基于公式TCount=TRunCycle/TScheduleInterval计算得到所述IEC任务的调度计数量TCount,其中,所述TScheduleInterval为中断调度任务的调度间隔时间;
依据公式TRunCount=TRunTime/TScheduleInterval和TSleepCount= TCount–(TRunCount%TCount),计算得到TSleepCount,将所述TSleepCount 的值作为所述IEC任务的调度码,所述TSleepCount的值作为值为0时,表明所述IEC任务的调度码的类型为第一类型。
与上述方法相对应,IEC任务调度码配置单元具体用于,当所述IEC任务为事件型任务时,当满足与所述IEC任务相匹配的调度的条件时,所述IEC 任务对应的调度码的类型切换为第一类型1,当所述IEC任务执行完毕后,所述IEC任务对应的调度码切换至第二类型0。
与上述方法相对应,IEC任务调度码配置单元具体用于,当所述IEC任务为状态型任务时,当与所述IEC任务相匹配的预设条件保持在满足状态时,所述IEC任务对应的调度码的类型切换为第一类型1,当所述与所述IEC任务相匹配的预设条件保持在不满足状态时,所述IEC任务对应的调度码切换至第二类型0。
为了描述的方便,描述以上系统时以功能分为各种模块分别描述。当然,在实施本发明时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。