vxworks系统下基于windml的操纵杆串口驱动设计方法

文档序号:960717 发布日期:2020-11-03 浏览:11次 >En<

阅读说明:本技术 vxworks系统下基于windml的操纵杆串口驱动设计方法 (Control rod serial port drive design method based on windows under vxworks system ) 是由 高娟 于 2020-07-09 设计创作,主要内容包括:本发明属于vxworks系统技术领域,具体涉及一种vxworks系统下基于windml的操纵杆串口驱动设计方法。其首先配置windml虚拟鼠标设备;其次,基于windml虚拟鼠标设备实现操纵杆串口驱动;包括:初始化串口设备使用环境;解析串口数据获取操纵杆发送的力敏调节坐标;根据操纵杆回弹过程速率过滤回弹力敏调节坐标值;将过滤后的力敏坐标值转为系统鼠标事件;通过以上步骤,实现操纵杆在vxwork系统下的串口驱动功能。与现有技术相比较,本发明简化了操纵杆串口驱动加载过程,针对操纵杆力敏移动位移特点过滤回弹过程数据,缩短了操纵杆移动事件转化为鼠标事件的响应时间,同时可兼容其他类型鼠标配置使用,并保证了系统的接口性能和安全性。(The invention belongs to the technical field of vxworks systems, and particularly relates to a control rod serial port drive design method based on a windows system. Firstly, configuring a windows virtual mouse device; secondly, realizing the serial port driving of the operating lever based on the windows virtual mouse device; the method comprises the following steps: initializing a serial port equipment use environment; analyzing serial port data to obtain force-sensitive adjusting coordinates sent by the operating lever; filtering the resilience force sensitive adjustment coordinate value according to the resilience process rate of the operating lever; converting the filtered force-sensitive coordinate values into system mouse events; through the steps, the serial port driving function of the operating rod under the vxwork system is realized. Compared with the prior art, the invention simplifies the loading process of the serial port drive of the operating lever, filters the data of the rebound process aiming at the force-sensitive movement displacement characteristic of the operating lever, shortens the response time of converting the operating lever movement event into the mouse event, is compatible with other types of mouse configurations for use, and ensures the interface performance and the safety of the system.)

vxworks系统下基于windml的操纵杆串口驱动设计方法

技术领域

本发明属于vxworks系统技术领域,具体涉及一种vxworks系统下基于windml的操纵杆串口驱动设计方法。

背景技术

vxwork操作系统是嵌入式操作系统,使用WindML图形库编程则成为vxworks下进行图形及人机交互界面的开发的主要手段。操纵杆作为武器系统中的常见输入装置,通过将操纵杆的手柄扳动一定角度从而实现上下左右的方向控制。

为了使得操纵杆设备作为串口设备在vxworks系统下能正常使用,需要解决操纵杆的串口驱动问题。目前成熟的操纵杆驱动技术有基于windml多指针实现,将操纵杆设备作为低层输入驱动使用系统的标准串口驱动,驱动的内容使用高层输入驱动,模拟windml对ps/2鼠标的消息机制对串口的操纵杆进行同样的驱动设计;但是上述方法不能兼容usb类型鼠标,限定了系统对接入设备的类型,同时没有操纵杆回弹过程的数据进行过滤导致操纵杆移动位置不准确。

为了解决vxwork下的操纵杆串口驱动问题,兼容其他输入鼠标设备,简化驱动事件过程,需要提出一种基于windml虚拟鼠标的操纵杆串口驱动设计方法。

发明内容

(一)要解决的技术问题

本发明要解决的技术问题是:如何提出一种基于windml虚拟鼠标的操纵杆串口驱动设计方法。

(二)技术方案

为解决上述技术问题,本发明提供一种vxworks系统下基于windml的操纵杆串口驱动设计方法,所述方法包括如下步骤:

步骤1:配置windml虚拟鼠标设备;

