一种基于共享内存的事件通信方法与流程

文档序号:29702200发布日期:2022-04-16 14:48阅读:172来源:国知局
一种基于共享内存的事件通信方法与流程

1.本发明涉及通信技术领域,尤其涉及一种基于共享内存的事件通信方法。


背景技术:

2.共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个进程之间共享和传递数据较为有效的通信方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问共享内存中的地址。如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。
3.但是此种通讯方式存在明显的缺点:共享内存在第一个进程结束对共享内存的写操作之前,并无自动机制可以实现第二个进程开始对它进行读取,所以我们通常需要用其他的机制来同步对共享内存的访问,但其他机制增加了数据处理时间;其次没有一个现存的通信方式可以同时实现多进程、跨设备的用户数据交互需求,并且内存同步慢、等待时间长。


技术实现要素:

4.本发明提供一种基于共享内存的事件通信方法,以克服共享内存并未提供同步机制等技术问题。
5.为了实现上述目的,本发明的技术方案是:
6.一种基于共享内存的事件通信方法,包括以下步骤:
7.步骤1、至少一个注册事件请求者和至少一个订阅事件请求者向服务器发送记录事件请求,所述记录事件请求类型包括注册事件和/或订阅事件,所述注册事件为命令请求或状态请求,所述订阅事件为命令请求或状态请求,所述记录事件请求包含事件id和事件触发函数;
8.步骤2、服务器接收所述注册事件请求者和订阅事件请求者发送的记录事件请求,在共享内存中根据记录事件请求建立对应内存空间并划分内存池,并将事件id和事件触发函数存储至所述内存空间内;所述共享内存用于减小事件id和事件触发函数在复制传输过程中的性能开销;
9.步骤3、服务器汇总所有记录事件请求并将具有相同事件id的注册请求者和订阅请求者进行事件关系绑定;所述关系绑定为服务器将订阅事件请求者的内存地址放置在注册事件请求者的地址参数中;
10.步骤4、注册事件请求者确认注册事件满足触发条件后,根据所述内存地址调用订阅事件请求者的事件触发函数,从而完成订阅事件请求者订阅注册事件。
11.进一步的,所述注册事件请求者和所述订阅事件请求者为数控机床系统的系统管理模块和/或内部控制模块和/或硬件管理模块和/或plc模块。
12.进一步的,所述系统管理模块、内部控制模块、硬件管理模块和plc模块设置事件
管理表,所述事件管理表预存事件id和事件触发函数,事件关系绑定的同时更新数控机床系统的内部控制模块、硬件管理模块、plc模块中的事件管理表。
13.进一步的,当所述硬件管理模块为注册事件请求者,所述内部控制模块、硬件管理模块和plc模块为订阅请求者,所述注册事件为报警触发事件时;若硬件管理模块检测到硬件设备产生报警触发事件,内部控制模块、硬件管理模块和plc模块接收所述报警触发事件,并根据报警触发事件对应的报警等级参数进行事件触发函数调用执行报警。
14.进一步的,当所述注册事件为状态请求,所述注册事件请求者为系统管理模块,所述订阅事件请求者为硬件管理模块时,系统管理模块确认与硬件管理模块事件关系绑定后,发送状态请求,硬件管理模块接到状态请求后,系统管理模块调用硬件管理模块的事件触发函数完成事件切换并将切换结果通知给系统管理模块。
15.进一步的,所述命令请求包括机床转轴操作指令和数控机床开关控制指令,所述状态请求包括报警请求。
16.进一步的,当注册事件请求者同时发送机床转轴操作指令和数控机床开关控制指令给服务器时,服务器在共享内存中同时建立机床转轴操作指令内存空间和数控机床开关控制指令内存空间。
17.有益效果:本发明利用服务器构建共享内存,利用共享内存实现不同请求者事件id的关系绑定,通过调用事件触发函数实现不同请求者之间的地址匹配,实现事件的交互,构建了基于共享内存的稳定、及时的事件交互程序,解决共享内存同步慢的问题,减少等待时间,使通信更方便可靠,避免非法数据传输造成不必要的干扰。
附图说明
18.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
19.图1为本发明共享内存的事件通信方法流程图;
20.图2为本发明事件起始地址偏移示意图;
21.图3为事件通信信息流程图。
22.其中,1、共享内存起始地址;2、注册事件第一个偏移地址;3、订阅事件第一个偏移地址。
具体实施方式
23.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
24.本实施例提供了一种基于共享内存的事件通信方法,如图1-3,包括以下步骤:
25.一种基于共享内存的事件通信方法,包括以下步骤:
26.步骤1、至少一个注册事件请求者和至少一个订阅事件请求者向服务器发送记录
事件请求,所述记录事件请求类型包括注册事件和/或订阅事件,所述注册事件为命令请求或状态请求,所述订阅事件为命令请求或状态请求,所述记录事件请求包含事件id和事件触发函数;
27.步骤2、服务器接收所述注册事件请求者和订阅事件请求者发送的记录事件请求,在共享内存中根据记录事件请求建立对应内存空间并划分内存池,并将事件id和事件触发函数存储至所述内存空间内;
28.步骤3、服务器汇总所有记录事件请求并将具有相同事件id的注册请求者和订阅请求者进行事件关系绑定;所述关系绑定为服务器将订阅事件请求者的内存地址放置在注册事件请求者的地址参数中;
29.步骤4、注册事件请求者确认注册事件满足触发条件后,根据所述内存地址调用订阅事件请求者的事件触发函数,从而完成订阅事件请求者订阅注册事件。
30.所述共享内存用于减小事件id和事件触发函数在复制传输过程中性能开销。
31.在具体实施例中,所述注册事件请求者和所述订阅事件请求者为数控机床系统的系统管理模块和/或内部控制模块(nc模块)和/或硬件管理模块(hal模块)和/或plc模块。
32.在具体实施例中,所述系统管理模块、内部控制模块、硬件管理模块和plc模块设置事件管理表,所述事件管理表预存事件id和事件触发函数,事件关系绑定的同时更新数控机床系统的内部控制模块、硬件管理模块、plc模块中的事件管理表。
33.在具体实施例中,所述硬件管理模块(hal模块)为注册事件请求者,所述内部控制模块(nc模块)、硬件管理模块(hal模块)和plc模块为订阅请求者,所述注册事件为报警触发事件;当硬件管理模块(hal模块)检测到硬件设备产生报警触发事件时,内部控制模块(nc模块)、硬件管理模块(hal模块)和plc模块接收所述报警触发事件,并根据报警触发事件对应的报警等级参数进行事件触发函数调用执行报警。
34.在具体实施例中,所述注册事件为状态请求,所述注册事件请求者为系统管理模块,所述订阅事件请求者为硬件管理模块(hal模块);系统管理模块确认与硬件管理模块(hal模块)事件关系绑定时,发送状态请求,硬件管理模块(hal模块)接到状态请求后,系统管理模块调用硬件管理模块(hal模块)的事件触发函数完成事件切换并将切换结果通知给系统管理模块。
35.在具体实施例中,所述命令请求包括机床转轴操作指令和数控机床开关控制指令,所述状态请求包括报警状态。
36.在具体实施例中,当注册事件请求者同时发送机床转轴操作指令和数控机床开关控制指令给服务器时,服务器在共享内存中同时建立机床转轴操作指令内存空间和数控机床开关控制指令内存空间。
37.在具体实施例中,请求者是多个平台的多个功能模块,本技术的通信方式实现了基于共享内存的跨平台通信载体,满足多进程通信的同时还可进行跨设备传输。
38.在具体应用中,如图3所示,系统管理模块发送注册状态事件,系统启动到组件,事件id为event_start,事件触发函数为void a_run(eventid,uint32,void*);内部控制模块发送订阅状态事件到组件,事件id为event_start,事件触发函数为voidnc_run(uint32);硬件管理模块发送订阅状态事件到组件,事件id为event_start,事件触发函数为voidhal_run(uint32,uint32);在事件发送后各事件所属组件将事件管理表预存,所述事件管理表
中包含事件id和事件触发函数;
39.系统管理模块、内部控制模块、硬件管理模块的组件向服务器发送事件管理表;服务器接收3个事件管理表中的事件id和事件触发函数,在共享内存并为三个模块建立内存空间,并划分内存池,如图2所示,其中系统管理模块共享内存起始地址为0xe1881048,注册事件第一个偏移地址即内部控制模块偏移地址为0x97f8084,订阅事件第一个偏移地址即硬件管理模块偏移地址为0xd9f1799c,内存起始地址为随机获取,大小固定(大小可在程序运行前设置)。
40.因内部控制模块与硬件管理模块订阅了系统管理模块的event_start事件,服务器调用内存空间的数据,将内部控制模块和硬件管理模块的地址放入系统管理模块event_start事件的参数内存区,即与event_start事件进行绑定。
41.系统管理模块检查硬件设备后满足启动条件,向内部控制模块与硬件管理模块发布event_start事件。
42.内部控制模块与硬件管理模块组件接收到event_start事件发布,调用事件触发函数,启动程序,内部控制模块控制程序完成初始化;硬件管理模块完成初始化并启动控制的硬件设备。event_start事件发布,内部控制模块与硬件管理模块组件事件触发函数被调用,启动程序,内部控制模块具体操作为控制程序完成初始化;硬件管理模块具体操作为初始化伺服设备,使伺服设备进入运行状态并使能,轴设备使能后等待接收转动轨迹指令。
43.如下表1-4所示为应用常规事件通信方法测试的时间表和应用本技术测试的时间表:
[0044][0045]
表1应用常规事件通信方法测试的三线程测试时间表
[0046][0047]
表2应用常规事件通信方法测试的长周期测试时间表
[0048]
发送数据量管道消息队列共享内存+信号量事件管理方法1条7.2038.3364.2114.125条42.1246.334.232.37100条788.042841.853468.325434.61
[0049]
表3应用本发明的方法测试的三线程测试时间表
[0050][0051][0052]
表4应用本发明的方法测试的长周期测试时间表
[0053]
表1和表2分别为应用常规事件通信方法测试的三线程测试时间表和长周期测试时间表;表3和表4分别为应用本发明的基于共享内存的事件通信方法测试的三线程测试时间表和长周期测试时间表,由此可见,应用本发明的基于共享内存的事件通信方法,减少了接收到机床控制面板下发的开启机床、启动轴转动等指令的时间,加快了下方实际物理设备例如传感器模块、轴的响应时间,有效减少了机床零件加工时的轨迹命令接收时间,加快了机床零件加工效率。
[0054]
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1