一种针对PLC程序进行自动化单元测试的方法与流程

专利2022-06-29  79


本发明涉及软件测试技术领域,具体是指一种针对plc程序进行自动化单元测试的方法。



背景技术:

plc编程是一种数字运算操作的电子系统,专为在工业环境下应用而设计。它采用可编程序的存储器,用来在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,并通过数字式、模拟式的输入和输出,控制各种类型的机械或生产过程。可编程序控制器及其有关设备,都应按易于使工业控制系统形成一个整体,易于扩充其功能的原则设计。

随着微处理器、计算机和数字通信技术的飞速发展,计算机控制已扩展到了几乎所有的工业领域。现代社会要求制造业对市场需求作出迅速的反应,生产出小批量、多品种、多规格、低成本和高质量的产品,为了满足这一要求,生产设备和自动生产线的控制系统必须具有极高的可靠性和灵活性,plc编程正是顺应这一要求出现的,它是以微处理器为基础的通用工业控制装置。、

单元测试,是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如c语言中单元指一个函数,java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

目前限于对自动控制plc软件进行测试的技术手段比较少,商用软件无法对该类软件进行直接测试。一般都是要通过搭建实际的软硬件运行环境,测试代价高,且无法保证测试覆盖率。开展plc软件测试技术研究,将plc软件从真实环境中隔离出来,在不连接硬件的情况下进行单独的软件测试和验证,实现软硬件故障的分离,以降低目前该类软件的测试成本,提供测试效率和质量,具有重要的意义。



技术实现要素:

本发明的目的在于提供一种测试效率较高,测试较为简单,且灵活性好,适宜扩展的针对plc程序进行自动化单元测试的方法。

本发明通过下述技术方案实现:一种针对plc程序进行自动化单元测试的方法,包括以下步骤:

(1)通过c#程序输入源代码,编写能够对plc软件进行自动化测试的功能块;

(2)将该程序源代码编译生成公共中间语言文件;

(3)通过plc编程软件中的固件库生成器将公共中间语言文件生成固件库文件,并构建固件库;

(4)在plc编程软件中添加构建的固件库;

(5)通过plc编程软件,使用固件库内的功能块构建测试框架;

(6)根据构建出的测试框架进行plc程序的编译,并生成plc工程镜像;

(7)将生成的工程镜像安装在plc程序的运行平台中,启动运行,在框架内填充待测试的代码,进行循环测试。

单元测试又称为模块测试,是针对程序模块(软件设计的最小单元)来进行正确性检测的测试工作。传统的plc程序进行测试效率不高,或需要较为复杂的plc编程,且灵活性较低,不宜扩展,将自动化单元测试引入plc程序编写,可以提高plc软件的开发效率,而本技术方案便是提供了一种在plc程序中引入自动化单元测试的方法。

由于plc编程是一种专为工业环境应用而设计的编程语言,plc程序按照“顺序扫描,不断循环”的方式运行。

功能(fu):功能是带有多个输入参数和恰好一个输出参数的pou(programorganizationunits)。调用带有相同值的功能总是返回相同的结果。返回值可以是简单数据类型。在一个功能内,可以调用另外的功能,但不能调用功能块或程序,不允许递归调用。

功能块(fb):功能块是带有多个输入/输出参数和内部存储单元的pou(programorganizationunits),功能块的返回值取决于其内部存储器单元的值,功能块内可以调用例外的功能块或功能,但不能调用程序,不允许递归调用。

具体是使用c#程序进行自动化单元测试的功能块的编写,然后将功能块生成固件库文件,通过plc编程软件加载该固件库,并根据该固件库中的功能块构建测试代码,最终生成能够在plc程序目标平台运行的工程镜像,然后将该工程镜像装载在目标平台,通过目标平台运行该测试程序,实现plc软件的自动化单元测试。

为了更好地实现本发明,进一步地,所述步骤(1)中通过c#程序输入源代码编写的程序包括:

ltest_setup,声明测试测试组在开始执行测试用例前公共执行部分;

ltest_setupdone,与ltest_setup成对配合使用;

ltest_teardown,声明测试测试组在执行完测试用例后公共执行部分;

ltest_teardowndone,与ltest_teardown成对配合使用;

ltest_testcasestart,声明测试用例;

ltest_testcaseend,与ltest_testcasestart成对配合使用;

ltest_result,获取当前测试的执行结果;

ltest_config,配置需要执行的或不执行的测试用例。

其中,ltest_setup和ltest_teardown是测试用例前后加的公共执行部分,可以理解为测试组的起始符,终止符,用以识别测试组。将所有测试用例按照有相同开始和结束的进行分组,避免重复写代码,这些分组称为测试组,当然还可以根据被测功能进一步进行的分组。

每个测试用例按照setup->test->teardown顺序执行,进行测试。

运行时,setup、teardown将plc程序划分成多个测试组,start,end将测试组内的程序划分成多个测试用例。

