监测程序的执行的方法和装置与流程

文档序号:12464049阅读:235来源:国知局
监测程序的执行的方法和装置与流程

本发明涉及可编程逻辑控制领域。具体地,本发明涉及一种监测程序的执行的方法和装置。



背景技术:

目前,可编程逻辑控制器被广泛的用于消费类电子、工业控制、航天航空等诸多领域。在一些涉及功能安全的领域,需要严格地监测可编程逻辑控制器中的程序执行顺序,确保程序按照预设的轨迹运行,保证人身及财产安全。

现有的程序顺序监控技术监控准确度较低,有可能无法发现特定的程序执行顺序错误,导致监控失效,进而导致程序执行错误。

针对上述的问题,目前尚未提出有效地解决方案。



技术实现要素:

本发明实施例提供了一种监测程序的执行的方法和装置,解决了相关技术中对象同步方法所导致的问题。

根据本发明的一个实施例,提供了一种监测程序的执行的方法,包括:按顺序执行程序的每个子程序,记录当前执行的子程序调用的子程序的标识符,其中,每个子程序被分别分配唯一的标识符,获取当前执行的子程序的下一个实际执行的子程序的标识符,以及比较下一个实际执行的子程序的标识符与调用的子程序的标识符以监测程序的执行,其中,如果下一个实际执行的子程序的标识符与调用的子程序的标识符不同,则确定子程序调用错误。

进一步地,根据本发明的一个实施例的方法还包括:记录每个子程序执行的次数,获取预期的每个子程序执行的次数,以及比较记录的每个子程序执行的次数与预期的每个子程序执行的次数以监测程序的执行,其中,如果记录的每个子程序执行的次数与预期的每个子程序执行的次数不同,则确定程序执行错误。

进一步地,根据本发明的一个实施例的方法,其中,标识符是1到n的编号,其中,n是第n个执行的子程序的编号。

进一步地,根据本发明的一个实施例的方法,还包括:创建变量,变量用于记录当前执行的子程序调用的子程序的编号,变量的初始值为0,其中,如果当前执行的子程序结束,则设变量的值为调用的子程序的编号。

进一步地,根据本发明的一个实施例的方法,还包括:创建数组,数组用于记录每个子程序执行的次数,数组包括n个元素,数组的n个元素的初始值为0,并且,程序中的第一个子程序开始执行后,则数组中对应的第一个元素的值加1。

进一步地,根据本发明的一个实施例的方法,其中,如果下一个实际执行的子程序的编号与变量的值相同,则确定程序的子程序按顺序正确执行。

进一步地,根据本发明的一个实施例的方法,还包括,如果确定程序的子程序按顺序正确执行,则数组中与下一个实际执行的子程序对应的元素的值加1。

进一步地,根据本发明的一个实施例的方法,还包括:在所有子程序正确执行结束后,检查数组,其中,如果数组中的各元素的值与预期的每个子程序执行的次数相同,则确定程序执行正确,并且将数组和变量清零。

根据本发明的另一实施例,提供了一种监测程序的执行的装置,包括:执行模块,用于按顺序执行程序的每个子程序,标识符模块,用于记录当前执行的子程序调用的子程序的标识符,其中,每个子程序被分别分配唯一的标识符,第一获取模块,用于获取当前执行的子程序的下一个实际执行的子程序的标识符,以及第一比较模块,用于比较下一个实际执行的子程序的标识符与调用的子程序的标识符以监测程序的执行,其中,如果下一个实际执行的子程序的标识符与调用的子程序的标识符不同,则确定子程序调用错误。

进一步地,根据本发明的一个实施例的装置,还包括:次数记录模块,用于记录每个子程序执行的次数,第二获取模块,用于获取预期的每个子程序执行的次数,以及第二比较模块,用于比较记录的每个子程序执行的次数与预期的每个子程序执行的次数以监测程序的执行,其中,如果记录的每个子程序执行的次数与预期的每个子程序执行的次数不同,则确定程序执行错误。

在本发明实施例中采用了一种新的方法,解决了可编程逻辑控制器中程序顺序执行监控的问题。通过本发明可以准确定位程序执行的错误位置,便于后期的排查与分析。本发明方法简单,监控准确性高,不需要改变被监控程序的现有结构,监控方法资源占用极少。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是根据本发明的一个实施例的监测程序的执行的方法的示意图;

图2是根据本发明的一个实施例的监测程序的执行的方法的示意图;

图3是根据本发明的一个实施例的监测程序的执行的装置的示意图;

图4是根据本发明的一个实施例的监测程序的执行的装置的示意图;

图5是根据本发明的示例性实施例的监测程序的执行的方法的示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获取的所有其他实施例,都应当属于本发明保护的范围。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或模块。

通常,一个程序包含一个或多个子程序。通过设计一个或多个子程序,完成整个程序的设计。为了验证程序是否能够按照预定的方式执行,在程序的各个子程序设计完成后,需要验证程序的各个子程序是否能够按照预设的顺序执行。即,程序中的第一个子程序执行后,该第一个子程序将调用第二个要运行的子程序,第二个子程序在第一个子程序执行结束后运行,并且其本身在执行结束后继续调用下一个要执行的子程序,以此类推,直至程序中的所有子程序按照调用关系执行完毕。然而,难以准确地监控程序执行的顺序。如果程序执行的顺序错误,则程序监控失效,进而导致程序执行错误。

根据本发明的一个实施例,提供了一种监测程序的执行的方法。图1是根据本发明的一个实施例的监测程序的执行的方法的示意图。根据本发明的一个实施例的监测程序的执行的方法包括:S102,按顺序执行程序的每个子程序,S104,记录当前执行的子程序调用的子程序的标识符,其中,每个子程序被分别分配唯一的标识符,S106,获取当前执行的子程序的下一个实际执行的子程序的标识符,以及S108,比较下一个实际执行的子程序的标识符与调用的子程序的标识符以监测程序的执行,其中,S110,如果下一个实际执行的子程序的标识符与调用的子程序的标识符不同,则确定子程序调用错误。根据本发明实施例的方法监控程序中子程序的调用关系。具体地,每个子程序都被分配唯一的标识符,当子程序被执行时,可以通过识别该标识符监控被执行的子程序与将被执行的子程序,使得为了监控子程序的调用关系,可以监控代表子程序的标识符。调用关系涉及当前执行的子程序以及该子程序调用的下一个执行的子程序。然而,如果程序受到干扰,那么子程序可能不按照预定的轨迹运行。在这种情况下,下一个实际执行的子程序将不是子程序所调用的子程序,因此,该下一个实际执行的子程序的标识符将与子程序所调用的子程序的标识符不同。通过比较下一个实际执行的子程序的标识符与调用的子程序的标识符,可以确定子程序没有按照预定的轨迹运行,则进而可以确定子程序调用错误。以这样的方式,根据本发明实施例的方法提供了一种仅通过比较标识符即可监控子程序运行轨迹是否正确的解决方案,方法简单且准确性高,占用资源极少。

进一步地,根据本发明的一个实施例提供了监测程序的执行的方法。图2是根据本发明的一个实施例的监测程序的执行的方法的示意图。根据本发明的一个实施例的监测程序的执行的方法还包括:S202,记录每个子程序执行的次数,S204,获取预期的每个子程序执行的次数,以及S206,比较记录的每个子程序执行的次数与预期的每个子程序执行的次数以监测程序的执行,其中,S208,如果记录的每个子程序执行的次数与预期的每个子程序执行的次数不同,则确定程序执行错误。在本发明的实施例中,不仅可以监控子程序的运行轨迹,还可以监控各个子程序是否均正确执行。在程序的执行过程中,如果受到干扰或者其他因素导致子程序没有按照预定轨迹运行,那么,由于应当运行的子程序没有运行,而运行的是其他的子程序,则在程序执行结束后,各个子程序执行的次数会与预期的执行次数不同。本发明实施例的方法能够记录每个子程序执行的次数,提供了额外的监控方式,如果记录的每个子程序执行的次数与预期的每个子程序执行的次数不同,则说明在程序的执行中,各个子程序没有按照预期的顺序或者以预期的方式正确执行,进一步确定程序执行错误。以这样的方式,本发明实施例的方法提供进一步的监控方案,该方案仅需要记录和比较记录每个子程序执行的次数与预期的每个子程序执行的次数即可实现监控,方法简单且占用资源极少。

