基于PLC的跨语言平台通信方法、系统、设备及介质与流程

文档序号:33452335发布日期:2023-03-15 01:15阅读:44来源:国知局
基于PLC的跨语言平台通信方法、系统、设备及介质与流程
基于plc的跨语言平台通信方法、系统、设备及介质
技术领域
1.本发明涉及跨语言通信技术领域,具体涉及一种基于plc的跨语言平台通信方法、系统、设备及介质。


背景技术:

2.在风电领域应用的plc中,通常需要运行两套程序。一套是plc的控制策略,另一套为发电机的算法程序。这两种程序的编写语言是不统一的,控制策略使用st(structured text,结构化文本)语言开发,而算法程序使用c/c++语言。在plc中运行两套差异如此大的程序,通信就是一个无法回避的问题。
3.在codesys编程中提供了一种称为svi(switch virtual interface,交换机虚拟接口)的数据通信接口。只要把全局变量加入到符号配置表中,通过svi接口函数就可以找到该变量的相关信息。通过获取变量地址就可以去访问该变量,从而实现应用程序与驱动程序之间的通信。codesys提供的svi的通信接口,其实就是一种内存共享。虽然通过该方式可以实现应用程序与驱动程序之间的通信,但是功能过于单一,并且操作不方便。每次加入到符合配置表中的变量,首先写入到mconfig文件中,而且变量的路径也必须准确。通过变量的路径找到变量的地址,然后才可以进行使用。如此一来,控制器策略程序和算法程序和msconfig(microsoft system configuration,系统配置实用程序)的解析文件三方需要约定好变量,对控制策略的操作和算法程序进行跨语言编写任务交互时,由于语言不通导致通信不便。因此,需要提供一种基于plc的跨语言平台通信方法、系统、设备及介质。


技术实现要素:

