一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种多进程通信方法及系统与流程

2022-05-26 23:10:37 来源:中国专利 TAG:


1.本发明属于工业自动化领域,涉及一种嵌入式环境下多个进程间通信技术,具体涉及一种多进程通信方法及系统。


背景技术:

2.随着信息技术的发展,plc的新功能不断被提出,如:web功能、液晶显示功能、历史数据存储功能、数据上云功能等,只具备单一控制功能plc已经不能满足市场需求。目前普遍做法是将新增功能作为plc控制进程内部的线程,这样使得控制进程变得臃肿且不易维护。为了减少整个系统的复杂和耦合程度,降低开发难度,需将系统根据业务要求拆分为多个应用,但是多个应用之间如何进行通信成为需要解决问题。目前普遍采用的方案是:管道、共享内存、socket等,这些方案偏底层,在实现高并发、低时延、大数据量传输难度大,且不易移植。其他通信中间件如ace、ice、boost asio等理解和使用都比较复杂,不适合在嵌入式设备上使用。
3.根据用户的多样化应用,要求plc控制器能方便快速集成第三方应用,但缺乏一种适合在控制系统内完成多个应用之间通信的方法。


技术实现要素:

4.针对上述现有技术的缺点,本发明提出了一种多进程通信方法及系统,其包括用户应用程序和总线调度程序,用户应用程序之间通过总线调度程序的转发实现相互通信。本发明为多个进程间通信提供了一种简单、可行、高效的方法。
5.为此,本发明第一目的在于提出一种多进程通信方法,用户应用程序之间通过总线调度程序的转发实现相互通信,用户应用程序之间的通信通过用户应用进程标识名进行寻址,总线调度程序根据目标用户应用进程标识名进行路由转发;包括如下步骤:
6.1)源用户应用进程启动发送:调用发送函数将数据发送给总线调度进程,参数填入包括目的用户应用进程标识名、请求数据长度及数据内容;
7.2)总线调度进程转发:调用接收函数接收源用户应用进程发送过来的数据,根据接收数据内容,提取出源用户应用进程标识名、目的用户应用进程标识名和要发送的数据并调用发送函数将数据转发给目的用户应用进程;
8.3)目的用户应用进程接收:调用接收函数接收来自总线调度进程转发的数据,根据接收数据内容,提取出源用户应用进程标识名并执行回调函数;若需要响应则进入4),若不需要响应,通信结束;
9.4)目的用户应用进程响应:调用发送函数进行响应,参数填入包括目的用户应用进程标识名、请求数据长度及数据内容;本步骤4)填入的目的用户应用进程标识名为步骤3)接收数据中提取出的源用户应用进程标识名;
10.5)总线调度进程转发:调用接收函数接收来自目的用户应用进程响应数据,根据接收数据内容,提取出源用户应用进程标识名、目的用户应用进程标识名和要发送的数据
并调用发送函数将数据转发给源用户应用进程;
11.6)源用户应用进程接收响应:调用接收函数接收来自总线调度进程转发的响应数据,并根据接收到的数据执行回调函数。
12.进一步的,所述用户应用进程还包括如下初始化步骤:
13.1)创建用户应用进程运行上下文;
14.2)创建套接字;
15.3)配置套接字标识符;
16.4)为套接字建立ipc连接。
17.进一步的,所述用户应用程序发送函数发送数据时执行如下步骤:
18.1)发送界定符空帧;
19.2)发送目的用户应用进程套接字标识符帧;
20.3)发送界定符空帧;
21.4)发送数据帧。
22.进一步的,所述用户应用进程接收函数发送数据时执行如下步骤:
23.1)接收界定符空帧;
24.2)接收源用户应用进程套接字标识符帧;
25.3)接收界定符空帧;
26.4)接收数据帧。
27.进一步的,所述总线调度进程还包括如下初始化步骤:
28.1)创建总线调度进程运行上下文;
29.2)创建套接字;
30.3)配置套接字标识符;
31.4)绑定套接字ipc连接。
32.进一步的,所述总线调度进程接收函数包括如下步骤:
33.1)接收源用户应用进程套接字标识符帧;
34.2)接收界定符空帧;
35.3)接收目的用户应用进程套接字标识符帧;
36.4)接收界定符空帧;
37.5)接收数据帧。
38.进一步的,所述总线调度进程转发函数包括如下步骤:
39.1)发送目的用户应用进程套接字标识符帧;
40.2)发送界定符空帧;
41.3)发送源用户应用进程套接字标识符帧;
42.4)发送界定符空帧;
43.5)发送数据帧。
44.本发明第二目的在于提供一种多进程通信系统,包括:
45.1)源用户应用进程启动发送模块,用于调用发送函数将数据发送给总线调度进程,参数填入包括目的用户应用进程标识名、请求数据长度及数据内容;
46.2)总线调度进程第一转发模块,用于调用接收函数接收用户应用进程发送过来的
数据,并根据接收数据内容,提取出源用户应用进程标识名、目的用户应用进程标识名和要发送的数据并调用发送函数将数据转发给目的用户应用进程;
47.3)目的用户应用进程接收模块,用于调用接收函数接收来自总线调度进程转发的数据,并根据接收数据内容,提取出源用户应用进程标识名并执行回调函数;
48.4)目的用户应用进程响应模块,用于调用发送函数进行响应,参数填入包括目的用户应用进程标识名、请求数据长度及数据内容;所述目的用户应用进程标识名来自目的用户应用进程接收模块从接收数据中提取出的源用户应用进程标识名;
49.5)总线调度进程第二转发模块,用于调用接收函数接收来自目的用户应用进程响应数据,并根据接收数据内容,提取出源用户应用进程标识名、目的用户应用进程标识名和要发送的数据并调用发送函数将数据转发给源用户应用进程;
50.6)源用户应用进程接收响应模块,用于调用接收函数接收来自总线调度进程转发的响应数据,并根据接收到的数据执行回调函数。
51.进一步的,所述用户应用程序发送函数包括:界定符空帧发送子模块,用于发送界定符空帧;目的用户应用进程套接字标识符帧发送子模块,用于发送目的用户应用进程套接字标识符帧;数据帧发送子模块,用于发送数据帧;所述用户应用程序接收函数包括:界定符空帧接收子模块,用于接收界定符空帧;源用户应用进程套接字标识符帧子模块,用于接收源用户应用进程套接字标识符帧;数据帧接收子模块,用于接收数据帧。
52.进一步的,所述总线调度进程接收函数包括:源用户应用进程套接字标识符帧接收子模块,用于接收源用户应用进程套接字标识符帧;界定符空帧接收子模块,用于接收界定符空帧;目的用户应用进程套接字标识符帧接收子模块,用于接收目的用户应用进程套接字标识符帧;数据帧接收子模块,接收数据帧;所述总线调度进程转发函数包括:目的用户应用进程套接字标识符帧发送子模块,用于发送目的用户应用进程套接字标识符帧;界定符空帧发送子模块,用于发送界定符空帧;源用户应用进程套接字标识符帧发送子模块,用于发送源用户应用进程套接字标识符帧;数据帧发送子模块,用于发送数据帧。
53.本发明技术方案具有轻量级设计、灵活易扩展、通信效率高的优点,包括:
54.1)简单,总线型拓扑结构,用户应用程序之间通过应用进程标识名进行寻址,各应用进程间可以进行无差别双向通信,单数据帧大小理论上无限制,仅受系统资源限制;
55.2)灵活,用户应用程序支持c、c 、java、python等多种语言实现,来自第三方的应用程序可方便集成;
56.3)高性能,总线调度程序采用c语言实现,执行效率高,底层通信采用unix socket,交互延时低。
57.上述优点可以支撑本发明在嵌入式设备上顺利的部署应用。
附图说明
58.为了更清楚地说明本发明的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。
59.图1为本发明实施例多进程通信系统的软总线架构图;
60.图2为本发明实施例多进程通信方法用户应用进程之间通信流程示意图;
61.图3为本发明实施例用户应用进程初始化流程示意图;
62.图4为本发明实施例用户应用进程发送流程示意图;
63.图5为本发明实施例用户应用进程接收流程示意图;
64.图6为本发明实施例总线调度进程初始化流程示意图;
65.图7为本发明实施例总线调度进程接收流程示意图;
66.图8为本发明实施例总线调度进程发送流程示意图。
具体实施方式
67.下面结合本发明实施例附图,对本发明实施例中的技术进行清楚、完整地描述。所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
68.术语解释:
69.1、zmq
70.全称zero message queue(零消息队列),是基于socket实现的通信中间件。支持多种通信模式:请求应答(request-reply)、发布订阅(pub-sub)、并行管道(parallel pipeline)、专用对(exclusive pair);支持多种通信环境:线程间(inproc)、进程间(ipc)、设备间(tcp)、组播(epgm和pgm);支持多语言如:c、c 、java、python等;支持多操作系统如:windows、linux。
71.2、dealer-router模式
72.属于扩展的请求应答模式,一个用户应用进程可以抽象成一个dealer进程,通过router进程的路由转发功能可以实现多个dealer进程之间通信。
73.本发明实施例基于zmq中间件的dealer-router模式,由用户应用程序(dealer)和总线调度程序(router)组成,应用程序之间通过总线调度程序的转发实现相互通信。该软总线方法为多个进程间通信提供了一种简单、可行、高效的方法。
74.图1所示为本发明一种适合嵌入式设备的多进程通信系统实施例的软总线架构图,包括web、lcd、gcscore等dealer用户应用程序和router总线调度程序,各个用户应用进程通过软总线实现相互通信。dealer之间的通信通过“用户应用进程标识名”进行寻址,router会根据目标用户应用进程标识名进行路由转发。
75.实施例1
76.下面以“lcd”用户应用进程和“gcscore”用户应用进程之间的通信过程进行举例说明,“lcd”作为源用户应用进程主动向“gcscore”目的用户应用进程请求数据。如图2所示,通信过程如下:
77.1、“lcd”用户应用进程启动发送:调用dealer_send()发送函数将数据发送给router总线调度进程,参数依次填入:目的用户应用进程标识名“gcscore”、请求数据长度及数据内容。
78.2、router总线调度进程转发:调用router_recv()接收函数接收来自“lcd”用户应用进程发送过来的数据,根据接收数据内容,提取出源用户应用进程标识名“lcd”、目的用户应用进程标识名“gcscore”和要发送的数据并调用router_send()将数据转发给“gcscore”用户应用进程。
79.3、“gcscore”用户应用进程接收:调用dealer_recv()接收函数接收来自router总线调度进程转发的数据,根据接收数据内容,提取出源用户应用进程标识名“lcd”并执行接收处理回调函数,并根据实际应用需求查看是否需要响应;若需要响应则进入步骤4、5、6,若不需要响应,则通信结束。
80.4、“gcscore”用户应用进程响应:调用dealer_send()发送函数进行响应,参数依次填入:目的用户应用进程标识名“lcd”来自步骤3接收数据中提取出的源用户应用进程标识名、请求数据长度及数据内容。
81.5、router总线调度进程转发:调用router_recv()接收来自“gcscore”用户应用进程响应数据,根据接收数据内容,提取出源用户应用进程标识名“gcscore”、目的用户应用进程标识名“lcd”和要发送的数据并调用router_send()将数据转发给“lcd”用户应用进程。
82.6、“lcd”用户应用进程接收响应:调用dealer_recv()接收来自router进程转发的响应数据,并根据接收到的数据执行更新lcd显示的回调函数。
83.需要说明的是,用户应用进程为了区分发送和接收,源用户应用进程标识名加上“_tx”后缀,目的用户应用进程标识名加上“_rx”后缀。
84.实施例2
85.以下是dealer用户应用进程实现举例。
86.所述dealer用户应用进程包含发送线程和接收线程。
87.(一)本实施例中,所述dealer用户应用进程发送线程工作流程如下:
88.1、初始化:调用dealer进程初始化函数dealer_init()完成发送初始化。基于zmq提供的api(application programming interface,应用程序接口)实现dealer_init()函数如图3所示。具体初始化步骤如下:
89.1)创建用户应用进程运行上下文:zmq_ctx_new();
90.2)创建套接字:zmq_socket();
91.3)配置套接字标识符:zmq_setsockopt();
92.4)为套接字建立ipc连接:zmq_connect()。
93.2、发送:当用户应用进程需要响应或者主动发送数据给其他用户应用进程时,调用dealer用户应用进程发送函数dealer_send()并填入目标用户应用进程标识名、要发送的数据和长度等参数即可完成数据发送。基于zmq提供的api实现dealer_send()函数如图4所示。具体发送步骤如下:
94.1)发送界定符空帧:zmq_send();
95.2)发送目的用户应用进程套接字标识符帧:zmq_send();
96.3)发送界定符空帧:zmq_send();
97.4)发送数据帧:zmq_send()。
98.(二)本实施例中,所述dealer用户应用进程接收线程工作流程如下:
99.1、初始化:调用dealer进程初始化函数dealer_init()完成接收初始化。基于zmq提供的api实现dealer_init()函数如图3所示,和用户应用进程发送线程的初始化步骤一样,不做赘述。
100.2、接收:当用户应用进程接收到其他用户应用进程发送的数据时,调用dealer用
户应用进程发送函数dealer_recv()完成数据接收,执行接收处理回调函数。基于zmq提供的api实现dealer_recv()函数如图5所示。具体接收步骤如下:
101.1)接收界定符空帧:zmq_recv();
102.2)接收源用户应用进程套接字标识符帧:zmq_recv();
103.3)接收界定符空帧:zmq_recv();
104.4)接收数据帧:zmq_recv()。
105.实施例3
106.以下是router总线调度进程实现举例。本实施例中,router软总线实现了接收转发,工作流程如下:
107.1、router总线调度进程初始化:调用router总线调度进程初始化函数router_init()完成发送初始化。基于zmq提供的api实现router_init()函数如图6所示,具体初始化步骤如下:
108.1)创建总线调度进程运行上下文:zmq_ctx_new();
109.2)创建套接字:zmq_socket();
110.3)配置套接字标识符:zmq_setsockopt();
111.4)绑定套接字ipc连接:zmq_bind()。
112.2、router总线调度进程转发处理:调用router总线调度进程接收函数router_recv()完成数据接收,根据接收数据内容,提取出源用户应用进程标识名、目的用户应用进程标识名和要发送的数据并通过调用router总线调度进程发送函数router_send()完成数据转发。基于zmq提供的api实现router_recv()和router_send()函数分别如图7、8所示,具体初始化步骤如下:
113.所述总线调度进程接收函数包括如下步骤:
114.1)接收源用户应用进程套接字标识符帧:zmq_recv();
115.2)接收界定符空帧:zmq_recv();
116.3)接收目的用户应用进程套接字标识符帧:zmq_recv();
117.4)接收界定符空帧:zmq_recv();
118.5)接收数据帧:zmq_recv()。
119.所述总线调度进程转发函数包括如下步骤:
120.1)发送目的用户应用进程套接字标识符帧:zmq_send();
121.2)发送界定符空帧:zmq_send();
122.3)发送源用户应用进程套接字标识符帧:zmq_send();
123.4)发送界定符空帧:zmq_send();
124.5)发送数据帧:zmq_send()。
125.实施例4
126.图1所示为一种多进程通信系统实施例的软总线架构图,包括web、lcd、gcscore等dealer用户应用程序和router总线调度程序,各个用户应用进程通过软总线实现相互通信。dealer之间的通信通过“用户应用进程标识名”进行寻址,router会根据目标用户应用进程标识名进行路由转发。
127.本实施例的总线调度程序基于zmq通信中间件的router模式实现,功能是接收源
用户应用程序数据并转发给目的用户应用程序,用户应用程序基于zmq通信中间件的dealer模式实现,功能是发送数据给目的用户应用程序和接收其他用户应用程序的数据。
128.本实施例的多进程通信系统包括:
129.1)源用户应用进程启动发送模块,用于调用发送函数将数据发送给总线调度进程,参数填入包括目的用户应用进程标识名、请求数据长度及数据内容;
130.2)总线调度进程第一转发模块,用于调用接收函数接收用户应用进程发送过来的数据,并根据接收数据内容,提取出源用户应用进程标识名、目的用户应用进程标识名和要发送的数据并调用发送函数将数据转发给目的用户应用进程;
131.3)目的用户应用进程接收模块,用于调用接收函数接收来自总线调度进程转发的数据,并根据接收数据内容,提取出源用户应用进程标识名并执行回调函数;
132.4)目的用户应用进程响应模块,用于调用发送函数进行响应,参数填入包括目的用户应用进程标识名、请求数据长度及数据内容;所述目的用户应用进程标识名来自目的用户应用进程接收模块从接收数据中提取出的源用户应用进程标识名;
133.5)总线调度进程第二转发模块,用于调用接收函数接收来自目的用户应用进程响应数据,并根据接收数据内容,提取出源用户应用进程标识名、目的用户应用进程标识名和要发送的数据并调用发送函数将数据转发给源用户应用进程;
134.6)源用户应用进程接收响应模块,用于调用接收函数接收来自总线调度进程转发的响应数据,并根据接收到的数据执行回调函数。
135.进一步的,所述用户应用程序发送函数包括:界定符空帧发送子模块,用于发送界定符空帧;目的用户应用进程套接字标识符帧发送子模块,用于发送目的用户应用进程套接字标识符帧;数据帧发送子模块,用于发送数据帧。
136.所述用户应用程序接收函数包括:界定符空帧接收子模块,用于接收界定符空帧;源用户应用进程套接字标识符帧子模块,用于接收源用户应用进程套接字标识符帧;数据帧接收子模块,用于接收数据帧。
137.所述总线调度进程接收函数包括:源用户应用进程套接字标识符帧接收子模块,用于接收源用户应用进程套接字标识符帧;界定符空帧接收子模块,用于接收界定符空帧;目的用户应用进程套接字标识符帧接收子模块,用于接收目的用户应用进程套接字标识符帧;数据帧接收子模块,接收数据帧;所述总线调度进程转发函数包括:目的用户应用进程套接字标识符帧发送子模块,用于发送目的用户应用进程套接字标识符帧;界定符空帧发送子模块,用于发送界定符空帧;源用户应用进程套接字标识符帧发送子模块,用于发送源用户应用进程套接字标识符帧;数据帧发送子模块,用于发送数据帧。
138.本实施例系统的工作流程可以参照实施例1-3以“lcd”用户应用进程和“gcscore”用户应用进程之间的通信过程、以及dealer用户应用进程、router总线调度进程的工作流程,在此不再赘述。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献