为了vxworks系统能将操纵杆移动事件模拟成系统鼠标事件,同时为了兼容系统正常使用其他类型鼠标,不占用其他类型鼠标的系统事件,需要在windml配置文件中添加虚拟鼠标设备;通过调用虚拟鼠标设备的鼠标事件实现操纵杆移动事件转化为鼠标移动事件的目的;

步骤2:基于windml虚拟鼠标设备实现操纵杆串口驱动;所述步骤2包括:

步骤21:初始化串口设备使用环境;

步骤22:解析串口数据获取操纵杆发送的力敏调节坐标;

步骤23:根据操纵杆回弹过程速率过滤回弹力敏调节坐标值;

步骤24:将过滤后的力敏坐标值转为系统鼠标事件;

通过以上步骤,实现操纵杆在vxwork系统下的串口驱动功能。

其中,所述步骤1具体包括:

步骤11:创建windml工程;

步骤12:在工程中打开config.windml文件添加display设备,根据需求添加PS2或者UBS鼠标;

步骤13:用文本编辑器打开config.windml中手动添加虚拟鼠标设备配置语句。

其中,所述步骤21包括:

首先,在vxworks系统所接的设备中,指定与操纵杆通信的串口设备描述符;

其次,通过vxworks系统函数打开与操纵杆通信的串口设备;

然后,配置串口的波特率、校验位参数;

最后,创建串口接收任务进行操纵杆串口数据接收。

其中,所述步骤22包括:

首先,通过串口接收任务,获取操纵杆设备发送的移动事件数据报文内容;

然后,对报文的进行合法性验证,对于不合法的报文进行滑窗处理,减少串口数据的丢包率;如果报文合法,则获取移动事件数据报文内容中操纵杆相对中心点的力敏调节坐标(x,y)。

其中,所述步骤23包括:

首先,根据操纵杆串口发送的数据速率估算单点移动的最大距离MLS;

然后,计算本坐标点相对上次坐标点的单点移动位移;

其次,比较单点移动位移与MLS过滤回弹过程的坐标点,过滤其中的回弹力敏调节坐标值。

其中,所述步骤24包括:

首先,将力敏坐标点与中心点在X和Y轴上的相对位移乘以比例值rate获取本次操纵杆的鼠标相对移动点;

然后,将鼠标移动点作为虚拟鼠标设备的鼠标事件函数的输入参数;

最后,通过调用虚拟鼠标设备的鼠标事件函数模拟成系统鼠标事件。

其中,所述步骤21中创建串口接收任务进行操纵杆串口数据接收的过程中,循环使用vxworks系统的ioctl函数判断串口端口是否有新数据接收;当接收长度大于零时,则使用read函数读取串口数据。

其中,所述步骤22中,通过串口接收任务获取的串口数据经过报文合法性判断后才能获取正确的操纵杆力敏坐标值,具体为:

将本次接收到的所有串口数据存放到临时数组Temp;

对临时数组Temp中的每一个数据依次进行处理,并对合法数据的总个数count进行计数,当总计数count为帧头个数时,判断帧头是否符合要求,存入缓冲数组,不符合则置总计数count为1继续处理后续数据;当总计数为帧长度时,判断帧尾和校验和是否符合要求,如果符合要求则计算操纵杆的力敏调节坐标(x,y)并将总计数置0,否则在缓冲数组中从第一帧头位置z1到总计数所指位置中继续查找第二个帧头:如果找到,则第二个帧头位置z2后所有数据移位到数组头并将帧长减去z2赋值给count;如果没找到则将count置1;

判断处理的个数是否小于本次接收的串口数据个数,如果是则继续处理,如果不是则退出本次循环。

其中,所述步骤23中,如果步骤22中获取了有效的力敏坐标点数据,则判断该数据是否属于操纵杆自动回弹过程中发送的点数据;具体步骤如下:

设定操纵杆左右移动的总位移为S0,上下移动的总位移为S1;每次回弹过程中操纵杆发送的点个数为N,则点与点之间的横坐标平均距离为D0=S0/N,纵坐标平均距离为D1=S1/N;

假使中心点坐标为(x0,y0),本次接收到的力敏坐标点为(x2,y2),上次接收到的力敏坐标点为(x1,y1),设定d0=|x1-x2|,d1=|y1-y2|,判断d0与D0的大小,以及d1与D1的大小;当d0<D0且d1<D1时,判断此力敏坐标点符合要求。

其中,所述步骤23中,如果步骤23中获取了非回弹过程的力敏坐标点数据,将操纵杆移动事件模拟成系统鼠标事件;具体步骤如下:

根据力敏坐标点计算屏幕光标的坐标点;

设定换算比例值rate,操纵杆移动的方向为左正右负,上正下负;

屏幕光标的坐标点的x3=(x0-x2)*rate,y3=(y2-y0)*rate;

将屏幕光标的坐标点作为虚拟鼠标事件的输入,模拟系统鼠标事件。

(三)有益效果

与现有技术相比较,本发明在系统为vxworks的应用场景下,针对系统平台特性,根据操纵杆设备力敏位移特点,并结合windml库,设计实现了一种vxoworks系统下基于windml的操纵杆串口驱动。本发明简化了操纵杆串口驱动加载过程,针对操纵杆力敏移动位移特点过滤回弹过程数据,缩短了操纵杆移动事件转化为鼠标事件的响应时间,同时可兼容其他类型鼠标配置使用,并保证了系统的接口性能和安全性。

附图说明

图1为操纵杆串口驱动实现流程图。

具体实施方式

为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。

为解决现有技术问题,本发明提供一种vxworks系统下基于windml的操纵杆串口驱动设计方法,所述方法用于在vxworks系统平台下,解决操纵杆串口驱动问题;如图1所示,所述方法包括如下步骤:

步骤1:配置windml虚拟鼠标设备;

为了vxworks系统能将操纵杆移动事件模拟成系统鼠标事件,同时为了兼容系统正常使用其他类型鼠标,不占用其他类型鼠标的系统事件,需要在windml配置文件中添加虚拟鼠标设备;通过调用虚拟鼠标设备的鼠标事件实现操纵杆移动事件转化为鼠标移动事件的目的;

步骤2:基于windml虚拟鼠标设备实现操纵杆串口驱动;所述步骤2包括:

步骤21:初始化串口设备使用环境;

步骤22:解析串口数据获取操纵杆发送的力敏调节坐标;

步骤23:根据操纵杆回弹过程速率过滤回弹力敏调节坐标值;

步骤24:将过滤后的力敏坐标值转为系统鼠标事件;

通过以上步骤,实现操纵杆在vxwork系统下的串口驱动功能。

其中,所述步骤1具体包括:

步骤11:创建windml工程;

步骤12:在工程中打开config.windml文件添加display设备,根据需求添加PS2或者UBS鼠标;

步骤13:用文本编辑器打开config.windml中手动添加虚拟鼠标设备配置语句。

其中,所述步骤21包括:

首先,在vxworks系统所接的设备中,指定与操纵杆通信的串口设备描述符;

其次,通过vxworks系统函数打开与操纵杆通信的串口设备;

然后,配置串口的波特率、校验位参数;

最后,创建串口接收任务进行操纵杆串口数据接收。

其中,所述步骤22包括:

首先,通过串口接收任务,获取操纵杆设备发送的移动事件数据报文内容;

然后,对报文的进行合法性验证,对于不合法的报文进行滑窗处理,减少串口数据的丢包率;如果报文合法,则获取移动事件数据报文内容中操纵杆相对中心点的力敏调节坐标(x,y)。

其中,所述步骤23包括:

首先,根据操纵杆串口发送的数据速率估算单点移动的最大距离MLS;

然后,计算本坐标点相对上次坐标点的单点移动位移;

其次,比较单点移动位移与MLS过滤回弹过程的坐标点,过滤其中的回弹力敏调节坐标值。

其中,所述步骤24包括:

首先,将力敏坐标点与中心点在X和Y轴上的相对位移乘以比例值rate获取本次操纵杆的鼠标相对移动点;