所有功能块由内部状态机统一管理,每个功能块(除result、config)对应一个内部状态,done、end,用于记录状态,表示代码段执行完毕,setup的控制setup到setupdone之间的代码是否执行,teardown控制teardown到teardowndone之间的代码是否执行,testcasestart控制testcasestart到testcaseend的代码是否执行。

为了更好地实现本发明,进一步地,所述步骤(3)中生成的固件库文件包括功能块名称,输入变量、输出变量、输入输出变量。

为了更好地实现本发明,进一步地,所述plc编程软件为multiprog。multiprog是一款根据iec标准及传统plc标准的编程系统,能够编辑,编译,调试plc工程。

为了更好地实现本发明,进一步地,所述步骤(6)中,根据构建出的测试代码进行plc程序的编译的过程为,利用公共中间语言文件转换为机器码的方法,将公共中间语言文件转换为proconos平台的机器码。proconos是一款高性能plc引擎,专为嵌入式和基于pc的控制应用而设计。proconos能够与主流嵌入式系统(如vxworks,qnx,os9)等协同工作,提供确定性的低至1ms运行周期的控制性能。

为了更好地实现本发明,进一步地,所述步骤(7)中的plc程序的运行平台为proconos平台。

本发明与现有技术相比,具有以下优点及有益效果:

(1)本发明通过将自动化测试框架引入plc编程中,可根据需要灵活调整需要执行的测试组或测试用例,简化了plc软件的测试程序的编写,极大的提高了plc软件的测试效率;

(2)本发明通过使用c#程序编程,来实现plc软件的程序测试,使得编写的功能块能够符合61131-3的标准,无需额外设定参数;

(3)本发明技术原理简单,实现过程简单,利于进行plc软件的程序测试,适宜广泛推广应用。

附图说明

通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其他特征、目的和优点将会变得更为明显:

图1为本发明实现过程的基本流程图;

图2为本发明中测试用例执行时的时序图。

具体实施方式

为使本发明的目的、工艺条件及优点作用更加清楚明白,结合以下实施实例,对本发明作进一步详细说明,但本发明的实施方式不限于此,在不脱离本发明上述技术思想情况下,根据本领域普通技术知识和惯用手段,做出各种替换和变更,均应包括在本发明的范围内,此处所描述的具体实施实例仅用以解释本发明,并不用于限定本发明。

实施例1:

本实施例的提供了一种针对plc程序进行自动化单元测试的方法,具体流程如图1所示,包括以下步骤:

(1)通过c#程序输入源代码,编写能够对plc软件进行自动化测试的功能块;

(2)将该程序源代码编译生成公共中间语言文件;

(3)通过plc编程软件中的固件库生成器将公共中间语言文件生成固件库文件,并构建固件库;

(4)在plc编程软件中添加构建的固件库;

(5)通过plc编程软件,使用固件库内的功能块构建测试框架;

(6)根据构建出的测试框架进行plc程序的编译,并生成plc工程镜像;

(7)将生成的工程镜像安装在plc程序的运行平台中,启动运行,在框架内填充待测试的代码,进行循环测试。

该方法中构建的自动化单元测试框架能够将测试工程分成若干个测试组,每个测试组包含若干测试用例,每个测试用例,按照流程setup->test->teardown顺序执行,执行过程如图2所示。

该测试测试框框架封装成符合61131-3标准的功能块,无需额外设定参数

1、本测试框架将所有测试用(test)例按组进行分类,每个组称为测试组(testgroup)

2、测试组内包含开头段(setup),结束段(teardown);

3、每个测试用例按照setup->test->teardown顺序执行,进行测试;

4、所有测试用例执行完成后显示测试结构;

5、可根据需要灵活调整需要执行的测试组(testgroup)或测试用例(test)。

实施例2:

本实施例在上述实施例的基础上,进一步地,所述步骤(1)中通过c#程序输入源代码编写的程序包括:

ltest_setup,声明测试测试组在开始执行测试用例前公共执行部分;

ltest_setupdone,与ltest_setup成对配合使用;

ltest_teardown,声明测试,测试组在执行完测试用例后,公共执行部分;

ltest_teardowndone,与ltest_teardown成对配合使用;

ltest_testcasestart,声明测试用例;

ltest_testcaseend,与ltest_testcasestart成对配合使用;

ltest_result,获取当前测试的执行结果;

ltest_config,配置需要执行的或不执行的测试用例。

其中,ltest_setup和ltest_teardown是测试用例前后加的公共执行部分,可以理解为测试组的起始符,终止符,用以识别测试组。将所有测试用例按照有相同开始和结束的进行分组,避免重复写代码,这些分组称为测试组,当然还可以根据被测功能进一步进行的分组。

每个测试用例按照setup->test->teardown顺序执行,进行测试。

运行时,setup、teardown将plc程序划分成多个测试组,start,end将测试组内的程序划分成多个测试用例。

