CN117215810B - 一种xddp协议数据传输方法、电子设备及数控机床 - Google Patents

一种xddp协议数据传输方法、电子设备及数控机床 Download PDF

Info

Publication number
CN117215810B
CN117215810B CN202311473867.4A CN202311473867A CN117215810B CN 117215810 B CN117215810 B CN 117215810B CN 202311473867 A CN202311473867 A CN 202311473867A CN 117215810 B CN117215810 B CN 117215810B
Authority
CN
China
Prior art keywords
data
xddp
kernel
xenomai
ioctl
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202311473867.4A
Other languages
English (en)
Other versions
CN117215810A (zh
Inventor
王杰
王剑
韩绍栋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Gree Electric Appliances Inc of Zhuhai
Original Assignee
Gree Electric Appliances Inc of Zhuhai
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Gree Electric Appliances Inc of Zhuhai filed Critical Gree Electric Appliances Inc of Zhuhai
Priority to CN202311473867.4A priority Critical patent/CN117215810B/zh
Publication of CN117215810A publication Critical patent/CN117215810A/zh
Application granted granted Critical
Publication of CN117215810B publication Critical patent/CN117215810B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Communication Control (AREA)

Abstract

本发明提供了一种XDDP协议数据传输方法、电子设备及数控机床,属于数据传输技术领域,该方法包括Xenomai内核和Linux内核之间通过Xnpipe模块进行信息交互,Xnpipe模块由Xenomai内核管理。在Xnpipe模块中设置XDDP数据调控模块,XDDP数据调控模块用于对XDDP协议跨域传输数据进行实时读取、增加、删除。该方法能够深入地调控XDDP协议传输数据流当中的数据报,而且精度高、不会出现延迟的情况。

Description

一种XDDP协议数据传输方法、电子设备及数控机床
技术领域
本发明涉及数据传输技术领域,尤其涉及一种XDDP协议数据传输方法、电子设备及数控机床。
背景技术
数控机床是一种装有程序控制系统的自动化机床,能够较好地解决复杂、精密、小批量、多品种的零件加工问题,代表了现代机床控制技术的发展方向,是一种典型的机电一体化产品。数控机床通常设有人机交互系统实现机床与操作者之间的信息交流。为了能在数控机床与人机交互系统的通信中,得到更低的指令延时以及更稳定的数据传输,需要在人机交互系统加入能提供更高实时性的Xenomai系统,通过Linux和Xenomai的双内核系统进行控制,其中由Xenomai的内核Cobalt提供硬实时,Linux提供软实时。XDDP协议是Xenomai系统中的一种实时域间通信协议,用于实时任务与普通Linux任务之间的通讯。
但是现有的XDDP协议传输数据时,对于中间的数据流缺少实时监测的API,难以得知内部数据报具体情况,而且也不能对传输队列中内某个数据报定向修改、读取,不能满足用户态的开发需求。
因此,需要对现有的XDDP协议的数据传输方式进行改进,以克服现有技术的缺陷。
发明内容
为克服相关技术中存在的问题,本发明的目的之一是提供一种XDDP协议数据传输方法,该方法能够深入地调控XDDP协议传输数据流当中的数据报,而且精度高、不会出现延迟的情况。
一种XDDP协议数据传输方法,包括Xenomai内核和Linux内核之间通过Xnpipe模块进行信息交互,Xnpipe模块由Xenomai内核管理;
在Xnpipe模块中设置XDDP数据调控模块,所述XDDP数据调控模块用于对XDDP协议跨域传输数据进行实时监测、读取、增加、删除、复位。
本申请通过在Xnpipe模块中设置XDDP数据调控模块,对XDDP协议跨域传输数据进行实时监测、读取、增加、删除、复位,使处于用户态的开发者更加深入地调控XDDP协议传输数据流当中的数据报,提高了应用层关于XDDP的代码的调试效率,在应用层人机交互端开发各种不同的功能。并且XDDP数据调控模块由Xnpipe模块管控,保证了数据的传输效率。
在本发明较佳的技术方案中,所述Xnpipe模块包括Xnpipe数据结构体以及API函数集,其中API函数集包括第一类型函数以及第二类型函数,所述第一类型函数由所述Linux内核调取使用,所述第二类型函数由所述Xenomai内核调取使用;
当Xenomai内核和Linux内核进行数据传输时,Xnpipe模块中形成数据集队列,XDDP数据调控模块对数据集队列整体进行监测、复位;对数据集队列中的数据报节点进行实时读取、增加、删除。
在本发明较佳的技术方案中,所述XDDP数据调控模块,包括:
监测函数,所述监测函数用于对数据集队列中数据报节点的数量、总字节大小进行实时读取;
复位函数,所述复位函数用于清除数据集队列中的数据;
修改函数,所述修改函数用于修改、读取数据集队列中的数据报。
具体地,通过在Xnpipe模块中设置不同的函数,能够对数据集队列中的数据报节点进行读取、增加、删除,对数据集队列整体进行监测,复位,有助于开发者更加深入地调控XDDP协议传输数据流当中的数据报,提高了应用层关于XDDP的代码的调试效率。
在本发明较佳的技术方案中,所述在Xnpipe模块中设置XDDP数据调控模块后,还包括:
对XDDP数据调控模块进行修饰;所述对XDDP数据调控模块进行修饰,包括:
对XDDP数据调控模块本体进行修饰;
所述XDDP数据调控模块中设有指令函数,使用通用标识符对指令函数进行修饰。
对XDDP数据调控模块,方便XDDP协议传输数据过程中的其他模块也能够调用该调控模块,保证XDDP数据调控模块的适用范围。
在本申请中,既对XDDP数据调控模块本体进行修饰,也对XDDP数据调控模块中的指令函数进行修饰。
在本发明较佳的技术方案中,所述XDDP数据调控模块还包括:
第一变量,用于接收数据集队列中的字节大小;
第二变量,用于接收单个数据报字节大小;
第三变量,用于接收数据集队列中的数据报的数量;
第四变量,用于接收数据集队列中的字节数量的变化。
在本发明较佳的技术方案中,所述Xenomai内核和Linux内核之间通过Xnpipe模块进行信息交互过程中,统一用户空间中实时任务和非实时任务的线程锁,防止数据修改、数据监测结果混乱。在实际的应用中,实时任务为rt_task;非实时任务为nrt_task。
统一线程锁,能够防止数据修改、数据监测结果混乱。
在本发明较佳的技术方案中,所述Xenomai内核包括libcobalt,所述libcobalt中设置有用于调用XDDP数据调控模块的API。
在本发明较佳的技术方案中,还包括在XDDP数据调控模块搭建用户态入口;所述搭建用户态入口包括:
在Xenomai内核系统中设置第一调用号,并在libcobalt中设置系统调用函数;
在Linux-Xenomai双核系统的Linux内核中添加第二调用号;
将第一调用号添加进libcobalt的源码中,将第二调用号添加进Linux内核的源码中,重新编译Linux-Xenomai双核系统内核包以及更新libcobalt包,完成用户态入口的搭建。
由于XDDP数据调控模块处于Xenomai内核态,用户态一般无法具备权限访问,故需要为用户提供可以下沉至内核态操作的API,即调控模块的用户态入口。通过用户态入口,使得开发者能够深入地调控XDDP协议传输数据流当中的数据报。
在本发明较佳的技术方案中,所述Xenomai内核和Linux内核之间通过Xnpipe模块进行信息交互过程中,统一用户空间中rt_task和nrt_task(非实时任务)的线程锁,防止数据修改、数据监测结果混乱。rt_task为实时任务;nrt_task为非实时任务。
本发明的目的之二是提供一种电子设备,包括:
处理器;以及
存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如上所述的方法。
本发明的目的之三是提供数控机床,该数控机床在与人机交互系统的通信过程中,使用如上所述的协议数据传输方法进行数据传输。
本发明的有益效果为:
本发明提供的XDDP协议数据传输方法,该方法包括Xenomai内核和Linux内核之间通过Xnpipe模块进行信息交互,Xnpipe模块由Xenomai内核管理。在Xnpipe模块中设置XDDP数据调控模块,XDDP数据调控模块用于对XDDP协议跨域传输数据进行实时读取、增加、删除。该方法通过在添加XDDP数据调控模块,使得开发者能够深入地调控XDDP协议传输数据流当中的数据报,并且通过XDDP数据调控模块对数据报进行读取、增加、删除,提高了应用层关于XDDP的代码的调试效率。并且由于XDDP数据调控模块是Xenomai内核的Xnpipe框架进行搭建的,故系统的数据传输、调控时处于硬实时状态,实时性和稳定性有保障,而且精度高、不会出现延迟的情况。
本申请还提供一种电子设备及数控机床,该数控机床通过上述的XDDP协议数据传输方法进行人机交互,使得用户态的开发者更加深入地调控XDDP协议传输数据流当中的数据报,提高了应用层关于XDDP的代码的调试效率,在应用层人机交互端开发各种不同的功能不会对机床开发中需求的精度和延迟造成影响。
附图说明
图1是本申请提供的XDDP协议数据传输方法的流程图;
图2是本申请提供的数控机床在与人机交互系统的通信的流程图。
具体实施方式
下面将参照附图更详细地描述本发明的优选实施方式。虽然附图中显示了本发明的优选实施方式,然而应该理解,可以各种形式实现本发明而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本发明更加透彻和完整,并且能够将本发明的范围完整地传达给本领域的技术人员。
在本发明使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本发明可能采用术语“第一”、“第二”、“第三”等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本发明范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
数控机床是一种装有程序控制系统的自动化机床,能够较好地解决复杂、精密、小批量、多品种的零件加工问题,代表了现代机床控制技术的发展方向,是一种典型的机电一体化产品。数控机床通常设有人机交互系统实现机床与操作者之间的信息交流。为了能在数控机床与人机交互系统的通信中,得到更低的指令延时以及更稳定的数据传输,需要在人机交互系统加入能提供更高实时性的Xenomai系统,通过Linux和Xenomai的双内核系统进行控制,其中由Xenomai的内核Cobalt提供硬实时,Linux提供软实时。XDDP协议是Xenomai系统中的一种实时域间通信协议,用于实时任务与普通Linux任务(非实时任务)之间的通讯。
但是现有的XDDP协议传输数据时,对于中间的数据流缺少实时监测的API,难以得知内部数据报具体情况,而且也不能对传输队列中内某个数据报定向修改、读取,不能满足用户态的开发需求。基于此,本申请提供一种XDDP协议数据传输方法,以克服现有技术的缺陷。
实施例1
如图1-图2所示,以下对本申请所请求保护的一种XDDP协议数据传输方法进行具体描述。
XDDP协议数据传输过程中,包括Xenomai内核和Linux内核之间通过Xnpipe模块进行信息交互,Xnpipe模块由Xenomai内核管理;
在Xnpipe模块中设置XDDP数据调控模块,所述XDDP数据调控模块用于对XDDP协议跨域传输数据进行实时监测、读取、增加、删除、复位。
本申请的Xnpipe的机制,是一个Xenomai的实时线程和Linux的非实时线程之间进行交互的模块,简单来说Xnpipe模块分为两大块:Xnpipe数据结构体和Xnpipe API函数集。
这里的API函数集有一部分被封装成了struct file_operations类型的驱动ops,提供给Linux端线程打开的/dev/rtpN伪设备使用,Xenomai端则使用除ops内函数之外的API。Xenomai内核和Linux内核互相发送、接收信息时,与数据队列OUTQ、INQ交互,这是两个标准的存放于数据结构里的内核双向链表,数据以struct xddp_message的形式封装成数据报,挂载到数据队列上,供双方进行读取,而调控XDDP协议数据流的Xnpipe模块的切入点就是对这两个链表中数据报的增加、删除、统计。
本申请的XDDP协议数据传输方法,通过在添加XDDP数据调控模块,使得开发者能够深入地调控XDDP协议传输数据流当中的数据报,并且通过XDDP数据调控模块对数据报进行读取、增加、删除,提高了应用层关于XDDP的代码的调试效率。并且由于XDDP数据调控模块是Xenomai内核的Xnpipe框架进行搭建的,故系统的数据传输、调控时处于硬实时状态,实时性和稳定性有保障,而且精度高、不会出现延迟的情况。
具体地,所述Xnpipe模块包括Xnpipe数据结构体以及API函数集,其中API函数集包括第一类型函数以及第二类型函数,所述第一类型函数由所述Linux内核调取使用,所述第二类型函数由所述Xenomai内核调取使用;
当Xenomai内核和Linux内核进行数据传输时,Xnpipe模块中形成数据集队列,XDDP数据调控模块对数据集队列整体进行监测、复位;对数据集队列中的数据报节点进行实时读取、增加、删除。
具体地,本申请的第一类型函数即被封装成了struct file_operations类型的驱动ops;而第二类型函数为除ops内函数之外的API。
在实际的应用中,所述XDDP数据调控模块,包括:
监测函数,所述监测函数用于对数据集队列中数据报节点的数量、总字节大小进行实时读取;
复位函数,所述复位函数用于清除数据集队列中的数据;
修改函数,所述修改函数用于修改、读取数据集队列中的数据报。
具体地,通过在Xnpipe模块中设置不同的函数,能够对数据集队列中的数据报节点进行读取、增加、删除,对数据集队列整体进行监测,复位,有助于开发者更加深入地调控XDDP协议传输数据流当中的数据报,提高了应用层关于XDDP的代码的调试效率。
实际应用过程中,在Xenomai内核和Linux内核的双核信息交互系统中,监测函数是xnpipe_data_check,复位函数是xnpipe_data_clear;修改函数是xnpipe_data_ioctl;其中xnpipe_data_check负责所述监测函数用于对数据集队列中数据报节点的数量、总字节大小进行实时读取,通过flag标识符判断是返回数据报数量还是字节大小。xnpipe_data_clear负责清除OUTQ和INQ队列内的数据,是复位操作,通过flag标识符判断是返回清除了多少字节数据还是数据报的数量。xnpipe_data_ioctl负责对INQ、OUTQ队列中的某一个数据报进行修改、读取操作,采用链表遍历的方式,返回也是flag标识符判断是修改了多少字节数据还是数据报的数量。
以下对xnpipe_data_check、xnpipe_data_clear、xnpipe_data_ioctl等三个函数进行详细的解释说明。
1)xnpipe_data_check传入两个Flag(这里用F1和F2称呼),通过判断F1是INQ还是OUTQ来确定对哪个队列操作;通过判断F2是MBUF_NUM(代表数据报节点数量)还是MBUF_BYTES(代表数据报字节总大小)来确定函数返回值是队列的所有数据报总字节大小,还是队列的数据报节点总数量。
函数返回值:通过在XDDP数据调控模块设置函数变量来接收当前队列总字节大小、当前队列中数据报节点总数量。
2)xnpipe_data_clear与上述原理类似,通过传入的Flag标识符来判断是对INQ队列还是OUTQ队列进行清除工作,这是一个负责复位的函数,其一次性清除所有数据报。
函数返回值:返回清除了多少字节的数据,通过在XDDP数据调控模块设置函数变量来接收。
3)xnpipe_data_ioctl同样通过两个Flag标识符判断,F1代表是对OUTQ队列还是INQ进行操作;F2代表是增加ADD,还是删除DEL,还是读取READ;另外还会接收一个参数——数据报偏移值(整数),用于对数据队列(即数据链表)进行遍历,精确找到某一个数据报进行单独读取、删除或是在其后插入新的一个数据报。
函数返回值:若进行ADD、DEL的操作,通过在XDDP数据调控模块设置函数变量来接收。
更具体地,所述在Xnpipe模块中设置XDDP数据调控模块后,还包括:
对XDDP数据调控模块进行修饰;所述对XDDP数据调控模块进行修饰,包括:
对XDDP数据调控模块本体进行修饰;
所述XDDP数据调控模块中设有指令函数,使用通用标识符对指令函数进行修饰。
对XDDP数据调控模块,方便XDDP协议传输数据过程中的其他模块也能够调用该调控模块,保证XDDP数据调控模块的适用范围。
具体地,在实际的应用中,对XDDP数据调控模块过程如下:
在Xenomai内核和Linux内核交互的系统中,源码的pipe.h头文件中,Xenomai官方声明并定义了Xnpipe数据结构体xnpipe_state。本申请的方案在同一个pipe.h文件中声明并定义新结构体xddp_data_ioctl作为XDDP数据调控模块入口,其内部的函数包括监测函数xnpipe_data_check,复位函数是xnpipe_data_clear;修改函数是xnpipe_data_ioctl。等
在xnpipe_state结构体中,使用“struct xddp_data_ioctl data_ioctl;”语句,添加一个类型为struct xddp_data_ioctl的xnpipe_state结构体成员变量data_ioctl。
在pipe.h文件中,官方源码使用了extern关键字来修饰xnpipe_state的实例xnpipe_states[ ],具体语句为:“extern struct xnpipe_state xnpipe_states[ ];”这样使得内核中的其他模块只需要包含pipe.h就可以定义、初始化xnpipe_states[ ],从而调用XDDP数据调控模块data_ioctl。因为每个进程都有专属的xnpipe_state,故每个进程的调控模块都是独立管理的,耦合性低,独立性高。
在更佳的实施方式中,所述XDDP数据调控模块还包括:
第一变量,用于接收数据集队列中的字节大小;
第二变量,用于接收单个数据报字节大小;
第三变量,用于接收数据集队列中的数据报的数量;
第四变量,用于接收数据集队列中的字节数量的变化。
其中在实际的应用中,第一变量为data_size函数指针,用于负责接收队列字节大小;
第二变量为mbuf_size,用于负责接收单个数据报字节大小;
第三变量为mbuf_number,用于负责接收队列中数据报数量;
第四变量为number,用于负责接收增加、删除了多少数据报的数量。各个变量具体作用如下:
XDDP数据调控模块加入xnpipe_data_check、xnpipe_data_clear、xnpipe_data_ioctl自定义函数的函数指针,设置变量data_size负责接收队列字节大小、变量mbuf_size负责接收单个数据报字节大小,其中size负责接收增加、删除了多少字节、mbuf_number负责接收队列中数据报数量,其中number负责接收增加、删除了多少数据报的数量。
变量data_size接收当前队列总字节大小、mbuf_number接收当前队列中数据报节点总数量;返回清除了多少字节的数据;同时将mbuf_number的值给number,代表删除了所有数据报节点,最后把mbuf_number清零,代表着队列中已无数据报,数量为0;若进行ADD、DEL的操作,则由size变量负责接收增加、删除了多少字节;若进行读取操作,由mbuf_size负责接收单个数据报字节大小。
进一步,所述Xenomai内核和Linux内核之间通过Xnpipe模块进行信息交互过程中,统一用户空间中实时任务和非实时任务的线程锁,防止数据修改、数据监测结果混乱。实时任务为rt_task;非实时任务为nrt_task。
统一线程锁,能够防止数据交互过程中的数据修改、数据监测结果混乱。
统一线程锁的过程如下:
首先在函数外使用pthread_mutex mutex定义线程互斥锁全局变量。
接着在实时线程和非实时线程函数内通过pthread_mutex_lock(&mutex)为当前线程上锁,执行完想要的代码之后,再使用pthread_mutex_unlock(&mutex)解锁。
在当前线程解锁之前,另外同时发生的其他线程都必须等待。
以xddp_rt_data_ioctl()为例,在xddp_rt_data_ioctl( )函数体以外,使用pthread_mutex mutex;定义一个全局线程锁变量,之后在xddp_rt_data_ioctl( )函数体内,有如下语句:
{pthread_mutex_lock(&mutex); //上锁
/* 具体实时端函数的操作 */
pthread_mutex_unlock(&mutex); //解锁}
此时,在执行实时端函数的时候,xddp_nrt_data_ioctl()这个并行执行的非实时端的API会卡在自己函数体内的上锁语句:pthread_mutex_lock(&mutex); 的位置,不会再往下执行,一直到实时端解锁之后才会执行下面的操作。
进一步地,所述Xenomai内核包括libcobalt,所述libcobalt中设置有用于调用XDDP数据调控模块的API。
更具体地,还包括在XDDP数据调控模块搭建用户态入口;所述搭建用户态入口包括:
在Xenomai内核系统中设置第一调用号,并在libcobalt中设置系统调用函数;
在Linux-Xenomai双核系统的Linux内核中添加第二调用号;
将第一调用号添加进libcobalt的源码中,将第二调用号添加进Linux内核的源码中,重新编译Linux-Xenomai双核系统内核包以及更新libcobalt包,完成用户态入口的搭建。
需要强调的是,在本申请的方案的中,添加第一调用号、第二调用号并不能直接编译Linux-Xenomai双核系统内核包以及更新libcobalt包,还需要在需要为用户提供可以下沉至Xenomai内核态操作的API,即搭建调控模块的用户态入口,并在Linux-Xenomai双核系统对用户态入口进行定义、声明,系统调用所添加的定义、声明后,才能够编译Linux-Xenomai双核系统内核包以及更新libcobalt包。
具体搭建过程如下:
由于XDDP数据调控模块处于Xenomai内核态,用户态一般无法具备权限访问,故需要为用户提供可以下沉至内核态操作的API,即调控模块的用户态入口。通过用户态入口,使得开发者能够深入地调控XDDP协议传输数据流当中的数据报。
因XDDP数据调控模块处于内核态,用户态一般无法具备权限访问,故需要为用户提供可以下沉至内核态操作的API,即调控模块的用户态入口:xddp_rt_data_ioctl( )和xddp_nrt_data_ioctl( )两个函数。下面简要介绍其搭建方法:
1)xddp_rt_data_ioctl( )
a)在Xenomai源码的syscall.h中设置该函数的系统调用号。
b)将该API函数编写进Xenomai源码的LibCobalt库中,在unistd.h中添加该函数的接口定义COBALT_DECL,在rtdm.c中添加其接口实现COBALT_IMPL。
c)将该API函数添加进系统调用中,因为系统调用具有从用户态下沉至内核态的权限,在Linux-Xenomai双核系统源码的syscall.h中添加系统调用号,应与Xenomai源码中的保持一致。
d)在io.h中添加系统调用定义COBALT_SYSCALL_DEL,在io.c中添加系统调用实现COBALT_SYSCALL。
e)重新编译Linux-Xenomai双核系统内核源码以及Xenomai源码(更新LibCobalt),得到双核系统内核包和LibCobalt包。在安装完双核系统内核包之后,安装更新后的LibCobalt包即可完成实时端用户态入口的搭建。
2)xddp_nrt_data_ioctl( )
a)在Linux-Xenomai双核系统的Linux内核源码部分的sys.c文件中添加系统调用的实现asmlinkage int sys_xddp_nrt_data_ioctl( )。
b)修改unistd.h文件,给新的系统调用分配一个系统调用号:#define __NR_xddp_nrt_data_ioctl 128。
c)修改entry.S文件,增加新的一行:.long SYMBOL_NAME(sys_xddp_nrt_data_ioctl),这是为了初始化sys_call_table[ ]数组,该数组内包含指向每个Linux内核中系统调用的指针。
d)在/usr/src/glibc(libc库)中添加一个xddp_ioctl.c文件,文件内容为定义xddp_nrt_data_ioctl这个API,它使用syscall( )函数调用sys_xddp_nrt_data_ioctl这个我们上面添加的Linux系统调用,同时创建新的xddp_ioctl.h文件,在该文件中定义xddp_nrt_data_ioctl的参数以及返回值类型。
e)在编译glibc库的makefile中添加lib-y += xddp_ioctl.c,从而可以令其得到编译构建进glibc。
f)重新编译Linux-Xenomai双核系统内核源码,按照xddp_rt_data_ioctl部分相同方法进行内核安装,即可完成非实时端用户态入口的搭建。
实施例2
本申请还提供提供一种电子设备,包括:
处理器;以及
存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如上所述的XDDP协议数据传输方法。
电子设备包括存储器和处理器。
处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器 (Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列 (Field-Programmable Gate Array,FPGA) 或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器可以包括各种类型的存储单元,例如系统内存、只读存储器(ROM),和永久存储装置。其中,ROM可以存储处理器或者计算机的其他模块需要的静态数据或者指令。永久存储装置可以是可读写的存储装置。永久存储装置可以是即使计算机断电后也不会失去存储的指令和数据的非易失性存储设备。在一些实施方式中,永久性存储装置采用大容量存储装置(例如磁或光盘、闪存)作为永久存储装置。另外一些实施方式中,永久性存储装置可以是可移除的存储设备(例如软盘、光驱)。系统内存可以是可读写存储设备或者易失性可读写存储设备,例如动态随机访问内存。系统内存可以存储一些或者所有处理器在运行时需要的指令和数据。此外,存储器可以包括任意计算机可读存储媒介的组合,包括各种类型的半导体存储芯片(DRAM,SRAM,SDRAM,闪存,可编程只读存储器),磁盘和/或光盘也可以采用。在一些实施方式中,存储器可以包括可读和/或写的可移除的存储设备,例如激光唱片(CD)、只读数字多功能光盘(例如DVD-ROM,双层DVD-ROM)、只读蓝光光盘、超密度光盘、闪存卡(例如SD卡、min SD卡、Micro-SD卡等等)、磁性软盘等等。计算机可读存储媒介不包含载波和通过无线或有线传输的瞬间电子信号。
存储器上存储有可执行代码,当可执行代码被处理器处理时,可以使处理器执行上文述及的方法中的部分或全部。
实施例3
本实施例提供一种数控机床,该数控机床在与人机交互系统的通信过程中,使用如上所述的协议数据传输方法进行数据传输。
该数控机床通过上述的XDDP协议数据传输方法进行人机交互,使得用户态的开发者更加深入地调控XDDP协议传输数据流当中的数据报,提高了应用层关于XDDP的代码的调试效率,在应用层人机交互端开发各种不同的功能不会对机床开发中需求的精度和延迟造成影响。
如图2所示,具体地,数控机床在与人机交互系统通信过程中,主站控制器中设置Xenomai内核和Linux内核双核交互系统,Xenomai内核与Linux内核双核通过XDDP协议进行数据传输。主站控制器通过Linux内核与上位机通过SSII协议进行数据传输,Xenomai内核通过EtherCAT协议与从站设备进行数据交互,从站设备包括驱动器、动作部件如运动轴等,上位机通过主控制器对从站设备进行控制,来控制动作部件的运行。通过使用上述的XDDP协议数据传输方法进行数据传输,使得用户态能够对机床动作进行二次开发,且不会造成机床的动作延迟。
除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本申请的范围。同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为授权说明书的一部分。在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。在本申请的描述中,需要理解的是,方位词如“前、后、上、下、左、右”、“横向、竖向、垂直、水平”和“顶、底”等所指示的方位或位置关系通常是基于附图所示的方位或位置关系,仅是为了便于描述本申请和简化描述,在未作相反说明的情况下,这些方位词并不指示和暗示所指的装置或元件必须具有特定的方位或者以特定的方位构造和操作,因此不能理解为对本申请保护范围的限制;方位词“内、外”是指相对于各部件本身的轮廓的内外。
为了便于描述,在这里可以使用空间相对术语,如“在……之上”、“在……上方”、“在……上表面”、“上面的”等,用来描述如在图中所示的一个器件或特征与其他器件或特征的空间位置关系。应当理解的是,空间相对术语旨在包含除了器件在图中所描述的方位之外的在使用或操作中的不同方位。例如,如果附图中的器件被倒置,则描述为“在其他器件或构造上方”或“在其他器件或构造之上”的器件之后将被定位为“在其他器件或构造下方”或“在其他器件或构造之下”。因而,示例性术语“在……上方”可以包括“在……上方”和“在……下方”两种方位。该器件也可以其他不同方式定位(旋转90度或处于其他方位),并且对这里所使用的空间相对描述作出相应解释。
此外,需要说明的是,使用“第一”、“第二”等词语来限定零部件,仅仅是为了便于对相应零部件进行区别,如没有另行声明,上述词语并没有特殊含义,因此不能理解为对本申请保护范围的限制。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (3)

1.一种XDDP协议数据传输方法,包括:Xenomai内核和Linux内核之间通过Xnpipe模块进行信息交互,Xnpipe模块由Xenomai内核管理,所述Xenomai内核和Linux内核之间通过Xnpipe模块进行信息交互的过程中,统一用户空间中实时任务和非实时任务的线程锁,防止数据修改、数据监测结果混乱;所述Xnpipe模块包括Xnpipe数据结构体以及API函数集,其中API函数集包括第一类型函数以及第二类型函数,所述第一类型函数由所述Linux内核调取使用,所述第二类型函数由所述Xenomai内核调取使用;
其特征在于:在Xnpipe模块中设置XDDP数据调控模块,当Xenomai内核和Linux内核进行数据传输时,Xnpipe模块中形成数据集队列,XDDP数据调控模块对数据集队列整体进行监测、复位;对数据集队列中的数据报节点进行实时读取、增加、删除;所述XDDP数据调控模块,包括:监测函数,所述监测函数用于对数据集队列中数据报节点的数量、总字节大小进行实时读取;复位函数,所述复位函数用于清除数据集队列中的数据;修改函数,所述修改函数用于修改、读取数据集队列中的数据报;
所述XDDP数据调控模块包括:第一变量,用于接收数据集队列中的字节大小; 第二变量,用于接收单个数据报字节大小;第三变量,用于接收数据集队列中的数据报的数量;第四变量,用于接收数据集队列中的字节数量的变化;所述在Xnpipe模块中设置XDDP数据调控模块后,还包括:对XDDP数据调控模块进行修饰;其中,所述对XDDP数据调控模块进行修饰,包括:对XDDP数据调控模块本体进行修饰;所述XDDP数据调控模块中设有指令函数,使用通用标识符对指令函数进行修饰;
所述Xenomai内核包括libcobalt,所述libcobalt中设置有用于调用XDDP数据调控模块的API;还包括在XDDP数据调控模块搭建用户态入口,其中具体搭建过程如下:
调控模块的用户态入口包括xddp_rt_data_ioctl( )和xddp_nrt_data_ioctl( )两个函数;
1) xddp_rt_data_ioctl()搭建过程如下:
a)在Xenomai源码的syscall.h中设置xddp_rt_data_ioctl()的系统调用号;
b)将API函数编写进Xenomai源码的LibCobalt库中,在unistd.h中添加xddp_rt_data_ioctl()的接口定义COBALT_DECL,在rtdm.c中添加xddp_rt_data_ioctl( )的接口实现COBALT_IMPL;
c)将API函数添加进系统调用中,系统调用具有从用户态下沉至内核态的权限,在Linux-Xenomai双核系统源码的syscall.h中添加系统调用号,所添加的系统调用号与Xenomai源码中的保持一致;
d)在io.h中添加系统调用定义COBALT_SYSCALL_DEL,在io.c中添加系统调用实现COBALT_SYSCALL;
e)重新编译Linux-Xenomai双核系统内核源码以及Xenomai源码,得到双核系统内核包和LibCobalt包;在安装完双核系统内核包之后,安装更新后的LibCobalt包,完成实时端用户态入口的搭建;
2)xddp_nrt_data_ioctl( )搭建过程如下:
a)在Linux-Xenomai双核系统的Linux内核源码部分的sys.c文件中添加系统调用,实现asmlinkage int sys_xddp_nrt_data_ioctl( );
b)修改unistd.h文件,给新的系统调用分配一个系统调用号:#define __NR_xddp_nrt_data_ioctl 128;
c)修改entry.S文件,增加新的一行:.long SYMBOL_NAME(sys_xddp_nrt_data_ioctl),以初始化sys_call_table[]数组,该数组内包含指向每个Linux内核中系统调用的指针;
d)在/usr/src/glibc中添加一个xddp_ioctl.c文件,文件内容为定义xddp_nrt_data_ioctl的API,并使用syscall( )函数调用sys_xddp_nrt_data_ioctl;同时创建新的xddp_ioctl.h文件,在xddp_ioctl.h文件中定义xddp_nrt_data_ioctl的参数以及返回值类型;
e)在编译glibc库的makefile中添加lib-y+= xddp_ioctl.c;
f)重新编译Linux-Xenomai双核系统内核源码,按照xddp_rt_data_ioctl部分相同方法进行内核安装,完成非实时端用户态入口的搭建。
2.一种电子设备,其特征在于,包括:
处理器;以及
存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如权利要求1所述的方法。
3.一种数控机床,其特征在于,该数控机床在与人机交互系统的通信过程中,使用如权利要求1所述的协议数据传输方法进行数据传输。
CN202311473867.4A 2023-11-08 2023-11-08 一种xddp协议数据传输方法、电子设备及数控机床 Active CN117215810B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311473867.4A CN117215810B (zh) 2023-11-08 2023-11-08 一种xddp协议数据传输方法、电子设备及数控机床

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311473867.4A CN117215810B (zh) 2023-11-08 2023-11-08 一种xddp协议数据传输方法、电子设备及数控机床