然后,将鼠标移动点作为虚拟鼠标设备的鼠标事件函数的输入参数;

最后,通过调用虚拟鼠标设备的鼠标事件函数模拟成系统鼠标事件。

其中,所述步骤21中创建串口接收任务进行操纵杆串口数据接收的过程中,循环使用vxworks系统的ioctl函数判断串口端口是否有新数据接收;当接收长度大于零时,则使用read函数读取串口数据。

其中,所述步骤22中,通过串口接收任务获取的串口数据经过报文合法性判断后才能获取正确的操纵杆力敏坐标值,具体为:

将本次接收到的所有串口数据存放到临时数组Temp;

对临时数组Temp中的每一个数据依次进行处理,并对合法数据的总个数count进行计数,当总计数count为帧头个数时,判断帧头是否符合要求,存入缓冲数组,不符合则置总计数count为1继续处理后续数据;当总计数为帧长度时,判断帧尾和校验和是否符合要求,如果符合要求则计算操纵杆的力敏调节坐标(x,y)并将总计数置0,否则在缓冲数组中从第一帧头位置z1到总计数所指位置中继续查找第二个帧头:如果找到,则第二个帧头位置z2后所有数据移位到数组头并将帧长减去z2赋值给count;如果没找到则将count置1(当帧头有两个字节时,需要并将末尾的数据赋值给数组首位);

判断处理的个数是否小于本次接收的串口数据个数,如果是则继续处理,如果不是则退出本次循环。

其中,所述步骤23中,如果步骤22中获取了有效的力敏坐标点数据,则判断该数据是否属于操纵杆自动回弹过程中发送的点数据;具体步骤如下:

设定操纵杆左右移动的总位移为S0,上下移动的总位移为S1;每次回弹过程中操纵杆发送的点个数为N,则点与点之间的横坐标平均距离为D0=S0/N,纵坐标平均距离为D1=S1/N;

假使中心点坐标为(x0,y0),本次接收到的力敏坐标点为(x2,y2),上次接收到的力敏坐标点为(x1,y1),设定d0=|x1-x2|,d1=|y1-y2|,判断d0与D0的大小,以及d1与D1的大小;当d0<D0且d1<D1时,判断此力敏坐标点符合要求。

其中,所述步骤23中,如果步骤23中获取了非回弹过程的力敏坐标点数据,将操纵杆移动事件模拟成系统鼠标事件;具体步骤如下:

根据力敏坐标点计算屏幕光标的坐标点;

设定换算比例值rate,操纵杆移动的方向为左正右负,上正下负;

屏幕光标的坐标点的x3=(x0-x2)*rate,y3=(y2-y0)*rate;

将屏幕光标的坐标点作为虚拟鼠标事件的输入,模拟系统鼠标事件。

实施例1

本实施例提供一种vxworks系统下基于windml的操纵杆串口驱动设计方法,其包括:

(1)配置windml虚拟鼠标设备,修改windml配置文件对操作杆设备模拟一个虚拟鼠标同时兼容其他类型的鼠标设备;

(2)基于windml虚拟鼠标设备实现操纵杆串口驱动,初始化串口使用环境,建立串口接收任务,解析串口数据获取操纵杆发送的力敏调节坐标,根据操纵杆回弹过程速率过滤回弹力敏调节坐标值,将过滤后的力敏坐标值转为系统鼠标事件。

其中,步骤(2)中,将串口接收的数据进行合法性检查获取操纵杆移动事件的坐标值,然后根据操纵杆回弹过程的速率特点过滤出有效坐标点,同时设定移动比例值,计算鼠标移动的相对点,调用虚拟鼠标事件从而实现操纵杆驱动目的。

实施例2

本实施例如图1所示,为了解决vworks系统下操纵杆的串口驱动问题,采用基于windml虚拟鼠标的实现方法。下面对本实施例的内容作进一步描述。

1、配置windml虚拟鼠标设备

在不影响系统正常使用的情况下,为解决系统需兼容其他类型鼠标设备的使用问题,为系统单独配置一个虚拟鼠标设备。在workbench集成开发环境中,windml图形界面配置界面不支持鼠标类型多选,为解决此问题,需修改windml配置文件手动添加虚拟鼠标设备。配置windml虚拟鼠标设备具体步骤如下:

①创建windml工程;

②在工程中打开config.windml文件添加display设备,根据需求添加PS2或者UBS鼠标;

③用文本编辑器打开config.windml中手动添加虚拟鼠标设备配置语句。

2、基于windml虚拟鼠标实现操纵杆串口驱动事件

(1)初始化串口设备使用环境

初始化串口设备环境步骤如下:

Step1:读取配置文件中串口设备端口号和波特率等配置信息;

Step2:获取串口设备描述符;

Step3:使用vxworks系统函数open打开描述符所代表的串口设备并保存串口所指向的操作句柄;

Step4:使用ioctl函数配置串口设备波特率和校验属性;

Step5:创建串口接收任务;

Step6:接收任务循环使用ioctl函数判断串口端口是否有新数据接收。当接收长度大于零时,则使用read函数读取串口数据;

(2)解析串口数据获取操纵杆发送的力敏调节坐标

通过串口接收任务获取的串口数据经过报文合法性判断后才能获取正确的操纵杆力敏坐标值,具体步骤如下:

Step1:将本次接收到的所有串口数据存放到临时数组Temp;

Step2:对临时数组Temp中的每一个数据依次进行处理,并对合法数据的总个数count进行计数,当总计数count为帧头个数时,判断帧头是否符合要求,存入缓冲数组,不符合则置总计数count为1继续处理后续数据;当总计数为帧长度时,判断帧尾和校验和是否符合要求,如果符合要求则计算操纵杆的力敏调节坐标(x,y)并将总计数置0,否则在缓冲数组中从第一帧头位置z1到总计数所指位置中继续查找第二个帧头:如果找到,则第二个帧头位置z2后所有数据移位到数组头并将帧长减去z2赋值给count;如果没找到则将count置1(当帧头有两个字节时,需要并将末尾的数据赋值给数组首位)。

Step3:判断处理的个数是否小于本次接收的串口数据个数,如果是则继续处理,如果不是则退出本次循环;

(3)根据操纵杆回弹过程速率过滤回弹力敏调节坐标值

如果步骤(2)中获取了有效的力敏坐标点数据,判断该数据是否属于操纵杆自动回弹过程中发送的点数据。具体步骤如下:

Step1:设定操纵杆左右移动的总位移为S0,上下移动的总位移为S1。每次回弹过程中操纵杆发送的点个数为N,则点与点之间的横坐标平均距离为D0=S0/N,纵坐标平均距离为D1=S1/N。

Step2:假使中心点坐标为(x0,y0),本次接收到的力敏坐标点为(x2,y2),上次接收到的力敏坐标点为(x1,y1),设定d0=|x1-x2|,d1=|y1-y2|,判断d0与D0的大小,以及d1与D1的大小;当d0<D0且d1<D1时,判断此力敏坐标点符合要求;

(4)将屏幕点坐标值转为系统鼠标事件

如果步骤(3)中获取了非回弹过程的力敏坐标点数据,将操纵杆移动事件模拟成系统鼠标事件。具体步骤如下:

Step1:根据力敏坐标点计算屏幕光标的坐标点;

设定换算比例值rate,操纵杆移动的方向为左正右负,上正下负。

屏幕光标的坐标点的x3=(x0-x2)*rate,y3=(y2-y0)*rate;

Step2:将屏幕光标的坐标点作为虚拟鼠标事件的输入,模拟系统鼠标事件。

利用上述技术方案,采用上述操作步骤,本发明可以实现vxwork系统下操纵杆串口驱动,该方法已经经过了算法验证,并进行了实验检验。结果标明,该方案可以缩短操纵杆响应事件时间,保证操纵杆设备在vxwork系统下正常使用并且可兼容他类型鼠标。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

11页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:vxworks系统下基于信号量事件的操纵杆串口驱动设计方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类