【VC++开源代码栏目提醒】:网学会员为需要VC++开源代码的朋友们搜集整理了由Linux到Windows的开放式数控程序的移植 - 操作系统相关资料,希望对各位网友有所帮助!
文章编号:1001-2265201010-0001-03收稿日期:2010-05-20修回日期:2010-0611 3基金项目:国家自然科学基金资助项目60574004国家自然科学基金资助重点项目60736024教育部重大培育项目708069作者简介:韩守谦1985—男河南商丘人华南理工大学研究生主要研究方向为开放式数控系统的移植与实时性能优化E-mailhan.sqfoxmail.com。
由Linux到Windows的开放式数控程序的移植3韩守谦裴海龙王清阳华南理工大学自动化科学与工程学院广州 510641摘要:为了构建基于Windows的开放式数控系统以基于Linux/RTLinux的开放式数控系统为研究对象依据开放式数控系统的特点从头文件处理到库文件的移植等五个方面论述了如何将开放式数控系统从Linux/RTLinux环境下移植到Windows平台下的方法。
采用这种方法成功地将HL-B0408数控系统软件移植到Windows环境下。
同时也为移植Linux应用程序到Windows提供了一套比较完善的移植方法。
关键词:开放式数控LinuxWindows移植中图分类号:TG65TP311.54 文献标识码:ATransplantationofOpen2CNCSystemFromLinuxtoWindowsHANShou2qianPEIHai2longWANGQing2yangCollegeofAutomationScienceandEngineeringSouthChinaUniversityofTechnologyGuangzhou510641ChinaAbstract:2/22/———2Keywords:20 引言开放式数控系统以其低成本、高性能、高可靠性、资源丰富的特点在全世界范围内得到了越来越广泛的应用1。
目前开放式数控系统一般是基于实时操作系统的如商业化的实时操作系统VxWorks或者
开源可实时化的操作系统如Linux。
而目前世界上用户最多、兼容性最强的Windows操作系统却由于是一个分时操作系统源码不开放不易实时化等原因使得基于Windows的开放式数控还没有大量使用和推广。
由于商业化的实时操作系统价格不菲“Linux实时化方案”的模式虽然
开源免费但是软硬件开发的复杂度软件维护与升级用户使用的方便友好性等方面不理想因此使用“Windows运动控制卡”的开放式数控系统将是一个比较理想的模式。
这就涉及到将Linux应用程序移植到Win2dows平台的问题。
本文以基于Linux/RTLinux的开放式数控系统为研究对象致力于将它移植到Win2dows环境下。
研究这个问题不仅可以实现开放式数控系统的移植而且还可以探索出移植Linux应用程序到Windows平台的方法进而在Windows中使用Linux中各种
开源免费的程序的资源因此这项工作具有一定的实际意义和可操作性。
1 开放式数控系统本实验室开发的HL2B0408数控系统是一款高精度、高性能的数控系统数控软件被划分为四个模块:人机交互模块GUI、作业管理模块TASK、输入输出模块IO和运动控制模块MOT采用共享内存和rcslib做为进程间通信的主要方式其中MOT部分的调度由RTLinux的实时时钟实现调度周期为1毫秒223。
由于Windows在初始化时最小定时精度??1??2010年第10期??设计与研究???? 1994-2011 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net为55毫秒对于数控系统来讲这个定时精度远远不能满足要求48。
解决这个问题可以采用以下两种方案:1应用多媒体定时函数。
由于多媒体定时器是基于中断而不是靠向Windows系统发送消息来驱动的它可提供最小l毫秒的定时周期因此实时性很强。
2制作专用的基于FPGADSP的运动控制卡来完成实时数控功能57。
在运动控制卡的硬件上设有一个8253定时计数器由它触发中断在设备驱动程序中编写中断处理程序。
这种硬件中断方式定时精度可达到微秒级实时性非常好。
其它非实时模块运行在Windows环境下向运动控制卡发送指令实现人机对话功能及任务管理等功能。
为了保证数控系统安全可靠的运行我们选用方案2用运动控制卡实现数控系统的运动控制模块其它部分从Linux/RTLinux下移植到Windows下编译实现。
为了便于测试软件移植效果我们将运动控制部分也移植到Windows下用Windows的线程池取代RTLinux的调度并延长调度周期到Win2dows可承受的范围这样可以方便地测试移植效果。
2 开放式数控移植分析第一步是分析移植的可行性。
并不是所有的程序都可移植有的程序与其移植不如重写。
移植的可行性主要从程序的开发语言使用的库函数和操作系统的API等方面分析。
开发程序时选用与平台无关的语言程序的可移植性最好选用标准C/C库函数的其次选用操作系统API的最差。
简单地判断一个Linux程序能不能移植到Windows平台可看看源
代码能否在Cygwin下面编译通过其中Cygwin是Unix/Linux的模拟环境6。
HL2B0408数控系统大部分是用标准C/C库函数开发的用户界面是用平台无关的Tcl/Tk语言开发的通信库函数也是支持多平台的rcslib。
HL2B0408数控移植难点在于它涉及到Linux下的进程间通信、串口等设备文件的操作、系统头文件的替换、动态库和静态库的编译等问题。
综合分析具备可移植性。
第二步是熟悉原系统与目标的系统的差别与联系以及如何重新编译和组织程序结构。
以HL2B0408数控系统为例它在Linux/RTLinux环境下是用gcc编译的在Windows下就需要使用
VC集成开发环境如
VC2008等。
我们需要将Linux下的Makefile文件描述的编译规则在
VC中实现。
3 开放式数控移植步骤3.1 头文件处理移植开放式数控系统时头文件的处理很重要。
它的处理可以从以下几个方面分析:1与操作系统无关的如标准C/C头文件:这些头文件一般不必修改如stdio.hstring.hfloat.h等。
2与操作系统相关但可以找到等效替换的头文件:直接替换。
表1列出了一些常见的系统头文件的替换关系。
表1 常见系统头文件替换关系WindowsLinuxincludeincludeincludeincludeincludeincludeincludeincludeincludeincludeincludeincludeincludeincludeinclude 3与操作系统相关而且无法实现等效替换的头文件:这种情况比较复杂需要根据头文件的作用或拷贝头文件内容或自己改写程序。
对于无法拷贝或者拷贝后又牵连更多头文件的情况最好重写头文件或者
代码。
头文件处理的一般原则是一边编译一边根据错误提示找到出错的函数再决定包含哪一个头文件。
最后为了方便移植开放式数控系统需要新建一个配置头文件Config.h。
它可以调整各种C库头文件的包含问题比如defineHAVE_MALLOC_H1表示工程中可以使用malloc.h头文件通过调整这些定义值可以去除一些Windows平台没有的头文件如linux/fd.h等。
其次调整各种数据类型的定义如Linux下的pid_tuid_t等类型在Windows下是没有定义的可以在Config.h中加入类似definepid_tint的语句解决这类问题。
此外Config.h中还可以调整各种函数定义环境变量编译选项大小写问题等。
利用Config.h调整开放式数控软件在Linux和Windows中的不同之处可以尽量减少源
代码的修改。
312 进程以及进程间通信处理进程线程处理很重要由于HL2B0408数控系统中很少涉及这类问题这里不再赘述读者可参考相关文献。
开放式数控系统可利用的进程间通信方式有很多比如管道命名管道内存映射消息队列共享??2????设计与研究??组合机床与自动化加工技术?? 1994-2011 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net内存信号量套接字等。
Windows和Linux都支持这些机制。
HL2B0408数控系统使用的是共享内存它的移植主要是简单的API替换和参数调整如表2所示。
表2 共享内存操作API对照WindowsLinux申请共享内存CreateFileMappingshmget获取共享内存地址MapViewOfFileshmat关闭共享内存UnmapViewOfFileCloseHandleshmdt删除共享内存shmctl3.3 时钟问题数控系统的移植涉及到实时时钟和普通时钟。
实时时钟可用运动控制卡上的硬件来实现对于普通时钟Windows提供了以下几种方法:简单的延时可以用sleep函数稍微准确的延时可以使用clock函数GetTickCount函数更高级的可以使用timeGet2Time函数获取一般系统时间可以通time获取准确的时间可以用timeGetTime函数获取最准确的系统时间需使用硬件支持的QueryPerformanceFrequency和QueryPerformanceCounter函数。
我们选用timeGet2Time替换Linux中的gettimeofday函数这样编译
代码时需要链接多媒体库Winmm.lib。
具体的替换原则是尽量保证替换前后的时间精度一致。
3.4 设备问题开放式数控移植时一般会涉及到设备问题如文件路径串口等。
对于设备的操作Windows和Linux是迥然不同的。
Windows设备的文件名不同于普通文件通常称为设备路径名而在Linux中将设备描述为文件可以在目录/dev中找到所有的设备文件。
表3中总结了两个系统对同一设备操作的API对照表。
表3 设备操作API对照WindowsLinux打开CreateFileopen关闭CloseHandlecloseI/O控制DeviceIoControlioctl读ReadFileread写WriteFilewrite 其实设备问题也是不同系统之间API的等效替换问题只是操作的参数和方法不同。
下面的程序片段是两个系统打开和读取第一个串口的操作示例。
Linux下打开串口:fdopen/dev/ttyS0O_RDWRO_NOCTTYO_NDELAY读串口:tempreadfdReadBufbytes_read255Windows下打开串口:hComCreateFileCOM1GENERIC_READGENERIC_WRITE0NULLOPEN_EXISTINGFILE_ATTRIBUTE_NOR2MALFILE_FLAG_OVERLAPPEDNULL读串口:tempReadFilehComReadBuf255nHaveReadosRead3.5 库文件移植开放式数控的移植一般会涉及到库文件的移植。
HL2B0408数控系统中的解析器rcslib均是动态库需要进行移植。
Windows和Linux系统中都有库的概念库一般分为动态库和静态库采用库可以有效的减少程序大小提高效率提高程序的可扩展性便于模块化管理等。
Windows操作系统中动态库DLL必须有一个入口点比如
VC中的DllMain是一个缺省的入口函数而静态库不需要入口点。
所以最简单的办法就是将Linux中的动态库和静态库都编译成Windows下的静态库这样就不需要额外添加库入口函数避免或者减少库源
代码的修改。
基于以上方法我们成功地将HL2B0408数控系统的动态库编译成Windows的静态库文件。
4 开放式数控移植总结上文论述了由Linux到Windows的开放式数控程序移植的主要问题依据文中提出的方法按照“编译2出错2解决2编译”的模式就可以一步一步完成数控系统的移植。
总的来说移植中最难的部分是操作系统级不同概念的替换因为C/C库在各个平台上虽然有所不同但总体比较接近易于修改和替换。
所以并不是任何程序都可以轻松地进行移植只有在设计、开发初期考虑到程序的可移植性才能快速、方便地进行移植。
因此开发多平台可移植的程序时可以从以下几个方面入手:首先尽量选用平台无关的开发语言如Tcl/TkOpenGL等移植它们的程序非常容易基本上在目标机上重新编译链接一下就可以了其次尽量使用标准C/C的库文件避免使用操作系统级别的概念和API这样稍作修改也可以完成移植任务再其次即使使用操作系统级的概念和API也要选择比较通用和成熟的概念便于在其它系统上找到相应的实现方法不至于重写
代码破坏源程序的结构。
最后才选用操作系统特有的概念和方法。
基于以上方法我们成功地将HL2B0408数控系统从Linux/RTLinux下移植到Windows下测试运行成功见图1说明本文的移植方法是正确的可行的。
下转第7页??3??2010年第10期??设计与研究???? 1994-2011 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net 将表1、表2进行比对比对结果如表3所示。
从比对结果可看出通过求解机床运动变换模型得到的机床旋转运动副、平移运动副的运动量完全正确充分证明了本文所述机床运动变换建模方法和求解方法的正确性、可行性同时具有较高的精确性。
表3 比对UG测量结果与VERICUT测量结果pxpypzrxryrz1孔010004010001010002010000017010000030100000012孔0100010100010100010100000020100000020100000033孔0100000100000100000100000000100000000100000014孔010005010004010000010000017-0100000010100000015 结束语本文对运动形式复杂的双转台五轴数控机床运动学求解进行了较为详细的论述推导出该类机床后置处理中坐标运动变换模型及求解方程。
通过对比工件设计与求解结果的虚拟加工表明该方法正确、可行。
另外该模型能适应不同的五轴联动数控机床结构形式而且考虑了机床结构误差的影响为多坐标数控加工运动命令生成的通用化和机床误差补偿奠定了基础。
参考文献1陈强谌永祥.后置处理中通用机床模型的建立及软件实现方法J.机床与液压20093711:17-19.2陈涛彭芳瑜周云飞.基于结构误差补偿的多坐标机床后置变换J.中国制造业信息化2003322:88-90.3段春辉.五轴联动数控机床通用后置处理系统研制D.成都:西南交通大学2007.4周艳红周济.数控加工技术M.北京:国防工业出版社2002.5武跃王宇晗毕庆贞.五轴联动数控加工中旋转角的优化和选择J.组合机床与自动化加工技术20095:1-9.6吴宪传张向文.MATLAB和
VC联合编程的COM研究J.计算机系统应用20097:175-194.编辑 赵蓉上接第3页图1 开放式数控系统在Windows平台上运行5 结束语本文系统分析了由Linux到Windows的开放式数控系统的移植方法从移植分析到头文件处理、进程及进程间通信、设备操作、时钟处理、库移植等方面论述了移植的细节问题并提出了一些行之有效的解决办法给出了一些程序示例片断总结绘制了一些对照表格最后成功地将HL2B0408数控系统从Linux/RTLinux平台中移植到了Windows平台。
同 时本文也总结了软件移植的技巧和方法提出了如何设计和书写平台无关的、可移植性强的程序的方法。
参考文献1周凯.PC数控原理、系统及应用M.北京:机械工业出版设2006.2高海彬王清阳裴海龙.数控软件系统的升级及实时控制性能的测试J.计算机工程与设计2009308:1872-1874.3陈哲衔王清阳裴海龙.开放式数控系统任务管理的研究与设计J.组合机床与自动化加工技术20101:93-96.4王芳王琨琦梅雪松.基于Windows全软件数控系统实时性的研究J.西安工业大学学报2009293:228-233.5肖苏华李迪赖乙宗等.基于WindowsCE的开放式数控系统的研究与开发J.制造业自动化2007294:36-39.6CygwinEB/OL.http://baike.baidu.com/view/3968.htmfrala0_1_12010.7闫永志任雪鸿.开放式数控系统实时性的研究J.内江科技20102:19-20.8范剑潘建峰白建华.全软件数控系统实时控制研究J.制造技术与机床20075:45-48.编辑 赵蓉??7??2010年第10期??设计与研究???? 1994-2011 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
上一篇:
Linux gdb调试器用法全面解析
下一篇:
4种小菜缓解孕妈咪不适