4.鉴于以上现有技术的缺点,本发明的目的在于提供一种基于plc的跨语言平台通信方法,以改善现有技术中,跨语言编写任务交互时,由于语言不通导致通信不便的问题。
5.为实现上述目的及其它相关目的,本发明提一种基于plc的跨语言平台通信方法,包括以下过程:。
6.创建队列函数库;
7.由第一语言编写待发送数据,并将所述待发送数据发送至所述队列函数库;
8.所述队列函数库对所述待发送数据进行运算,并发送由第二语言编写的运算结果。
9.在本发明一实施例中,所述第一语言为结构化文本语言或c语言,所述第二语言对应为c语言或结构化文本语言。
10.在本发明一实施例中,所述队列函数库由第一语言平台创建,并在创建成功后,向所述第一语言平台返回创建成功信息。
11.在本发明一实施例中,所述所述由第一语言编写待发送数据,并将所述待发送数据发送至所述队列函数库包括以下过程:
12.解析对应的发送请求,并根据所述发送请求编写所述待发送数据;
13.将所述待发送数据通过预设的发送函数,发送至所述队列函数库。
14.在本发明一实施例中,所述队列函数库对所述待发送数据进行运算,并发送由第二语言编写的运算结果,包括以下过程:
15.将所述待发送数据对应的函数名与队列函数库中预存的多个函数名进行匹配,获得与所述待发送数据的函数名相应的队列函数库中的函数体;
16.将所述待发送数据代入至所述函数体中进行运算;
17.所述队列函数库将运算结果通过预设的接收函数发送至第二语言平台代入。
18.在本发明一实施例中,所述创建队列函数库之前,还包括:创建信号量函数,并判断所述信号量函数的创建状态,若所述信号量函数创建成功则发出信号量函数创建成功信息。
19.在本发明一实施例中,在所述信号量函数创建成功之后,获取所述信号量函数的信号,若获取成功则所述队列函数库执行对应的运算,否则进入阻塞状态,直至获取成功。
20.在本发明一实施例中,还提供一种基于plc的跨语言平台通信系统,所述系统包括:
21.队列函数库创建模块,用于创建队列函数库;
22.待发送数据获取模块,用于由第一语言编写待发送数据,并将所述待发送数据发送至所述队列函数库;
23.运算结果获取模块,用于所述队列函数库对所述待发送数据进行运算,并发送由第二语言编写的运算结果。
24.在本发明一实施例中,还提供一种基于plc的跨语言平台通信的设备,包括处理器,所述处理器与存储器耦合,所述存储器存储有程序指令,当所述存储器存储的程序指令被所述处理器执行时实现上述任一项所述的方法。
25.在本发明一实施例中,还提供一种计算机可读存储介质,包括程序,当所述程序在计算机上运行时,使得计算机执行上述中任一项所述的方法。
26.综上所述,本发明中,第一语言和第二语言实现通信时,通过将待发送数据通过对应接口发送至创建的队列函数库中,在队列函数库中进行运算,运算完成后,队列函数库将运算结果发送至第二语言平台。实现了两种不同语言的通信。解决了第一语言和第二语言之间的编写任务交互时的通信问题。方便了两个不同领域工程师的任务协作,提高了跨语言的开发效率。能够简单快速的实现两个跨平台语言的跨端调用。
附图说明
27.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
28.图1显示为本发明一实施例中基于plc的跨语言平台通信方法的流程示意图;
29.图2显示为本发明一实施例中步骤s2的流程示意图;
30.图3显示为本发明一实施例中步骤s3的流程示意图;
31.图4显示为本发明一实施例中基于plc的跨语言平台通信系统的原理结构示意图。
32.元件标号说明:
33.10、基于plc的跨语言平台通信系统;11、队列函数库创建模块;12、待发送数据获取模块;13、运算结果获取模块。
具体实施方式
34.以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其它优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。还应当理解,本发明实施例中使用的术语是为了描述特定的具体实施方案,而不是为了限制本发明的保护范围。下列实施例中未注明具体条件的试验方法,通常按照常规条件,或者按照各制造商所建议的条件。
35.请参阅图1至图4。须知,本说明书附图所绘示的结构、比例、大小等,均仅用以配合说明书所揭示的内容,以供熟悉此技术的人士了解与阅读,并非用以限定本发明可实施的限定条件,故不具技术上的实质意义,任何结构的修饰、比例关系的改变或大小的调整,在不影响本发明所能产生的功效及所能达成的目的下,均应仍落在本发明所揭示的技术内容所能涵盖的范围内。同时,本说明书中所引用的如“上”、“下”、“左”、“右”、“中间”及“一”等的用语,亦仅为便于叙述的明了,而非用以限定本发明可实施的范围,其相对关系的改变或调整,在无实质变更技术内容下,当亦视为本发明可实施的范畴。
36.当实施例给出数值范围时,应理解,除非本发明另有说明,每个数值范围的两个端点以及两个端点之间任何一个数值均可选用。除非另外定义,本发明中使用的所有技术和科学术语与本技术领域的技术人员对现有技术的掌握及本发明的记载,还可以使用与本发明实施例中所述的方法、设备、材料相似或等同的现有技术的任何方法、设备和材料来实现本发明。
37.请参阅图1,图1显示为本发明一实施例中基于plc的跨语言平台通信方法的结构示意图,本发明提供一种基于plc的跨语言平台通信方法。第一语言和第二语言实现通信时,通过将待发送数据通过对应接口发送至创建的队列函数库中,在队列函数库中进行运算,运算完成后,队列函数库将运算结果发送至第二语言平台。实现了两种不同语言的通信。解决了第一语言和第二语言之间的编写任务交互时的通信问题。方便了两个不同领域工程师的任务协作,提高了跨语言的开发效率。能够简单快速的实现两个跨平台语言的跨端调用,降低了开发成本,优化了用户体验。
38.为了实现控制策略程序和算法程序的通信,本发明建立了一套跨语言的通信机制,以此来满足用户的通信需求,为了便于叙述,可将该跨语言的通信机制命名为cgn_comm。cgn_comm可以满足用户程序的存储空间的需求,且不会进入另一个用户程序空间,同时也满足不同的用户程序之间通信。即消息在一个用户程序的地址空间打包形成消息,然后拷贝到另一个用户程序的地址空间,这些工作由cgn_comm完成。cgn_comm是一套使用灵活,功能强大的跨语言的通信机制,该通信机制的通信接口采用st语言编写而成,而具体实现则采用c语言编写完成。cgn_comm通信机制由两种通信功能组成,分别命名为cgn_csapqueue和cgn_csapsem。其中,cgn_csapqueue主要提供控制策略程序和算法程序之间数
据传输,cgn_csapsem主要提供控制策略程序和算法程序之间的任务同步,具体工作机制请参见下述内容。
39.请参阅图1,在本发明一实施例中,提供一种基于plc的跨语言平台通信方法,包括以下过程:
40.s1、响应于第一语言平台的应用请求,创建队列函数库,所述队列函数库由第二语言编写。
41.第一语言平台的应用请求可为使用plc进行的相关操作,例如对整数进行运算、对浮点数进行运算等。并创建队列函数库cgn_csapqueue,从而实现对第一语言的转化。具体地,由于cgn_comm为st语言提供一种api(application programming interface)接口,st语言可通过该接口,将待发送数据写入到cgn_csapqueue中,cgn_csapqueue运行时,若涉及到内核函数,则由用户态转为内核态,最终在服务器的内核中进行相关数据的运算。内核是操作系统中最核心最重要的模块,是操作系统首先加载到内存的部分,通过在内核的保护区域中进行代码运算,可将应用和内核隔离开来,提高了操作系统的可靠性和稳定性。为了实现信息交互的时效性,在本发明一实施例中,队列函数库创建成功后,向第一语言平台返回创建成功信息。从而告知第一语言平台可进行数据传送的操作。进一步地,当队列函数库创建失败后,向第一语言平台返回创建失败信息,以阻止第一语言平台进行数据传送。
42.需要说明的是,对列函数库可以由第一语言平台创建,也可以由第二语言平台创建,也即队列函数库可以由第一语言编写,也可由第二语言编写,只要能够实现第一语言和第二语言的通信传输即可,在此不做限定。
43.s2、根据所述第一语言平台的应用请求,编写待发送数据,并将所述待发送数据发送至所述队列函数库,所述待发送数据的编程语言为第一语言。
44.请参阅图2,图2显示为本发明一实施例中步骤s2的流程示意图。在本发明一实施例中,步骤s2包括以下过程;
45.s21、解析所述第一语言平台的请求,并根据所述请求编写所述待发送数据;
46.s22、将所述待发送数据通过预设的发送函数,发送至所述队列函数库。
47.可根据预设的协议,通过解析获得第一语言平台的请求。然后根据队列函数库cgn_csapqueue中预设的函数名,通过cgn_comm预设的发送函数,将待发送数据通过第一语言写入至该函数名对应的队列函数库中。运行时,通过读取队列函数库中携带的待发送数据,进行相应运算。
48.由于风电领域的plc中通常需要运行c语言和st语言两套程序,因此,为了适应风电领域中应用的plc程序,在本发明一实施例中,第一语言为结构化文本语言,也即st语言,第二语言为c语言。这种情况下,st语言可将待发送的数据发送至队列函数库,队列函数库将运算结果发送至c语言平台,从而可实现由st语言向c语言的通信。在本发明另一实施例中,第一语言为c语言,第二语言为结构化文本语言,即st语言。这种情况下,c语言可将待发送的数据发送至队列函数库,由队列函数库将运算结果发送至st语言平台,从而实现了由c语言向st语言的通信。进而实现了第一语言和第二语言的双向通信。可以理解的是,本发明所述的第一语言和第二语言并不限于结构化文本语言和st语言,本领域技术人员可根据实际需要适应性选择,在此不做限定。
49.s3、基于所述队列函数库对所述待发送数据进行运算,并将运算结果通过所述队
列函数库发送至第二语言平台,所述运算结果由第二语言编写。
50.请参阅图3,图3显示为本发明一实施例中步骤s3的流程示意图。在本发明一实施例中,步骤s3包括以下过程:
51.s31、将所述待发送数据对应的函数名与队列函数库中预存的多个函数名进行匹配,获得与所述队列函数库的函数名相应的队列函数库中的函数体;
52.s32、将所述待发送数据代入至所述函数体中进行运算;
53.s33、所述队列函数库将运算结果通过预设的接收函数发送至第二语言平台。
54.通过队列函数库对待发送数据进行运算后,得到运算结果,然后第二语言通过cgn_comm提供的接收函数,接收到这种用于第二语言编写的运算结果,并将运算结果展现在第二语言平台上。具体地,通过向队列函数库发送数据包,由于数据包中包含该待发送数据,从而将待发送数据写入至队列函数库中。通过将该待发送数据对应的函数名与队列函数库中预存的多个函数名一一进行匹配,并根据函数名对应的指针,查找与该待发送数据的函数名相同的函数体。
55.在本发明一实施例中,由st语言向c语言进行通信传输时,可通过cgn_comm提供的st语言发送函数将待发送数据发送至队列函数库进行运算后,将运算结果通过cgn_comm提供的c语言接收函数传递至c语言平台。在本发明另一实施例中,由c语言向st语言进行通信传输时,可通过cgn_comm提供的c语言发送函数将待发送数据发送至队列函数库进行运算后,将运算结果通过cgn_comm提供的st语言接收函数传递至st语言平台。需要说明的是,函数体的名称可以和待发送数据的函数名相同,也可以和待发送数据的函数名一一相对应,只要可以通过待发送数据的函数名,在队列函数库中能够找到唯一的函数体即可,在此不做限定。将待发送数据代入函数体进行运算,获得运算结果。队列函数库将用第二语言编写的运算结果通过预设的接收函数发送至第二语言平台。示例性地,队列函数库中预存有函数名为a、b、c、d的四个函数体,根据应用请求,在第一语言平台创建函数名为a的函数,待发送数据作为变量写入a函数中后。在队列函数中寻找与a函数名相同的函数,并在队列函数的a函数体中进行数据运算。由于运算时,是通过队列函数库中的函数体进行,且将待发送数据作为变量代入至该函数体中时,考虑到第一语言和第二语言对于变量的定义是相同的,而该函数体使用第二语言编写,因此运算结果也是第二语言。通过这种gn_comm通信机制,可以完成两套不同语言之间进行数据交互,解决了两种不同语言间通信问题。
56.考虑到控制策略程序和算法程序之间的任务同步性,在本发明一实施例中,创建队列函数库之前,还包括:创建信号量函数,并判断信号量函数的状态,若信号量函数创建成功则发出信号量函数创建成功信息。具体地,在控制策略程序(第一语言平台)中,使用cgn_comm通信库提供的接口函数,创建一个信号量函数cgn_csapsem。创建成功后返回信号量函数创建成功信息。在进行跨语言通信时,第一语言平台使用cgn_comm通信库预设的获取函数,获取到信号量函数,从而向第一语言平台发出可以正常的进行数据传输的信号,进行跨语言通信。为了实现双向通信,在算法程序(第二语言平台)中,使用相同的方式,获取信号量函数,从而向第二语言平台发出可以正常接收数据的信号。
57.考虑到通信时若进程过多,会发生多进程抢占同一资源的情况,为了解决这一问题,在本发明一实施例中,在所述信号量函数创建成功之后,获取所述信号量函数的信号,若获取成功则所述队列函数库执行对应的运算,否则进入阻塞状态,直至获取成功。对于控
制策略程序,信号量函数创建成功后,若没有获得信号量函数,进入阻塞状态,排队等待,不断获取信号量函数。直至前一个算法进程通过cgn_comm通信库预设的释放函数,将该算法进程拥有的信号量函数释放掉,让因为获取信号量函数而进入阻塞状态的控制策略程序进程被唤醒。唤醒后的控制策略程序通过获取函数不断获取信号量函数,若没有获取到信号量函数,则继续进入阻塞等待状态,直至获取到信号量函数,进行跨语言通信。同理,对于算法程序,信号量函数创建成功后,若没有获得信号量函数,进入阻塞状态,排队等待,不断获取信号量函数。直至前一个算法进程通过cgn_comm通信库预设的释放函数,将该算法进程拥有的信号量函数释放掉,让因为获取信号量函数而进入阻塞状态的控制策略程序进程被唤醒。唤醒后的进程通过获取函数不断获取信号量函数,若没有获取到信号量函数,则继续进入阻塞等待状态,直至获取到信号量函数,通过cgn_comm的这种双向传送的通信机制,可以完成两套不同语言之间进行任务同步问题,从而解决了两种不同语言间同步问题。
58.可以理解的是,本发明的plc采用vxworks(嵌入式实时操作系统)作为操作系统,而组态软件选择德国3s公司的codesys(controlled development system,逻辑控制完整开发环境)。这种架构具有实时性好,稳定性高的特点。codesys一种具有开放式、可重构、组件化的平台架构,可以向全球用户共享其领先的自动化开发平台中间件,也可以按照用户实际需求自由裁决,而高度集成化开发环境和友好的界面成了众多应用工程师的选择。
59.上面方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包含相同的逻辑关系,都在本发明的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该发明的保护范围内。
60.请参阅图4,图4显示为本发明一实施例中基于plc的跨语言平台通信系统的原理结构示意图。该基于plc的跨语言平台通信系统10包括队列函数库创建模块11、待发送数据获取模块12和运算结果获取模块13。其中,队列函数库创建模块11用于响应于第一语言平台的应用请求,创建队列函数库,所述队列函数库由第二语言编写。待发送数据获取模块12用于根据所述第一语言平台的应用请求,编写待发送数据,并将所述待发送数据发送至所述队列函数库,所述待发送数据由第一语言编写。运算结果获取模块13用于基于所述队列函数库对所述待发送数据进行运算,并将运算结果通过所述队列函数库发送至第二语言平台,所述运算结果由第二语言编写
61.需要说明的是,为了突出本发明的创新部分,本实施例中并没有将与解决本发明所提出的技术问题关系不太密切的模块引入,但这并不表明本实施例中不存在其它的模块。
62.此外,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本发明所提供的实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
63.作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
64.另外,在本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
65.本实施例还提出了一种基于plc的跨语言平台通信设备,该设备包括处理器和存储器,处理器和存储器耦合,存储器存储有程序指令,当存储器存储的程序指令被处理器执行时实现上述任务管理方法。处理器可以是通用处理器,包括中央处理器(central processing unit,简称cpu)、网络处理器(network processor,简称np)等;还可以是数字信号处理器(digital signal processing,简称dsp)、专用集成电路(application specific integrated circuit,简称asic)、现场可编程门阵列(field-programmable gate array,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件;所述存储器可能包含随机存取存储器(random access memory,简称ram),也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。所述存储器可以为随机存取存储器(random access memory,ram)类型的内部存储器,所述处理器、存储器可以集成为一个或多个独立的电路或硬件,如:专用集成电路(application specific integrated circuit,asic)。需要说明的是,上述的存储器中的计算机程序可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,电子设备,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。
66.本实施例还提出一种计算机可读的存储介质,所述存储介质存储有计算机指令,所述计算机指令用于使计算机执行上述的任务管理方法。存储介质可以是电子介质、磁介质、光介质、电磁介质、红外介质或半导体系统或传播介质。存储介质还可以包括半导体或固态存储器、磁带、可移动计算机磁盘、随机存取存储器(ram)、只读存储器(rom)、硬磁盘和光盘。光盘可以包括光盘-只读存储器(cd-rom)、光盘-读/写(cd-rw)和dvd。
67.综上所述,本发明结构简单,第一语言和第二语言实现通信时,通过在第一语言平台中将待发送数据通过对应接口发送至创建的队列函数库中,在队列函数库中进行运算,运算完成后,队列函数库将运算结果发送至第二语言平台。由于队列函数库的程序使用第二语言编写,因此运算结果也由第二语言构成。实现了两种不同语言的通信。解决了第一语言和第二语言之间的编写任务交互时的通信问题。方便了两个不同领域工程师的任务协作,提高了跨语言的开发效率。能够简单快速的实现两个跨平台语言的跨端调用,降低了开发成本,优化了用户体验。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
68.上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完
成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1