Publications (2)

Publication Number Publication Date
CN117215810A CN117215810A (zh) 2023-12-12
CN117215810B true CN117215810B (zh) 2024-04-19

Family

ID=89039292

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311473867.4A Active CN117215810B (zh) 2023-11-08 2023-11-08 一种xddp协议数据传输方法、电子设备及数控机床

Country Status (1)

Country Link
CN (1) CN117215810B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102173535B1 (ko) * 2020-06-01 2020-11-03 젝스컴퍼니 주식회사 실시간 성능이 향상된 안드로이드 기반의 임베디드 보드
CN115576559A (zh) * 2022-09-09 2023-01-06 哈尔滨工业大学 一种EtherCAT总线型运动控制系统的大型G代码数据处理和传输方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102173535B1 (ko) * 2020-06-01 2020-11-03 젝스컴퍼니 주식회사 실시간 성능이 향상된 안드로이드 기반의 임베디드 보드
CN115576559A (zh) * 2022-09-09 2023-01-06 哈尔滨工业大学 一种EtherCAT总线型运动控制系统的大型G代码数据处理和传输方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"基于发布订阅的机器人通信中间件设计与实现";张衍迪;《中国优秀硕士学位论文全文数据库 (信息科技辑)》;第I140-293页 *

Also Published As

