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

一种应用于复杂系统中的数据传递方法与流程

2023-02-19 20:32:01 来源:中国专利 TAG:


1.本发明属于计算机控制技术领域,涉及一种应用于复杂系统中的数据传递方法。


背景技术:

2.复杂的计算机控制系统通常包括若干数据的产生者以及若干数据的消费者。数据的的产生如接入计算机系统的各种传感器产生的数据,以及多种数据融合解算后产生的中间数据。数据的消费如各种执行机构需要的执行数据或者显示设备需要显示的数据,以及控制设备需要的期望数据以及反馈数据。数据的产生到数据的消费需要数据的传递。
3.对于小型简单系统,数据产生者和消费者数量都比较少,数据产生端和消费端耦合到一起,直接共享数据,或者通过消息队列或全局数组等方式进行共享。对于一个产生者的数据被若干个消费者使用,或者一个消费者使用若干个产生者的数据,传统的方法处理这种情况容易出现数据更新不及时,同时造成系统运行缓慢。


技术实现要素:

4.(一)发明目的
5.本发明的目的是:提供一种应用于复杂系统中的数据传递方法,解决大型系统中数据产生者和消费者共享数据时数据更新不及时、系统运行缓慢的问题。
6.(二)技术方案
7.为了解决上述技术问题,本发明提供一种应用于复杂系统中的数据传递方法,其包括以下步骤:
8.s1:设计一个数据节点信息结构体nodeinfo;
9.s2:设计一个数据中转管理结构体datamani;
10.s3:记录要传递的数据并存放;
11.s4:定义数据中转管理结构体datamani的指针类型变量data_imu,并对其进行初始化操作;
12.s5:在数据的发送端对数据进行公告,公告传入的参数为s4中定义的数据data_imu;
13.s6:在数据的接收端进行注册,传入的参数为s4中定义的变量data_imu;
14.s7:在数据发送端对s3中定义的结构体进行数据更新,并对其进行发布,发布需要传入的参数为s4中定义的变量data_imu以及s3中定义的结构体imu_data地址;
15.s8:在数据接收端进行数据接收。
16.(三)有益效果
17.上述技术方案所提供的应用于复杂系统中的数据传递方法,数据生产者只需将生产的数据类型进行公告,并及时将产生的数据进行发布,而数据接收者根据需求对需要的数据进行注册操作,并查询或者根据通知获取更新的数据;这种数据传递方法解除了数据的生产者以及数据消费者之前耦合关系,降低了系统的负荷。
附图说明
18.图1为本发明实施例方法的流程图。
19.图2为本发明实施例中的数据流传递图。
具体实施方式
20.为使本发明的目的、内容和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
21.参照图1和图2所示,本实施例应用于复杂系统中的数据传递方法包括以下步骤:
22.s1:设计一个数据节点信息结构体nodeinfo:包括三个成员:

更新标志upflag,类型为布尔型,表示数据是否已更新,应用于查询式获取数据。

同步信号量sem,应用于数据更新阻塞式获取数据。

指向此下一个节点的指针next,类型为数据节点信息结构体nodeinfo类型。
23.s2:设计一个数据中转管理结构体datamani,包括四个成员值:

所传递数据的名称name,类型为无符号字符型指针;

所传递数据的长度size,表示传递数据的字节数,类型为整型数据;

传递数据的指针pdata,类型为无类型指针型;

指向s1中数据节点信息结构体nodeinfo的指针pnodehead,此指针用来记录第一个数据节点,此处形成一个链表,记录所有数据节点的信息。
24.s3:记录要传递的数据并存放;
25.本实施例中,以传递惯导数据为例:记录数据包括:
26.at:维度(deg)
27.lon:经度(deg)
28.alt:海拔(m)
29.roll:是围绕z轴旋转,也叫翻滚角(rad);
30.pith:是围绕x轴旋转,也叫做俯仰角(rad);
31.yaw:是围绕y轴旋转,也叫偏航角(rad)。
32.vf:前进方向速度(m/s)
33.vl:左方向速度(m/s)
34.vu:垂直向上方向(m/s)
35.ax:x方向加速度(m^2/s)
36.ay:y方向加速度(m^2/s)
37.az:z方向加速度(m^2/s)
38.af:前进方向加速度(m^2/s)
39.以上数据均为浮点数类型(float),存放在结构体imu_data中。
40.s4:定义数据中转管理结构体datamani的指针类型变量data_imu,并对其进行初始化操作。
41.结构体datamani所传递数据的名称name设置为“imu”,所传递数据的长度size值为s3中结构体imu_data的长度,传递数据的指针pdata设置为空指针null,指针pnodehead设置为null。
42.s5:在数据的发送端对数据进行公告,公告传入的参数为s4中定义的数据data_
imu。
43.s5_1判断结构体data_imu中传递数据的指针是否为空,如果不为空,则直接返回,提示错误。如果为空,则转到s5_2。
44.s5_2使用动态内存申请函数malloc申请内存空间,申请长度为结构体data_imu中所传递数据的长度size,将申请到的内存地址赋值到data_imu中传递数据的指针pdata。判断pdata是否为空,如果为空,则申请失败,直接返回,提示错误。如果不为空,则转到s5_3。
45.s5_3将data_imu中指向s1中数据节点信息结构体nodeinfo的指针pnodehead设置为null。
46.s6:在数据的接收端进行注册,传入的参数为s4中定义的变量data_imu
47.s6_1定义一个s1中数据节点信息结构体nodeinfo指针类型变量pnode,并使用动态内存申请函数为此变量进行内存申请,申请长度为此结构体的长度,malloc的返回值赋值到pnode。判断pnode是否为空指针,如果为空指针直接返回,并提示接收端注册失败。
48.s6_2将pnode中更新标志upflag置为0。使用操作系统的信号量创建函数创建信号量并赋值给pnode中同步信号量sem。将pnode中年指向此下一个节点的指针next赋值为空。
49.s6_3使用链表操作将pnode加入到变量data_imu中以pnodehead为头节点指针的链表中。
50.s6_4定义s3中结构体指针变量pimu记录此时pnode的值记录到。如果有n个数据接收端进行数据注册,则有n个指针变量分别为pimu1到pimun。
51.s7:在数据发送端对s3中定义的结构体进行数据更新,并对其进行发布,发布需要传入的参数为s4中定义的变量data_imu以及s3中定义的结构体imu_data地址。
52.s7_1判断结构体imu_data地址不为空,同时data_imu中传递数据的指针pdata不为空。如果判断同时成立则转到s6_2,否则直接返回,并提示数据发布失败。
53.s7_2将imu_data为首地址,以data_imu中所传递数据的长度size为长度将内存数据拷贝到data_imu中传递数据的指针pdata。
54.s7_3判断data_imu中指针pnodehead的链表,如果此节点不为空表示接收端已经注册,则将此节点的更新标志upflag设置为1,同时使用操作系统的信号量发布函数将同步信号量sem发布出去,表示数据已更新。
55.s8:在数据接收端进行数据接收,有两种方式分别为阻塞式等待和查询方式。传入的参数为s6_4中的结构体指针变量pimu以及s4中定义的变量data_imu,本实例中以pimu1和pimu2为例,pimu1为轮询等待数据转到s8_1,pimu2为阻塞等待信号量,转到s8_2。
56.s8_1以轮询等待方式更新数据
57.s8_1_1判断pimu1不为空,如果为空则直接返回提示错误,如果不为空转到s8_1_2;
58.s8_1_2判断data_imu传递数据的指针pdata不为空,如果为空则直接返回,提示错误,否则转到s8_1_3;
59.s8_1_3等待pimu1中更新标志upflag为1,将data_imu传递数据的指针pdata为首地址,data_imu所传递数据的长度size为长度的数据拷贝到接收端需要的缓冲区中。转到s8_1_4;
60.s8_1_4将pimu1中更新标志upflag为0。
61.s8_2以阻塞等待方式更新数据
62.s8_2_1判断pimu2不为空,如果为空则直接返回提示错误,如果不为空转到s8_1_2;
63.s8_2_2判断data_imu传递数据的指针pdata不为空,如果为空则直接返回,提示错误,否则转到s8_1_3;
64.s8_2_3使用操作系统信号量阻塞等待pimu2结构体中的sem信号。如果等到信号,则转到s8_2_4,否则,一直在s8_2_3阻塞等待;
65.s8_2_4将data_imu传递数据的指针pdata为首地址,data_imu所传递数据的长度size为长度的数据拷贝到接收端需要的缓冲区中。转到s8_2_5;
66.s8_2_5将pimu2中更新标志upflag为0。
67.以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

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

相关文献