进一步地,根据本发明的一个实施例的方法,其中,标识符是1到n的编号,其中,n是第n个执行的子程序的编号。在设定每个子程序的标识符时,可以采用如字母、数字、符号等的各种标识符,本发明实施方式不限于此。例如,可以采用数字编号作为标识符。第一个执行的子程序的标识符可以采用为1的编号,第二个执行的子程序的标识符采用为2的编号,以此类推,程序中的第n个执行的子程序则采用为n的编号。以这样的方式,每个子程序被标记有唯一的编号作为标识符,标识清楚且能够表示程序中的子程序的执行顺序,方便程序监控过程中人员的操作。与此同时,这种编号占用的资源极少。

进一步地,根据本发明的一个实施例的方法,还包括:创建变量,变量用于记录当前执行的子程序调用的子程序的编号,变量的初始值为0,其中,如果当前执行的子程序结束,则设变量的值为调用的子程序的编号。如果子程序没有按照预定的顺序执行,那么要执行的子程序将会被实际执行的子程序代替使得其没有被执行,因此,需要一种方法记录该没有被执行但应当被执行的子程序。本发明实施例采用例如创建变量的方式,用于记录当前执行的子程序调用的子程序的编号。在没有子程序运行时,变量的初始值被设为0。当执行第一个子程序后,第一个子程序将调用第二个要执行的子程序,该第二个要执行的子程序对应的编号2将被记录为变量的值。当观察或读取变量中的值时,将能够知晓当前程序调用的子程序的编号,进而知晓调用的应执行的子程序。以这样的方式可以清楚记录调用的子程序,占用资源极少,方便程序监控过程中对子程序运行数据的采集。

进一步地,根据本发明的一个实施例的方法,还包括:创建数组,数组用于记录每个子程序执行的次数,数组包括n个元素,数组的n个元素的初始值为0,并且,程序中的第一个子程序开始执行后,则数组中对应的第一个元素的值加1。本发明实施例的方法采用例如创建数组的方式记录每个子程序执行的次数,每个子程序在该数组中都有对应的元素。对于由n个子程序构成的程序,该数组中具有相应的n个元素,每个元素中的值对应于相应子程序的执行的次数。在程序执行前,每个子程序的执行次数为0,该数组中n个元素的初始值被设为0。以这样的方式,可以记录子程序执行的次数,可以清楚确定程序是否按照预定轨迹运行,方法简单,占用资源极少。

进一步地,根据本发明的一个实施例的方法,其中,如果下一个实际执行的子程序的编号与变量的值相同,则确定程序的子程序按顺序正确执行。在为每个程序编号后,根据本发明实施例的方法可以通过仅比较执行的子程序与上一个子程序调用的子程序的编号是否相同,即,比较执行的子程序与变量的值是否相同,即可确定执行的子程序是否是调用的子程序,即确定执行的子程序是否是应当执行的子程序。如果比较结果是相同,则能够确定程序的子程序按照顺序正确执行。以这样的方式,仅比较编号及变量的值即可确定子程序执行顺序是否正确,方法简单,占用资源极少。

进一步地,根据本发明的一个实施例的方法,还包括,如果确定程序的子程序按顺序正确执行,则数组中与下一个实际执行的子程序对应的元素的值加1。根据本发明实施例的方法,如果确定子程序执行顺序正确,则记录子程序执行的次数,用于后面的程序次数的监控。对于第一个执行的子程序,数组的第1个元素的初始值0加1,代表第一个子程序执行了1次。相应地,如果第n个子程序执行,则第n个子程序在数组中对应的第n个元素的值加1。以这样的方式,可以以数组记录每个子程序执行的次数,能够清晰反映每个子程序执行的次数。

进一步地,根据本发明的一个实施例的方法,还包括:在所有子程序正确执行结束后,检查数组,其中,如果数组中的各元素的值与预期的每个子程序执行的次数相同,则确定程序执行正确,并且将数组和变量清零。在程序的所有子程序正确执行后,本发明实施例的方法提供额外的程序监控。在前面的过程中记录的各个子程序执行的次数可以用于与预计的各个子程序的执行次数作比较。对于正确执行的程序,其中各个子程序的执行次数应当是预计的次数,使用该预计的次数与数组中代表各个子程序执行次数的各元素的值作比较,如果比较结果相同,则确定程序的各个子程序执行次数正确,进一步确定程序执行正确。同时,验证了程序执行正确后,将用于记录子程序执行次数的数组与记录调用关系的变量清零,以用于以后的程序监控。以这样的方式,本发明实施例提供了监控调用关系之外的额外的监控方法,采用数组的方式检验程序的执行是否存在问题,进一步保证了程序监控的准确性。

本发明还包括执行上述方法的装置,用于实现例如可编程逻辑控制器中程序执行顺序的监控。将在下文描述该装置的实施例。

根据本发明的另一实施例,提供了一种监测程序的执行的装置。图3是根据本发明的一个实施例的监测程序的执行的装置的示意图。根据本发明的一个实施例的监测程序的执行的装置包括:执行模块301,用于按顺序执行程序的每个子程序,标识符模块303,用于记录当前执行的子程序调用的子程序的标识符,其中,每个子程序被分别分配唯一的标识符,第一获取模块305,用于获取当前执行的子程序的下一个实际执行的子程序的标识符,以及第一比较模块307,用于比较下一个实际执行的子程序的标识符与调用的子程序的标识符以监测程序的执行,其中,如果下一个实际执行的子程序的标识符与调用的子程序的标识符不同,则确定子程序调用错误。根据本发明实施例的装置监控程序中由执行模块301执行的子程序的调用关系。具体地,每个子程序都被标识符模块303分配唯一的标识符,当子程序被执行模块301执行时,可以通过识别该标识符监控被执行的子程序与将被执行的子程序,使得为了监控子程序的调用关系,可以监控代表子程序的标识符。调用关系涉及当前执行的子程序以及该子程序调用的下一个执行的子程序。然而,如果程序受到干扰,那么子程序可能不按照预定的轨迹运行。在这种情况下,下一个实际执行的子程序将不是子程序所调用的子程序,因此,第一获取模块305获取的该下一个实际执行的子程序的标识符将与子程序所调用的子程序的标识符不同。通过第一比较模块307比较下一个实际执行的子程序的标识符与调用的子程序的标识符,可以确定子程序没有按照预定的轨迹运行,则进而可以确定子程序调用错误。以这样的方式,根据本发明实施例的装置提供了一种仅通过比较标识符即可监控子程序运行轨迹是否正确的解决方案,简单且准确性高,占用资源极少。