Publication number Publication date
CN117215810A (zh) 2023-12-12

Similar Documents

Publication Publication Date Title
US6209041B1 (en) Method and computer program product for reducing inter-buffer data transfers between separate processing components
US6205492B1 (en) Method and computer program product for interconnecting software drivers in kernel mode
US20180260240A1 (en) Dynamic Reconfiguration of Applications on a Multi-Processor Embedded System
US20110296379A1 (en) Automated method for decoupling avionics application software in an ima system
EP0871111A2 (en) Method computer program product and data structure for validating creation of an routing messages to file objects
MX2007014337A (es) Cuenta de referencia de coordinacion entre entidades que ejecutan dentro de espacios de direccion separados.
CN101446918A (zh) 一种实现用户态调试器调试单个函数的方法及系统
US8006064B2 (en) Lock-free vector utilizing a resource allocator for assigning memory exclusively to a thread
US20160188456A1 (en) Nvram-aware data processing system
CN112905365A (zh) 一种数据处理方法、装置、设备及介质
WO2022218337A1 (zh) 一种弱内存序架构下的代码检查方法及相应设备
CN117215810B (zh) 一种xddp协议数据传输方法、电子设备及数控机床
CN113296979B (zh) 一种虚幻引擎与外部程序的数据通信方法
US20180089059A1 (en) Non-coupled software lockstep
CN113826081A (zh) 在计算系统中传输报文的方法和计算系统
US11074200B2 (en) Use-after-free exploit prevention architecture
CN111338583B (zh) 一种高频数据存储方法、装置、计算机
Packwood et al. FPGA-based mixed-criticality execution platform for SystemJ and the Internet of Industrial Things
US10346183B2 (en) Reusable dynamic object in runtime environment
US11768714B2 (en) On-chip hardware semaphore array supporting multiple conditionals
TW201432461A (zh) 在受控代碼中實現的高流通量低延遲使用者模式驅動程式
Fox et al. Anodize: Language-Level Guarantees for Mixed Criticality Systems
Mendes et al. Seriema: RDMA-based Remote Invocationwith a Case-Study on Monte-Carlo Tree Search
CN118626143A (zh) 基于bmt的内存数据交换控制方法和系统
Schuchart Global task data dependencies in the partitioned global address space

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant