CN117806852A - 一种接口调用方法、装置、存储介质及处理器 - Google Patents
一种接口调用方法、装置、存储介质及处理器 Download PDFInfo
- Publication number
- CN117806852A CN117806852A CN202410232037.0A CN202410232037A CN117806852A CN 117806852 A CN117806852 A CN 117806852A CN 202410232037 A CN202410232037 A CN 202410232037A CN 117806852 A CN117806852 A CN 117806852A
- Authority
- CN
- China
- Prior art keywords
- function
- objective function
- dynamic library
- interface
- parameters
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 70
- 230000006870 function Effects 0.000 claims abstract description 310
- 238000006243 chemical reaction Methods 0.000 claims abstract description 7
- 230000008569 process Effects 0.000 claims description 11
- 230000003993 interaction Effects 0.000 claims description 9
- 230000002159 abnormal effect Effects 0.000 claims description 7
- 238000004806 packaging method and process Methods 0.000 claims description 5
- 230000005856 abnormality Effects 0.000 claims description 4
- 238000005538 encapsulation Methods 0.000 claims description 4
- 230000033772 system development Effects 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 11
- 238000004891 communication Methods 0.000 description 9
- VLCQZHSMCYCDJL-UHFFFAOYSA-N tribenuron methyl Chemical group COC(=O)C1=CC=CC=C1S(=O)(=O)NC(=O)N(C)C1=NC(C)=NC(OC)=N1 VLCQZHSMCYCDJL-UHFFFAOYSA-N 0.000 description 9
- 238000004590 computer program Methods 0.000 description 5
- 238000011161 development Methods 0.000 description 5
- 230000018109 developmental process Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 238000003491 array Methods 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000007723 transport mechanism Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/02—Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供一种接口调用方法、装置、存储介质及处理器,属于计算机系统开发领域。所述接口调用方法:一种接口调用方法,包括:使用结构化文本语言建立目标函数,并配置所述目标函数的参数;将所述目标函数转换为C语言实现的外部函数,以及将目标函数中的参数及返回值转换为C语言结构体;结合目标函数的调用规则,通过在软PLC编程系统中配置目标函数的输入参数,来实现先执行获取动态库接口的句柄,再执行调用指定的动态库接口。本发明通过软PLC的IEC编程语言和C语言之间的转换,使得在软PLC编程系统中方便的调用动态库接口,实现了对动态库接口的快速访问的方法。
Description
技术领域
本发明涉及计算机系统开发技术领域,具体地涉及一种接口调用方法、装置、存储介质及处理器。
背景技术
软PLC(Programmable Logic Controller,可编程逻辑控制器)技术是借助嵌入式设备硬件平台,利用软件技术实现传统硬件PLC功能的技术,通过高性能处理器,解决传统硬件PLC难以完成的复杂功能,例如控制、运算和通信,符合IEC61131-3标准的软PLC系统包括编程系统和运行时系统,其中,编程系统运行在PC端,对软PLC应用程序进行编辑编译处理;运行时系统支持在不同的CPU和RTOS平台上运行,如ARM+RTLinux,运行时系统的作用是解释执行软PLC二进制文件,例如执行IEC程序的目标函数。
利用现有技术,实现动态库接口与软PLC的IEC程序之间的数据交互,存在以下缺陷:动态库接口一般是通过高级语言(C/C++)实现,与软PLC的IEC编程语言不同,且两者的编程系统环境也不同,导致用户无法直接在软PLC编程系统的IEC程序中移植动态库接口,并且在软PLC编程系统的IEC程序中需要对底层接口功能重新进行二次封装,一方面增加了用户的工作量,降低了开发效率,另一方面由于嵌入式设备厂商可能需要介入用户的底层实现,破坏了用户数据的安全性;因此,如何在软PLC系统中跨平台和语言的实现对动态库接口直接调用,并能满足系统的易用性、扩展性以及代码复用性就成为了本领域技术人员亟待解决的技术问题。
发明内容
本发明实施例的目的是提供一种接口调用方法、装置、存储介质及处理器,以解决在软PLC系统中跨平台和语言的实现对动态库接口直接调用的技术问题。
为了实现上述目的,本发明实施例提供一种接口调用方法,包括:
在软PLC编程系统中,使用结构化文本语言建立目标函数,并配置所述目标函数的参数;
将所述目标函数转换为C语言实现的外部函数,以及将目标函数中的参数及返回值转换为C语言结构体,C语言结构体的参数类型与所述外部函数中参数的数据类型一致,其中,外部函数能够被运行时系统链接;
结合目标函数的调用规则,通过在软PLC编程系统中配置目标函数的输入参数,来实现先执行获取动态库接口的句柄,再执行调用指定的动态库接口,其中,动态库是根据接口封装规则由自定义的功能模块封装而成的,所述动态库置于预设路径下,所述预设路径由运行时系统运行时系统的指定。
可选的,在如上所述的一种接口调用方法中,所述目标函数包括:获取指定C函数名的动态库接口句柄、调用指定的动态库接口、以及卸载打开的动态库句柄,其中,所述目标函数的参数包括GetCFuncHdl()的参数、CallCFunc()的参数和CloseHdl()的参数,其中,GetCFuncHdl()的参数为C函数名和动态库的绝对路径;目标函数的CallCFunc()的参数为句柄数据、输入数据、输出数据和局部数据;目标函数的CloseHdl()的参数为空。
可选的,在如上所述的一种接口调用方法中,将目标函数中的参数及返回值转换为C语言结构体,包括,
在软PLC编程系统中将目标函数导出为运行时系统可识别的M4接口文件;
在运行时系统编译M4接口文件,生成目标函数对应的C语言结构体,所述C语言结构体包含了目标函数的参数及返回值。
可选的,在如上所述的一种接口调用方法中,通过在软PLC编程系统中配置目标函数的输入参数,来实现先执行获取动态库接口的句柄,再执行调用指定的动态库接口,包括:
通过给定包括动态库符号表中的C函数名和动态库在运行时系统中的绝对路径的输入参数,来执行获取动态库接口的句柄;
通过给定包括执行所述目标函数返回的句柄数据、输入数据、输出数据和局部数据的输入参数,执行调用指定的动态库接口,以此实现动态库接口与软PLC系统的IEC程序之间的数据交互;
当目标函数调用出现异常时,执行关闭动态库的目标函数。
可选的,在如上所述的一种接口调用方法,所述目标函数的调用规则,包括:
首先创建POU程序,选择程序类型为Function block;
调用目标函数GetCFuncHdl(),配置目标函数GetCFuncHdl()的输入参数,包括C函数名和动态库的绝对路径;
检测上述目标函数GetCFuncHdl()调用是否异常,若异常,则调用目标函数CloseHdl(),卸载打开的动态库或者重启运行时系统;
若无异常,则调用目标函数CallCFunc(),配置目标函数CallCFunc()的输入参数,其包括调用目标函数GetCFuncHdl()返回的句柄数据、输入数据、输出数据以及局部数据;
执行了对动态库接口的调用。
可选的,在如上所述的一种接口调用方法中,所述执行获取动态库接口的句柄,包括:
使用结构化文本语言建立目标函数GetCFuncHdl(),获取动态库接口句柄;
配置目标函数GetCFuncHdl()的参数 ,分别为C函数名和动态库的绝对路径;
将目标函数GetCFuncHdl()设置为外部实现;
目标函数 GetCFuncHdl()转换为C语言实现的外部函数;
检测目标函数GetCFuncHdl()的参数的有效性;
检测动态库的绝对路径的有效性,运行时系统中包括指定的第三方动态库文件;
检测动态库文件是否被更新;
加载运行时系统中指定路径下的动态库;
判断调用目标函数GetCFuncHdl()后返回的句柄是否为空,若返回值为空,则返回错误信息,关闭指定句柄的动态库,结束目标函数GetCFuncHdl()的调用;
若返回值不为空,则根据句柄数据和指定的C函数名,在运行时 动态查找符号表中的C函数名对应的函数地址;
执行函数地址的查找,判断是否存在出错信息,若出错信息不为空,则返回错误信息,结束目标函数GetCFuncHdl()的调用;若出错信息为空,则通过全局函数指针获取返回的函数地址数据,并作为目标函数的返回值,结束目标函数GetCFuncHdl()的调用。
可选的,在如上所述的一种接口调用方法中,所述执行调用指定的动态库接口,包括:
使用结构化文本语言建立目标函数CallCFunc(),调用指定的动态库接口;
配置CallCFunc()的参数,分别为句柄数据、输入数据、输出数据和局部数据;
目标函数CallCFunc()转换为C语言实现的外部函数;
检测指定调用的动态库接口的句柄数据的有效性;
判断返回的句柄数据是否为空,若为空,则结束目标函数CallCFunc()的调用;若不为空,则回调执行指定的动态库接口,将返回结果作为目标函数的返回值,结束目标函数CallCFunc()的调用。
可选的,在如上所述的一种接口调用方法中,所述执行关闭动态库的目标函数,包括:
使用结构化文本语言建立目标函数CloseHdl(),卸载打开的动态库;
目标函数CloseHdl()转换为C语言实现的外部函数;
关闭指定句柄的动态库,返回结果作为目标函数CloseHdl()的返回值,结束目标函数的调用。
可选的,在如上所述的一种接口调用方法中,所述执行调用指定的动态库接口,还包括:
将目标函数的形参 数据传递给对应的外部函数;
结合C函数名称,调用到运行时系统指定路径下的动态库中对应的接口,即在动态库的符号表中查找到对应的函数信息以及对应的函数指针地址。
另一方面,本发明提供一种接口调用装置,包括:
配置单元,其经配置以使用结构化文本语言建立目标函数,并配置所述目标函数的参数;
转换单元,进一步经配置以将所述目标函数转换为C语言实现的外部函数,以及将目标函数中的参数及返回值转换为C语言结构体,并且与所述外部函数中参数的数据类型一致,其中,外部函数能够被运行时系统链接;
执行单元,其经配置以结合目标函数的调用规则,通过配置目标函数的输入参数,来实现先执行获取动态库接口的句柄,再执行调用指定的动态库接口,其中,动态库是根据接口封装规则由自定义的功能模块封装而成的,所述动态库置于预设路径下,所述预设路径由运行时系统运行时系统的指定。
又一方面,本发明提供一种机器可读存储介质,该机器可读存储介质上存储有指令,该指令用于使得机器执行本申请上述任一项所述的一种接口调用方法。
在一方面,本发明提供一种处理器,用于运行程序,其中,所述程序被运行时用于执行:如上任意一项所述的一种接口调用方法。
本发明通过软PLC的IEC编程语言和C语言之间的转换,使得在软PLC系统中方便的调用动态库接口,实现了对动态库接口的快速访问的方法,解决了动态库接口与软PLC系统的IEC程序之间的数据交互的问题,提升了系统的易用性、可扩展性,解决了跨平台、跨语言,需要对动态库接口进行二次封装的问题,提高了开发效率,保证了代码的复用性,有效保护了用户数据的安全。
本发明实施例的其它特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
附图是用来提供对本发明实施例的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本发明实施例,但并不构成对本发明实施例的限制。在附图中:
图1为本发明实施例提供的一种接口调用方法涉及的总体架构结构示意图;
图2为本发明实施例提供的一种接口调用方法涉及的外部库结构示意图;
图3为本发明实施例提供的一种接口调用方法涉及的获取动态库接口句柄的流程示意图;
图4为本发明实施例提供的一种接口调用方法涉及的调用指定的动态库接口的流程示意图;
图5为本发明实施例提供的一种接口调用方法涉及的关闭动态库的流程示意图;
图6为本发明实施例提供的一种接口调用方法涉及的外部库函数调用时序的流程示意图;
图7为本发明实施例提供的一种接口调用方法涉及的IEC库函数封装为C语言结构体的示例;
图8为本发明实施例提供的一种接口调用方法涉及的配置IEC库的目标函数调用时序的示例;
图9为本发明实施例提供的一种接口调用设备的结构示意图。
图10是本发明实施例提供的一种接口调用装置的结构框图。
具体实施方式
以下结合附图对本发明实施例的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明实施例,并不用于限制本发明实施例。
附图中示出了一些方框图和/或流程图。应理解,方框图和/或流程图中的一些方框或其组合可以由计算机程序指令来实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,从而这些指令在由该处理器执行时可以创建用于实现这些方框图和/或流程图中所说明的功能/操作的装置。本申请的技术可以硬件和/或软件(包括固件、微代码等)的形式来实现。另外,本申请的技术可以采取存储有指令的计算机可读存储介质上的计算机程序产品的形式,该计算机程序产品可供指令执行系统使用或者结合指令执行系统使用。
本发明实施例提供了一种基于软PLC的动态库接口调用方法,如图1所示为本实施例提供的一种接口调用方法所涉及的软PLC的总体架构的结构示意图,包括软PLC的编程系统100和运行时系统130。
本实施例中的软PLC总体架构的编程系统100的执行主体包括建立目标函数的IEC库110、文件加载器111、文件生成器112、工程配置模块113、IEC61131-3代码编辑器114、语言生成器115、源文件116、IEC61131-3编译器117、软PLC目标文件118以及通信模块119,软PLC编程系统100通过FTP(File Transfer Protocol,文件传输协议)和RPC(RemoteProcedure Call,远程过程调用)的方式与运行时系统130建立通信及进行数据交互,且由软PLC编程系统100编辑编译生成软PLC目标文件120,然后下载至软PLC的运行时系统130中。
其中,运行时系统130运行在嵌入式ARM+RTOS软硬件平台上,RTOS例如Linux+RTPREEMPT平台上,运行时系统130负责解释执行软PLC目标文件118,实现相应的控制,如执行IEC程序的目标函数;同理,运行时系统130通过FTP服务和RPC服务通信接口131实现与软PLC编程系统100之间的通信,例如软PLC目标文件118的传输以及软PLC编程系统100的数据监控和调试。此外,运行时系统130还包括软PLC初始化模块132、软PLC虚拟机模块133、软PLC管理器模块134以及I/O驱动模块135。其中,软PLC初始化模块131负责系统启动加载过程中的数据初始化;软PLC虚拟机模块132负责解释执行软PLC目标文件118中的软PLC任务代码;软PLC管理器模块133负责运行时系统130的启动和停止,系统组件和用户组件的加载和卸载,并初始化所有组件,链接所有函数,包括IEC库中的函数;I/O驱动模块134负责与本地或远程I/O设备136交互,将I/O设备135的输入输出数据与内存中I/O数据映像区进行映射,I/O驱动模块134负责与总线设备137进行交互。
所述建立目标函数的IEC库110的过程,如图2所示,具体实施过程如下:
首先在软PLC编程系统100中建立IEC目标函数210,配置函数参数,具体在外部库中实现,即将目标函数设置为外部实现;其次,通过软PLC编程系统100的文件加载器将IEC库110加载进用户的PLC工程文件220中,PLC工程文件220包含了用户调用目标函数的IEC代码;然后通过软PLC编程系统100的代码生成器230,生成软PLC二进制文件240。
进一步的,在运行时系统130中进行编译,生成实现外部库功能的组件,即外部库组件,该组件被组件管理器250加载或卸载,并在运行时被链接;进一步的,外部库组件的外部函数被链接,动态库260的加载和接口的调用都在各自的外部函数;进一步,用户在PLC工程文件220中的IEC程序中,对IEC目标函数210进行调用,即实现对动态库260接口的调用,以此实现动态库260接口与用户在PLC工程文件220中的IEC程序之间的数据交互。
其中,所述运行时系统130中的外部库组件的外部函数与编程系统中的IEC库的目标函数210有各自对应关系,动态库260接口由IEC库的目标函数210调用,具体实现于外部库组件的外部函数。
如图3至图6所示,较好的描述了本实施例提供的一种基于软PLC的动态库接口调用方法,其具体实施步骤如下:
步骤1:在软PLC编程系统100中创建外部库;
使用结构化文本语言建立目标函数,对应的目标函数分别是获取指定C函数名的动态库接口句柄GetCFuncHdl()、调用指定的动态库接口CallCFunc()、卸载打开的动态库句柄CloseHdl(),然后分别配置目标函数的参数;目标函数GetCFuncHdl()的参数为C函数名和动态库的绝对路径;目标函数CallCFunc()的参数为句柄数据、输入数据、输出数据和局部数据;目标函数CloseHdl()的参数为空,其中,上述动态库包括动态库260。
步骤2:将目标函数设置为外部实现;
将所述目标函数转换为C语言实现的外部函数,目标函数中的参数及返回值转换为C语言结构体,与外部函数中参数的数据类型一致,该外部函数在运行时被链接。
其中,所述目标函数的形参和返回值生成为C语言结构体,需要在软PLC编程系统100中将目标函数导出为运行时系统130可识别的M4接口文件,然后在运行时系统130中进行编译,生成目标函数对应的C语言结构体,该结构体成员包含了目标函数的参数及返回值。
步骤3:根据接口封装规则;
通过gcc交叉编译工具,用户将自定义的功能模块制作成动态库,然后将动态库置于运行时系统130的指定路径下。
步骤3中,所述动态库接口封装规则的步骤,包括:
步骤3.1:根据C函数命名规则,设定用户可识别的函数名称;
步骤3.2:遵循软PLC编程系统100的IEC程序数据类型和C函数数据类型的映射关系,设定C函数的形参,分别是指向uint8_t指针类型的输入参数,指向uint8_t指针类型的输出参数,指向uint8_t指针类型的局部数据参数,uint8_t指针类型对应的软PLC的IEC61131-3标准的数据类型为BYTE;
步骤3.3:设定C函数的返回值类型为int类型。
步骤4:根据目标函数的调用规则;
在软PLC编程系统100中分别配置目标函数的输入参数;给定参数包括动态库符号表中的C函数名和动态库在运行时系统中的绝对路径,执行获取动态库接口的句柄;给定参数包括执行上述目标函数返回的句柄数据、输入数据、输出数据以及局部数据,执行调用指定的动态库接口,以此实现动态库接口与软PLC系统的IEC程序之间的数据交互,若目标函数调用出现异常,则可以执行关闭动态库的目标函数。
如图3所示,执行获取动态库接口的句柄的实现步骤,具体如下:
S310,使用结构化文本语言建立目标函数GetCFuncHdl(),获取动态库接口句柄;
S320,配置目标函数GetCFuncHdl()的参数,分别为C函数名和动态库的绝对路径;
S330,将目标函数GetCFuncHdl()设置为外部实现;
S340,目标函数 GetCFuncHdl()转换为C语言实现的外部函数;
S350,检测目标函数GetCFuncHdl()的参数中C函数名的有效性;
S360,检测目标函数GetCFuncHdl()的参数中动态库的绝对路径的有效性,运行时系统中包括指定的动态库文件;
S370,检测动态库文件是否被更新;
S380,加载运行时系统中指定路径下的动态库;
S381,判断步骤S380中返回的句柄是否为空;若返回值不为空,则S382,根据句柄数据和指定的C函数名,在运行时动态查找符号表中的函数地址;若返回值为空,则S383,返回错误信息,关闭指定句柄的动态库,结束目标函数GetCFuncHdl()的调用;
若S381中,若返回值不为空,且执行了函数的查找,则需要S391,判断是否存在出错信息;若出错信息不为空,则S392,返回错误信息,结束目标函数GetCFuncHdl()的调用;若出错信息为空,则S393,通过全局函数指针获取返回的函数地址数据,并作为目标函数的返回值,结束目标函数GetCFuncHdl()的调用。
如图4所示,执行调用指定的动态库接口的实现步骤,具体如下:
S410,使用结构化文本语言建立目标函数CallCFunc(),调用指定的动态库接口;
S420,配置CallCFunc()的参数,分别为句柄数据、输入数据、输出数据和局部数据;
S430,将目标函数CallCFunc()设置为外部实现;
S440,目标函数CallCFunc()转换为C语言实现的外部函数;
S450,检测指定调用的动态库接口的句柄数据的有效性;
S460,判断返回的句柄数据是否为空,若为空,则结束目标函数CallCFunc()的调用;若不为空,则S461,回调执行指定的动态库接口,返回结果作为目标函数的返回值,结束目标函数CallCFunc()的调用。
如图5所示,执行关闭动态库的目标函数的步骤,具体如下:
S510,使用结构化文本语言建立目标函数CloseHdl(),卸载打开的动态库;
S520,将目标函数CloseHdl()设置为外部实现;
S530,目标函数CloseHdl()转换为C语言实现的外部函数;
S540,关闭指定句柄的动态库,返回结果作为目标函数CloseHdl()的返回值,结束目标函数CloseHdl()的调用。
步骤5:执行软PLC系统的IEC程序的目标函数;
步骤5中,将目标函数的形参数据传递给对应的外部函数;结合C函数名称,调用到运行时系统130指定路径下的动态库中对应的接口,即在动态库的符号表中查找到对应的函数信息,对应的函数指针地址,实现与软PLC编程系统的IEC程序之间的数据交互。
如图6所示,所述目标函数的调用规则的步骤,具体如下:
S610,首先创建POU程序,选择程序类型为Function block;
S620,调用目标函数GetCFuncHdl(),配置目标函数GetCFuncHdl()的输入参数,包括C函数名和动态库的绝对路径;
S630,检测上述目标函数调用是否异常,若异常,则S631,调用目标函数CloseHdl(),卸载打开的动态库或者重启运行时系统130;若无异常,则继续步骤S640,;
S640,调用目标函数CallCFunc(),配置目标函数CallCFunc()的输入参数,包括输入数据、输出数据以及局部数据以及步骤4.2目标函数返回的句柄数据;
S650,同理执行S631,若无异常,则正常执行了对动态库接口的调用。
如图7至图8所示,较好的描述了本实施例提供的动态库接口调用方法的具体示例,具体来说:
如图7所示,基于软PLC系统的动态库接口调用方法涉及的IEC库函数封装为C语言结构体的示例,图中转换箭头的左侧部分为使用结构化文本语言在IEC库中建立的目标函数及配置参数,转换箭头的右侧部分为目标函数中的参数及返回值转换为C语言结构体。其中,根据软PLC系统的IEC程序数据类型和C语言数据类型的映射关系,IEC61131-3数据类型DWORD对应的C语言数据类型为RTS_IEC_DWORD(uint32_t),IEC61131-3数据类型STRING对应的C语言数据类型为RTS_IEC_STRING(char),IEC61131-3数据类型BYTE对应的C语言数据类型为RTS_IEC_BYTE(uint8_t),IEC61131-3数据类型DINT对应的C语言数据类型为RTS_IEC_DINT(int32_t);第一个目标函数为GetCFuncHdl,其返回值的数据类型为CFuncHdl,对应的是DWORD(双字型),输入参数FuncName的数据类型为STRING即字符串型,输入参数Path的数据类型为STRING即字符串型,封装成对应的C语言结构体,结构体名为getcfunchdl_struct,结构体成员包括数据类型为RTS_IEC_STRING的FuncName,数据类型为RTS_IEC_STRING的Path,以及数据类型为RTS_IEC_DWORD的GetCFuncHdl;第二个目标函数为CallCFunc,其返回值的数据类型为DINT即整型,输入参数Hdl的数据类型为CFuncHdl,对应的是DWORD即双字型,输入参数pInputParam的数据类型为POINTER TO BYTE即指向字节型的指针,输入参数pOutputParam的数据类型为POINTER TO BYTE即指向字节型的指针,输入参数pInstParam的数据类型为POINTER TO BYTE即指向字节型的指针,封装成对应的C语言结构体,结构体名为callcfunc_struct,结构体成员包括数据类型为RTS_IEC_DWORD的Hdl,数据类型为指向RTS_IEC_BYTE的指针的pInputParam,数据类型为指向RTS_IEC_BYTE的指针的pOutputParam以及数据类型为指向RTS_IEC_BYTE的指针的pInstParam。
如图8所示,基于软PLC系统的动态库接口调用方法涉及的配置IEC库的目标函数调用时序的示例,图中上半部分为目标函数GetCFuncHdl和CallCFunc配置的具体参数;图中下半部分为结合配置的具体参数,对目标函数的输入参数进行赋值,进一步的调用时序如下:
通过预设的IEC库函数先调用目标函数GetCFuncHdl的代码语句GetCFuncHdl(FuncName:= 'funcdemo', Path:= LibPath);
进一步通过预设的IEC库函数再调用目标函数CallCFunc的代码语句CallCFunc(Hdl=CFuncHandle0,pInputParam:=ADR(Input0),pOutputParam:=ADR(Output0) ,pInstParam:=ADR(Inst0))。
其中,目标函数CallCFunc的输入参数pInputParam、pOutputParam和pInstParam,支持的数据类型包括基本数据类型、基本数据类型数组、结构体数组和自定义结构体,结构体不能嵌套复杂数据成员例如结构体,结构体成员包括基本数据类型和基本类型的数组。
此外,本发明实施例还提供一种基于软PLC的动态库接口调用方法的设备载体,如图9所示,该图为动态库接口调用设备的硬件结构示意图,软PLC的编程系统宿主于PC设备710,运行时系统宿主于嵌入式设备。图中所示包括:710是PC(Personal Computer,个人计算机)设备,包括台式机、笔记本电脑、小型笔记本电脑、平板电脑以及超级本,720是软PLC开发环境,即软PLC的编程系统或者编程IDE,730是嵌入式设备,包括标准的逻辑控制器、运动控制器、工控机以及总线耦合器,740是实时操作系统,包括Windows RTE、Linux+RTOS、VxWorks、QNX,750是运行时系统,它是宿主在实时操作系统中,760是处理器,包括Intel86、X86、ARM-base CPUS、ARM Cortex CPUS、PowerPC、MIPS,770是输入输出设备,包括本地/远程IO设备、总线设备等,780是存储器,包括高速的随机存取存储器(RAM)、非易失性存储器(NVM),具体如SD卡、磁盘存储器等,790是网络通信接口,包括标准的有线接口和无线接口,其中,软PLC开发环境720包括PLC开发系统(IEC61131-3)721、开发工具722和IEC库723,运行时系统750包括PLC应用程序751、运行时主程序752和固件程序753。
在图9所示的设备中,网络接口790主要用于PC设备与嵌入式设备的数据通信;本实施例中的处理器760、存储器780设置在嵌入式设备中,所述动态库接口调用设备通过处理器760调用存储器780中存储的PLC应用程序、运行时主程序、固件程序等,并执行如下操作:
将目标函数设置为外部实现,所述目标函数转换为C语言实现的外部函数,目标函数中的参数及返回值转换为C语言结构体,与外部函数中参数的数据类型一致,外部函数能够被运行时链接;将动态库置于运行时系统的指定路径下;结合目标函数的调用规则,在软PLC编程系统中分别配置目标函数的输入参数,先执行目标函数获取动态库接口的句柄,再执行目标函数调用指定的动态库接口,以此实现动态库接口与软PLC系统的IEC程序之间的数据交互,其中,目标函数调用出现异常时,可以执行关闭动态库的目标函数。
本实施例提出的基于软PLC的动态库接口调用设备与上述实施例提出的应用于动态库接口调用设备的动态库接口调用方法属于同一发明构思,未在本实施例中详尽描述的技术细节可参见上述任意实施例,并且本实施例具备与执行动态库接口调用方法相同的有益效果。
图10为根据本申请一些实施例的一种接口调用装置,包括:
配置单元110,其经配置以使用结构化文本语言建立目标函数,并配置所述目标函数的参数;
转换单元120,进一步经配置以将所述目标函数转换为C语言实现的外部函数,以及将目标函数中的参数及返回值转换为C语言结构体,并且与所述外部函数中参数的数据类型一致,其中,外部函数能够被运行时系统链接;
执行单元130,其经配置以结合目标函数的调用规则,通过配置目标函数的输入参数,来实现先执行获取动态库接口的句柄,再执行调用指定的动态库接口,其中,动态库是根据接口封装规则由自定义的功能模块封装而成的,所述动态库置于预设路径下,所述预设路径由运行时系统运行时系统的指定。
根据本申请一些实施例的一种机器可读存储介质,该机器可读存储介质上存储有指令,该指令用于使得机器执行本申请上述任一项所述的一种接口调用方法。
根据本申请一些实施例的一种处理器,用于运行程序,其中,所述程序被运行时用于执行:如上述任意一项所述的一种接口调用方法。
本申请实施例还提出一种计算机可读存储介质,该介质可以为非易失性计算机可读存储介质,该介质上存储有计算机程序,该计算机程序被处理器执行时实现如上所述的任一实施例的基于软PLC的动态库接口调用方法。该介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
本发明具体实施途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进,这些改进也应视为本发明的保护范围。
Claims (12)
1.一种接口调用方法,其特征在于,包括:
在软PLC编程系统中,使用结构化文本语言建立目标函数,并配置所述目标函数的参数;
将所述目标函数转换为C语言实现的外部函数,以及将目标函数中的参数及返回值转换为C语言结构体,C语言结构体的参数类型与所述外部函数中参数的数据类型一致,其中,外部函数能够被运行时系统链接;
结合目标函数的调用规则,通过在软PLC编程系统中配置目标函数的输入参数,来实现先执行获取动态库接口的句柄,再执行调用指定的动态库接口,其中,动态库是根据接口封装规则由自定义的功能模块封装而成的,所述动态库置于预设路径下,所述预设路径由运行时系统运行时系统的指定。
2.根据权利要求1所述的一种接口调用方法,其特征在于,所述目标函数包括:获取指定C函数名的动态库接口句柄的目标函数GetCFuncHdl()、调用指定的动态库接口的目标函数CallCFunc()、以及卸载打开的动态库句柄的目标函数CloseHdl(),其中,所述目标函数的参数包括GetCFuncHdl()的参数、CallCFunc()的参数和CloseHdl()的参数,其中,GetCFuncHdl()的参数为C函数名和动态库的绝对路径;目标函数的CallCFunc()的参数为输入数据、输出数据、局部数据以及句柄数据;目标函数的CloseHdl()的参数为空。
3.根据权利要求1所述的一种接口调用方法,其特征在于,将目标函数中的参数及返回值转换为C语言结构体,包括,
在软PLC编程系统中将目标函数导出为运行时系统可识别的M4接口文件;
在运行时系统编译M4接口文件,生成目标函数对应的C语言结构体,所述C语言结构体包含了目标函数的参数及返回值。
4.根据权利要求1所述的一种接口调用方法,其特征在于,通过在软PLC编程系统中配置目标函数的输入参数,来实现先执行获取动态库接口的句柄,再执行调用指定的动态库接口,包括:
通过给定包括动态库符号表中的C函数名和动态库在运行时系统中的绝对路径的输入参数,来执行获取动态库接口的句柄;
通过给定包括输入数据、输出数据、局部数据以及执行所述目标函数返回的句柄数据的输入参数,执行调用指定的动态库接口,以此实现动态库接口与软PLC编程系统的IEC程序之间的数据交互;
当目标函数调用出现异常时,执行关闭动态库的目标函数。
5.根据权利要求2所述的一种接口调用方法,其特征在于,所述目标函数的调用规则,包括:
首先创建POU程序,选择程序类型为Function block;
调用目标函数GetCFuncHdl(),配置目标函数GetCFuncHdl()的输入参数,包括C函数名和动态库的绝对路径;
检测上述目标函数GetCFuncHdl()调用是否异常,若异常,则调用目标函数CloseHdl(),卸载打开的动态库或者重启运行时系统;
若无异常,则调用目标函数CallCFunc(),配置目标函数CallCFunc()的输入参数,其包括调用输入数据、输出数据、局部数据以及目标函数GetCFuncHdl()返回的句柄数据;
执行了对动态库接口的调用。
6.根据权利要求5所述的一种接口调用方法,其特征在于,所述执行获取动态库接口的句柄,包括:
使用结构化文本语言建立目标函数GetCFuncHdl(),获取动态库接口句柄;
配置目标函数GetCFuncHdl()的参数,分别为C函数名和动态库的绝对路径;
将目标函数GetCFuncHdl()设置为外部实现;
目标函数 GetCFuncHdl()转换为C语言实现的外部函数;
检测目标函数GetCFuncHdl()的参数中C函数名的有效性;
检测目标函数GetCFuncHdl()的参数中动态库的绝对路径的有效性,运行时系统中包括指定的动态库文件;
检测动态库文件是否被更新;
加载运行时系统中指定路径下的动态库;
判断调用目标函数GetCFuncHdl()后返回的句柄是否为空,若返回值为空,则返回错误信息,关闭指定句柄的动态库,结束目标函数GetCFuncHdl()的调用;
若返回值不为空,则根据句柄数据和指定的C函数名,在运行时动态查找符号表中的C函数名对应的函数地址;
执行函数地址的查找,判断是否存在出错信息,若出错信息不为空,则返回错误信息,结束目标函数GetCFuncHdl()的调用;若出错信息为空,则通过全局函数指针获取返回的函数地址数据,并作为目标函数的返回值,结束目标函数GetCFuncHdl()的调用。
7.根据权利要求2所述的一种接口调用方法,其特征在于,所述执行调用指定的动态库接口,包括:
使用结构化文本语言建立目标函数CallCFunc(),调用指定的动态库接口;
配置CallCFunc()的参数,分别为输入数据、输出数据、局部数据以及句柄数据;
目标函数CallCFunc()转换为C语言实现的外部函数;
检测指定调用的动态库接口的句柄数据的有效性;
判断返回的句柄数据是否为空,若为空,则结束目标函数CallCFunc()的调用;若不为空,则回调执行指定的动态库接口,将返回结果作为目标函数的返回值,结束目标函数CallCFunc()的调用。
8.根据权利要求6所述的一种接口调用方法,其特征在于,所述执行关闭动态库的目标函数,包括:
使用结构化文本语言建立目标函数CloseHdl(),卸载打开的动态库;
目标函数CloseHdl()转换为C语言实现的外部函数;
关闭指定句柄的动态库,返回结果作为目标函数CloseHdl()的返回值,结束目标函数的调用,所述指定句柄为调用目标函数GetCFuncHdl()后返回的句柄。
9.根据权利要求7所述的一种接口调用方法,其特征在于,所述执行调用指定的动态库接口,还包括:
将目标函数的形参数据传递给对应的外部函数,所述形参数据包括输入数据、输出数据、局部数据和句柄数据;
结合C函数名称,调用到运行时系统指定路径下的动态库中对应的接口,即在动态库的符号表中查找到对应的函数信息以及对应的函数指针地址。
10.一种接口调用装置,其特征在于,包括:
配置单元,其经配置以使用结构化文本语言建立目标函数,并配置所述目标函数的参数;
转换单元,进一步经配置以将所述目标函数转换为C语言实现的外部函数,以及将目标函数中的参数及返回值转换为C语言结构体,并且与所述外部函数中参数的数据类型一致,其中,外部函数能够被运行时系统链接;
执行单元,其经配置以结合目标函数的调用规则,通过配置目标函数的输入参数,来实现先执行获取动态库接口的句柄,再执行调用指定的动态库接口,其中,动态库是根据接口封装规则由自定义的功能模块封装而成的,所述动态库置于预设路径下,所述预设路径由运行时系统运行时系统的指定。
11.一种机器可读存储介质,该机器可读存储介质上存储有指令,该指令用于使得机器执行本申请上述权利要求1-9任一项所述的一种接口调用方法。
12.一种处理器,其特征在于,用于运行程序,其中,所述程序被运行时用于执行:如权利要求1-9任意一项所述的一种接口调用方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410232037.0A CN117806852B (zh) | 2024-03-01 | 2024-03-01 | 一种接口调用方法、装置、存储介质及处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410232037.0A CN117806852B (zh) | 2024-03-01 | 2024-03-01 | 一种接口调用方法、装置、存储介质及处理器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117806852A true CN117806852A (zh) | 2024-04-02 |
CN117806852B CN117806852B (zh) | 2024-05-14 |
Family
ID=90428363
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410232037.0A Active CN117806852B (zh) | 2024-03-01 | 2024-03-01 | 一种接口调用方法、装置、存储介质及处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117806852B (zh) |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040098141A1 (en) * | 2002-09-26 | 2004-05-20 | Martin David E. | System and method for universal extensibility that supports a plurality of programmable logic controllers |
CN101877002A (zh) * | 2009-11-30 | 2010-11-03 | 许继集团有限公司 | 基于统一接口的内存数据库分布式访问方法及系统 |
CN107193628A (zh) * | 2017-04-07 | 2017-09-22 | 万达百汇科技(深圳)有限公司 | 支付终端应用仿真方法和装置 |
CN111045840A (zh) * | 2019-12-06 | 2020-04-21 | 北京和利时智能技术有限公司 | Plc固件系统、封装接口方法、装置、存储介质及电子设备 |
CN111610966A (zh) * | 2019-02-22 | 2020-09-01 | 龙芯中科技术有限公司 | 程序的运行方法、装置和计算设备 |
WO2021227971A1 (zh) * | 2020-05-15 | 2021-11-18 | 阿里巴巴集团控股有限公司 | 沙箱实现方法、装置、设备和存储介质 |
CN114356320A (zh) * | 2022-01-06 | 2022-04-15 | 赞同科技股份有限公司 | 一种转换动态库的生成方法以及装置 |
CN114706592A (zh) * | 2021-04-13 | 2022-07-05 | 三峡大学 | 面向对象及面向过程语言的Modelica仿真组件生成方法 |
CN115328679A (zh) * | 2022-08-22 | 2022-11-11 | 青岛海讯数字科技有限公司 | 异构函数库的自动化集成方法、计算设备及其系统 |
CN115827116A (zh) * | 2022-11-17 | 2023-03-21 | 深圳市汇川技术股份有限公司 | 函数调用方法、装置、设备及计算机可读存储介质 |
CN115933514A (zh) * | 2022-12-19 | 2023-04-07 | 深圳市康必达控制技术有限公司 | 基于软plc的控制方法、装置、终端及存储介质 |
CN116346963A (zh) * | 2023-03-06 | 2023-06-27 | 东南大学 | 网络通信方法、设备、介质和程序产品 |
CN116483481A (zh) * | 2023-05-08 | 2023-07-25 | 南京南瑞继保电气有限公司 | 一种固件库调用方法、装置、设备及存储介质 |
-
2024
- 2024-03-01 CN CN202410232037.0A patent/CN117806852B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040098141A1 (en) * | 2002-09-26 | 2004-05-20 | Martin David E. | System and method for universal extensibility that supports a plurality of programmable logic controllers |
CN101877002A (zh) * | 2009-11-30 | 2010-11-03 | 许继集团有限公司 | 基于统一接口的内存数据库分布式访问方法及系统 |
CN107193628A (zh) * | 2017-04-07 | 2017-09-22 | 万达百汇科技(深圳)有限公司 | 支付终端应用仿真方法和装置 |
CN111610966A (zh) * | 2019-02-22 | 2020-09-01 | 龙芯中科技术有限公司 | 程序的运行方法、装置和计算设备 |
CN111045840A (zh) * | 2019-12-06 | 2020-04-21 | 北京和利时智能技术有限公司 | Plc固件系统、封装接口方法、装置、存储介质及电子设备 |
WO2021227971A1 (zh) * | 2020-05-15 | 2021-11-18 | 阿里巴巴集团控股有限公司 | 沙箱实现方法、装置、设备和存储介质 |
CN114706592A (zh) * | 2021-04-13 | 2022-07-05 | 三峡大学 | 面向对象及面向过程语言的Modelica仿真组件生成方法 |
CN114356320A (zh) * | 2022-01-06 | 2022-04-15 | 赞同科技股份有限公司 | 一种转换动态库的生成方法以及装置 |
CN115328679A (zh) * | 2022-08-22 | 2022-11-11 | 青岛海讯数字科技有限公司 | 异构函数库的自动化集成方法、计算设备及其系统 |
CN115827116A (zh) * | 2022-11-17 | 2023-03-21 | 深圳市汇川技术股份有限公司 | 函数调用方法、装置、设备及计算机可读存储介质 |
CN115933514A (zh) * | 2022-12-19 | 2023-04-07 | 深圳市康必达控制技术有限公司 | 基于软plc的控制方法、装置、终端及存储介质 |
CN116346963A (zh) * | 2023-03-06 | 2023-06-27 | 东南大学 | 网络通信方法、设备、介质和程序产品 |
CN116483481A (zh) * | 2023-05-08 | 2023-07-25 | 南京南瑞继保电气有限公司 | 一种固件库调用方法、装置、设备及存储介质 |
Non-Patent Citations (4)
Title |
---|
NAN ZHOU 等: "Hybrid Synchronous–Asynchronous Execution of Reconfigurable PLC Programs in Edge Computing", 《 IEEE TRANSACTIONS ON INDUSTRIAL INFORMATICS》, vol. 18, no. 3, 28 June 2021 (2021-06-28), pages 1663, XP011893050, DOI: 10.1109/TII.2021.3092741 * |
杨新波: "电力数据网传输模式研究", 《中国优秀硕士学位论文全文数据库工程科技Ⅱ辑》, no. 9, 15 September 2010 (2010-09-15), pages 042 - 325 * |
祝广场 等: "基于Prodave的西门子PLC与PC以太网通信研究", 《化工自动化及仪表》, vol. 44, no. 4, 10 April 2017 (2017-04-10), pages 397 - 400 * |
龙骑科技: "C#调用C++动态库接口函数和回调函数方法", Retrieved from the Internet <URL:《https://www.cnblogs.com/1175429393wljblog/p/17836183.html》> * |
Also Published As
Publication number | Publication date |
---|---|
CN117806852B (zh) | 2024-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8327316B2 (en) | Compilation model | |
EP1586967B1 (en) | A method and control system for controlling machinery | |
US8984131B2 (en) | Real-time run-time system with an administrative module to configure functional modules of the system | |
CN111399840B (zh) | 一种模块开发方法及装置 | |
CN113805882A (zh) | 应用程序开发的方法、装置、电子设备及存储介质 | |
CN113407362A (zh) | 基于车载Android系统SOA架构SOMEIP通信中间层实现方法及系统 | |
US20040098141A1 (en) | System and method for universal extensibility that supports a plurality of programmable logic controllers | |
WO2024011825A1 (zh) | 第三方app中引入小程序的系统、方法、装置及介质 | |
WO2024140416A1 (zh) | 一种工业控制程序开发平台及方法 | |
CN114706590B (zh) | Plc应用包生成方法、plc应用执行方法及相关装置和系统 | |
CN112114789B (zh) | 一种业务开发方法及设备 | |
CN115390846A (zh) | 编译构建方法、装置、电子设备和存储介质 | |
CN103150161B (zh) | 基于MapReduce计算模型的任务封装方法及装置 | |
US7350193B2 (en) | Procedure invocation in an integrated computing environment having both compiled and interpreted code segments | |
CN117806852B (zh) | 一种接口调用方法、装置、存储介质及处理器 | |
US11748233B2 (en) | Debugging a native compiled application from an integrated development environment | |
CN116166457A (zh) | 数据处理方法及相关设备 | |
CN114281404B (zh) | 一种工控机算法代码的移植方法及装置 | |
CN112035097B (zh) | 基于银河锐华操作系统的c++适配层的装置 | |
CN114546515A (zh) | 动态加载静态库的模块、固件及设备和C库转Lua库的方法 | |
CN114416222A (zh) | 应用程序调用驱动接口的方法及装置 | |
Kiss | Build automation systems against CI lock-in-A comparative study of Dagger and Mage | |
CN117170738B (zh) | Python与Fortran互调用的方法、系统、设备及存储介质 | |
Wang | Component-based performance-sensitive real-time embedded software | |
Ebenhofer et al. | Generic and reconfigurable IEC 61499 function blocks for advanced platform independent engineering |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |