一种基于国产CPU的自主可控数控系统构建方法与流程

文档序号:30088530发布日期:2022-05-18 07:17阅读:224来源:国知局
一种基于国产CPU的自主可控数控系统构建方法与流程
一种基于国产cpu的自主可控数控系统构建方法
技术领域
1.本发明涉及数控技术领域,尤其涉及基于国产cpu的数控系统技术领域,具体涉及一种基于国产cpu的自主可控数控系统方法。


背景技术:

2.高档数控系统属于高端嵌入式产品,是国家工业和国防基础性装备,其中cpu芯片、工业主板、操作系统等核心部件构成了高档数控系统的基础平台,是决定高档数控系统性能、功能、可靠性与成本的重要部件。国产高档数控系统的底层操作系统采用国外定制化的昂贵的商用实时操作系统,系统功能固化,无法针对多核处理器进行优化设计;核心控制芯片也采用国外的处理器,架构封闭且需要授权。
3.目前国产cpu在中低端数控系统中有一些应用,尚未应用在高档数控系统中。因此,如何针对高档数控系统的核心芯片,采用国产多核cpu及开源操作系统建立基于国产多核cpu的开源实时操作系统,并针对国产多核cpu架构对数控系统软件以及实时以太网现场总线进行优化设计,是实现国产cpu在高档数控系统中应用的关键。


技术实现要素:

4.为解决上述技术难题,本发明提供一种基于国产cpu的自主可控数控系统设计方法。
5.一种基于国产cpu的自主可控数控系统构建方法,包括以下步骤:
6.1)根据开放式数控系统对底层实时操作系统的接口依赖关系,构建基于国产cpu的开源实时操作系统;
7.2)以开放式数控系统为参考,针对开源操作系统结构,建立数控系统体系结构;
8.3)分析总线数据包在数控系统中的传输路径,确立数据包在传输路径上的捕获点;对总线数据包进行捕获与处理,以实现实时以太网现场总线的网络实时性进行优化。
9.所述步骤1)包括以下步骤:
10.a.根据国产cpu与开源操作系统接口之间的关系,建立国产cpu与开源实时操作系统接口之间的适配接口;
11.b.明确开放式数控系统对底层实时操作系统的接口依赖关系,构建基于国产cpu的开源实时操作系统。
12.所述国产cpu采用龙芯3a四核处理器全系列,包括:龙芯3a1000、龙芯3a2000、龙芯3a3000、龙芯3a4000以及后续的龙芯3a四核系列。
13.所述的建立国产cpu的开源实时系统,其特征在于开源实时操作系统采用linux+rt preempt实时抢占补丁方案。
14.所述建立数控系统体系结构,包括以下步骤:
15.a.将处理器的四个核分别命名为cpu核#0、#1、#2和#3,将cpu核#2和#3隔离出来,预留给用户态实时组件;
16.b.设计原生网卡驱动程序,将实时以太网总线数据包重定向到用户空间的用户态实时组件中,将原生网卡驱动的中断绑定在cpu核#3上;
17.c.根据用户态组件模型,构建数控系统用户态功能组件包括:人机界面组件、任务控制组件、plc组件、运动控制组件、实时以太网总线组件,将人机界面组件和任务控制组件设计为非实时用户态组件,将plc组件、运动控制组件以及实时以太网驱动组件设计为用户态实时组件;
18.d.根据用户态组件通信模型,将数控系统用户态功能组件组织为树状结构,其结构为:最顶端root节点为人机界面组件,其叶子节点为任务控制组件,任务控制组件的两个叶子节点分别为plc组件和运动控制组件,运动控制组件的叶子节点为实时以太网总线组件;
19.e.将人机界面组件和任务控制组件绑定在cpu核#1上,将plc组件绑定在cpu核#2上,将运动控制组件与实时以太网总线组件绑定在cpu核#3上。
20.建立用户态组件之间的通信,包括以下步骤:
21.a.构建人机界面组件与任务控制组件之间的通信:人机界面组件将采用nc语音编写的零件加工程序,通过nml通信中的命令消息通道传递给任务控制组件;任务控制组件将实际的加工状态信息通过nml通信中的状态消息通道传递给人机界面组件;
22.b.构建任务控制组件与plc组件之间的通信:任务控制组件将零件加工程序解析出来的加工操作对应的i/o控制指令,通过nml通信中的命令消息通道传递给plc组件;与此同时,plc组件将实际的i/o状态信息通过nml通信中的状态消息通道传递给任务控制组件;
23.c.构建任务控制组件与运动控制组件之间的通信:任务控制组件将零件加工程序解析出来的加工操作对应的运动控制指令,此外还有对于运动属性的设置命令,通过nml通信中的命令消息通道传递给运动控制组件;与此同时,运动控制组件将实际的加工状态信息通过nml通信中的状态消息通道传递给任务控制组件;
24.d.构建运动控制组件与实时以太网总线组件之间的通信:运动控制组件将加工操作经插补运算得到的轴控制指令,通过共享内存的命令消息通道传递给实时以太网总线组件;与此同时,实时以太网总线组件将实际的轴状态信息通过共享内存中的状态消息通道传递给运动控制组件。
25.所述用户态组件模型的构建,包括以下步骤:
26.a.分别建立输入参数通道、输出参数通道;
27.b.分别建立读通信通道、写通信通道;
28.c.根据任务设计功能块;
29.d.根据任务的实时性需求,构建用户态实时线程或非实时线程。
30.所述建立用户态组件通信模型,包括以下步骤:
31.分别建立用于采用消息进行组件之间数据交换的命令通道、用于通过写通信通道进行数据传递的状态通道。
32.分别建立命令缓冲区和消息缓冲区;消息缓冲区用于缓存消息,消息缓冲区位于消息通道之后,其中与命令通道相连的是命令缓冲区,与状态通道相连的是状态缓冲区。
33.所述数控系统体系结构,包括:
34.硬件层,所采用的处理器四个核分别为cpu核#0、#1、#2、#3,cpu核#2、#3与cpu核#
0、#1隔离,cpu核#2、#3用于执行实时任务;
35.内核空间层,包括原生网卡驱动模块,用于和外围伺服驱动、i/o交互数据,网卡驱动模块的中断与隔离的cpu核#3绑定;
36.用户空间层,包括人机界面组件、任务控制组件、plc组件、运动控制组件、实时以太网总线组件;其中人机界面组件和任务控制组件是用户态非实时组件,与cpu核#1绑定;plc组件、运动控制组件以及实时以太网总线组件为用户态实时组件,plc组件与隔离的cpu核#2绑定,运动控制组件和实时以太网组件与隔离的cpu核#3绑定。
37.所述对总线数据包进行捕获与处理,以实现实时以太网现场总线的网络实时性进行优化,采用以下三种方式中的一种:
38.a.实时以太网现场总线数据包在网卡驱动的入口捕获,采用基于af_xdp的实时以太网现场总线数据包处理方法;
39.b.实时以太网现场总线数据包在网卡驱动的内部捕获,采用基网卡的实时以太网现场总线网络数据包处理方法;
40.c.实时以太网现场总线数据包在内核协议栈的入口捕获,采用基于原始套接字的实时以太网现场总线数据包处理方法。
41.本发明具有以下有益效果及优点:
42.1.提升了自主可控能力。在本发明中数控系统采用自主可控的国产处理器芯片和开源操作系统,针对系统硬件采用基于mips架构“龙芯”3a高性能处理器,针对实时系统采用linux+rt preempt实时抢占补丁方案,实现了数控系统从底层硬件到上软件的自主可控。
43.2.降低了研发成本、加快了研发周期。现有数控系统的底层操作系统采用国外定制化的昂贵的商用实时操作系统;核心控制芯片也采用国外的处理器,架构封闭且需要授权。本发明中数控系统采用自主可控的国产处理器芯片和开源操作系统,也可以有效降低研发成本、加快研发周期。
44.3.采用国产cpu以及开源实时操作系统,有效提升了软硬件的自主可控。本发明数控系统采用自主可控的国产处理器芯片和开源操作系统,针对系统硬件采用基于mips架构“龙芯”3a高性能处理器,针对实时系统采用linux+rt preempt实时抢占补丁方案,提升了数控系统在底层硬件和上层软件的自主可控能力。
45.4.采用国产cpu以及开源实时操作系统,有效提升了软硬件的自主可控。本发明数控系统采用自主可控的国产处理器芯片和开源操作系统,针对系统硬件采用基于mips架构“龙芯”3a高性能处理器,针对实时系统采用linux+rt preempt实时抢占补丁方案,提升了数控系统在底层硬件和上层软件的自主可控能力。
46.5.基于用户态组件的功能模块设计技术。数控功能组件处于用户空间,使用浮点数运算更加方便灵活,数控系统是一种浮点数运算密集型的数字控制系统,浮点数的运算是否灵活高效直接决定着数控系统的性能。结合rt preempt linux操作系统实时应用的特点,将数控系统内核组件移至用户空间,建立统一的用户态组件模型,可以有效利用用户空间提供的浮点数运算库函数进行浮点数运算,使得浮点数运算变得灵活方便。
47.6.基于命名通道的消息通信技术。通过为组件间通信建立虚拟的命名通道,以隐藏具体的数据传输与同步的操作细节,实现消息的透明传输。在命名通道中,同时支持本地
通信与基于网络的远程通信,使得组件无需关心自己的具体位置,只需从特定的命名通道中收取或发送数据。
48.7.充分利用了处理器的多核优势,有效提升了数控系统的性能。数控系统的性能与底层操作系统以及cpu的多核结构之间存在着密切的关系,针对实时操作系统与cpu多核结构做数控系统体系结构的设计,可以有效的提升系统的性能。同时,结合rt preempt linux操作系统实时应用的特点,将实时组件和非实时组件隔离开来,并将不同的组件绑定到指定的不同的cpu核上,可以有效降低非实时任务对实时组件的影响,也提升了数控系统的实时性能。
附图说明
49.图1是用户态组件模型图;
50.图2是用户态组件通信模型图;
51.图3是数控系统体系结构模型图;
52.图4是本发明流程图;
53.图5是基于af_xdp的实时以太网总线网络结构图;
54.图6是基于af_xdp的数据包捕获处理方法图;
55.图7是基于原始套接字的实时以太网总线网络结构图;
56.图8是基于原始套接字的数据包捕获处理方法图;
57.图9是基于网卡的实时以太网总线网络结构图;
58.图10是基于网卡的数据包捕获处理方法图;
59.图11是本发明的总体流程图;
60.图12是基于国产cpu的自主可控数控系统设计方法模块流程图。
具体实施方式
61.下面结合附图对本发明方法的实施方式作进一步详细说明。
62.本发明适合应用于数控系统领域,尤其适用于基于国产cpu的数控系统设计,具体适用于一种基于国产cpu的自主可控数控系统设计。下面结合附图对本发明方法的实施方式作进一步详细说明。
63.所述的基于国产cpu的自主可控数控系统设计方法,包括以下步骤:
64.1)明确现有开放式数控系统对底层实时操作系统的接口依赖关系,构建基于国产cpu的开源实时操作系统。
65.2)以现有开放式数控系统为参考,针对开源操作系统结构,建立全新的数控系统体系结构模型,针对处理器的多核结构,建立数控系统体系结构的优化设计方法。
66.3)分析总线数据包在系统中的传输路径,确立数据包在传输路径上的捕获点;设计并实现总线数据包的捕获和处理方法,进而设计实时以太网现场总线的网络实时性优化设计方法。
67.所述的开源实时操作系统的实时性优化方法,包括以下步骤:
68.a.研究国产cpu与开源操作系统接口之间的关系,建立国产cpu与开源实时操作系统接口之间的适配接口;
69.b.明确现有开放式数控系统对底层实时操作系统的接口依赖关系,构建基于国产cpu的开源实时操作系统;
70.所述的建立国产cpu的开源实时系统,国产cpu采用“龙芯3a”四核处理器全系列,包括:龙芯3a1000、龙芯3a2000、龙芯3a3000、龙芯3a4000以及后续的龙芯3a四核系列;
71.所述的建立国产cpu的开源实时系统,开源实时操作系统采用linux+rt preempt实时抢占补丁方案;
72.所述的数控系统体系结构的优化设计方法,采用基于“龙芯3a”四核处理器的数控系统体系结构设计方法;
73.所述的实时以太网现场总线的网络实时性优化设计方法,优化方法包括以下三种:
74.a.实时以太网现场总线数据包在网卡驱动的入口捕获,采用基于af_xdp的实时以太网现场总线数据包处理方法;
75.b.实时以太网现场总线数据包在网卡驱动的内部捕获,采用基网卡的实时以太网现场总线网络数据包处理方法;
76.c.实时以太网现场总线数据包在内核协议栈的入口捕获,采用基于原始套接字的实时以太网现场总线数据包处理方法。
77.如图11、图12所示,基于国产cpu的自主可控数控系统设计方法包括以下步骤:
78.a.采用龙芯3a处理器以及与之适配的开源linux操作系统,构建开源linux嵌入式系统;
79.b.选择与之匹配的rt preempt实时抢占补丁,构建嵌入式实时linux操作系统;
80.c.采用基于“龙芯3a”四核处理器的数控系统体系结构设计方法,设计数控系统的体系结构模型;
81.d.分析实时以太网现场总线在系统中的传输网络,确立三个数据包捕获点;
82.e.实时以太网现场总线数据包在网卡驱动的入口捕获,采用基于af_xdp的实时以太网现场总线网络实时性优化设计方法;
83.f.实时以太网现场总线数据包在网卡驱动的内部捕获,采用基于原生网卡驱动的实时以太网现场总线网络实时性优化设计方法;
84.g.实时以太网现场总线数据包在内核协议栈的入口捕获,采用基于packet_mmap的实时以太网现场总线网络实时性优化设计方法。
85.一种基于四核处理器的数控系统体系结构,包括:
86.硬件层,所采用的处理器四个核分别为cpu核#0、#1、#2、#3,cpu核#2、#3与cpu核#0、#1隔离,cpu核#2、#3用于执行实时任务;
87.内核空间层,包括原生网卡驱动模块,用于和外围伺服驱动、i/o交互数据,网卡驱动模块的中断与隔离的cpu核#3绑定;
88.用户空间层,包括人机界面组件、任务控制组件、plc组件、运动控制组件、实时以太网总线组件;其中人机界面组件和任务控制组件是用户态非实时组件,与cpu核#1绑定;plc组件、运动控制组件以及实时以太网总线组件为用户态实时组件,plc组件与隔离的cpu核#2绑定,运动控制组件和实时以太网组件与隔离的cpu核#3绑定。
89.一种基于四核处理器的数控系统体系结构构建方法,包括以下步骤:
90.a.将处理器的四个核分别命名为cpu核#0、#1、#2和#3,将cpu核#2和#3隔离出来,预留给用户态实时组件;
91.b.设计原生网卡驱动程序,将实时以太网总线数据包重定向到用户空间的用户态实时组件中,将原生网卡驱动的中断绑定在cpu核#3上;
92.c.根据用户态组件模型,构建数控系统用户态功能组件包括:人机界面组件、任务控制组件、plc组件、运动控制组件、实时以太网总线组件,将人机界面组件和任务控制组件设计为非实时用户态组件,将plc组件、运动控制组件以及实时以太网驱动组件设计为用户态实时组件;
93.d.根据用户态组件通信模型,将数控系统用户态功能组件组织为树状结构,其结构为:最顶端root节点为人机界面组件,其叶子节点为任务控制组件,任务控制组件的两个叶子节点分别为plc组件和运动控制组件,运动控制组件的叶子节点为实时以太网总线组件;
94.e.将人机界面组件和任务控制组件绑定在cpu核#1上,将plc组件绑定在cpu核#2上,将运动控制组件与实时以太网总线组件绑定在cpu核#3上。
95.建立用户态组件之间的通信,包括以下步骤:
96.a.构建人机界面组件与任务控制组件之间的通信:人机界面组件将采用nc语音编写的零件加工程序,通过nml通信中的命令消息通道传递给任务控制组件;任务控制组件将实际的加工状态信息通过nml通信中的状态消息通道传递给人机界面组件;
97.b.构建任务控制组件与plc组件之间的通信:任务控制组件将零件加工程序解析出来的加工操作对应的i/o控制指令,通过nml通信中的命令消息通道传递给plc组件;与此同时,plc组件将实际的i/o状态信息通过nml通信中的状态消息通道传递给任务控制组件;
98.c.构建任务控制组件与运动控制组件之间的通信:任务控制组件将零件加工程序解析出来的加工操作对应的运动控制指令,此外还有对于运动属性的设置命令,通过nml通信中的命令消息通道传递给运动控制组件;与此同时,运动控制组件将实际的加工状态信息通过nml通信中的状态消息通道传递给任务控制组件;
99.d.构建运动控制组件与实时以太网总线组件之间的通信:运动控制组件将加工操作经插补运算得到的轴控制指令,通过共享内存的命令消息通道传递给实时以太网总线组件;与此同时,实时以太网总线组件将实际的轴状态信息通过共享内存中的状态消息通道传递给运动控制组件。
100.所述用户态组件模型的构建,包括以下步骤:
101.a.分别建立输入参数通道、输出参数通道;
102.b.分别建立读通信通道、写通信通道;
103.c.根据任务设计功能块;
104.d.根据任务的实时性需求,构建用户态实时线程或非实时线程。
105.所述建立统一的用户态组件通信模型,包括以下步骤:
106.分别建立用于采用消息进行组件之间数据交换的命令通道、用于通过写通信通道进行数据传递的状态通道。
107.分别建立命令缓冲区和消息缓冲区;消息缓冲区用于缓存消息,消息缓冲区位于消息通道之后,其中与命令通道相连的是命令缓冲区,与状态通道相连的是状态缓冲区。
108.基于四核处理器的数控系统体系结构设计方法,“龙芯3a”四核处理器包括:龙芯3a1000、龙芯3a2000、龙芯3a3000、龙芯3a4000以及后续的龙芯3a四核系列;
109.所述的基于四核处理器的数控系统体系结构模型,数控系统体系结构模型划分为三层:
110.1)硬件层:“龙芯3a”处理器的四个核分别命名为cpu核#0、#1、#2、#3,cpu核2、3与cpu核0、1隔离,用于执行实时任务。
111.2)内核空间层:包括原生网卡驱动模块,用于和外围伺服驱动、i/o交互数据,网卡驱动模块的中断与隔离的cpu核#3绑定。
112.3)用户空间层:包括人机界面组件、任务控制组件、plc组件、运动控制组件、实时以太网总线组件以及组件。其中人机界面组件和任务控制组件是用户态非实时组件与cpu核#1绑定;plc组件、运动控制组件以及实时以太网总线组件为用户态实时组件,plc组件与隔离的cpu核#2绑定,运动控制组件和实时以太网组件与隔离的cpu核#3绑定。
113.用户态组件包括:用户态实时组件和用户态非实时组件,用户态实时组件和非实时组件的区别在于,构建用户态线程时所构建的是实时线程还是非实时线程,如果构建的是实时线程则为实时组件,如果是非实时线程则为非实时组件。
114.如图4所示,所述的基于四核处理器的数控系统体系结构设计方法,包括以下步骤:
115.1)采用龙芯3a处理器以及与之适配的开源linux操作系统,选择与之匹配的rt preempt实时抢占补丁,构建实时linux操作系统;
116.2)根据rt preempt linux系统实时应用的特点,设计统一的用户态组件模型;
117.3)根据步骤2)建立的用户态组件模型,设计统一的用户态组件通信模型;
118.4)根据步骤2)与步骤3)建立的用户态组件模型和组件通信模型,结合“龙芯3a”处理器的四核结构,设计数控系统体系结构模型。
119.所述的采用龙芯3a处理器以及与之适配的开源linux操作系统,适配的开源linux操作系统包括:中科龙芯的linux操作系统的官方版本、航天龙梦的linux操作系统的官方版本;
120.所述的选择与之匹配的rt preempt实时抢占补丁,rt preempt实时抢占补丁为与linux内核的主线同步更新的开源实时抢占补丁;
121.所述的根据rt preempt linux系统实时应用的特点,设计统一的内核用户态组件模型,组件模型分为实时组件和非实时组件;
122.所述的根据rt preempt linux系统实时应用的特点,设计统一的内核用户态组件模型,所有组件模型均运行在rt preempt linux系统的用户空间;
123.所述的根据rt preempt linux系统实时应用的特点,设计统一的内核用户态组件模型,在于用户态组件模型包括:
124.a.参数通道:用于参数的传递,分为输入通道和输出通道,其中输入通道用于参数配置,输出通道用于参数的采样。
125.b.通信通道:用于组件件数据的交互,分为读写通信通道,其中读通道用于接收其他组件传递来的数据,写通道用于发送数据至其他组件。
126.c.功能块:用于执行特定任务的特定函数集合。
127.d.用户态线程:用于在用户空间中调度功能块中一系列函数的执行,分为用户态实时线程和非实时线程,其中实时线程用于实时组件,非实时线程用于非实时组件。
128.所述的根据rt preempt linux系统实时应用的特点,设计统一的内核用户态组件模型,用户态组件模型的设计方法包括以下步骤:
129.e.分别建立输入、输出参数通道;
130.f.分别建立读、写通信通道;
131.g.根据具体的任务,设计功能块;
132.h.根据任务的实时性需求,设计用户态实时线程或非实时线程;
133.所述的根据步骤2)建立的用户态组件模型,设计统一的用户态组件通信模型,用户态组件通信模型包括:
134.a.消息通道:在用户态组件模型的基础上,采用消息进行组件之间的数据交换,其中读通信通道的数据传递采用命令消息,被定义为命令通道;写通信通道的数据传递采用状态消息,被定义为状态通道。
135.b.消息缓冲区:消息缓冲区用于缓存消息,消息缓冲区位于消息通道之后,其中与命令通道相连的是命令缓冲区,与状态通道相连的是状态缓冲区。
136.c.树状组织结构:用户态组件采用树状的组织结构,父子组件之间的通信,也就是父子节点之间的消息通信,消息缓冲区位于子节点中。
137.所述的根据步骤2)建立的用户态组件模型,设计统一的用户态组件通信模型,用户态组件通信模型的设计方法包括以下步骤:
138.a.分别建立消息的命令、状态通道;
139.b.分别建立命令缓冲区和消息缓冲区;
140.所述的根据步骤2)与步骤3)建立的用户态组件模型和组件通信模型,结合“龙芯3a”处理器的四核结构,设计数控系统体系结构模型,数控系统体系结构模型的设计方法包括以下步骤:
141.a.将“龙芯3a”处理器的四个核分别命名为cpu核#0、#1、#2和#3,将cpu核#2和#3隔离出来,预留给实时组件;
142.b.设计原生网卡驱动程序,将实时以太网总线数据包重定向到用户空间的实时组件中,将原生网卡驱动的中断绑定在cpu核#3上;
143.c.根据用户态组件模型,结合数控系统功能,设计数控系统用户态功能组件包括:人机界面组件、任务控制组件、plc组件、运动控制组件、实时以太网总线组件,将人机界面组件和任务控制组件设计为非实时用户态组件,将plc组件、运动控制组件以及实时以太网驱动组件设计为实时组件。其中:
144.a.人机界面组件:用于执行人机交互功能。
145.人机界面组件的功能块设计包括:基于openscada开源系统的人机界面开发环境,设计信息可视化功能、人工操作功能、加工程序输入功能等模块。
146.人机界面组件的用户态线程设计:基于rcs库,设计用户态非实时线程。
147.b.任务控制组件:用于零件加工程序的解析处理。
148.任务控制组件的功能块设计包括:基于linuxcnc开源系统的功能模块,设计解释器功能、规范加工功能、命令队列功能、命令处理功能等模块。
149.任务控制组件的用户态线程设计包括:基于rcs库,设计用户态非实时线程。
150.c.plc组件:用于i/o控制。
151.plc组件的功能块设计包括:基于linuxcnc开源系统的功能模块,设计逻辑控制功能、plc任务调度功能、数字量输入/输出功能、模拟量输入/输出功能等模块。
152.plc组件的用户态线程设计包括:基于rt preempt实时抢占补丁,设计用户态实时线程。
153.d.运动控制组件:用于完成刀具与工件间的相对运动控制。
154.运动控制组件的功能块设计包括:基于linuxcnc开源系统的功能模块,设计轨迹规划功能、直线加减速控制功能、插补控制功能、坐标转换功能、pid控制功能等模块。
155.运动控制组件的用户态线程设计包括:基于rt preempt实时抢占补丁,设计用户态实时线程。
156.e.实时以太网总线组件:用于解析和封装网络数据包。
157.实时以太网组件的功能块设计包括:基于igh ethercat master开源组件,设计过程数据功能、邮箱功能、分布时钟功能、ethercat状态机功能等模块。
158.实时以太网组件的用户态线程设计包括:基于rt preempt实时抢占补丁,设计用户态实时线程。
159.d.根据用户态组件通信模型,将数控系统用户态功能组件组织为树状结构,其结构为:最顶端root节点为人机界面组件,其叶子节点为任务控制组件,任务控制组件的两个叶子节点分别为plc组件和运动控制组件,运动控制组件的叶子节点为实时以太网总线组件。其中:
160.a.人机界面组件与任务控制组件之间的通信设计:基于rcs库的nml通信机制,设计人机界面组件与任务控制组件之间的通信。
161.人机界面组件将采用nc语音编写的零件加工程序,通过nml通信机制中的命令消息通道传递给任务控制组件;任务控制组件将实际的加工状态信息通过nml通信机制中的状态消息通道传递给人机界面组件。
162.b.任务控制组件与plc组件之间的通信设计:基于rcs库的nml通信机制,设计任务控制组件与plc组件之间的通信。
163.任务控制组件将零件加工程序解析出来的规范加工操作(选刀换刀、开闭冷却液、开关门等)对应的i/o控制指令,通过nml通信机制中的命令消息通道传递给plc组件;与此同时,plc组件将实际的i/o状态信息通过nml通信机制中的状态消息通道传递给任务控制组件。
164.c.任务控制组件与运动控制组件之间的通信设计:基于rcs库的nml通信机制,设计任务控制组件与运动控制组件之间的通信。
165.任务控制组件将零件加工程序解析出来的规范加工操作(快速移动、直线进给、弧线进给、主轴旋转等)对应的运动控制指令,此外还有对于加工平面、进给速率等运动属性的设置命令,通过nml通信机制中的命令消息通道传递给运动控制组件;与此同时,运动控制组件将实际的加工状态信息通过nml通信机制中的状态消息通道传递给任务控制组件。
166.d.运动控制组件与实时以太网总线组件之间的通信设计:基于共享内存机制,设计运动控制组件与实时以太网总线组件之间的通信。
167.运动控制组件将规范加工操作经常插补运算得到的轴控制指令(位置、速度、扭矩等),通过共享内存的命令消息通道传递给实时以太网总线组件;与此同时,实时以太网总线组件将实际的轴状态信息通过共享内存机制中的状态消息通道传递给运动控制控制组件。
168.e.将人机界面组件和任务控制组件绑定在cpu核#1上,将plc组件绑定在cpu核#2上,将运动控制组件与实时以太网总线组件绑定在cpu核#3上。
169.如图1所示,用户态组件模型模型及设计方法包括:
170.参数通道设计:用于参数的传递,分为输入通道和输出通道,其中输入通道用于参数配置,输出通道用于参数的采样,具体采用读写文件和共享内存的方法进行参数的传递;
171.通信通道设计:用于组件件数据的交互,分为读写通信通道,其中读通道用于接收其他组件传递来的数据,写通道用于发送数据至其他组件,具体采用共享内存或中性消息的方法进行数据交换。
172.功能块设计:用于执行特定任务的特定函数集合,具体采用c和c++语言按照数控系统的功能模块,进行函数集合的编写。
173.用户态线程设计:用于在用户空间中调度功能块中一系列函数的执行,分为用户态实时线程和非实时线程,其中实时线程用于实时组件,非实时线程用于非实时组件,具体按照rt preempt实时抢占补丁的编程规范创建周期性实时线程,按照linux系统的编程规范创建周期性和非周期性非实时线程。
174.如图2所示,用户态组件通信模型及设计方法包括:
175.消息通道设计:在用户态组件模型的基础上,采用消息进行组件之间的数据交换,其中读通信通道的数据传递采用命令消息,被定义为命令通道;写通信通道的数据传递采用状态消息,被定义为状态通道。采用与跨平台统一的格式定义命令通道和状态通道,实现消息传输的平台无关性。命令消息是从上层模块传递到下层模块,即上层模块请求一个操作的执行。状态消息是从底层模块传递给它们的父模块,传送的消息是反映底层模块当前状态特征的数据信息。
176.消息缓冲区设计:消息缓冲区用于缓存消息,消息缓冲区位于消息通道之后,其中与命令通道相连的是命令缓冲区,与状态通道相连的是状态缓冲区。消息缓冲区采用环形队列,工作方式为生产者和消费者模式,一方面上层组件将命令消息写到下层的命令环形队列,下层组件从环形队列中读取命令消息;另一方面下层缓冲区向状态环形队列中写入状态,上层组件从环形队列中读取状态,数据的读取均采用轮询方式,保证了上下层组件之间的数据一致性。
177.树状组织结构设计:用户态组件采用树状的组织结构,父子组件之间的通信,也就是父子节点之间的消息通信,消息缓冲区位于子节点中。其中父子组件的对应关系是一对多的结构,一个父节点组件可以有多个子节点组件,一个子节点组件有且只有一个父节点组件。
178.如图3所示,数控系统体系结构模型模型及设计方法包括:
179.cpu核隔离设置:将“龙芯3a”处理器的四个核分别命名为cpu核#0、#1、#2和#3,将cpu核#2和#3隔离出来,预留给实时组件,具体采用linux系统的isolcus=2,3命令,将cpu核#2和#3隔离出来;
180.原生网卡驱动设计:将实时以太网总线数据包重定向到用户空间的实时组件中,将原生网卡驱动中的周期性中断绑定在cpu核#3上,具体采用linux系统的irq affinity机制将周期性中断绑定到cpu核#3上;
181.数控系统用户态功能组件设计:根据用户态组件模型,结合数控系统功能,设计数控系统用户态功能组件包括人机界面组件、任务控制组件、plc组件、运动控制组件、实时以太网总线组件,将人机界面组件和任务控制组件设计为非实时用户态组件,将plc组件、运动控制组件以及实时以太网驱动组件设计为实时组件,采用将plc组件、运动控制组件以及实时以太网总线组件的内核组件移至用户空间的方法,重新设计用户态组件;
182.数控系统用户态功能组件通信设计:根据用户态组件模型,将数控系统用户态功能组件组织为树状结构,其结构为,最顶端root节点为人机界面组件,其叶子节点为任务控制组件,任务控制组件的两个叶子节点分别为plc组件和运动控制组件,运动控制组件的叶子节点为实时以太网总线组件,采用将用户态组件模型中的通信通道细化为中性消息通信方法,实现数控系统用户态功能组件之间的通信;
183.cpu核绑定设置:采用linux系统的cpu affinity机制,将人机界面组件和任务控制组件绑定在cpu核#1上,将plc组件绑定在cpu核#2上,将运动控制组件与实时以太网总线组件绑定在cpu核#3上。
184.原生网卡驱动中的数据包处理方式可以采用以下三种方式中的一种:基于af_xdp的实时以太网现场总线数据包处理方法,基于原始套接字的实时以太网现场总线数据包处理方法,基网卡的实时以太网现场总线网络数据包处理方法。
185.1、基于af_xdp的实时以太网现场总线数据包处理方法,包括以下步骤:
186.开启内核调试功能,通过内核输出的调试信息,确定实时以太网现场总线数据包在原生网卡驱动中的传输路径,在网卡驱动入口建立实时以太网总线数据包的捕获点;
187.针对在网卡驱动入口的实时以太网总线数据包捕获点,基于xdp机制进行实时以太网总线数据包的捕获及转发,将实时以太网总线数据包发送到实时以太网总线组件中;
188.根据实时以太网总线数据包所属的总线协议类型,在用户空间的实时以太网总线组件中进行实时以太网总线数据包的解析处理。
189.所述实时以太网现场总线数据包类型包括ethercat协议和ssb-iii协议中的任意一种。
190.所述捕获点位于网卡驱动建立套接字缓冲器之前。
191.所述基于xdp机制进行实时以太网总线数据包的捕获及转发具体为:
192.采用实时以太网总线数据包接收中断事件,触发xdp处理实时以太网总线数据包;
193.采用xdp的重定向的功能,以af_xdp的mmap内存映射方式将实时以太网总线数据包以零拷贝的方式直接重定向到用户空间的实时以太网总线组件中。
194.所述在用户空间的实时以太网总线组件中进行实时以太网总线数据包的解析处理具体为:
195.建立用户态实时线程并设置实时线程为周期性实时线程,在每个用户态实时线程的实时周期中,完成对实时以太网总线数据包的解析处理工作;
196.在用户态实时以太网总线组件的实时线程的开始部分,采用pf_xdp的原始套接字的方式轮询的获取实时以太网总线数据包;
197.在用户态实时以太网总线组件的实时线程中解析以太网协议数据包头,确定实时以太网总线数据包类型;
198.根据实时以太网总线数据包类型解析实时以太网总线数据包的指令数据;
199.将解析出的指令数据组织成为nml中性消息命令,通过用户态实时以太网总线组件的消息通信通道与用户空间的实时应用程序交换数据;
200.等待下一周期轮询实时以太网总线数据包。
201.ethercat协议的指令数据包括周期性指令数据和非周期的指令数据,周期性的指令数据采用ethercat协议的过程数据进行数据传递,根据传递方向不同分为周期性的命令数据和状态数据,非周期性的指令数据采用ethercat协议的邮箱进行数据传递,根据传递方向不同分别为非周期性的命令数据和状态数据。
202.ssb-iii协议的指令数据包括周期性指令数据和非周期性的指令数据,两种数据均采用邮箱进行数据传输。
203.此方式适合应用于数控系统领域,尤其适用于采用标准网卡传输实时以太网现场总线网络数据包的应用场合,具体适用于高档数控系统中采用标准网卡传输实时以太网现场总线网络数据包的应用场合。基于af_xdp的实时以太网现场总线网络数据包处理方法,包括以下步骤:
204.1)确定实时以太网现场总线数据包在原生网卡驱动中的传输路径,建立在网卡驱动入口的实时以太网总线数据包的捕获点;
205.2)针对在网卡驱动入口的网络数据包捕获点,建立基于xdp机制的网络数据包捕获方法;
206.3)根据xdp的数据包捕获方法,建立基于af_xdp机制的网络数据包转发方法;
207.4)根据数据包所属的总线协议类型,设计在用户空间的实时以太网总线组件中数据包的解析处理方法;
208.所述的确定实时以太网现场总线数据包从网卡驱动到内核网络协议栈的传输路径,实时以太网现场总线为ethercat和ssb-iii;
209.所述的确定实时以太网现场总线数据包从网卡驱动到内核网络协议栈的传输路径,网卡为xdp支持的网卡;
210.所述的建立在网卡驱动入口的实时以太网总线数据包的捕获点,捕获点位于网卡驱动建立套接字缓冲器之前;
211.所述的建立基于af_xdp的数据包捕获及转发方法,xdp的bpf_redirect_map()方法将实时以太网总线数据包以零拷贝(zero-copy)的方式重定向到用户空间的实时以太网总线组件中;
212.所述的建立基于af_xdp的数据包捕获及转发方法,采用pf_xdp的原始套接字的编程方式;
213.所述的建立基于af_xdp的数据包捕获及转发方法,af_xdp采用mmap机制;
214.所述的建立基于af_xdp的数据包捕获及转发方法,其特征在于数据包捕获方法包括以下步骤:
215.a.采用实时以太网数据包接收中断事件触发xdp处理数据包;
216.b.采用xdp的重定向的功能,以af_xdp的机制将数据包以零拷贝的方式直接重定
向到用户空间的实时以太网总线组件中;
217.所述的设计在用户空间的实时以太网总线组件中数据包的解析处理方法,其特征在于数据包的解析处理方法包括以下步骤:
218.a.建立用户态实时线程并设置实时线程为周期性实时线程,在每个用户态线程的实时周期中,完成对实时以太网现场总线数据包的解析处理工作;
219.b.在用户态实时以太网总线组件的实时线程的开始部分,采用pf_xdp的原始套接字的方式轮询的获取实时以太网数据包;
220.c.在用户态实时以太网总线组件的实时线程中解析以太网协议数据包头,确定实时以太网数据包类型;
221.d.根据数据包类型解析数据包的指令数据;
222.e.将解析出的指令数据组织成为消息命令,通过实时以太网组件的消息通信通道与上层的运动控制组件交换数据;其中,上层的运动控制组件为实时应用程序,用于轨迹规划、加减速控制以及插补计算。
223.f.等待下一周期轮询数据包。
224.如图5所示,基于af_xdp的实时以太网现场总线的网络结构为图中的左半部分,默认情况下,网络数据包首先会经过内核空间的网卡驱动和网络协议栈,然后通过af_inet套接字或者af_packet标准套接字,被发送的用户空间中的应用程序中,本发明在网卡驱动的入口设置实时以太网总线数据包的捕获点,通过数据接收中断触发xdp的处理程序,采用xdp的bpf_redirect_map()重定向功能,和af_xdp的机制mmap方法将ethercat、ssb-iii实时以太网总线数据包以零拷贝的方式直接重定向到用户空间的实时以太网总线组件中,在用户态实时以太网总线组件中对数据包进行解析处理。
225.基于af_xdp的实时以太网现场总线的数据流结构如图1中的右半部分所示,通过af_xdp的mmap机制直接将实时以太网数据包以dma的方式重定向到用户空间的环形队列中,上层实时以太网总线组件中的实时线程,通过轮询机制读取环形队列中的实时以太网数据包,数据包会在实时以太网总线组件中被解析处理,最后通过实时以太网组件的消息通信通道与上层的运动控制组件交换数据。
226.如图6所示,基于af_xdp的实时以太网现场总线数据包的捕获处理方法的具体实施步骤包括:
227.a.采用实时以太网数据包接收中断事件触发xdp处理数据包;
228.b.采用xdp的bpf_redirect_map()重定向功能,以af_xdp的机制将数据包以零拷贝的方式直接重定向到用户空间的实时以太网总线组件中;
229.c.建立用户态实时线程并设置实时线程为周期性实时线程,在每个用户态线程的实时周期中,完成对实时以太网现场总线数据包的解析处理工作;
230.c.在用户态实时以太网总线组件的实时线程的开始部分,采用pf_xdp的原始套接字的方式轮询的获取实时以太网数据包;
231.d.在用户态实时以太网总线组件的实时线程中解析以太网协议数据包头,确定实时以太网数据包类型,分别有ethercat、ssb-iii以及其他实时以太网协议;
232.e.根据数据包类型解析数据包的指令数据,其中ethercat协议的指令数据包括周期性指令数据和非周期的指令数据,周期性的指令数据采用ethercat协议的过程数据进行
数据传递,根据传递方向不同分为周期性的命令数据和状态数据,非周期性的指令数据采用ethercat协议的邮箱进行数据传递,根据传递方向不同分别为非周期性的命令数据和状态数据;ssb-iii协议与ethercat协议类似,指令数据也包括周期性指令数据和非周期性的指令数据,不同的是ssb-iii协议对于这两种数据均采用邮箱进行数据传输;
233.f.将解析出的指令数据组织成为消息命令,通过实时以太网组件的消息通信通道与上层的运动控制组件交换数据;
234.g.等待下一周期轮询数据包。
235.实时以太网现场总线采用标准网卡传递数据包。现有数控系统中实时以太网现场总线仍采用传统的通信板卡形式进行总线数据的传输,不同的现场总线(如ethercat、ssb-iii实时以太网总线等)对应不同的通信板卡,针对每一种现场总线都要开发一套与之对应的硬件板卡,使系统变得臃肿且不可复用。
236.在网卡驱动的入口捕获实时以太网总线数据包并重定向到用户空间,可以有效降低系统延迟及抖动。采用基于xdp机制在网卡驱动的入口捕获实时以太网总线数据,采用基于af_xdp机制直接将实时以太网现场总线协议的网络数据包以零拷贝(zero-copy)的方式重定向到用户空间的实时以太网总线组件中,避免了数据包在驱动及内核中的多次数据拷贝,降低了系统延迟;与此同时,避免了数据包在内核协议栈中的传输,降低了系统的抖动。
237.2、基于原始套接字的实时以太网现场总线数据包处理方法,原始套接字采用packet_mmap方法,包括以下步骤:
238.根据内核输出的调试信息,确定实时以太网现场总线数据包从网卡驱动到内核网络协议栈的传输路径,在内核网络协议栈入口建立实时以太网总线数据包的捕获点;
239.根据内核网络协议栈入口的实时以太网总线数据包捕获点,建立基于packet_mmap的实时以太网总线数据包转发方法,将实时以太网总线数据包映射到实时以太网总线组件中;
240.根据实时以太网总线数据包所属的总线协议类型,在用户空间的实时以太网总线组件中对实时以太网总线数据包进行解析。
241.所述实时以太网现场总线数据包类型包括ethercat协议和ssb-iii协议中的任意一种。
242.所述捕获点位于实时以太网总线数据包发往内核协议栈之前。
243.所述建立基于packet_mmap的实时以太网总线数据包转发方法具体为:
244.在内核空间中开辟出用于存储实时以太网总线数据包的静态内存;
245.屏蔽网卡中实时以太网总线数据包映射到环形队列时产生的接收中断;
246.通过不断轮询网卡,读取环形队列中的实时以太网总线数据包到开辟出的静态内存中;
247.在内核网络协议栈的入口,屏蔽掉实时以太网总线数据包向内核网络协议栈的传递;
248.采用packet_mmap的mmap内存映射方式将轮询得到的实时以太网总线数据包映射到用户空间。
249.实时以太网总线数的接收采用无中断方式。
250.实时以太网总线数的读取采用轮询方式。
251.所述在用户空间的实时以太网总线组件中对实时以太网总线数据包进行解析具体为:
252.建立用户态实时线程并设置实时线程为周期性实时线程,在每个用户态实时线程的实时周期中,完成对实时以太网现场总线数据包的解析处理工作;
253.在用户态实时以太网总线组件的实时线程的开始部分,采用packet_mmap原始套接字的方式轮询的获取实时以太网总线数据包;
254.在用户态实时以太网总线组件的实时线程中解析以太网协议数据包头,确定实时以太网总线数据包类型;
255.根据实时以太网总线数据包类型解析实时以太网总线数据包的指令数据;
256.将解析出的指令数据组织成为nml中性消息命令,通过用户态实时以太网总线组件的消息通信通道与用户空间的实时应用程序交换数据;
257.等待下一周期轮询实时以太网总线数据包。
258.此方式适用于采用标准网卡传输实时以太网现场总线网络数据包的应用场合,具体适用于中低档数控系统中采用标准网卡传输实时以太网现场总线网络数据包的应用场合。基于packet_mmap的实时以太网现场总线网络数据包处理方法,包括以下步骤:
259.1)确定实时以太网现场总线数据包从网卡驱动到内核网络协议栈的传输路径,建立在内核网络协议栈入口的实时以太网总线数据包的捕获点;
260.2)建立基于packet_mmap的网络数据包转发方法;
261.3)根据数据包所属的总线协议类型,设计在用户空间的实时以太网总线组件中数据包的解析处理方法;
262.所述的确定实时以太网现场总线数据包从网卡驱动到内核网络协议栈的传输路径,实时以太网现场总线为ethercat和ssb-iii;
263.所述的确定实时以太网现场总线数据包从网卡驱动到内核网络协议栈的传输路径,网卡为任意型号的网卡;
264.所述的建立在内核网络协议栈入口的实时以太网总线数据包的捕获点,捕获点位于数据发往内核协议栈之前;
265.所述的建立基于packet_mmap的数据包捕获及转发方法,packet_mmap使用原始套接字的编程方式;
266.所述的建立基于packet_mmap的数据包捕获及转发方法,其特征在于数据包捕获方法包括以下步骤:
267.a.在内核空间中开辟一块儿静态内存,用于存储以太网数据包;
268.b.数据的接收采用无中断的方式,将网卡dma数据包到环形队列产生的接收中断屏蔽掉;
269.c.数据的读取采用轮询的方式,通过不断轮询网卡设备,读取环形队列中的数据到新开辟的内存中;
270.d.在内核网络协议栈的入口,屏蔽掉数据包向内核网络协议栈的传递;
271.e.采用packet_mmap的mmap机制将轮询得到的数据包映射到用户空间;
272.所述的设计在用户空间的实时以太网总线组件中数据包的解析处理方法,其特征在于数据包的解析处理方法包括以下步骤:
273.a.建立用户态实时线程并设置实时线程为周期性实时线程,在每个用户态线程的实时周期中,完成对实时以太网现场总线数据包的解析处理工作;
274.b.在用户态实时以太网总线组件的实时线程的开始部分,采用packet_mmap原始套接字的方式轮询的获取实时以太网数据包;
275.c.在用户态实时以太网总线组件的实时线程中解析以太网协议数据包头,确定实时以太网数据包类型;
276.d.根据数据包类型解析数据包的指令数据;
277.e.将解析出的指令数据组织成为消息命令,通过实时以太网组件的消息通信通道与上层的运动控制组件交换数据,其中,上层的运动控制组件为实时应用程序,用于轨迹规划、加减速控制以及插补计算。
278.f.等待下一周期轮询数据包。
279.如图7所示,基于packet_mmap的实时以太网现场总线的网络结构为图中的左半部分,默认情况下,网络数据包首先会经过内核空间的网卡驱动和网络协议栈,然后通过af_inet套接字或者af_packet标准套接字,被发送的用户空间中的应用程序中,本发明在内核网络协议栈的入口设置数据包的捕获点,通过屏蔽实时以太网总线数据包到内核协议栈的传输,并采用packet_mmap的原始套接字直接将ethercat、ssb-iii实时以太网数据包转发到用户空间的实时以太网总线组件中,在用户态实时以太网总线组件中对数据包进行解析处理。
280.基于packet_mmap的实时以太网现场总线的数据流结构如图7中的右半部分所示,实时以太网数据包经过网卡之间dma到了原生网卡驱动内部的环形队列中,采用轮询方式,通过packet_mmap的mmap机制将环形队列中的实时以太网总线数据包映射到用户空间的环形队列中,上层实时以太网总线组件中的实时线程,通过轮询机制读取环形队列中的实时以太网数据包,数据包会在实时以太网总线组件中被解析处理,最后通过实时以太网组件的消息通信通道与上层的运动控制组件交换数据。
281.如图8所示,基于packet_mmap的实时以太网现场总线数据包的捕获处理方法的具体实施步骤包括:
282.a.在内核空间中静态的开辟一块儿内存区域,用于以太网数据包的存储;
283.b.数据的接收采用无中断的方式,将网卡dma数据包到环形队列产生的接收中断屏蔽掉;
284.c.数据的读取采用poll轮询机制的方式,通过不断轮询网卡设备,读取环形队列中的数据到新开辟的内存中;
285.d.在内核网络协议栈的入口,通过屏蔽netif_receive_skb()内核网络协议栈接口,屏蔽掉数据包向内核网络协议栈的传递;
286.e.采用packet_mmap的mmap机制将轮询得到的数据包映射到用户空间;
287.f.采用rt_preempt实时补丁的实时线程创建方法,建立用户态实时线程并设置实时线程为周期性实时线程,在每个用户态线程的实时周期中,完成对实时以太网现场总线数据包的解析处理工作;
288.g.在用户态实时以太网总线组件的实时线程的开始部分,采用packet_mmap原始套接字的方式轮询的获取实时以太网数据包;
289.h.在用户态实时以太网总线组件的实时线程中解析以太网协议数据包头,确定实时以太网数据包类型,分别有ethercat、ssb-iii以及其他实时以太网协议;
290.i.根据数据包类型解析数据包的指令数据,其中ethercat协议的指令数据包括周期性指令数据和非周期的指令数据,周期性的指令数据采用ethercat协议的过程数据进行数据传递,根据传递方向不同分为周期性的命令数据和状态数据,非周期性的指令数据采用ethercat协议的邮箱进行数据传递,根据传递方向不同分别为非周期性的命令数据和状态数据;ssb-iii协议与ethercat协议类似,指令数据也包括周期性指令数据和非周期性的指令数据,不同的是ssb-iii协议对于这两种数据均采用邮箱进行数据传输;
291.j.将解析出的指令数据组织成为消息命令,通过实时以太网组件的消息通信通道与上层的运动控制组件交换数据;
292.k.等待下一周期轮询数据包。
293.实时以太网现场总线采用标准网卡传递数据包,有效减少了硬件通信板卡的种类结构。现有数控系统中实时以太网现场总线仍采用传统的通信板卡形式进行总线数据的传输,不同的现场总线(如ethercat、ssb-iii实时以太网总线等)对应不同的通信板卡,针对每一种现场总线都要开发一套与之对应的硬件板卡,使系统变得臃肿且不可复用。
294.在内核网络协议栈的入口捕获并转发实时以太网总线数据包,避免了对网卡驱动的依赖,兼容性好,使用方式更加方便灵活。采用packet_mmap的内存映射机制,将所以实时以太网现场总线协议的网络数据包共享给用户空间的实时以太网总线组件,数据包捕获在网络协议栈入口进行,不依赖于特定的网卡,因此更加方便灵活。
295.实时以太网数据包的接收采用无中断的方式,避免了中断上下文的切换,提升了数据包处理效率,降低了系统延迟。实时以太网现场总线的控制结构均为主从控制方式,在实时以太网现场总线的网络中,数控系统为控制网络的主站设备,而从站为被控的伺服驱动器以及i/o等,网络的通信全部由主站发起,因此,主站在发出数据包后的一定时间内会接收到从站反馈回来的数据包,所以可以采用轮询的方式接收数据包,以减少中断带来的上下文切换。
296.3、一种基网卡的实时以太网现场总线网络数据包处理方法,包括以下步骤:
297.通过内核调试功能输出的调试信息,确定实时以太网现场总线数据包在原生网卡驱动中的传输路径,在网卡驱动内部建立实时以太网总线数据包的捕获点;
298.针对建立在网卡驱动内部的实时以太网总线数据包捕获点,基于原生网卡驱动对实时以太网总线数据包进行捕获;
299.根据实时以太网总线数据包所属的总线协议类型,在原生网卡驱动中对实时以太网总线数据包进行解析处理;
300.根据解析出的实时以太网总线数据,进行基于内存映射机制的底层驱动与用户空间的实时应用程序的数据交换。
301.所述实时以太网现场总线数据包类型包括ethercat协议和ssb-iii协议中的任意一种。
302.所述网卡为mac控制器加phy芯片控制结构。
303.所述捕获点位于网卡dma映射的环形队列之后。
304.所述基于原生网卡驱动对实时以太网总线数据包进行捕获具体为:
305.在内核空间中开辟出用于存储实时以太网总线数据包的静态内存;
306.选择中断源,设置中断为周期性触发并设置中断周期,在中断服务例程中,完成对实时以太网现场总线数据包的捕获;
307.数据的接收采用无中断的方式,屏蔽网卡中实时以太网总线数据包映射到环形队列时产生的接收中断;
308.数据的读取采用轮询的方式,通过不断轮询网卡,读取环形队列中的实时以太网总线数据包到开辟出的静态内存中。
309.所述在原生网卡驱动中对实时以太网总线数据包进行解析处理具体为:
310.开辟出用于存储解析出的指令数据的静态内存;
311.在原生网卡驱动中解析实时以太网总线数据包,确定实时以太网总线数据包的类型;
312.根据实时以太网总线数据包类型,解析实时以太网总线数据包中的指令数据;
313.将解析出的指令数据按数据组织格式存储在开辟的静态内存中。
314.所述基于内存映射机制的底层驱动与用户空间的实时应用程序的数据交换具体为:
315.采用内存映射机制,将指令数据所处的内存映射到用户空间;
316.采用消息通信机制,与用户空间的实时应用程序交换数据;
317.等待下一周期轮询数据包。
318.此方式适合应用于数控系统领域,尤其适用于采用标准网卡传输实时以太网现场总线网络数据包的应用场合,具体适用于中高档数控系统中采用标准网卡传输实时以太网现场总线网络数据包的应用场合。基于网卡的实时以太网现场总线网络数据包处理方法,包括以下步骤:
319.1)确定实时以太网现场总线数据包在原生网卡驱动中的传输路径,在网卡驱动内部建立实时以太网总线数据包的捕获点;
320.2)针对建立在网卡驱动在内部的网络数据包捕获点,设计基于原生网卡驱动的数据包捕获方法;
321.3)根据数据包所属的总线协议类型,设计在原生网卡驱动中的数据包的解析处理方法;
322.4)根据解析出的实时以太网数据,设计基于内存映射机制的底层驱动与上层用户态组件之间的数据交换方法;
323.所述的确定实时以太网现场总线数据包在原生网卡驱动中的传输路径,实时以太网现场总线为ethercat和ssb-iii;
324.所述的确定实时以太网现场总线数据包在原生网卡驱动中的传输路径,网卡为mac控制器加phy芯片控制结构;
325.所述的确定实时以太网现场总线数据包在原生网卡驱动中的传输路径,网卡驱动为linux系统的原生网卡驱动;
326.所述的在原生网卡驱动内部建立实时以太网总线数据包的捕获点,捕获点位于网卡dma映射的环形队列之后;
327.所述的建立基于原生网卡驱动的数据包捕获方法,数据包捕获方法包括以下步
骤:
328.a.在内核空间中静态的开辟一块儿内存,用于存储以太网数据包;
329.b.选择中断源,设置中断为周期性触发并设置中断周期,在中断服务例程中,完成对实时以太网现场总线数据包的捕获和解析处理工作;
330.c.数据的接收采用无中断的方式,将网卡dma数据包到环形队列产生的接收中断屏蔽掉;
331.d.数据的读取采用轮询的方式,通过不断轮询网卡设备,读取环形队列中的数据到新开辟的内存中。
332.所述的设计在原生网卡驱动中的数据包的解析处理方法数据包的解析处理方法包括以下步骤:
333.a.开辟一块儿静态内存用于存储解析出来的指令数据;
334.b.在原生网卡驱动中解析以太网协议数据包,确定实时以太网数据包的类型;
335.c.根据数据包类型,解析数据包中的指令数据;
336.d.将解析出的指令数据按数据组织格式存储在开辟的静态内存中;
337.所述的设计基于内存映射机制的底层驱动与上层用户态组件之间的数据交换方法,数据包的数据交换方法包括以下步骤:
338.a.采用内存映射机制,将指令数据所处的内存映射到用户空间;
339.b.采用消息通信机制,与上层用户态运动控制组件交换数据,其中,上层的运动控制组件为实时应用程序,用于轨迹规划、加减速控制以及插补计算;
340.c.等待下一周期轮询数据包。
341.如图9所示,基于原生网卡驱动的实时以太网现场总线的网络结构为图中的左半部分,默认情况下,网络数据包首先会经过内核空间的网卡驱动和网络协议栈,然后被发送的用户空间中的应用程序中,本发明在原生网卡驱动的内部增加一个实时以太网现场总线数据包捕获处理模块,它将ethercat、ssb-iii总线数据包在网卡驱动的内部进行捕获,同时解析出数据包中的指令数据再发送到用户空间中的运动控制组件进行进一步处理。
342.基于原生网卡驱动的实时以太网现场总线的数据流结构如图9中的右半部分所示,实时以太网数据包经过网卡之间dma到了原生网卡驱动内部的环形队列中,在环形队列之后增加数据包捕获处理模块,轮询的读取环形队列中的数据包,并对实时以太网数据包进行解析处理,将解析得到的指令数据通过mmap机制映射到用户空间的环形队列中,上层运动控制组件中的运动线程也通过轮询的机制读取环形队列中的指令数据。
343.如图10所示,实时以太网现场总线数据包的捕获处理方法的具体实施步骤包括:
344.a.在内核空间中静态的开辟两块儿内存区域,一块儿用于以太网数据包的存储,另一块儿用于指令数据的存储;
345.b.采用内核的高精度时钟定时器(hrtimer)设定一个周期性的时钟中断或者直接由硬件逻辑提供的高精度的定时中断,在每次周期性中断的中断服务例程中,完成对实时以太网现场总线数据包的捕获和解析处理工作;
346.c.数据的接收采用无中断的方式,将网卡dma数据包到环形队列产生的接收中断屏蔽掉;
347.d.数据包的读取采用polling轮询的方式,通过不断轮询网卡设备,读取环形队列
中的数据到新开辟的内存中。
348.e.通过解析以太网协议包头,判断实时以太网现场总线的数据包类型,分别有ethercat、ssb-iii以及其他实时以太网协议;
349.f.根据数据包类型,解析数据包的指令数据,其中ethercat协议的指令数据包括周期性指令数据和非周期的指令数据,周期性的指令数据采用ethercat协议的过程数据进行数据传递,根据传递方向不同分为周期性的命令数据和状态数据,非周期性的指令数据采用ethercat协议的邮箱进行数据传递,根据传递方向不同分别为非周期性的命令数据和状态数据;ssb-iii协议与ethercat协议类似,指令数据也包括周期性指令数据和非周期性的指令数据,不同的是ssb-iii协议对于这两种数据均采用邮箱进行数据传输;
350.g.将解析的指令数据按rcs库的nml中性消息组织格式存储在开辟的静态内存中,其中内存的存储格式分为周期性数据存储区和非周期数据存储器,周期性和非周期性数据存储区又分为命令消息和状态消息存储器,解析出的指令数据需按照对应的格式存储到对应的区域;
351.h.采用mmap机制将指令数据内存映射到用户空间;
352.i.采用rcs库的nml消息通信机制与上层用户态运动控制组件交换数据;
353.j.等待下一个中断周期轮询数据包。
354.实时以太网现场总线采用标准网卡传递数据包,有效减少了硬件通信板卡的种类结构。现有数控系统中实时以太网现场总线仍采用传统的通信板卡形式进行总线数据的传输,不同的现场总线(如ethercat、ssb-iii实时以太网总线等)对应不同的通信板卡,针对每一种现场总线都要开发一套与之对应的硬件板卡,使系统变得臃肿且不可复用。
355.在网卡驱动之中捕获并处理实时以太网总线数据包,可以有效增加数据包的处理效率,并降低与用户态组件之间交互的数据量,同时可以降低系统的延迟及抖动。原生网卡驱动处于内核空间,对数据包的处理更加高效;同时在原生网卡驱动中将数据包的命令以及状态指令解析出来,相比于整个数据包,可以大大减少与用户态组件交互的数据量。
356.实时以太网数据包的接收采用无中断的方式,避免了中断上下文的切换,提升了数据包处理效率,降低了系统延迟。实时以太网现场总线的控制结构均为主从控制方式,在实时以太网现场总线的网络中,数控系统为控制网络的主站设备,而从站为被控的伺服驱动器以及i/o等,网络的通信全部由主站发起,因此,主站在发出数据包后的一定时间内会接收到从站反馈回来的数据包,所以可以采用轮询的方式接收数据包,以减少中断带来的上下文切换。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1