龙源期刊网 http://www.qikan.com.cn
一种Windows中内核态和用户态之间交互数据的方法在基于PC的开放式数控系统中的应用
作者:牟凤林
来源:《电脑知识与技术》2011年第16期
摘要:在基于Windows平台的开放式的数控系统中,内核态程序和用户态程序之间的数据交互非常大,而且效率往往不高,该文提出一种使用Windows的内存映射技术实现高速数据交互的技术,能有效地解决数据交互慢的问题。
关键词:数据交换;双向缓冲区;内核态;用户态;开放式数控系统;Windows平台 中图分类号:TP393文献标识码:A文章编号:1009-3044(2011)16-3766-02 1 问题的提出
数控机床最重要的工作是自动加工,在开放式数控系统中,执行自动加工功能时,数据处理的流程一般如图1。
一个编制好的加工文件,首先经过PC用户态程序的处理,完成所谓粗插补的工作,然后控制系统再把粗插补的结果通过CNC内核(俗称驱动)传递给运动控制卡,让控制卡完成精插补的工作。实际中,在CNC内核层会完成更多的、实时性相对高的工作,比如端口扫描,为了讨论方便,忽略这些内容。
所谓的粗插补,是指对文件的一系列操作,包括对文件描述的刀路的语义理解、速度规划、轨迹处理、插补等等。人们之所以选择在PC上完成粗插补,是看中了计算机强大的运算能力。但一般人们不会采用在CNC内核层完成粗插补的工作,有如下原因:1)Windows系统在调度内核模式的线程时不会自动保存和恢复浮点寄存器中的内容,如要做需要手工完成;2)CNC内核中的程序不方便调试(俗称驱动程序不方便调试);3)为了保证控制卡处理数据的完整性,一般的控制系统都会设计成驱动程序由控制卡发出的中断来驱动运行,在中断服务程序中一般不宜做特别复杂的事情;有时,对于复杂的插补算法和刀路情形,可能需要较长的计算时间,这在性能上是不允许的。因此,人们一般把粗插补工作放在应用程序层,然后把插补结果传递给驱动程序。
这里有一个问题:当用户应用程序完成粗插补后,插补结果的数据量一般都是巨大的,而用户程序和内核程序之间的数据传递一般情况下是不方便的,这就要求人们找到一种高效的方法来完成数据交换。