所有功能块由内部状态机统一管理,每个功能块(除result、config)对应一个内部状态,done、end,用于记录状态,表示代码段执行完毕,setup的控制setup到setupdone之间的代码是否执行,teardown控制teardown到teardowndone之间的代码是否执行,testcasestart控制testcasestart到testcaseend的代码是否执行。

本实施例其他部分与上述实施例相同,这里不再赘述。

实施例3:

本实施例在上述实施例的基础上,进一步地,所述步骤(3)中生成的固件库文件包括功能块名称,输入变量、输出变量、输入输出变量。

实施例4:

本实施例在上述实施例的基础上,进一步地,所述plc编程软件为multiprog。multiprog是一款根据iec标准及传统plc标准的编程系统,能够编辑,编译,调试plc工程。本实施例其他部分与上述实施例相同,这里不再赘述。

实施例5:

本实施例在上述实施例的基础上,进一步地,所述步骤(6)中,根据构建出的测试代码进行plc程序的编译的过程为,利用公共中间语言文件转换为机器码的方法,将公共中间语言文件转换为proconos平台的机器码。本实施例其他部分与上述实施例相同,这里不再赘述。

实施例6:

本实施例在上述实施例的基础上,进一步地,所述步骤(7)中的plc程序的运行平台为proconos平台。proconos是一款高性能plc引擎,专为嵌入式和基于pc的控制应用而设计。proconos能够与主流嵌入式系统(如vxworks,qnx,os9)等协同工作,提供确定性的低至1ms运行周期的控制性能。本实施例其他部分与上述实施例相同,这里不再赘述。

尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。


技术特征:

1.一种针对plc程序进行自动化单元测试的方法,其特征在于,包括以下步骤:

(1)通过c#程序输入源代码,编写能够对plc软件进行自动化测试的功能块;

(2)将该程序源代码编译生成公共中间语言文件;

(3)通过plc编程软件中的固件库生成器将公共中间语言文件生成固件库文件,并构建固件库;

(4)在plc编程软件中添加构建的固件库;

(5)通过plc编程软件,使用固件库内的功能块构建测试框架;

(6)根据构建出的测试框架进行plc程序的编译,并生成plc工程镜像;

(7)将生成的工程镜像安装在plc程序的运行平台中,启动运行,在框架内填充待测试的代码,进行循环测试。

2.根据权利要求1所述的一种针对plc程序进行自动化单元测试的方法,其特征在于,所述步骤(1)中通过c#程序输入源代码编写的程序包括:

ltest_setup,声明测试测试组在开始执行测试用例前公共执行部分;

ltest_setupdone,与ltest_setup成对配合使用;

ltest_teardown,声明测试,测试组在执行完测试用例后的公共执行部分;

ltest_teardowndone,与ltest_teardown成对配合使用;

ltest_testcasestart,声明测试用例;

ltest_testcaseend,与ltest_testcasestart成对配合使用;

ltest_result,获取当前测试的执行结果;

ltest_config,配置需要执行的或不执行的测试用例。

3.根据权利要求1或2所述的一种针对plc程序进行自动化单元测试的方法,其特征在于,所述步骤(3)中生成的固件库文件包括功能块名称,输入变量、输出变量、输入输出变量。

4.根据权利要求1或2所述的一种针对plc程序进行自动化单元测试的方法,其特征在于,所述plc编程软件为multiprog。

5.根据权利要求1或2所述的一种针对plc程序进行自动化单元测试的方法,其特征在于,所述步骤(6)中,根据构建出的测试代码进行plc程序的编译的过程为,利用公共中间语言文件转换为机器码的方法,将公共中间语言文件转换为proconos平台的机器码。

6.根据权利要求1或2所述的一种针对plc程序进行自动化单元测试的方法,其特征在于,所述步骤(7)中的plc程序的运行平台为proconos平台。

技术总结
本发明公开了一种针对PLC程序进行自动化单元测试的方法,包括以下步骤:1)通过C#程序输入源代码,编写能够对PLC软件进行自动化测试的功能块;2)将该程序源代码编译生成公共中间语言文件;3)通过PLC编程软件中的固件库生成器将公共中间语言文件生成固件库文件,并构建固件库;4)在PLC编程软件中添加构建的固件库;5)通过PLC编程软件,使用固件库内的功能块构建测试框架;6)根据构建出的测试框架进行PLC程序的编译,并生成PLC工程镜像;7)将生成的工程镜像安装在PLC程序的运行平台中,启动运行。本发明通过将自动化测试框架引入PLC编程中,可根据需要灵活调整需要执行的测试组或测试用例,简化了测试程序的编写,提高了测试效率。

技术研发人员:李继磊;沈武;李翔龙;许志轩
受保护的技术使用者:成都乐创自动化技术股份有限公司
技术研发日:2020.02.27
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-26307.html

最新回复(0)