函数调用方法、装置、设备及计算机可读存储介质与流程

文档序号:33536819发布日期:2023-03-22 08:40阅读:45来源:国知局
函数调用方法、装置、设备及计算机可读存储介质与流程

1.本技术涉及plc编程技术领域,尤其涉及函数调用方法、装置、设备及计算机可读存储介质。


背景技术:

2.iec61131-3是iec61131标准的第三部分,它定义了plc(programmable logic controller,可编程逻辑控制器)的软件结构、编程语言(iec语言)和程序执行方式,它综合了世界上广泛流行的编程语言的特点,并使其成为一种面向未来的plc编程语言。
3.目前,一般在iec61131-3中调用c语言函数的方式为:定义一个接口,接口中包含方法;在c语言中实现此接口中的方法;编译成c库模块;在iec中调用专门的管理接口,进行接口初始化,调用、销毁。
4.但是,上述方式存在以下缺陷:iec语言参数类型和c语言参数类型需要人工匹配,若不匹配则会影响调用结果;接口管理流程繁琐。


技术实现要素:

5.本技术的主要目的在于提供一种函数调用方法、装置、设备及计算机可读存储介质,旨在自动处理iec61131-3中的c语言函数调用问题,避免繁琐的人工匹配参数和接口管理流程,实现plc控制器对c语言函数的快速访问。
6.为实现上述目的,本技术提供一种函数调用方法,所述函数调用方法包括以下步骤:
7.将以c语言编写的目标函数封装为c语言结构体,所述c语言结构体中包含所述目标函数中的参数;
8.将所述目标函数转换为外部函数;
9.根据所述c语言结构体生成iec结构体,所述iec结构体中参数的数据类型与所述目标函数中参数的数据类型一致;
10.根据所述iec结构体配置预设的iec库函数;
11.通过所述iec库函数调用所述外部函数,以使plc控制器执行所述目标函数。
12.可选地,所述将所述目标函数转换为外部函数的步骤,包括:
13.将所述目标函数转换为以所述c语言结构体的函数指针作为输入参数的外部函数。
14.可选地,所述根据所述c语言结构体生成iec结构体的步骤,包括:
15.提取所述c语言结构体中包含的参数名和数据类型;
16.将所述c语言结构体中包含的参数名和数据类型以iec语言导出,得到iec结构体。
17.可选地,所述根据所述iec结构体配置预设的iec库函数的步骤,包括:
18.基于所述iec结构体定义iec结构体变量;
19.将所述iec结构体变量作为第一入口调用参数传入预设的iec库函数;以及将所述
iec结构体的结构体名作为第二入口调用参数传入预设的iec库函数。
20.可选地,所述通过所述iec库函数调用所述外部函数,以使plc控制器执行所述目标函数的步骤,包括:
21.检查所述第一入口调用参数和所述第二入口调用参数是否合法;
22.若是,则根据所述iec结构体的结构体名查找所述c语言结构体的函数指针;
23.通过所述函数指针调用所述外部函数的扩展函数,以使plc控制器执行所述目标函数。
24.可选地,所述检查所述第一入口调用参数和所述第二入口调用参数是否合法的步骤,包括:
25.若所述第二入口调用参数不为空,则判定所述第一入口调用参数和所述第二入口调用参数合法。
26.可选地,所述根据所述iec结构体的结构体名查找所述c语言结构体的函数指针的步骤,包括:
27.根据所述iec结构体的结构体名在预设的符号信息表中查找包含所述目标函数的c语言模块;
28.在所述c语言模块中查找所述c语言结构体的函数指针。
29.此外,为实现上述目的,本技术还提供一种函数调用装置,所述函数调用装置包括:
30.封装模块,所述封装模块用于将以c语言编写的目标函数封装为c语言结构体,所述c语言结构体中包含所述目标函数中的参数;
31.转换模块,所述转换模块用于将所述目标函数转换为外部函数;
32.生成模块,所述生成模块用于根据所述c语言结构体生成iec结构体,所述iec结构体中参数的数据类型与所述目标函数中参数的数据类型一致;
33.配置模块,所述配置模块用于根据所述iec结构体配置预设的iec库函数;
34.调用模块,所述调用模块用于通过所述iec库函数调用所述外部函数,以使plc控制器执行所述目标函数。
35.此外,为实现上述目的,本技术还提供一种函数调用设备,所述函数调用设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上所述的函数调用方法的步骤。
36.此外,为实现上述目的,本技术还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的函数调用方法的步骤。
37.本技术提出一种函数调用方法、装置、设备及计算机可读存储介质,克服了现有技术中在iec61131-3中调用c语言函数时需要人工匹配参数类型并配置繁琐的接口管理流程等技术缺陷。本技术提供的函数调用方法先将以c语言编写的目标函数封装为c语言结构体,所述c语言结构体中包含所述目标函数中的参数;再将所述目标函数转换为外部函数;之后根据所述c语言结构体生成iec结构体,所述iec结构体中参数的数据类型与所述目标函数中参数的数据类型一致;然后根据所述iec结构体配置预设的iec库函数;最后通过所述iec库函数调用所述外部函数,以使plc控制器执行所述目标函数。
38.由此,本技术通过将c语言目标函数的输入和返回值等参数封装为结构体,实现了c语言内存和iec内存对齐,能够基于iec语言自动产生与c语言结构体中的参数匹配的iec标准结构体,无需人工匹配参数类型,解决了函数不定长参数问题;同时,本技术通过将c语言目标函数转换为外部函数,能够自动产生c函数调用接口,无需配置繁琐的接口管理流程,进而节省了大量时间,实现了plc控制器对c语言函数的快速访问。
附图说明
39.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术实施例的一部分,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
40.图1为本技术一实施例提供的一种函数调用方法的流程示意图;
41.图2为本技术一实施例提供的一种函数调用方法涉及的将目标函数封装为c语言结构体的示例;
42.图3为本技术一实施例提供的一种函数调用方法涉及的定义iec结构体的一种示例;
43.图4为本技术一实施例提供的一种函数调用方法涉及的配置预设的iec库函数的一种示例;
44.图5为本技术一实施例提供的一种函数调用装置的结构示意图;
45.图6为本技术一实施例提供的一种函数调用设备的硬件结构示意图。
具体实施方式
46.以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本技术实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本技术实施例。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本技术实施例的描述。
47.需要说明的是,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于流程图中的顺序执行所示出或描述的步骤。说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
48.还应当理解,在本技术实施例说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本技术实施例的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
49.plc是一种用于工业厂房的自动控制和监控的控制装置,plc通过程序依次对输入进行逻辑处理并利用该输出结果来控制与其连接的外部装置。当输入信号通过开关等输入时,plc程序内部的动作通过iec61131-3中定义的语言(sfc(sequential function chart,
顺序功能图)、lad(ladderdiagram,梯形图)、fbd(functionblockdiagram,功能块图)、il(instructionlist,指令表)、st(structuredtext,结构化文本),以下称为iec语言)和制造商定义的语言来描述。
50.iec61131-3是iec61131标准的第三部分,它定义了plc(programmable logic controller,可编程逻辑控制器)的软件结构、编程语言(iec语言)和程序执行方式,它综合了世界上广泛流行的编程语言的特点,并使其成为一种面向未来的plc编程语言。
51.目前,一般在iec61131-3中调用c语言函数的方式为:定义一个接口,接口中包含方法;在c语言中实现此接口中的方法;编译成c库模块;在iec中调用专门的管理接口,进行接口初始化,调用、销毁。
52.但是,上述方式存在以下缺陷:iec语言参数类型和c语言参数类型需要人工匹配,若不匹配则会影响调用结果;接口管理流程繁琐。
53.基于此,本技术实施例提供了一种函数调用方法、装置、设备及计算机可读存储介质,克服了现有技术中在iec61131-3中调用c语言函数时需要人工匹配参数类型并配置繁琐的接口管理流程等技术缺陷。本技术实施例通过将c语言目标函数的输入和返回值等参数封装为结构体,实现了c语言内存和iec内存对齐,能够基于iec语言自动产生与c语言结构体中的参数匹配的iec标准结构体,无需人工匹配参数类型,解决了函数不定长参数问题;同时,本技术通过将c语言目标函数转换为外部函数,能够自动产生c函数调用接口,无需配置繁琐的接口管理流程,进而节省了大量时间,实现了plc控制器对c语言函数的快速访问。
54.本技术实施例提供的函数调用方法、装置、设备及计算机可读存储介质,具体通过如下实施例进行说明,首先描述本技术实施例中的函数调用方法。
55.本技术实施例提供了一种函数调用方法,参照图1,图1为本技术一实施例提供的一种函数调用方法的流程示意图,该函数调用方法可以应用于函数调用设备,如图1所示,本实施例提供的函数调用方法包括步骤s10至s30。
56.步骤s10,将以c语言编写的目标函数封装为c语言结构体,所述c语言结构体中包含所述目标函数中的参数;
57.需要说明的是,本实施例中的执行主体为包含自主研发的编程ide(integrated development environment,集成开发环境)的函数调用设备,例如包含编程ide的终端设备、上位机、工控一体机等,该编程ide为函数调用设备赋予了编写c语言程序和plc程序(基于iec语言编写)的功能。本实施例中,plc程序需要调用的以c语言编写的目标函数一般包含在由客户提供的新增需求的源文件中,目标函数中包含了客户希望在plc程序运行时实现一些具体功能,因此,需要通过plc程序对该目标函数进行调用以实现其具体功能。
58.本实施例中,在函数调用设备的编程ide接收到包含目标函数的源文件之后,会先对该源文件进行一次编译,编译完成后就可以根据目标函数的函数名构建对应的c语言结构体的结构体名,将目标函数的输入参数和返回参数作为c语言结构体的成员变量,并通过各成员变量与其在原目标函数中一致的参数类型对各成员变量进行定义,由此,封装的c语言结构体就相当于包含了目标函数中的所有参数。
59.示例性地,本实施例提供了如图2所示的一种将目标函数封装为c语言结构体的示例,如图2所示,转换箭头的左侧部分为源文件中包含的数据类型定义以及目标函数的配置
部分,转换箭头的右侧部分为基于目标函数封装得到的c语言结构体。c语言源代码文件中从上至下依次定义了int(整型)的数据类型t_i32、unsigned char(无符号字节型)的数据类型t_bool以及float(浮点型)的数据类型t_real,第一个目标函数为ieccallfun1,其返回值的数据类型为t_i32,输入参数in1的数据类型为t_i32,输入参数b1的数据类型为t_bool,将其封装成第一个c语言结构体,结构体名为tieccallfun1struct,成员变量包括数据类型为t_i32的in1,数据类型为t_bool的b1以及数据类型为t_i32的returnresult;第二个目标函数为ieccallfun2,其返回值的数据类型为t_i32,输入参数in1的数据类型为t_i32,输入参数b1的数据类型为t_bool,输入参数f1的数据类型为t_real,将其封装成第二个c语言结构体,结构体名为tieccallfun2struct,成员变量包括数据类型为t_i32的in1,数据类型为t_bool的b1,数据类型为t_real的f1以及数据类型为t_i32的returnresult。
60.步骤s20,将所述目标函数转换为外部函数;
61.本实施例中,在将目标函数封装为c语言结构体之后,函数调用设备的编程ide还会基于目标函数转换得到对应的外部函数,具体地,可以将目标函数进行一次封装,即通过添加后缀的形式将目标函数的功能执行部分封装在外部函数中作为扩展函数,以使plc程序在执行时能够通过调用外部函数来实现对目标函数的调用。
62.示例性地,对应上述实施例中的第一个目标函数ieccallfun1的外部函数可以是ieccallfun1_ext(),对应上述实施例中的第二个目标函数ieccallfun2的外部函数可以是ieccallfun2_ext()。
63.进一步地,在一些可行的实施例中,上述步骤s20具体可以包括:
64.步骤s21,将所述目标函数转换为以所述c语言结构体的函数指针作为输入参数的外部函数。
65.需要说明的是,为了使得外部函数能够起到调用目标函数进而执行其功能的作用,还需要将目标函数的参数作为外部函数的输入,而在前述实施例中已将目标函数的参数都封装到了c语言结构体中,因此将c语言结构体的函数指针作为外部函数的参数即可实现在外部函数被调用时,执行封装在外部函数中的目标函数的功能。
66.示例性地,以c语言结构体tieccallfun1struct为例,则外部函数的参数为tieccallfun1struct类型的指针*pargs,而封装在外部函数中的扩展函数根据目标函数是否带返回值可以分为两种情况,如果目标函数带返回值,则需要把返回值返回给输入,此时扩展函数的内容为:
67.{pargs-》returnresult=ieccallfun1(pargs-》in1,pargs-》b1);};
68.如果目标函数不带返回值,则在扩展函数中直接调用原目标函数,此时扩展函数的内容为{ieccallfun1(pargs-》in1,pargs-》b1);}。
69.步骤s30,根据所述c语言结构体生成iec结构体,所述iec结构体中参数的数据类型与所述目标函数中参数的数据类型一致;
70.本实施例中,在封装完c语言结构体之后,函数调用设备的编程ide就能够对该c语言结构体进行分析和识别,基于c语言代码的编写规则和iec代码的编写规则在iec程序中自动生成与c语言结构体匹配的iec结构体,iec结构体中成员变量的数据类型和c语言结构体中成员变量的数据类型是完全匹配的,由于iec结构体中的成员变量与c语言结构体中的成员变量一致,而c语言结构体相当于包含了目标函数中的所有参数,因此iec结构体中各
参数的数据类型与目标函数中参数的数据类型也一致。
71.示例性地,可参照图3,图3中上半部分定义的iec结构体为exportfun1struct,对应于上述c语言结构体tieccallfun1struct,其成员变量in1以及returnresult的数据类型为dint,与源文件中目标函数的参数in1以及returnresult的数据类型一致,都是整型,其成员变量b1的数据类型为bool,与源文件中目标函数的参数b1的数据类型一致,都是无符号字节型;图3中下半部分定义的iec结构体为exportfun2struct,对应于上述c语言结构体tieccallfun2struct,其成员变量in1以及returnresult的数据类型为dint,与源文件中目标函数的参数in1以及returnresult的数据类型一致,都是整型,其成员变量b1的数据类型为bool,与源文件中目标函数的参数b1的数据类型一致,都是无符号字节型,其成员变量f1的数据类型为real,与源文件中目标函数的参数f1的数据类型一致,都是浮点型。
72.进一步地,在一些可行的实施例中,上述步骤s30具体可以包括:
73.步骤s31,提取所述c语言结构体中包含的参数名和数据类型;
74.本实施例中,编程ide在对c语言结构体进行分析时,可以提取c语言结构体中包含的参数名(例如上述in1、b1、f1以及returnresult)以及各参数对应的数据类型。
75.步骤s32,将所述c语言结构体中包含的参数名和数据类型以iec语言导出,得到iec结构体。
76.可以理解的是,在将c语言结构体转换为iec结构体时,参数名可以直接沿用,而数据类型可以通过查询两种编程语言的编写规则进行匹配(例如c语言中的int对应iec中的dint),之后只需要通过iec语言的编写规则定义一个iec标准结构体,并将各参数及对应的数据类型填入到该iec标准结构体中即可得到与c语言结构体匹配的iec结构体。
77.步骤s40,根据所述iec结构体配置预设的iec库函数;
78.需要说明的是,本实施例中,iec程序中包括了用于调用目标函数的预设的iec库函数,但其无法直接以目标函数的参数对c语言程序中的目标函数进行调用,因此,本实施例通过构建参数与目标函数一致的iec结构体来对该iec库函数进行参数配置,即可实现通过该iec库函数调用c语言程序中的目标函数的目的。
79.进一步地,在一些可行的实施例中,上述步骤s40具体可以包括:
80.步骤s41,基于所述iec结构体定义iec结构体变量;
81.本实施例中,若需要对iec库函数进行参数配置,就需要先基于iec结构体实例化一个对应的iec结构体变量。
82.步骤s42,将所述iec结构体变量作为第一入口调用参数传入预设的iec库函数;以及将所述iec结构体的结构体名作为第二入口调用参数传入预设的iec库函数。
83.本实施例中,实例化的iec结构体变量可以配置为iec库函数的入口调用参数中的函数参数。
84.可以理解的是,本实施例中,iec库函数存在两个入口调用参数,第一入口调用参数为函数参数,可以通过函数参数对目标函数中的参数进行传值,本实施例以iec结构体变量作为该函数参数,第二入口调用参数为函数名,可以用于寻找目标函数对应的外部函数,本实施例以iec结构体的结构体名(例如exportfun1或exportfun2)作为函数名,以字符串的形式传入预设的iec库函数。
85.示例性地,参照图4,预设的iec库函数为callcfunction(),图4中上半部分为iec
结构体exportfun1struct和exportfun2struct的实例化过程,分别定义了两个iec结构体的变量,即exportfun1struct类型的fun1args和exportfun2struct类型的fun2args;图4中下半部分包括基于iec结构体变量对参数进行赋值的代码语句,通过预设的iec库函数调用目标函数ieccallfun1的代码语句callcfunction('exportfun1',fun1args);以及通过预设的iec库函数调用目标函数ieccallfun2的代码语句callcfunction('exportfun2',fun2args)。
86.步骤s50,通过所述iec库函数调用所述外部函数,以使plc控制器执行所述目标函数。
87.需要说明的是,在完成对该iec库函数的参数配置后,执行该iec函数即可完成对目标函数的调用。示例性地,在完成iec库函数的配置之后,需要将编程ide中编写完成的c语言代码和iec代码下载到plc控制器中,下载时c语言代码会自动编译为机器码,并把编译的c语言模块信息下载到控制器,供iec库函数callcfunction使用,iec库函数callcfunction从c语言模块信息中提取用于调用外部函数的c语言结构体的函数指针即可对外部函数进行调用,进而执行c语言代码中的目标函数。
88.进一步地,在一些可行的实施例中,上述步骤s50,包括:
89.步骤s51,检查所述第一入口调用参数和所述第二入口调用参数是否合法;
90.本实施例中,若所述第二入口调用参数为空,则判定所述第一入口调用参数和所述第二入口调用参数不合法;若所述第二入口调用参数不为空,则判定所述第一入口调用参数和所述第二入口调用参数合法。第一入口调用参数即函数参数可以为空,表示无参数调用,callcfunction函数在执行时主要检查第二入口调用参数即函数名是否为空,若函数名为空,则判定为参数不合法。
91.步骤s52,若是,则根据所述iec结构体的结构体名查找所述c语言结构体的函数指针;
92.本实施例中,若输入参数合法,则callcfunction函数可以根据传入的iec结构体的结构体名在保存了c语言模块信息的符号信息表(主要包含模块名、函数名等信息)中确认需要调用的外部函数是否存在,若存在则查找与函数名对应的c语言结构体的函数指针以调用外部函数。
93.此外,在步骤s51之后,所述函数调用方法还包括:若否,则结束当前调用过程。
94.应理解的是,由于本实施例中的callcfunction函数需要根据函数名确认外部函数是否存在,因此若入口调用参数中的函数名为空,则无法进行后续步骤,在结束当前调用过程后,可以输出参数不合法的提示信息或报警信息以提示操作人员或技术人员对程序进行调整。
95.步骤s53,通过所述函数指针调用所述外部函数的扩展函数以使plc控制器执行所述目标函数。
96.本实施例中,在找到函数指针后,通过函数指针和函数参数指针,调用外部函数中的扩展函数,进而执行扩展函数中包括的源文件中定义的c语言目标函数。
97.进一步地,在一些可行的实施例中,上述步骤s52中根据所述iec结构体的结构体名查找所述c语言结构体的函数指针的步骤,包括:
98.步骤s521,根据所述iec结构体的结构体名在预设的符号信息表中查找包含所述
目标函数的c语言模块;
99.步骤s522,在所述c语言模块中查找所述c语言结构体的函数指针。
100.本实施例中,callcfunction函数可以根据传入的iec结构体的结构体名找到与之对应的c语言结构体,进而得到目标函数的函数名,进而根据函数名在保存了c语言模块信息的符号信息表(主要包含模块名、函数名等信息)中确认需要调用的外部函数是否存在,若存在则查找与函数名对应的c语言结构体的函数指针以调用外部函数,若不存在则结束当前的调用过程。
101.本实施例提供了一种函数调用方法,通过将c语言目标函数的输入和返回值等参数封装为结构体,实现了c语言内存和iec内存对齐,能够基于iec语言自动产生与c语言结构体中的参数匹配的iec标准结构体,无需人工匹配参数类型,解决了函数不定长参数问题;同时,本技术通过将c语言目标函数转换为外部函数,能够自动产生c函数调用接口,无需配置繁琐的接口管理流程,进而节省了大量时间,实现了plc控制器对c语言函数的快速访问。本实施例通过内存对齐技术和c语言及iec自动匹配技术,自动产生不同编程语言中互相匹配的数据模型,实现了在plc程序中对c语言程序中指定的目标函数的快速访问,克服了现有技术中在iec61131-3中调用c语言函数时需要人工匹配参数类型并配置繁琐的接口管理流程等技术缺陷。
102.此外,本技术实施例还提出一种函数调用装置,参照图5,图5为本技术一实施例提供的一种函数调用装置的结构示意图,如图5所示,本实施例中,所述函数调用装置包括:封装模块100、转换模块200、生成模块300、配置模块400和调用模块500。
103.封装模块100,所述封装模块100用于将以c语言编写的目标函数封装为c语言结构体,所述c语言结构体中包含所述目标函数中的参数;
104.转换模块200,所述转换模块200用于将所述目标函数转换为外部函数;
105.生成模块300,所述生成模块300用于根据所述c语言结构体生成iec结构体,所述iec结构体中参数的数据类型与所述目标函数中参数的数据类型一致;
106.配置模块400,所述配置模块400用于根据所述iec结构体配置预设的iec库函数;
107.调用模块500,所述调用模块500用于通过所述iec库函数调用所述外部函数,以使plc控制器执行所述目标函数。
108.在一些可行的实施例中,所述转换模块200还用于将所述目标函数转换为以所述c语言结构体的函数指针作为输入参数的外部函数。
109.在一些可行的实施例中,所述生成模块300还用于提取所述c语言结构体中包含的参数名和数据类型;
110.将所述c语言结构体中包含的参数名和数据类型以iec语言导出,得到iec结构体。
111.在一些可行的实施例中,所述配置模块400还用于基于所述iec结构体定义iec结构体变量;
112.将所述iec结构体变量作为第一入口调用参数传入预设的iec库函数。
113.在一些可行的实施例中,所述配置模块400还用于将所述iec结构体的结构体名作为第二入口调用参数传入预设的iec库函数。
114.在一些可行的实施例中,所述调用模块500还用于检查所述第一入口调用参数和所述第二入口调用参数是否合法;
115.若是,则根据所述iec结构体的结构体名查找所述c语言结构体的函数指针;
116.通过所述函数指针调用所述外部函数的扩展函数,以使plc控制器执行所述目标函数。
117.在一些可行的实施例中,所述调用模块500还用于若所述第二入口调用参数不为空,则判定所述第一入口调用参数和所述第二入口调用参数合法。
118.在一些可行的实施例中,所述调用模块500还用于根据所述iec结构体的结构体名在预设的符号信息表中查找包含所述目标函数的c语言模块;
119.在所述c语言模块中查找所述c语言结构体的函数指针。
120.本实施例提供的函数调用装置与上述实施例提供的函数调用方法属于同一发明构思,未在本实施例中详尽描述的技术细节可参见上述任意实施例,并且本实施例具备与执行函数调用方法相同的有益效果。
121.此外,本技术实施例还提供一种函数调用设备,上述应用于函数调用设备的函数调用方法可以由函数调用装置执行,该函数调用装置可以通过软件和/或硬件的方式实现,并集成在所述函数调用设备中。所述函数调用设备可以为pc(personal computer,个人计算机,台式机、笔记本电脑、小型笔记本电脑、平板电脑以及超级本等)、手机、智能穿戴设备等具备编程ide且能够与plc控制器通信的移动设备。
122.参照图6,图6为本技术实施例一实施例提供的一种函数调用设备的硬件结构示意图。如图6所示,所述函数调用设备可以包括:处理器1001,例如中央处理器(central processing unit,cpu),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真(wireless-fidelity,wi-fi)接口)。存储器1005可以是高速的随机存取存储器(random access memory,ram),也可以是稳定的非易失性存储器(non-volatile memory,nvm),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储设备。
123.本领域技术人员可以理解,图6中示出的结构并不构成对函数调用设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
124.如图6所示,作为一种存储介质的存储器1005中可以包括操作系统、数据存储模块、网络通信模块、用户接口模块以及计算机程序。
125.在图6所示的函数调用设备中,网络接口1004主要用于与其他设备进行数据通信;用户接口1003主要用于与用户进行数据交互;本实施例中的处理器1001、存储器1005可以设置在函数调用设备中,所述函数调用设备通过处理器1001调用存储器1005中存储的计算机程序,并执行以下操作:
126.将以c语言编写的目标函数封装为c语言结构体,所述c语言结构体中包含所述目标函数中的参数;
127.将所述目标函数转换为外部函数;
128.根据所述c语言结构体生成iec结构体,所述iec结构体中参数的数据类型与所述目标函数中参数的数据类型一致;
129.根据所述iec结构体配置预设的iec库函数;
130.通过所述iec库函数调用所述外部函数,以使plc控制器执行所述目标函数。
131.进一步地,处理器1001可以调用存储器1005中存储的计算机程序,还执行以下操作:
132.将所述目标函数转换为以所述c语言结构体的函数指针作为输入参数的外部函数。
133.进一步地,处理器1001可以调用存储器1005中存储的计算机程序,还执行以下操作:
134.提取所述c语言结构体中包含的参数名和数据类型;
135.将所述c语言结构体中包含的参数名和数据类型以iec语言导出,得到iec结构体。
136.进一步地,处理器1001可以调用存储器1005中存储的计算机程序,还执行以下操作:
137.基于所述iec结构体定义iec结构体变量;
138.将所述iec结构体变量作为第一入口调用参数传入预设的iec库函数;
139.将所述iec结构体的结构体名作为第二入口调用参数传入预设的iec库函数。
140.进一步地,处理器1001可以调用存储器1005中存储的计算机程序,还执行以下操作:
141.若所述第二入口调用参数不为空,则判定所述第一入口调用参数和所述第二入口调用参数合法。
142.进一步地,处理器1001可以调用存储器1005中存储的计算机程序,还执行以下操作:
143.检查所述第一入口调用参数和所述第二入口调用参数是否合法;
144.若是,则根据所述iec结构体的结构体名查找所述c语言结构体的函数指针;
145.通过所述函数指针调用所述外部函数的扩展函数,以使plc控制器执行所述目标函数。
146.进一步地,处理器1001可以调用存储器1005中存储的计算机程序,还执行以下操作:
147.根据所述iec结构体的结构体名在预设的符号信息表中查找包含所述目标函数的c语言模块;
148.在所述c语言模块中查找所述c语言结构体的函数指针。
149.本实施例提出的函数调用设备与上述实施例提出的应用于函数调用设备的函数调用方法属于同一发明构思,未在本实施例中详尽描述的技术细节可参见上述任意实施例,并且本实施例具备与执行函数调用方法相同的有益效果。
150.此外,本技术实施例还提出一种计算机可读存储介质,应用于计算机,该计算机可读存储介质可以为非易失性计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现如上所述的任一实施例的函数调用方法。
151.本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统可以被实施为软件、固件、硬件及其适当的组合。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机
可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
152.以上是对本技术实施例的较佳实施进行了具体说明,但本技术实施例并不局限于上述实施方式,熟悉本领域的技术人员在不违背本技术实施例精神的前提下还可作出种种的等同变形或替换,这些等同的变形或替换均包含在本技术实施例权利要求所限定的范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1