进一步地,根据本发明的另一实施例,提供了一种监测程序的执行的装置。图4是根据本发明的一个实施例的监测程序的执行的装置的示意图。根据本发明的一个实施例的监测程序的执行的装置包括:次数记录模块401,用于记录每个子程序执行的次数,第二获取模块403,用于获取预期的每个子程序执行的次数,以及第二比较模块405,用于比较记录的每个子程序执行的次数与预期的每个子程序执行的次数以监测程序的执行,其中,如果记录的每个子程序执行的次数与预期的每个子程序执行的次数不同,则确定程序执行错误。在本发明的实施例中,不仅可以监控子程序的运行轨迹,还可以监控各个子程序是否均正确执行。在程序的执行过程中,如果受到干扰或者其他因素导致子程序没有按照预定轨迹运行,那么,由于应当运行的子程序没有运行,而运行的是其他的子程序,则在程序执行结束后,各个子程序执行的次数会与预期的执行次数不同。本发明实施例的装置能够采用次数记录模块401记录每个子程序执行的次数,提供了额外的监控方式,如果本发明实施例的装置的第二比较模块405比较的次数记录模块401记录的每个子程序执行的次数与第二获取模块403获取的预期的每个子程序执行的次数不同,则说明在程序的执行中,各个子程序没有按照预期的顺序或者以预期的方式正确执行,进一步确定程序执行错误。以这样的方式,本发明实施例的装置提供进一步的监控方案,该方案仅需要记录和比较记录每个子程序执行的次数与预期的每个子程序执行的次数即可实现监控,简单且占用资源极少。

本实施例中的监测程序的执行的装置还可以执行参考上述实施例中描述的监测程序的执行的方法,本实施例在此不再赘述。

本发明提供的监测程序的执行的方法还可以参考本发明的示例性实施例。以下将描述本发明的示例性实施例。

图5是根据本发明的示例性实施例的监测程序的执行的方法的示意图。

首先,在程序的各个子程序设计完成后,分别为每个子程序Fun(1)~Fun(n)分别分配一个唯一的编号Fun_id,例如1~n。例如,Fun(1)的Fun1_id为1,Fun(1)的Fun2_id为2。

然后,创建一个n个元素的数组E(),其元素为E(1)~E(n),这个数组将被用来记录每个子程序被执行的次数,设定数组的初始值为0。

创建一个变量R(x),用来记录程序的调用关系,设初始值为0。

程序顺序执行监控方法如图5所示,假设程序从Fun(1)开始执行,S502。Fun(1)执行后,会调用Fun(2)。

当Fun(1)首先开始执行后,其对应的数组元素E(1)内的数字加1,S504,代表Fun(1)被执行了1次。当Fun(1)执行结束后,它即将调用Fun(2)。此时,将R(x)被Fun(1)填入Fun(2)的编号2,S506。至此,Fun(1)执行结束。

假如程序按照正常的轨迹运行,那么Fun(2)将被开始执行,S508。Fun(2)首先需要检查R(x)内的值是否为自己的编号,S510。如果是自己的编号,那么代表子程序间调用关系正确,程序正在按照预定轨迹执行。数组元素E(2)内的值加1,S512。

假如程序受到干扰或者因其他因素导致其没有按照预定轨迹运行,那么Fun(1)后被执行的程序将不会是Fun(2)。此时,执行的程序可以设为Fun(x),Fun(x)开始执行后,首先检查R(x)内的值是否为自己的编号。由于R(x)被Fun(1)填入的是2,所以Fun(x)会发现自己的编号与R(x)内的编号不同。此时,可以证明子程序调用错误,程序没有按照预定的轨迹运行,按照执行错误处理,S514。

当所有子程序正确执行结束后,最后检测子程序CheckFun应检查数组E(),查看每个子程序的执行次数是否和预期的执行次数相同,S516。如果执行次数符合预期,那么可以认为程序执行正确,数组E()和变量R(x)应被清零,S518。如果执行次数超过或者少于预期的次数,那么可以确定程序的执行存在问题,按照执行错误处理,S520。

最终,子程序顺序执行结束,S522。

在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

本发明如上描述的方法和装置解决了可编程逻辑控制器中程序顺序执行监控的问题。通过本发明实施例提供的方法和装置,可以准确定位程序执行的错误位置,便于后期的排查与分析。本发明实施例提供的方法和装置简单,监控准确性高,不需要改变被监控程序的现有结构,资源占用极少。

在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,模块或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1