基于rtlinux的通用数控平台构建

基于rtlinux的通用数控平台构建

ID:33696923

大小:1021.40 KB

页数:89页

时间:2019-02-28

上传者:U-6858
基于rtlinux的通用数控平台构建_第1页
基于rtlinux的通用数控平台构建_第2页
基于rtlinux的通用数控平台构建_第3页
基于rtlinux的通用数控平台构建_第4页
基于rtlinux的通用数控平台构建_第5页
资源描述:

《基于rtlinux的通用数控平台构建》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

南京航空航天大学硕士学位论文基于RTLinux的通用数控平台构建姓名:吴木林申请学位级别:硕士专业:机械电子工程指导教师:游有鹏20080101 摘要随着PC技术的发展数控系统正进入一个崭新的阶段全软件数控所谓全软件数控即CNC系统的各项功能包括插补位控和PLC等均由软件模块来实现全软件数控较传统CNC具有更好的灵活性通用性经济性和开放性本文以PC104作为数控系统的硬件平台采用性能优秀的自由软件实时操作系统RTLinux为软件平台实现实时多任务调度满足数控系统控制任务的高实时性要求构建基于RTLinux的全软件通用数控系统平台便于后续开发具有自主知识产权的数控系统有助于提高我国数控技术水平通过对当前流行的软件数控系统架构的分析比较设计构造了基于RTLinux的三层模块化数控系统结构同时根据Linux和RTLinux编程资源规划设计了各层次模块间的通信方式并根据数控系统内部的数据和命令信息流设计定义了各模块间的接口协议此外根据数控系统的功能与性能要求对LinuxRTLinux内核进行了定制详细介绍了其在PC104上的移植过程为提高系统的稳定性和运行效率本文利用Qt完成了系统界面层开发利用C语言实现了系统管理层和控制层的程序开发整个系统运行于FrameBuffer上不需要Linux桌面系统以及XLib的支持减少了对系统内存和存储空间的要求最后介绍了RTLinux应用程序开发和调试以及内核程序开发和调试方法样机联调试验表明该软件数控系统平台达到了预期设计要求关键词全软件数控RTLinux内核移植实时线程通信 ABSTRACTWiththedevelopmentofPCtechnology,thecomputernumericalcontrolsystemisenteringabrand-newstagesoftwareCNC.SoftwareCNCmeansthatallthefunctionsofCNCsystem,suchasinterpolation,positioncontrolandPLCareimplementedwithsoftwaremodules.ComparingwithtraditionalCNC,softwareCNChasabetterflexibility,versatility,efficiencyandopenness.Inthethesis,thehardwareplatformofthesystemisPC104,andthesoftwareplatformofthesystemisRTLinuxwhichisagenuinehardreal-timeandfreeoperationsystem.RTLinuxisabletoschedulemanyreal-timetasks,anditmeetsthedemandoftheCNCtaskswhichneedhighreal-time.ConstructingallsoftwaregeneralCNCplatformbasedonRTLinuxmakesthefollowingdevelopmentoftheCNCsystemwhichhastheproprietaryintellectualpropertyrightseasy,anditishelpfulinraisingourcountryCNCtechnicallevel.AftertheanalysisandcomparisonofpopularstructuresofsoftwareCNCsystems,anopenarchitectureCNCsystemwiththreelayersisdesignedbasedonRTLinux.Inaddition,themethodsusedinthecommunicationoflayersandmodulesaredesignedaccordingtotheresourcesofLinuxandRTLinux,andtheinterfaceprotocolamongmodulesisdesignedanddefinedaccordingtothedataandcommandsstreamsofCNCsystem.TheLinuxkernelandtheRTLinuxkernelarecustomizedaccordingtothedemandsofCNCsystem,andtheparticularreplantingprocessesonPC104areintroducedtoo.Toimprovethestabilityandrunningefficiency,Qtisusedinthedevelopmentofthegraphicaluserinterface,andClanguageisusedinthedevelopmentofthemanagementlayerandcontrollayer.ThesystemrunningonFrameBufferwithoutthesupportsoftheLinuxdesktopandXLibreducesthedemandofthememoryandthestorage.Finally,thedebugginganddevelopmentofapplicationprogramandkernelprogramareintroduced.ThesystemhasbeentestedonPC104,andtheresultshowsthatthemainfunctionsoftheCNCsystemcanmeettheexpecteddesigndemandswell.KeyWords:softwareCNC,RTLinux,kernelreplant,real-timethread,Communication 图清单1.图2.1RTLinux总体运行机制……………………………………………………...122.图2.2基于RTLinux的实时应用软件结构……………………….……………….153.图3.1数控系统的任务分解………………………………….……………………174.图3.2数控系统的任务并行处理关系….………….……….…..…………………185.图3.3CPU分时共享的并行处理…………………….……….……………………186.图3.4数控系统实时性的划分………………………………….…………………217.图3.5系统整体结构………………………………………….……………………228.图3.6系统软件层次结构及模块划分………………………….…………………249.图4.1Linux内核配置选项……………………………………….…………………3310.图4.2RTLinux内核配置选项………………………………………………………3511.图4.3RTLinux优先级保护选项……………………………………………………3612.图4.4开启FrameBuffer后的系统启动界面………………………...……………..4013.图5.1管理层与控制层的通信……………………………………………………..4214.图5.2界面层功能模块……………………………………………………………..4415.图5.3系统人机界面………………………………………………………………..4516.图5.4管理层软件结构…………………………………….………………………..4617.图5.5控制层模块间通信………………………………………….………………..5318.图5.6数控系统启动过程…………………………………………………..………..6119.图6.1Linux开发过程…………………………………………………..………...…..6520.图6.2vi编辑器…………………………………………………..………………..…..6621.图6.3例程运行结果…………………………………………………..……………..7022.图6.4内核调试选项…………………………………………………..……………..7123.图6.5系统硬件调试平台……………………………………………………………74 表清单1.表6.1基本GCC常用选项表..……..………….….…….……..……………………..722.表6.2基本GDB命令表………..…………………………………..………………...74 承诺书本人郑重声明所呈交的学位论文是本人在导师指导下独立进行研究工作所取得的成果尽我所知除文中已经注明引用的内容外本学位论文的研究成果不包含任何他人享有著作权的内容对本论文所涉及的研究工作做出贡献的其他个人和集体均已在文中以明确方式标明本人授权南京航空航天大学可以有权保留送交论文的复印件允许论文被查阅和借阅,可以将学位论文的全部或部分内容编入有关数据库进行检索可以采用影印缩印或其他复制手段保存论文(保密的学位论文在解密后适用本承诺书)作者签名日期 南京航空航天大学硕士学位论文第一章绪论随着全球经济竞争日益加剧对制造行业的要求日新月异被加工零件复杂度的增加加工单元的柔性化无人化工厂的实现等等数控机床作为一种自动化的加工设备而被广泛采用同时随着现代机械制造业向更高层次的发展数控机床也成为柔性制造单元(FMC)柔性制造系统(FMS)以及计算机集成制造系统(CIMS)的基础装备数控技术是数控机床的关键技术它的迅速发展和广泛应用使得普通机械逐渐被高效率高精度的数控机械所代替从而形成了巨大的生产力其水平高低己成为衡量一个国家工业现代化的重要标志计算机数字控制(ComputerNumericControl简称CNC)系统是数控技术的核心也是制造行业智能化的基础因此CNC系统作为数控机床中的重要部件之一其性能的好坏直接影响产品在市场上的竞争能力1.1数控技术的发展1.1.1数控技术的发展历史二战后美国为了革新飞机制造业中用于仿形机床上的靠模和样件加工的设备开始研制新型机床1952年美国帕森斯公司(ParsonsCo.)与麻省理工学院伺服机构实验室(ServoMechanismsLaboratoryofTheMassachuset'sInstituteofTechnology)合作研制成功世界上第一台数控机床这是一台三坐标立式数控铣床采用的是脉冲乘法器原理其数控系统全部采用电子管元件从那时起半个世纪以来随着计算机技术特别是微电子技术的发展数控系统已经历了八代可分为四[1-3]个发展阶段(1)硬件数控(NC)阶段如果把最早期采用电子管制成的数控系统称为第一代数控系统的话那么从1959年开始随着晶体管和印刷电路板被广泛应用到数控系统中数控系统进入第二代1965年小规模集成电路出现由于它体积小功耗低使数控系统的可靠性得以进一步提高数控系统发展到第三代前三代数控系统均采用专用计算机各种控制基本由硬件来实现所以通常称为硬件数控系统(NC)其功能简单灵活性差设计周期长系统可靠性低因而限制了其进一步的发展和应用(2)计算机数控(CNC)阶段70年代初通用小型计算机业出现并成批生产随着微电子技术和集成制造技术的发展数控技术也不断更新使数控技术进入了飞速发展的时代1970年在美国芝加哥数控展览会上首次展出了由小型计算机为核心的计算机数控系统标志着数1 基于嵌入式RTLinux的通用数控平台的构建控系统进入了计算机为主体的第四代至此原来由硬件实现的功能逐步改由软件完成从此系统进入了软件数控时代1974年首次出现了采用微处理器芯片的软件CNC系统象征着数控系统进入了以微机为背景的第五代这一发展真正实现了机电一体化进一步缩小了体积降低了成本简化了编程和操作使数控系统达到了普及的程度70年代末80年代初随着超大规模集成电路大容量存储器CRT的普及应用CNC系统进入了第六代它虽然仍以微处理器为基础但控制功能更为完备达到了多功能的技术特征尤其在软件技术方面发展更快具有了交互式对话编程三维图形动态显示/校验实时精度补偿等功能在系统结构上开始出现了柔性化模块化的多处理机结构数控系统产品也逐步实现了标准化系列化(3)高速高精度CNC的开发与应用阶段进入八十年代为了实现高速高精度曲面轮廓精加工必须提高微轮廓线的解释处理能力和伺服驱动特性为保证零件程序的传送插补加工线速度控制等连续处理CNC系统应具有足够高的数据处理速度和能力32位CPU以其很强的数据处理能力在CNC中得到了应用使CNC系统进入了面向高速高精度的第七代1986年三菱电机公司率先推出了CPU为68020的32位CNC掀起了32位CNC的热潮并逐渐成为当今数控系统的主流(4)基于PC的开放式CNC的开发与应用进入九十年代个人计算机(PersonalComputer,PC)的性能已发展到很高的阶段从8位16位发展到32位可以满足作为数控系统核心部件的要求而且PC机生产批量很大价格便宜可靠性高数控系统从此进入基于PC的CNC系统阶段1994年这种基于PC的CNC控制器在美国首先亮相市场并在此后获得了高速发展PC的引入不仅为CNC提供高性能价格比的硬件资源和极其丰富的软件资源更为CNC的开放化提供了基础使之成为数控历史最具影响的发展人们常称这种PC-NC结构为第八代数控系统1.1.2我国数控技术的发展历程我国数控机床的研制起步于1958年到现在已经历了44年的发展历程从50年代到60年代我国数控机床处于研制开发时期直到60年代末70年代初已经研制出一些晶体管式的数控系统并用于生产但由于历史的原因一直没有取得实质性的成果数控机床的品种和数量都很少稳定性和可靠性都比较差只在一些复杂的特殊的零件加工中使用80年代初随着国门的打开我国先后从日本美国德国等国家引进一些先进的CNC装置及主轴伺服系统的生产技术并陆续投入了生产由于这些数控系统性能比较完善稳定性和可靠性都比较好使我国数控机2 南京航空航天大学硕士学位论文床有了质的变化1986年至1990年(七五)期间是我国数控机床大发展的时期我国数控行业在引进吸收国外技术的基础上进行了大量的开发工作一些较高档次的数控系统陆续开发出来把我国的数控技术推向了新的高度90年代以来我国一方面从日德美等国购进数控系统另一方面积极开发设计制造具有自主版权的中高档数控系统并且取得了可喜的成果自1995年以来先后有北航西工大南航华中理工大沈阳自动化所等多家单位推出了基于PC的CNC系统但这些系统的开放性仍不够整体的CNC系统并不能实现真正开放用户既无法重构系统功能也不能开发自己独特的操作界面和专用功能同时硬件也缺乏兼容能力所以不属真正的开放系统所以应当看到我国的数控技术与发达国家相比仍有相当差距数控产业仍十分薄弱而且国产数控绝大部分是功能简单的中低档经济型高档数控又是国外发达国家对我国进行技术封锁的主要方面为了促进我国数控技术的发展使数控技术接近和赶上世界先进水平一方面国家正在不断调整政策制定发展计划为数控技术的发展提供良好的环境另一方面作为科技工作者要不断吸收和借鉴世界先进技术并结合我国的实际情况努力研制出更多更好的数控系统1.1.3数控技术的发展趋势随着科技的发展机械产品的形状和结构不断改进对零件加工质量的要求也越来越高为了满足制造行业中高难度加工工艺高精度高复杂度和高生产率的需要尤其随着FMS的迅猛发展和CIMS的兴起和不断成熟数控机床在性能上也要求向更高精度更高速度更高可靠性及更完善的功能方向发展目前数控系统的发展趋[4]势集中在以下几个方面:(1)向高速度高精度发展主要体现在不断的采用性能先进的CPU和多CPU并行技术提高主轴转速优化插补算法提高数控系统分辨率采用高精度补偿技术等采用数字式伺服系统并运用前馈控制技术减少伺服系统跟踪滞后误差(2)集成化和智能化新一代数控系统大量采用大规模和超大规模集成电路表面集成技术使整个系统小型化经济和可靠还引进自适应控制技术使数控系统能检测对自己有影响的信息并自动连续调整系统相关参数达到改进系统运行状态的目的引进专家系统和知识库增加人工智能的功能从而达到提高排除故障的能力和功能(3)可靠性更高由于现代数控机床数控系统的模块化通用化和标准化便于组织批量生产故3 基于嵌入式RTLinux的通用数控平台的构建可保证产品质量现代数控系统大量采用大规模和超大规模集成电路采用专用芯片及混合式集成电路提高了集成度减少了元器件数量降低了功耗提高了可靠性(4)开放化和PC化数控系统的开放化和PC化可以通过建立一个统一地可重构的系统工具平台解决用户需求的频繁变动与控制系统专一固定的框架之间的矛盾极大地增加数控系统的柔性和适应性使系统的升级和维护更为方便容易(5)具有更好的通讯功能为了适应自动化技术的进一步发展适应工厂自动化规模越来越大的要求对现代数控系统的通讯功能要求也越来越高1.2开放式数控综述1.2.1开放式CNC的产生背景数控技术的问世解决了传统方式难以解决的复杂零件的制造问题准确高效的自动化手段改变了以往机械工业中周期长效率低的局面柔性的工作方式能充分适应多品种小批量的现代生产方式从而大大提高了对现代化工业生产需求的适应能力利用数控技术可以大幅度缩短产品的制造周期提高产品的加工质量加速产品的更新换代提高产品的竞争力因而具有显著的经济效益及广阔的发展前景业已成为一个国家机械制造业水平的重要指标之一然而现今生产中使用的绝大多数CNC系统以FANUCSIEMENS等为代表所采用的是一种专用的封闭式体系结构即组成系统的硬件模块和软件结构由各数控系统厂家自行设计是专用的互不兼容的系统各模块间的交互方式通讯机制也互不相同这种专用的封闭式结构的数控系统虽然结构简单技术成熟产品批量大生产成本低但随着技术的进步市场竞争的加剧越来越暴露出其固有的缺陷集[5]中表现在以下几个方面:z各控制系统间互连能力差影响了系统的相互集成风格不一的操作方式使用户培训费用增加专用件的大量使用给数控设备的使用与维护带来很多不便z系统的封闭性使得对其扩充和修改极为有限造成数控系统集成商(NC系统中间用户)对系统供应商的依赖难以将自己的专门技术工艺经验集成入控制系统并形成自己的产品特点不利于提高主机产品的竞争力z专用的硬软件结构也限制了系统本身的持续开发使系统的开发投资大周期长风险高更新换代慢不利于数控产品的技术进步总之数控系统的这一现状已难以适应当今制造业的市场变化与竞争也不能满足现代制造业向信息化敏捷制造模式发展的要求4 南京航空航天大学硕士学位论文为解决封闭式体系结构数控存在的问题近年来西方各工业发达国家相继提出了向规范化标准化的方向发展设计开放式体系结构数控系统的问题其中最具代表性和影响的相关研究计划有:美国的NGC和OMAC计划欧盟的OSACA计划及日本的OSEC计划开放式数控系统的主要研究目的是要解决变化频繁的需求与封闭的控制系统结构之间的矛盾建立一种新型的模块化可重构可扩充的控制系统结构以增强数控系统的功能柔性能够快速而有效地响应新的加工需求[6][7]开放式数控的开放性概念可从两个方面进行理解一是时间的开放性二是空间的开放性时间的开放性是针对软硬件平台及其规范化而言的以保证平台具有适应新技术的发展容纳新设备的能力时间的开放性又有可扩展性和可移植性两个方面空间的开放性是针对系统接口及其规范化而言的它又可分为互操作性和互换性通俗地讲开放式数控系统的目的就是使CNC控制器与当今的PC机类似系统构筑于一个开放的平台上具有模块化结构允许用户根据需要进行选配和集成更改或扩展系统的功能迅速适应不同的应用需求而且组成系统的各功能模块可以来源于不同的部件供应商并相互兼容与传统的封闭式专用数控系统相比开放式的数控系统的主要优势在于建立一种新型的模块化可重构可扩充的控制系统结构以增强数控系统的功能和性能柔性在体系结构上给用户留有进行二次开发的更多余地能够快速而有效地响应新的加工需求1.2.2全软件数控一种新型的开放式数控从实现方法上PC-NC(个人计算机数控)是目前实现CNC开放化比较现实的途径PC从产生到现在其计算能力和可靠性飞速提高硬件已全实现标准化这些使得它越来越适合于工业环境下使用PC具有丰富的支持软件来改善CNC系统的用户界面图形显示动态仿真数控编程故障诊断网络通讯等功能利用PC上功能强大的开发工具机床制造商和用户可以采用通用的编程语言编制软件模块代替系统的原有模块便于机床厂和用户添加具有自己独特技术诀窍的模块所谓PC-NC即在PC机硬件平台和操作系统的基础上使用市场上销售或自行开发的应用软件和硬件插卡构造出数控系统功能但现有PC的操作系统缺乏实时性[8][9]目前PC-NC的构造方式主要有三种PC板插入到NC装置中NC板插入到PC机的扩展槽中软件数控(1)PC板嵌入NC这一形式主要为一些大的CNC控制器制造商所采用其原因有两个方面一是许多用户对它们的产品很熟悉也习惯使用二是这些大控制器制造商不可能也不愿意5 基于嵌入式RTLinux的通用数控平台的构建在短时间内放弃他们传统的专用CNC技术因此才出现了这种折中方案其做法就是在传统的CNC中提供PC前端接口使其具有PC化的人机界面能够集成应用程序网络接口等显然这种系统的NC内核保持了原有的封闭性故只能实现系统人机接口的开放(2)NC板嵌入PC机这种形式就是将运动控制板或整个CNC单元(包括集成的PLC)插入到个人计算机的扩展槽中PC机作为非实时处理实时控制由CNC单元或运动控制板来承担这种方法能够方便地实现人机界面的开放化和个性化在此基础上借助于所插入NC板的可编程能力能部分实现系统核心结构的开放如基于PMAC运动控制卡构成的CNC系统即属此类(3)全软件数控全软件数控是一种新型的开放式数控全软件数控是指CNC系统的各项功能如编译解释插补和PLC等均由软件模块来实现这类系统借助现有的操作系统平台在应用软件的支持下通过对CNC软件的适当组织划分规范定义和开发可望实现系统体系结构的开放这种控制模式的硬件成本是最经济的但软件开发是最复杂的开发的重点是系统软件和设备驱动程序这种方式能够迅速吸收计算机技术的最新成果具有良好的灵活性和可扩展性可方便地采用新的控制算法也易于实现物理设备和操作系统的更新换代由于处理机技术进步的摩尔效应使得以硬件方式出现的运动控制器部件在可预见的时间内完全可以用应用软件的方式来实现随着处理机性能的日新月异和操作系统技术的不断进步这种硬件功能软件化不仅不会导致任何系统性能损失而且软件实现的灵活性和硬件平台无关性将有利于系统实现更深入的开放性和系统性能的快速增长这也正是软件数控的基本思想同时也是数控系统完全开放的[5]实现基础全软件数控的主要特征是:z系统的表现形式和目前常见的CAD/CAM等系统一样完全只是一种主流操作系统(实时扩展)上的应用软件(设备驱动软件)z完整的机床控制器功能(MMCPCMCACPLC)z外围连接采用标准规范伺服和离散I/O信号通过一种信号转接器连接到运行软件数控的计算机伺服离散I/O和信号转接器的连接可以是光纤屏蔽双绞线等可采用SERCOS等开放性协议规范信号转接器和计算机的连接可以是网络IEEE1394USBRS485SCSI等采用MMS(ManufacturingMessageSpecification)等协议规范和软件CNC通信z核心开放体系结构支持系统界面和运动控制算法的用户定制对采用智能控制6 南京航空航天大学硕士学位论文策略有充分的考虑z支持COM或COBRA等软件技术规范可与CAD/CAM软件无缝集成具有加工单元代理(Agent)功能支持FMSCIMS虚拟制造等先进制造的上层应用1.3全软件数控的研究现状目前国外一些厂商已推出了基于PC的软数控产品例如SoftServoSystems公司的ServoWorksAutomationIntelligence公司的产品AMLMDSI公司的OpenCNC德国PowerAutomation公司的PA8000NT辛辛纳提Cincinnati[10][11]Milaomn公司的A2100等这些产品的CNC软件全部装在计算机中而硬件部分仅是计算机与伺服驱动和外部I/O之间的标准化通用接口就像计算机中可以安装各种驱动程序一样用户可以在PC机上开发所需的各种功能构成各种类型的高性能数控系统[12]国内也有一些研究机构对软数控系统的进行了研究上海交通大学提出了一种新的开放式数控系统WLONCS(WindowsNTandLinuxbasedOpenNumericalControlSystem)WLONCS把数控系统的功能实现抽象为一系列功能模块把操作系统的任务实现表示为一组任务框架WLONCS的任务模块是可独立运行的实现某种控制功能的程序模块它是通过在任务框架中集成某些功能模块的功能而得到的一组相关的任务模块组合在一起可以构成一个具体的数控系统WLONCS可以产生基于WindowsNT+RTX的数控系统和基于Linux+RTLinux的数控系统文献[13]针对Windows操作系统实时性方面的局限性引入了美国Venturcom公司的强实时扩展软件RTX对其内核进行实时扩展构建了基于RTX的全软件数控系统文献[14]提出在RTLinux上实现具有开放性模块化动态可重构的CNC系统的软件框架及其组成给出了组成该系统基本模块(任务模块)的定义及任务模块之间的关系文献[15]对具有代表性的操作系统(包括专有实时操作系统LinuxWindows及基于Windows的实时扩展操作系统)的实时性与开放性进行了研究与比较并分析了SERCOS总线的性能与发展过程指出基于Windows的实时扩展操作系统和SERCOS标准的实施是实现开放式软数控系统的两个重要技术基础并给出了一个基于Windows实时扩展和SERCOS总线技术的开放式软数控系统设计实例文献[16]给出了一种可重构可扩充的开放式软CNC的实现机制该系统基于WinNT+RTX实时扩展系统软件设计采用了新的三层结构面向最终用户体系结构完全开放系统可整体重构便于升级用户通过编制组件对象模型程序和实时动态链接库程序可以方便地扩充用户专用指令7 基于嵌入式RTLinux的通用数控平台的构建本课题也正致力于这方面的研究与探索期望建立一个软数控系统的平台作为课题组后续研究的基础1.4本课题的研究目标和研究内容实时操作系统是数控系统软件的基础其性能的好坏直接关系到数控系统的控制性能其功能的强弱直接影响到数控系统各功能实现的难易程度在基于PC数控系统的操作系统平台中DOS和Windows为非实时性系统基于它们开发高性能的数控系统非常困难而RTLinux是一个免费的实时操作系统它具有硬实时多任务能力又能利用标准Linux各种强大的功能因而基于RTLinux开发数控系统是一个比较好的选择尽管从理论上来说RTLinux的性能完全能够满足数控系统的要求但是由于RTLinux的开发环境软件运行机制以及程序编制不同于DOS和Windows它们对同一数控功能的实现有不同的方法因此基于RTLinux的数控系统开发具有一定的特殊性本课题也正致力于这方面的研究与探索期望建立一个基于RTLinux的软数控系统的平台为课题组后续研究的基础根据本课题的研究目标本文需要完成以下几个方面的工作:z数控系统工作原理以及系统工作过程中各模块间数据流变化的研究zLinux和RTLinux内核移植技术的研究以及RTLinux在PC104上的移植zLinux环境下的各种编程技术包括工具软件的使用zRTLinux的系统原理和编程技术的研究和学习z全软件的数控平台架构的设计z全软件数控平台的原型开发包括系统图形界面的开发程序译码加减速控制直线和圆弧插补位置控制I/O控制等功能的实现8 南京航空航天大学硕士学位论文第二章基于RTLinux的数控系统的优势在基于PC的软件数控中CNC系统的各项功能如编译解释插补和PLC等均由软件模块来实现该类数控系统一般是基于PC上的通用操作系统开发的操作系统的选择决定了数控系统软件特性以下具体讨论基于DOSWindows和RTLinux三种操作系统上的数控系统软件特性2.1数控系统软件平台的比较2.1.1基于DOS平台的数控系统DOS是一个单任务操作系统DOS中的应用程序在运行时是过程式的即它顺序执行自己的代码直到运行完毕后才放弃CPU在此期间其它应用程序都不能运行而数控系统的工作是一个多任务并发的过程同时对任务运行的优先等级和实时性有严格要求所以基于DOS开发数控系统软件必须首先实现多任务环境同时要保证任务调度的合理性和实时性定时/计数器芯片(在PC中就是8253/8254)是计算机操作系统实现多任务功能的硬件基础操作系统通过对定时器中断信号的计数实现各种时钟机制和定时机制并由此驱动多任务的调度所谓时钟机制就是简单地累计流逝时间的机制所谓定时机制就是使某个任务在某个时刻到来时自动投入运行的机制(例如数控系统中的周期性运行定时任务机制)PC中定时器芯片8253的0号定时器称为系统定时器(这是因为操作系统中的所有时钟机制和定时机制都是以它为基础实现的)1号和2号定时器另有别的用途系统定时器向CPU发出周期性的中断信号这个中断信号接在中断控制器8259的IRT0端所以PC中系统定时器中断的优先级最高几乎每次中断都会引起相应处理程序的执行这也是保证PC的时间机制正常运行所必需的系统定时器的定时周期由操作系统在系统初始化时设定DOS将其设置为大约55ms这对于实时运动控制来说精度太低但是由于DOS结构简单体系开放允许应用程序直接访问硬件和修改中断向量因此在DOS中可以直接对定时器重新编程而获得更高频率的时钟中断(这是获得高精度定时的基础)并在此基础上实现一个简单的多任务环境这个环境就是数控系统软件的基本环境为了保证任务调度的实时性必须采用基于优先级的抢占式调度算法但是这种由应用程序建立的多任务环境只是[17][18][19]应用程序内部的多任务环境DOS本身仍然是一个单任务环境实践证明用这种方法实现的数控系统基本环境在实时性方面是相当好的多年9 基于嵌入式RTLinux的通用数控平台的构建来我国的研究开发部门在基于DOS平台的数控系统软件开发方面积累了丰富的经验因此当前我国大部分数控系统软件都是基于DOS操作系统开发但是采用DOS作为数控系统的软件平台具有很大的局限性由于DOS是单任务操作系统且提供的开发资源较少开发者需要在较少的资源环境下开发多任务环境开发周期长成本高而且从整个数控行业角度来说所有的开发者都需要构造同样的多任务环境源代码重复利用率低重复性开发成本高另外DOS运行于CPU实模式下只能管理640K内存字符型操作界面用起来不方便而且对网络通信数据库等提供的支持很少对数控系统性能造成了严重限制微软公司早已宣布不再发展DOS的新版本DOS已成为历史性的操作系统因此基于DOS操作系统开发的数控系统已经不再是数控系统的发展趋势2.2.2基于Windows平台的数控系统目前Windows是PC上最通用的操作系统Windows是多任务操作系统具有丰富的资源人机界面十分友好所以它已经成为数控系统软件开发人员的主要选择之一但是作为数控系统的软件平台Windows操作系统存在着难以克服的根本性弊端即实时性不足Windows是非实时操作系统其内核是分时内核无法满足数控系统的高实时要求而且Windows是源代码保密的商业性操作系统对其内核进行改造几乎是不可能的[20-25]解决Windows操作系统实时性不足问题的方案有以下两种:第一种是利用Windows操作系统自身的特点解决实时问题例如在Windows3.1/3.2中利用DPMI(DOSProtectedModeInterfaceDOS保护模式接口)提供的DOS环境实现高频率定时任务在Windows95/NT中由于应用程序不能绕过操作系统直接访问硬件只能通过系统提供的接口函数构造所需要的功能因此高频率定时任务的实现不能采用DOS中的方法实现高频率定时任务的方法是利用WindowsAPI的多媒体扩展库(MMSYSTEM.LIB)提供的多媒体定时函数或者采用虚拟设备驱动程序(vxd)技术但是用这些方法获得的定时精度最高只能达到l0ms这对于数控系统的运动控制来说还是太低在任务调度效率方面由于Windows的调度器在设计时没有考虑实时应用因而其调度效率较低更重要的是无论是Windows3.X还是Windows95/NT其内核的许多机制都是与实时应用相矛盾的对于Windows3.1/3.2其协作式多任务的调度机制根本不符合实时应用的要求所以使用这些方法实现的高精度定时任务只是在定时频率上有所提高系统在本质上仍然是一个非实时的系统因此完全基于Windows开发高性能的数控系统软件是不可能的第二种是采用Windows操作系统作为上位机DSP或单片机作为下位机的方法解10 南京航空航天大学硕士学位论文决实时问题Windows操作系统作为上位机主要负责事务管理和实时性不强的数据处理如界面显示DSP或单片机作为下位机主要负责完成实时性很强的运动控制任务如插补等这种结构的数控系统虽然可以获得较高的实时性能但是由于Windows操作系统的实时性不足浪费了PC的强大资源增加了硬件成本及开发成本[26]增强了开发难度2.2.3基于RTLinux平台的数控系统数控系统的理想平台是在具有多任务调度能力和很强实时性的同时还应价格低[27][28]廉市场上有一些实时操作系统如pSOSVxWorksWindowsCE等都是具有多任务调度能力和很强实时性的数控系统软件平台但它们都是商业性操作系统价格昂贵RTLinux是一个免费的源代码开放的具有多任务调度能力的很强实时性的操作系统是由标准Linux操作系统及一小的实时内核构成的RTLinux是个具有多任务调度的操作系统其支持实时域和非实时域的多任务调度实时域任务以实时内核线程实现非实时域任务以非实时内核(标准Linux内核)线程或用户线程实现利用RTLinux的基于优先级的抢占式多任务调度机制可以方便地实现数控系统中的实时性任务(如插补等)和非实时性任务(如界面显示等)RTLinux的开发设计者为了减少工作量保证兼容性及充分利用标准Linux内核的丰富资源并没有修改Linux内核也没有重写RTLinux内核而是采用了独特的设计思想把一个小的可抢占的实时内核植入标准Linux内核底层对所有中断进行初始化处理若中断是由实时任务产生则交由实时内核处理否则交由非实时内核处理即标准Linux核心作为实时核心的一个进程同用户的实时进程一起调度但标准Linux核心进程优先级最低可被用户实时进程所抢占这样用户程序的实时性完全由实时内核保证RTLinux的总体运行机制如图2.1所示RTLinux的实时实现方式决定了RTLinux具有很强的实时性能在一台普通配置的x86PC上其最大中断延迟时间(从处理器检测到硬件中断信号到中断处理子程序开始运行的时间间隔)不超过15微秒最大任务切换延迟(从调度程序开始运行到任务被启动的时间间隔)小于25微秒这些数据己经接近了硬件能力的极限与昂贵的pSOSVxWorksWindowsCE等商业性实时操作系统相比RTLinux是免费的可从网络上免费下载[29][30]与DOS和Windows操作系统相比RTLinux操作系统具有以下几个优点:(1)RTLinux是免费的操作系统(2)由于RTLinux是源代码开放的操作系统基于RTLinux平台的数控系统具有11 基于嵌入式RTLinux的通用数控平台的构建很好的可移植性和开放性并且更新速度快(3)由于RTLinux是具有实时和多任务调度能力的操作系统基于RTLinux平台的数控系统具有强的实时性并且开发的周期短成本低由于RTLinux发展历史不长所以与DOS和Windows操作系统相比它具有以下缺点:(1)RTLinux的开发环境比较简陋开发工具不够丰富(2)关于RTLinux的资料较少需要自己探索(3)RTLinux的强实时性是基于实时内核线程实现的而内核编程工具简单调试比较困难(4)RTLinux未获得接口设备厂商的广泛支持运动控制所需的板卡如脉冲板I/O板等的驱动程序需要自己开发RTLinux正处于迅速发展阶段它的这些不足之处相信很快就可以得到改善和解决标准Linux内核非实时任通信务非实时任实时内核务处实时理中断任务请求处理硬件图2.1RTLinux总体运行机制2.2RTLinux系统特征实时操作系统RTOS是实时应用软件开发的基础平台实时和多任务是现代实时操作系统应具备的两个基本特征首先实时操作系统应有很强的实时处理能力以满足实时应用的需要同时实时操作系统还应是一个多任务操作系统因为现在的实时应用除了要求处理高实时性的工作外往往还要求并发处理图形显示网络通讯等任务[26]RTLinux是一个严格遵守POSIX1003.13技术规范的硬实时操作系统运行在Linux或者BSDUnix之上RT-Linux实现了一个小的实时核心把小的实时内核植12 南京航空航天大学硕士学位论文入非实时的标准Linux内核的底层在硬件资源与标准分时内核间建立虚拟中断硬件层RT-Linux的关键技术是通过软件来模拟硬件的中断控制器当Linux系统要封锁CPU的中断时RT-Linux中的实时子系统会截取到这个请求把它记录下来而实际上并不真正封锁硬件中断这样就避免了由于封中断所造成的系统在一段时间没有响应的情况从而提高了实时性当有硬件中断到来时RT-Linux截取该中断并对其进行初始化处理若中断为实时任务产生的中断则由实时内核处理否则交由非实时内核处理RTLinux仅支持底层任务创建中断服务例程的装入底层任务通信队列中断服务例程(ISR)和Linux进程非实时内核作为实时内核的最低优先级线程运行RTLinux坚持分离实时和非实时代码操作系统和应用软件中的关键实时组件将给予绝对的优先权以避免非实时组件影响实时组件的响应时间实时内核为需要微秒级中断延迟的软件提供一个熟悉的POSIX线程和精确调度任务调度策略是直接影响实时性能的因素尽管调度算法多种多样但大多由单调率算法(RM)和最早期限优先算法(EDF)变化而来前者主要用于静态周期任务的调度后者主要用于动态调度RTLinux已实现的调度程序有基于优先级的抢占式调度和EDF调度基于优先级的调度使用单调率算法它直接支持周期任务非常适合数控系统的开发同时对于一些特殊应用用户可自行编写调度程序进行调度它们可实现为可加载的核心模块应运时装入内核进行工作2.3基于RTLinux的全软件数控系统的软硬件平台解决方案2.3.1以PC104为硬件平台数控系统要做到开放首先要求硬件平台的开放性PC104作为被广泛应用的硬件平台在开放性通用性性能和成本上都有明显优势己成为现代开放式数控系统的理想硬件平台之一本系统选用工业PC104作为硬件平台其优势在于:(1)PC104可降低系统成本增加系统开放性PC104软硬件大都已经标准化使用PC作为数控系统开发平台可解决软件公用问题和硬件标准化问题外围设备应用软件等实现标准化用户可方便地对其进行组合和使用从而降低成本增加系统开放性和适应性(2)基于PC104的CNC系统具有更大的灵活性传统CNC系统大部分功能由硬件实现硬件不仅成本高而且功能扩展更新困难而基于PC104的CNC系统其主要任务在PC104上以软件方式实现这样模块13 基于嵌入式RTLinux的通用数控平台的构建的更新相对简便既降低了成本又提高了CNC的灵活性使CNC的开放更易实现(3)基于PC104的CNC系统具有更好的通用性PC104的廉价和易用使得基于PC104的CNC系统具有更广阔的应用前景而PC104上可以运行形形色色的绘图和网络等软件更有利于CNC系统的扩展与集成总之基于PC104有利于CNC系统的开放性和降低成本也有利于持续吸收当今计算机发展的最新技术不断开发新型的CNC系统2.3.2以RTLinux为数控系统软件平台PC平台的性能远高于传统数控计算机为什么目前的PC数控系统在整体性能上并未表现出相对于传统数控系统的明显优势一个主要原因是软件的限制虽然PC平台的软件技术已经非常丰富但大部分是针对一般应用发展起来的不太适合数控的需求其中一个突出问题是目前PC平台上流行的操作系统较难满足数控系统所需的实时多任务要求数控系统软件一般不直接基于硬件开发而是基于某一软件平台开发软件平台的选择决定了数控系统软件的组织和结构数控系统的理想软件平台应该是既具多任务调度能力又有很好的实时性的操作系统即实时多任务操作系统依前面分析,本课题采用实时多任务操作系统RTLinux作为软件平台2.3.3RTLinux平台实时应用软件的基本结构实时应用软件一般由实时部分和非实时部分组成实时部分处理实时性要求高的核心任务如用户定义的中断处理函数或周期性的实时任务这部分程序作为可加载模块动态载入系统(insmod)实时应用程序运行完要进行卸载rmmod以释放所占用的资源而非实时部分为普通Linux程序完成与用户的交互工作等辅助功能在RTLinux环境中实时任务在实时内核中运行非实时任务可以在标准Linux内核中运行或用户空间中运行由于用户空间中可以使用较为丰富的函数库资源一般把非实时任务放在用户空间中RTLinux平台实时应用软件基本结构是实时任务在内核空间运行既可以调用实时内核空间函数资源又可以调用标准Linux内核空间的函数资源非实时任务在用户空间运行只调用用户空间的函数资源实时任务与非实时任务通过通信机制相联系如图2.2所示14 南京航空航天大学硕士学位论文内核空间用户空间非实时内核函数资源用户空间函数资源服务服务服务服务实时内核通信非实时任务非实时任务通信实时任务实时任务通信图2.2基于RTLinux的实时应用软件结构2.4本章小结本章首先对基于DOSWindows和RTLinux平台的数控系统进行了分析指出完全基于DOS和Windows无法开发出高性能数控系统软件接着对硬实时操作系统RTLinux的系统特征以及基于RTLinux的实时应用软件的结构进行了分析分析表明尽管暂时RTLinux还不是很完善但仍是开发数控系统的理想软件平台最后给出了以PC104为硬件平台RTLinux为软件平台的数控系统开发方案15 基于嵌入式RTLinux的通用数控平台的构建第三章数控功能分析和软件结构设计数控系统的功能和现有的PC通用操作系统的技术水平决定了系统的结构和开发思路因此首先应当分析数控系统的基本功能和解决方案本章首先从数控功能分析的角度提出数控系统功能实时性划分的问题然后根据功能划分建立基于实时操作系统的数控系统的总体结构3.1数控系统的功能分析数控系统的功能包括基本功能和选择功能基本功能是从各类数控设备的加工功能需求出发总结出的数控系统必备的功能选择功能是提供用户按机床特点和用途可进行选择的功能3.1.1数控系统的基本功能[4]数控系统通常具有如下基本功能:1轴控制功能轴控制功能是指数控系统可以控制和同时控制的轴数数控铣床数控镗床和加工中心需要有三根或三根以上的控制轴而同时控制的轴数按用途不同可以是两轴或三轴等等控制轴数越多尤其是同时控制轴数越多CNC控制就越复杂2准备功能准备功能也称G功能它用来指令机床的运动方式具体包括基本功能平面选择坐标设定刀具补偿固定循环米英制转换等指令3插补功能数控系统通过软件来实现刀具运动的轨迹其插补功能一般分为粗插补和精插补软件每次插补一个小线段数据称为粗插补伺服接口根据粗插补的结果将小线段分成单个脉冲输出称为精插补4进给功能根据机械加工工艺的要求数控系统的进给功能用F指定数控机床各轴的进给速度具体来讲有以下四种第一切削进给速度它以每分钟进给的毫米数指定刀具的进给速度第二同步进给速度它以主轴每转进给的毫米数指定刀具的进给速度第三快速进给速率它通过参数设定用G00指令指定第四进给倍率它通过设置在操作面板上的进给倍率开关来给定5主轴功能主轴功能就是主轴转速的功能它用S代码和后面的数值表示16 南京航空航天大学硕士学位论文6辅助功能辅助功能用来指定主轴的启停和转向切削液的开和关刀库的启停等7刀具功能和第二辅助功能刀具功能用来选择所需刀具用T的2位数或4位数表示第二辅助功能用来指定工作台的分度用B代码的3位数表示8补偿功能补偿功能有两种一种指刀具尺寸补偿和程序段自动转接以简化编程另一种指丝杠的螺距误差和反向间隙或者如变形补偿等这是提高机床加工精度的补偿9自诊断功能数控系统中设置的各种诊断程序用来检查故障的类型和部位以减少故障停机时间诊断程序一般都可以包含在系统程序中在系统运行过程中进行检查和诊断也可作为服务性程序在系统运行前或故障停机后进行诊断以上功能都是数控系统必备的基本功能而某些补偿功能固定循环功能图形显示功能通讯功能以及人机交互图形编程功能都是数控系统特有的选择功能这些功能的有机组合可以满足不同用户的要求3.1.2常规数控系统的软件结构数控系统是一个实时多任务计算机系统其多任务性表现在软件必须完成管理和控制两大任务其中系统管理包括输入I/O处理显示诊断系统控制包括译码刀具补偿速度处理插补位置控制见图3.1数控系统管理控制输I/O显诊译刀速插位入处示断码补度补置理处控理制图3.1数控系统的任务分解数控系统的这些任务必须协调管理和控制的某些任务必须同时进行例如为了便于操作人员及时掌握数控系统的工作状态管理软件中的显示模块必须与控制软17 基于嵌入式RTLinux的通用数控平台的构建件同时运行当控制软件运行时其中一些处理模块也必须同时运行例如:为了保证加工过程的连续性即刀具在各程序段间不停刀在NC程序的解释方式下译码刀补和速度处理模块必须与插补同时运行而插补又要与位置控制同时运行这种并行处理关系如图3.2输入译码插补刀具补偿显示控制位置控制速度处理诊断I/O图3.2数控系统的任务并行处理关系数控系统处理最重要的特点是多任务并行处理和多重实时中断下面分别加以论述:1并行处理它是指计算机在同一时间间隔内完成两种或两种以上相同或不同的工作它最显著的优点是大幅度提高了运算处理速度并行处理方法有多种例如已经广泛使用的资源重复时间重叠和资源分时共享等资源分时共享是指多个用户按时间顺序使用同一套设备在单CPU平台的数控系统中主要采用CPU分时共享原则来解决多任务的同时运行这种同时运行是站在宏观角度上来看的从微观角度上看仍然是串行运行在分时共享处理中要解决的问题是各任务何时占用CPU以及占用多少时间在数控系统中可以采用循环轮流和中断有机相结合的方法来解决见图3.3该图中环外任务可随时中断环内各任务的执行环外任务是一些实时性很强的任务按照优先级排队把它们放在不同的优先级上初始化显示插补中断优诊断I/O处理位控先级键盘插补准备输入图3.3CPU分时共享的并行处理18 南京航空航天大学硕士学位论文2实时中断处理这些中断类型有:外部中断主要指键盘和操作面板输入中断内部定时中断主要有插补周期定时中断和位置采样周期定时中断硬件故障中断指各种硬件故障检测装置发出的中断程序性中断是程序中出现的各种异常情况的报警中断3.1.3功能实时性划分的必要性从以上分析可以看出数控系统功能的实现具有多任务实时以及并行处理等特点正是数控系统功能要求的差异和数控系统本身的特点决定了不同的软硬件解决方案例如轨迹控制功能中的插补运算和位置控制都是实时性很强的任务在FANUC15系统中插补周期设置为8ms采样周期为4ms而当前的高速高精度控制已经把采样周期和插补周期减小到1ms以下为了达到快速响应和及时运算处理的要求许多系统在硬件上使用单独的CPU来处理这些实时任务因为整个系统还要处理如显示诊断等管理功能所以采用至少两个CPU的硬件结构来构造数控系统类似的如果在单CPU硬件平台上构造系统就需要把实时性强的任务和实时性弱的任务区分开来因为系统资源应该首先保证实时性强的任务先得到运行确保系统基本控制功能的实现当然这并不表明实时性弱的任务分配不到系统资源只是在优先级和执行时间的先后顺序上要逊于实时性强的任务此外多任务并行处理和多重实时中断并不表明并行多任务和实时中断的数量不受限制相反应该把最需要实时中断处理的实时任务放在优先级队列中以达到系统资源的最大利用率这也需要明确哪些功能的实时性要求高哪些功能有必要放到并行处理的多任务队列中因此对数控功能实时性的划分明确所有数控功能实时性的强弱对设计软件结构有着重要的意义3.2数控系统功能的实时性划分数控系统是一个具有实时计算特性的控制系统数控系统功能的实时性划分对于分析设计数控系统确定系统实时性的指标和选用相应的硬件平台和操作系统都有重要意义但是国外的文献还没有对数控系统的实时性进行分类和总结国内的许多文献也只是模糊地提到人机控制等几个功能具有非实时特点作者认为从实时性的角度出发数控系统的功能可以划分为实时任务和非实时任务两类(1)实时任务实时任务是和运动控制功能密切相关的功能它是指具有强实时性的任务在数19 基于嵌入式RTLinux的通用数控平台的构建控系统中所有的实时任务无论是强实时还是弱实时都应该及时响应或按时响应因为弱实时的时间延迟较难定量衡量所以把所有的弱实时任务也划分为强实时任务以便于定量衡量运动控制功能包括插补运算位置控制手动控制PLC任务和实时内核管理在给定的时间范围内这些任务必须及时响应并执行完成数控加工采用边计算边加工的方式插补运算和位置控制构成了轨迹运算的核心插补周期结束之前插补模块必须计算出下一个插补位置坐标采样周期结束之前位置控制模块必须计算出位置偏差系统必须在插补周期内完成插补运算在采样周期内完成位置控制而且二者有着严格的顺序关系插补运算在前位置控制在后如果采样周期取不到新的插补位置值或者位置控制花费的时间超过采样周期加工过程就会出现断续和停顿影响加工质量和减少刀具寿命甚至走出错误的刀具轨迹手动控制作为数控系统的不可缺少的一部分在工件加工过程中起到对刀机床回零码盘等功能这些功能都必须在很短的时间内相应因此它也是强实时任务另外PLC中的急停命令必须在给定的最短时间内做出响应否则会发生加工事故因此它也是强实时任务实时内核管理是协调插补运算位置控制手动控制和PLC的调度管理者它保证程序在设定的定时周期内启动各功能并通过优先级的设置协调强实时任务运行的先后顺序(2)非实时任务非实时任务是与运动控制间接相关或无关的功能与运动控制无关的功能包括人机控制网络功能以及其它和加工过程无直接关系的功能人机控制也属于交互式系统的一种在人机控制中实际位置的实时显示命令输入通过分布式网络传送NC代码以及向MISERP和CIMS上传数据都应该在一定的时间内完成这些任务的响应一方面不能影响操作者对加工状态的监视另一方面不能影响整个生产系统的控制虽然可以有一定的延迟但应该限制在一定的时间范围内数控程序的译码有以下两种形式编译方式指一次完成所有的NC代码的译码和刀补这些工作在数控加工之前已经完成因此是和运动控制间接相关所以在编译方式下译码和刀补属于非实时任务解释方式指边读取一条NC指令边进行刀补加减速插补准备插补和位置控制如果下一段译码没有完成插补和位置控制是无法完成的所以在解释方式下译码和刀补属于实时任务按照译码和刀补的不同运行方式数控系统有两种实时性的划分方式这两种方式各有利弊编译方式把译码和刀补推到了非实时任务范畴中减小了实时任务的负担但需要大容量的内存存放NC中间文件在PC机上随着内存容量的增大和存取速度的加快这个问题已经得到解决解释方式则对计算机的实时处理能力提出了很20 南京航空航天大学硕士学位论文高的要求增加了系统资源的配置要求但对NC代码的数量没有很大的限制(见图3.4)(a)解释方式Interpretmode(b)编译方式Compilemode数控系统与运动控制密切相关译码插补与运动控制间接相关或无关刀补位控人机控制加减速PLC网络插补准备手动控制其他功能实时功能非实时功能系统平台(a)解释方式Interpretmode数控系统与运动控制与运动控制间接密切相关相关或无关插补位控人机控制译码加减速PLC网络刀补插补准备手动控制其他功能实时功能非实时功能系统平台b编译方式(Compilemode)图3.4数控系统实时性的划分实时非实时定量上的划分和很多因素有关例如:系统本身的需求硬件平台的性能操作系统的性能和软件代码的容量等因素21 基于嵌入式RTLinux的通用数控平台的构建3.3基于通用操作系统的数控平台的总体结构设计3.3.1通用数控平台系统整体结构本文选用Linux+RTLinux作为系统的软件开发平台开发语言以CC++语言为主图形用户界面采用Qt库用C++语言编写系统的硬件平台为PC104开发过程中在PC平台上进行数控系统与伺服系统及机床辅助机构的接口采用一块精插补器实现该精插补器由FPGA实现一方面它将上位控制器输出的位置速度指令转化为相应的脉冲串驱动伺服系统另一方面完成开关量信号的输入输出系统整体结构如图3.5所示软数控系统非实时任务Linux服务软网络图形库等件部分软数控系统实时Linux内核任务RTLinux实时内核PC104硬件CPU内存芯片组总线等PC104总线硬精插补器件部分机床电器逻辑控伺服驱动装置制装置机床图3.5系统整体结构22 南京航空航天大学硕士学位论文3.3.2通用数控平台软件结构合理的层次结构及模块划分对系统的开放性以及对整个系统的性能都具有重要意义通过对数控系统功能需求实时性及多任务间数据依赖关系的分析结合Linux+RTLinux平台上实时应用软件的结构特点本文把系统分为三层界面层管理层和控制层每一层又分为若干个模块及子模块同层模块相互配合共同完成该层的任务各层及各模块间的数据传递如图3.6所示:界面层为用户提供直观的操作界面及各种加工信息等待接收用户的操作请求并将操作请求及相关数据传递到管理层用户在界面层的操作主要有以下几类:文件管理模拟运行自动运行手动控制PLC设置参数设置等界面层选用Qt编写Qt是一个多平台的C++图形用户界面应用程序框架它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能Qt是完全面向对象的很容易扩展,并且允许真正地组件编程自从1996年早些时候,Qt进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础Qt也是流行的Linux桌面环境KDE的基础KDE是所有主要的Linux发行版的一个标准组件同时Qt/Embedded是面向嵌入式系统的Qt版本是Qt的嵌入式Linux窗口是完整的GUI和基于Linux的嵌入式平台开发工具Qt所开发的图形界面不但可以在不同操作系统的平台上运行通过连接不同的库还可以在嵌入式平台上运行这就提高了数控系统界面的可移植性和可重用性节省了开发成本本系统中图形界面只负责图形显示和数据传递不进行数据处理数据处理和系统参数的管理均在管理层或控制层中进行管理层是整个系统的管理中枢它接收来自界面层的命令往控制层发送控制命令和控制信息管理层由总控模块及若干功能模块构成功能模块由总控模块调用功能模块完成某一特定的非实时任务包括实时任务的预处理)如文件管理系统参数管理译码刀具补偿PLC中间代码生成等根据来自界面层的不同的请求总控模块调用相应的功能模块作实际数据处理处理结果存入相应的数据结构中若操作请求涉及实时控制(如进给轴运动)则总控模块将进一步启动控制层中的实时任务同时总控模块轮询来自控制层的反馈信息并根据此反馈信息作相应的处理23 基于嵌入式RTLinux的通用数控平台的构建文件管模拟运自动运手动控PLC设参数设界面层理窗口行窗口行窗口制窗口置窗口置窗口加工信息用户操作及相关信息总文件模拟自动手动PLC参数控管理运行运行控制设置设置模功能功能功能功能功能功能块模块模块模块模块模块模块系统参数中间结果等管理层实时管道控制命令控制返回信息控制信息实时管道共享RAM软软PLC模块CNC控制插手模块补动模模输入输出块块映象映象区共区共享享RAMRAM位控模块控制层实时层信号输出模块PC104总线与接口硬件通信图3.6系统软件层次结构及模块划分24 南京航空航天大学硕士学位论文控制层(也称实时层)完成对机床的实时控制主要由软CNC组件和软PLC组件构成二者分别完成机床进给轴伺服控制和机床辅助机构的逻辑控制软PLC组件由软PLC模块实现其功能单一只作简单的I/O操作不进行逻辑运算对于PLC的逻辑运算在管理层的PLC设置功能模块实现软CNC组件由软CNC控制模块插补模块手动模块位控模块和信号输出模块组成是本系统的核心部分其功能是实现在数控代码的自动加工机床的手动控制和位置控制等控制层等待管理层的控制命令和控制数据当系统启动时软PLC组件和软CNC控制模块启动并以指定的微小时间间隔周期运行其它模块处于挂起状态当软CNC模块接收到控制命令时它根据控制信息是手动信息还是自动加工信息来决定哪些模块被唤醒软CNC组件和软PLC组件通过PC104总线完成对精插补器的数据读写和中断响应3.4本章小结本章首先分析了数控的功能及任务的实时性以此为基础建立了基于实时扩展的通用操作系统的全软件数控平台的总体结构和软件模型为后续开发基于RTLinux的全软件数控系统提供了依据25 基于嵌入式RTLinux的通用数控平台的构建第四章基于RTLinux的数控系统的内核定制与移植通用Linux是一个很庞大的系统要将其用于工业控制必须将其小型化Linux小型化后可以使系统更灵活更高效运行开销更低但Linux本身并不是实时操作系统因此必须对其进行实时化改造使其具有实时操作系统的特征RTLinux的实时内核是Linux标准内核的一个实时扩展利用RTLinux的实时内核可以对Linux进行实时化改造本章就这样一个内核的定制进行分析并对本系统中RTLinux在PC104上的具体移植过程进行阐述4.1基于RTLinux的数控系统的内核定制4.1.1标准Linux的内核定制Linux的模块化设计以及可加载内核模块LKM(LoadableKernelModule)机制的实现使得Linux内核的定制极为方便目前对于Linux内核的定制配置方法一般都是基于源代码通过内核配置工具生成描述内核功能选项的配置文件然后再根据该配置文件编译生成定制的内核目标文件即通过内核代码中的条件编译裁剪掉内核中不必要的功能部分从而获得面向特定应用需求体积较小的Linux内核目前Linux[31]内核裁剪主要有以下方法:1.利用Linux本身提供的配置工具编译定制的Linux内核Linux内核在开发时采用模块化的设计即在内核实现中按功能分别设计可独立增加或删除的功能模块并将这些功能模块设置成内核配置的选项在编译系统内核时根据应用需求进行取舍因此使用Linux系统本身提供的内核编译工具对Linux内核进行重新配置和编译可以裁剪出不同的Linux内核通过在编译时选择系统所需要的功能支持模块同时删除不需要的功能可以使编译出来的内核体积显著减小从而缩减资源使用量这种方法的优点是实现非常方便但其最大缺点就是内核裁剪的粒度比较大裁剪的精度比较小2.修改内核源代码的系统裁剪通过分析内核源代码在内核源代码中的适当位置加入一些条件编译语句并结合用户自定义的内核定制菜单(一般使用CML即ConfigurationMenuLanguage语言编写)一些细粒度的内核定制方案己经被广泛地应用内核裁剪当中另外还可以根据系统的应用需求在很多方面对Linux内核源码进行修改和简化以削减目标代码的大小和内核目标代码的执行空间这一类基于内核源代码修改的方法可以在更细粒度的层次上实现Linux内核的裁剪裁剪后的内核在体积上也更小更适合系统的需要缺点是涉及到内核源代码的改写实现比26 南京航空航天大学硕士学位论文较复杂难以自动化执行在本系统中利用第一种方法对经过实时化的Linux内核进行裁减Linux内核的缺省配置适用于大部分的桌面应用并不适合于伺服机电产品的实时控制系统在后面的具体移植过程中我们会看到如下选项画面Codematurityleveloptions--->Loadablemodulesupport--->Processortypeandfeatures--->Generalsetup--->MemoryTechnologyDevices(MTD)--->Parallelportsupport--->PlugandPlayconfiguration--->Blockdevices--->Multi-devicesupport(RAIDandLVM)--->Networkingoptions--->TelephonySupport--->ATA/IDE/MFM/RLLsupport--->SCSIsupport--->FusionMPTdevicesupport--->IEEE1394(FireWire)support(EXPERIMENTAL)--->I2Odevicesupport--->Networkdevicesupport--->AmateurRadiosupport--->IrDA(infrared)support--->ISDNsubsystem--->OldCD-ROMdrivers(notSCSI,notIDE)--->Inputcoresupport--->Characterdevices--->Multimediadevices--->Filesystems--->Consoledrivers--->Sound--->USBsupport--->Bluetoothsupport--->27 基于嵌入式RTLinux的通用数控平台的构建Kernelhacking--->Cryptographicoptions--->Libraryroutines--->---LoadanAlternateConfigurationFileSaveConfigurationtoanAlternateFile选项很多但大部分都是给桌面应用设计的本系统根本用不上Linux内核的大多数功能可以指定为不需要编译成模块以动态加载或者静态连接入内核一般选择静态连接入内核即可在众多选项中有以下几点一般需要选中:Loadablemodulesupport--->[*]Enableloadablemodulesupport,RTLinux使用模块功能来加载实时任务此功能必须存在Processortypeandfeatures--->(Pentium-III/Celeron(Coppermine))Processorfamily选择所用CPU类型CPU类型可以选更低的但不能选更高的否则编译出的程序不能运行Generalsetup--->[*]ISAbussupport本系统中所使用的PC104平台使用PC104总线与精插补器进行信号传输因此此项必选Consoledrivers--->Frame-buffersupport--->[*]Supportforframebufferdevices(EXPERIMENTAL)[*]VESAVGAgraphicsconsole如果系统需要对framebuffer的支持此项必选[]AdvancedPowerManagementBIOS机器的APM功能一定要关闭它会抢夺RTLinux对硬件的控制MemoryTechnologyDevices(MTD)---><*>MermoryTechnologyDevice(MTD)support此选项使RTLinux支持电子盘(SolidStateFlashDisk)大多数嵌入式系统都是用此类设备作为外存如果实际使用的是IDE接口的电子盘则不需要该选项本系统在调试阶段使用的是IDE在后期会采用CF卡因此本选项依然选中Filesystems---><*>CompressedROMfilesystemsupport支持压缩的ROM文件系统对于存储空间比较紧张的系统建议使用28 南京航空航天大学硕士学位论文<*>Secondextendedfssupport对Ext2文件系统的支持本系统开发过程中使用硬盘作为存储介质用该文件系统安装根目录选择了此项Ext3journallingfilesystemsupport对Ext3文件系统的支持在本系统中以模块的形式加载到内核中DOSFATfssupportMSDOSfssupport此两项是对FAT和MSDOS文件系统的支持为了方便系统同Windows系统间的文件传输在此以模块的形式选入内核Kernelhacking--->[]Kerneldebugging[]Checkforstackoverflows[]Debughighmemorysupport[]Debugmemoryallocations[]MemorymappedI/Odebugging[]MagicSysRqkey[]Spinlockdebugging[]Compilethekernelwithframepointers以上这些选项是系统内核对内核调试支持的相关选项当系统处于开发阶段时需要对内核进行调试此时应将这些选项选中加入内核中当系统开发完毕为了提高系统的稳定性和快速性这些选项应去除Hotplugfirmwareloadingsupport(EXPERIMENTAL)系统对热插拔的支持选项由于本系统需要对U盘支持所以此选项以模块形式选中其余的功能如网络等则可根据实际情况选定经过尝试依此配置编译出的内核最多只需要几百K空间最少仅有百余K4.1.2RTLinux的内核定制除了需要对Linux内核进行定制外对RTLinux内核也需要进行定制下面的画面是对RTLinux进行配置时所出现的选项画面GeneralSupportoptions--->POSIXSupportoptions--->Drivers--->Debugging--->ExperimentalOptimizations--->---LoadanAlternateConfigurationFile29 基于嵌入式RTLinux的通用数控平台的构建SaveConfigurationtoanAlternateFile在配置过程中绝大部分选项采用的是默认配置但有些选项需要去除有些需要选中Debugging--->[]EnableDebugging[]rtl_printfusesprintk[]RTLinuxtracersupport(experimental)[]RTLinuxDebugger以上选项在系统开发调试过程中应选中但在系统开发完成的发行版中应去除这样能减小系统的内核同时能提高系统的速度和稳定性[]POSIXPriorityProtection本系统中该选项必须去除为的是能够生成调度器模块rtl_sched.o4.2RTLinux在PC104上的具体移植过程4.2.1Linux在PC104上的安装通常PC104既无光驱也没有软驱仅有板载BIOS因此为在PC104上安装Linux系统同时方便开发本文采用硬盘安装方式从硬盘安装Linux操作系统首先要准备安装包Linux操作系统的安装包通常是一个或多个ISO镜像文件(一般通过网络下载就可以得到)其次要通过某种手段启动镜像文件中的系统安装程序本课题中利用U盘启动DOS系统在DOS系统中启动系统安装程序接下来按照安装程序的提示信息进行安装就可以了安装过程中需要指定Linux操作系统的安装位置这主要涉及硬盘分区的一些知识1硬盘分区通常在使用硬盘时都要进行分区如果把未分区的硬盘比做一张大白纸那么分区后的硬盘就相当于这张大白纸被画上了几个大方框一块硬盘被分成多个分区之后各分区之间是相对独立的每个分区都可以有自己的文件格式例如FAT16FAT32NTFS等等要安装一个操作系统一般来讲都要为它准备专门的分区专门意味着不能与其他操作系统合用一个分区也意味着不要与用户自己的数据文件合用一个分区前者是因为不同的操作系统可能需要不同格式的磁盘分区后者则更多地出于用户数据安全和系统维护方便的考虑从最低配置角度讲Linux操作系统需要一个EXT2或EXT3格式的硬盘分区作为根分区大小在25G就可以另外还需要一个SWAP格式的交换分区大小与内存30 南京航空航天大学硕士学位论文有关如果内存在256M以下交换分区的大小应该是内存的两倍如果内存在256M以上交换分区的大小等于内存大小即可管理硬盘分区的工具有很多在网上也可以找到详细的使用指导本课题使用PQMagic8.0首先将硬盘挂在PC机中利用PQMagic8.0对硬盘进行分区本系统中分3个区分别是EXT2区20G,SWAP区256M,FAT32区59G2Linux操作系统的安装文件准备将以下文件拷入硬盘中的FAT32区rhel-3-i386-as-disc1.isorhel-3-i386-as-disc2.isorhel-3-i386-as-disc3.isovmlinuz从rhel-3-i386-as-disc1.iso中提取initrd.img从rhel-3-i386-as-disc1.iso中提取autoboot.bat从rhel-3-i386-as-disc1.iso中提取TRANS.TBL从rhel-3-i386-as-disc1.iso中提取Loadlin.exe从rhel-3-i386-as-disc1.iso中提取3制作DOS启动盘由于PC104无软驱但支持U盘启动所以可通过制作U盘启动DOS系统从而利用DOS启动Linux系统安装程序制作USBDOS启动盘的软件比较多本系统中利用USBOOT.EXE从网上下载软件制作启动盘该软件在WIN2K/XP下运行可以直接把U盘做成启动盘程序自带了MSDOS7.1的基本启动文件IO.SYS和COMMAND.COM,如果要制作复杂的启动盘可以把其他文件拷贝到U盘上即可比如HIMEM和CONFIG.SYS等4插好U盘和硬盘将PC104的启动方式改成U盘启动重启系统进入DOS进入硬盘FAT32区执行loadlinvmlinuzinitrd=initrd.img进入Linux系统安装程序设置根分区和swap分区按提示完成Linux系统安装4.2.2RTLinux在PC104上的移植1Linux内核升级裁减和安装由于已安装的Linux是标准内核版本是2.4.16移植RTLinux需要给标准内核打上相应的补丁本系统中使用的Linux内核版本是2.4.26RTLinux版本是3.2因此首先要对系统内核进行升级同时根据数控系统的需要对内核进行裁减最后编译安装具体实现步骤如下获得需要的源代码文件:Linux-2.4.26.tar.gzLinux内核源代码31 基于嵌入式RTLinux的通用数控平台的构建rtlinux-3.2-rc1.tar.bz2Rtlinux源代码patch_rtl-2.4.16patch_rtlinux-3.1补丁文件解压缩源代码tar-xvjf/usr/src/rtlinux-3.2-rc1.tar.bz2tar-zxvf/usr/src/linux-2.4.26.tar.gz给linux内核打RTLinux补丁并编译新内核cd/usr/srcln–s/usr/src/linux-2.4.26/usr/src/linuxcd./linuxpatch–p1<../rtlinux-3.2-rc1/patches/kernel_patch-2.4.26-rtl3.2-rc1makemrproper配置内核makemenuconfig出现如图4.1内核配置选项对内核进行配置在选择正确的CPU类型网卡驱动以及EXT3文件系统等选项同时还需要在相应出现的选择界面上选中RTLinux所需的特性如DisableAPMfeatureDisableSMPfeatureEnableRTCatthecharacterdevicesection(实时时钟)EnableFrame-buffersupport最后生成.config的配置文件32 南京航空航天大学硕士学位论文图4.1Linux内核配置选项建立依存关系makedep内核源码树中大多数文件都会与一些头文件有依存关系要想顺利建立内核内核源码树里各个Makefile必须知道这些依存关系依存关系建立期间会在内核源码树中每个子目录里产生一个隐藏的.depend文件此文件内含子目录里各文件所依存的头文件清单如同其他靠make建立的软件自从上一次完成建立以来如果要重新建立内核只有在与头文件有依存关系的文件被改动后才需要经过重新编译的程序建立内核makebzImage建立依存关系后通过makebzImage命令编译内核映像也可使用makezImage命令bzImage是bigzImage的简写它与bzip2压缩工具程序无关事实上,bzImage和zImage这两个建立目标都是使用gzip算法差别在于zImage产生的经压缩的内核映像无法超过512KB,而bzImage则不受这个限制内核配置设定期间如果选择了架构不支持的选项或一些有问题的内核选项建立工作将会在此阶段失败如果一切顺利整个建立过程所花的时间会比建立依存关33 基于嵌入式RTLinux的通用数控平台的构建系多几分钟本课题中大概8分钟左右建立模块makemodules内核映像正确建立后接着建立内核模块这个阶段的时间长短与你选择不要链接成主内核映像的一部分而要建立成模块的内核选项的数量有很大关系这个阶段的时间很少会长过建立内核映像的时间如同内核映像一样倘若配置不符合目标板的需要或是内核选项有问题这个阶段也可能会失败内核映像和内核模块都正确建立之后表示我们已经准备好可以为目标板进行安装工作了有一件事很重要在进行之前要特别注意如果需要清理内核的源码让它恢复到配置设定依存关系建立或编译之前的初始状态可以使用如下的命令Makedistclean但务必在执行此命令之前将内核的配置文件备份起来因为makedistclean会清除前面几个阶段产生的文件包括.config文件所有目标文件以及内核映象安装内核模块makemodules_install内核源码的Makefile文件中包含的modules_install建立目标可用来安装内核模块执行该命令后内核模块会安装到/lib/modules目录安装内核映像cp./arch/i386/boot/bzImage/boot/rtzImagecd/bootmkinitrdinitrd-2.4.26.img2.4.26vi./grub/grub.conf加入titlertLinux2.4.26root(hd0,0)kernel/boot/rtzImageroroot=/dev/hda1注你的根分区可用fdisk–l查看initrd/boot/initrd-2.4.26.img以上命令实现内核的安装我们也可以使用多个内核映像来测试reboot重启PC104进入新编译内核启动的系统编译RTLinux2rtlinux-3.2-rc1在PC104上的配置安装安装好打过RTLinux补丁的内核接下来编译安装RTLinux其过程如下cd/usr/src/rtlinux-3.2-rc34 南京航空航天大学硕士学位论文makeclean该命令清除上次编译时产生的目标文件等makemenuconfig图4.2RTLinux内核配置选项输入上面命令后出现如图4.2所示的RTLinux内核配置选项图对RTLinux进行配置该配置决定了RTLinux的一些性能的开与关与后面实时域程序的编制息息相关需要注意的是为了能够生成调度器模块rtl_sched.o在这个过程当中应不选优先级保护选项POSIXPriorityProtection否则实时域线程无法调度如图4.335 基于嵌入式RTLinux的通用数控平台的构建图4.3RTLinux优先级保护选项makedepmakemodulesmakedevicesmakeinstall以上这些命令实现了RTLinux的配置和安装接下来利用下面两个脚本对RTLinux进行测试./scripts/insrtl./scripts/regression.sh以上这些命令顺利通过后就可以启动RTLinux模块rtlinuxstart可以用lsmod查看是否正确本系统中的结果是[root@localroot]#lsmodModuleSizeUsedbyTainted:PFrtl_mqueue1533520(unused)rtl_sched415080[rtl_mqueue]rtl_fifo446720(unused)36 南京航空航天大学硕士学位论文rtl_posixio80520[rtl_fifo]rtl_time89840[rtl_mqueuertl_schedrtl_posixio]rtl224160[rtl_schedrtl_fifortl_posixiortl_time]mbuff84600(unused)此时也可以使用rtlinuxstatus查看当前RTLinux状态本系统中的结果如下其中表示该模块成功加载到内核中该模块没有被加载或加载不成功[root@localroot]#rtlinuxstatusScheme:(-)notloaded,(+)loaded(+)mbuff(+)rtl_fifo(+)rtl_mqueue(+)rtl(+)rtl_posixio(+)rtl_sched(+)rtl_time如果需要停止RTLinux内核的运行,可以使用命令rtlinuxstop来终止实时内核的运行要使该命令正确运行在执行该命令之前必须保证所有实时模块都被卸载了下面显示是本系统中的结果[root@localroot]#rtlinuxstopScheme:(-)notloaded,(+)loaded(-)mbuff(-)rtl_fifo(-)rtl_mqueue(-)rtl(-)rtl_posixio(-)rtl_sched(-)rtl_time4.2.3RTLinux中FrameBuffer的开启确保您的Linux内核包含了FrameBuffer支持并包含了VESAFrameBuffer驱动程序RedHatLinux6.x及以上的发行版自带的内核中已经包含了该驱动程序如果使用自己编译的内核请检查您的内核配置如果使用LILO引导装载器则需要修改/etc/lilo.conf文件在您所使用的内37 基于嵌入式RTLinux的通用数控平台的构建核选项段中添加如下一行vga=0x0317这样Linux内核在启动时将把显示模式设置为1024x768x16bpp模式如果您的显示器无法达到这种显示分辨率可考虑设置vga=0x0314它对应800x600x16bpp显示模式修改后的/etc/lilo.conf文件类似boot=/dev/hdamap=/boot/mapinstall=/boot/boot.bprompttimeout=50lineardefault=linuximage=/boot/vmlinuz-2.4.26vga=0x0317;这一行设置显示模式label=linuxread-onlyroot=/dev/hda6other=/dev/hda1label=dos运行lilo命令使所作的修改生效并重新启动系统#lilo#reboot如果一切正常将在Linux内核的引导过程中看到屏幕左上角出现可爱的Linux吉祥物企鹅或者RedHatLinux的蓝天白云产品徽标并发现系统的显示模式发生了变化如果使用的是RedHat7.x或者更高版本并且在安装RedHat时使用了GRUB而不是LILO作为引导装载器则设置FrameBuffer的方法会有一些不同第一要激活VESAFrameBuffer驱动程序需要修改/boot/grub/menu.lst文件并在kernel打头的一行添加vga=0x0317您也可以复制已有的引导选项并修改复制之后的选项例如#grub.confgeneratedbyanaconda38 南京航空航天大学硕士学位论文##Notethatyoudonothavetorerungrubaftermakingchangestothisfile#NOTICE:Youdonothavea/bootpartition.Thismeansthat#allkernelandinitrdpathsarerelativeto/,eg.#root(hd0,0)#kernel/boot/rtlinuzroroot=/dev/hda1#initrd/boot/initrd-2.4.26.img#boot=/dev/hda1default=0timeout=10splashimage=(hd0,0)/boot/grub/splash.xpm.gztitleRTLinux(2.4.26,FrameBuffer)root(hd0,0)kernel/boot/rtlinuzroroot=/dev/hda1vga=0x0317initrd/boot/initrd-2.4.26.imgtitleRTLinux(2.4.26)root(hd0,0)kernel/boot/rtlinuzroroot=/dev/hda1initrd/boot/initrd-2.4.26.img其中RTLinux(2.4.26,FrameBuffer)就是设置了VESAFrameBuffer的引导选项第二修改了/boot/grub/menu.lst文件之后重新启动系统即可而无需执行类似lilo那样的命令本系统中使用的是grub引导装载器图4.4是开启FrameBuffer后的系统启动图39 基于嵌入式RTLinux的通用数控平台的构建图4.4开启FrameBuffer后的系统启动界面4.3本章小结本章主要对基于RTLinux的数控系统的关键技术进行研究结合数控系统和RTLinux的特点对标准Linux内核的裁减和RTLinux内核的裁减进行了分析并详细叙述了本系统中整个操作系统的移植过程40 南京航空航天大学硕士学位论文第五章系统功能模块设计与实现在第三章介绍了本系统的整体结构和软件总体结构本章将就本系统中各模块间的接口实现进行介绍同时对整个系统的启动过程手动增量控制过程和自动运行过程进行分析和介绍5.1系统各层间的通信设计本系统采用界面层管理层和控制层三层软件结构管理层与界面层以及管理层与控制层之间存在着信息传递这些信息传递的可靠性和快速性是整个系统性能的保证下面就本系统中管理层与界面层以及管理层与控制层间的通信进行设计5.1.1管理层与界面层的通信管理层与界面层的通信包括如下两个方面:用户在图形界面下的操作信息及相关数据需要传递到管理层中作进一步处理如进行增量控制时用户输入的进给速度和进给距离进行G代码自动运行时用户选定的G代码文件名等系统运行过程中的各种状态信息需要传递到界面层显示给用户如控制点的当前坐标进给速度以及各种各样的提示信息和出错信息等由于管理层和界面层均运行于Linux用户空间这类通信可用经典的UNIX进程间通信机制来实现本系统采用半双工管道和信号机制通信过程描述如下:当需要进行上述第一种通信时界面层先把通信数据送到管道中然后给管理层发信号管理层响应信号取数据并执行相应的操作当需要进行上述第二种通信时管理层先把通信数据送到管道中然后给界面层发信号界面层响应信号取数据并执行相应的操作5.1.2管理层与控制层的通信管理层与控制层需要进行如下多个方面的通信:控制层运行时所需的各种参数是可配置的这些参数需要从管理层发送到控制层如伺服参数加减速参数等管理层发往控制层的控制命令这类命令主要有单轴控制启动G代码自动运行G代码模拟运行软PLC启动等管理层发往控制层的控制数据控制数据与上述控制命令相对应控制层根据控制命令取相应的控制数据进行控制控制数据必须先于控制命令发往控制层41 基于嵌入式RTLinux的通用数控平台的构建控制层返回到管理层的数据这些数据主要包括各轴运动参数软PLC输入输出映象区数据以及出错报告等管理层与控制层的通信属于非实时任务与实时任务间的通信即Linux用户空间进程与RTLinux内核实时线程的通信RTLinux为这类通信提供两种途径实时管道realtimefifo)与共享内存(sharedmemory)在本系统中以上两种通信方式都有采用图5.1为本系统中采用实时管道和共享内存实现Linux进程与内核实时线程通信的结构:管Linux进程理层用户空间控控返制制回共命数信享令据息内控管管管存制道道道层内核空间管道处理器内核实时线程图5.1管理层与控制层的通信5.2系统界面层设计系统界面层GUI是用户和数控机床进行交互的媒介因此一个好的数控系统必须提供良好的人性化的图形用户界面同时图形用户界面因该做到布局合理简单实用易于操作本系统界面层采用Qt开发Qt是TrollTech公司的标志性产品而QtDesigner是Qt提供的一种真正可视化的编程工具采用C++作为程序设计语言Qt工具包有两种不同的版本,一种是用于商业性质的专业版另一种是用于开发X平台自由软件的自由版专业版用于创造成功的商业贸易方面的跨平台软件而自由版已经成为用C++GUI工具包在Linux上进行自由软件开发的主流它是Linux上流行的KDE桌面42 南京航空航天大学硕士学位论文环境的基础另外它还是一种跨平台的编程工具,能够确保软件非常方便地应用于绝大多数操作系统接下来就Qt的特点和优势以及本系统中界面层的设计进行介绍5.2.1Qt的特点和优势Qt作为一种非常优秀的编程工具,具有很多优点和一些其它编程工具所不具备的[32]特征(1)面向对象Qt是完全面向对象的C++开发库,使用它进行应用程序的开发,可以充分利用其面向对象和模块化的特征,从繁琐的X编程中解脱出来,专注于程序本身的实现(2)独有的Signal-Slot机制Signal-Slot机制是Qt最重要的特征在Windows中,程序通过消息机制和事件循环来实现图形对象行为的触发和处理在Qt中,是在一个类中定义多个Signal和SlotSignal就相当于是事件而Slot就相当于是响应事件的方法为了实现事件驱动需要将一个类的Signal和另一个类的Slot连接起来(使用connect)采用这种机制是一种安全可靠的方法,它允许回调并支持对象之间在彼此不知道对方信息的情况下进行合作这使Qt非常适合于真正的构件编程(3)跨平台的开发工具Qt是一种跨平台的工具包,它对编程者隐藏了在处理不同窗口系统时的潜在问题,使程序员避免了在文件处理时间处理等方面存在的依赖操作系统的细节问题Qt的跨平台能力非常强用它开发出来的软件几乎可以应用于所有的操作系统如MicrosoftWindows95/98/2000/XP,MicrosoftWindowsNTLinux,Solaris,SunOS,HP_UX,DigitalUnix(OSF/1),Irix,FreeBSD,BSD/OS,SCO和AIX等(4)开发程序的方便性Qt提供了一个可视化的开发工具QtDesigner,使用该工具就像在Windows中使用VisualC++那样可以直接向项目中添加各种组件,而不需要一步一步地编写代码,这个特点是其它非可视化编程工具望尘莫及的QtDesigner中包含全面的联机帮助文档,包括超文本方式的QtManualman帮助手册页和补充指南这些帮助不论是对于初学者还是专业人士,无疑都是非常方便的除此之外,Qt还为应用程序的本地化提供完全支持,所有用户界面文本都可以基于消息翻译表被译成各国语言它还完全支持双字节的16bit国际字符标准(5)强大的功能Qt的强大功能主要体现在以下几方面:拥有一套完整的组件,用户可以直接基于这些现成的组件开发出优秀的界面拥有丰富的API函数,大概有250多个C++类43 基于嵌入式RTLinux的通用数控平台的构建优越的绘画功能和2D/3D图形润色功能Qt的绘画工具类Qpainter在任意一个绘画设备上都可以润色图形对于更高级的2D/3D图形可以结合使用OpenGL和Qt用OpenGL就像用任意一个Qt组件一样方便比纯粹使用OpenGL作的3D图形更好(6)高性能的工具Qt是直接基于Xlib的并不依赖Motif工具包所以它的执行效率比一般的基于平台的代码的执行效率要高据此,使用QtDesigner作为Linux下图形用户界面应用程序的开发工具,应该是非常理想的5.2.2界面层设计本系统的界面主要完成以下几个功能参见图5.2NC程序的编辑管理各种参数的设置加工过程中的位置坐标和各种状态参数显示手动数据输入MDI方式加工过程的图形仿真NC程序出错信息的显示报警加工过程控制命令如起停复位等GUI模块程序编辑参数设置位置显示MDI图形模拟出错信息控制命令图5.2界面层功能模块系统的人机界面如图5.344 南京航空航天大学硕士学位论文图5.3系统人机界面5.3管理层功能的实现5.3.1管理层软件结构管理程的软件结构如图5.4管理层由总控模块自动运行功能模块仿真功能模块手动控制功能模块PLC设置功能模块和参数功能模块组成45 基于嵌入式RTLinux的通用数控平台的构建与界面层交互调度线手动PLC参数程仿真文件控制设置设置功能自解释功能功能功能模块动模块模块模块运总行控功刀补模能块模块前瞻内核交系统参数中间结果等互线程与控制层交互图5.4管理层软件结构其中总控模块是核心由调度线程和内核交互线程构成调度线程负责从界面层接收相关的控制和相关的数据信息然后根据控制命令激活相应的模块完成相应的功能内核交互线程负责与控制层间进行交互一方面当相应功能模块完成后调度线程唤醒内核交互线程由内核交互线程将相关控制和数据信息发往控制层同时接收控制层返回的信息它联系着界面层和管理层在界面层和控制层间起到了桥梁作用在功能模块中自动运行功能模块由文件解释子模块刀补子模块和前瞻子模块组成三个子模块分别在三个不同的线程中实现其它功能模块如仿真功能模块手动控制功能模块PLC设置功能模块和参数设置功能模块都是由单独的线程实现46 南京航空航天大学硕士学位论文5.3.2管理层软件实现管理层采用Linux多线程机制实现下面介绍一下Linux多线程机制以及多线程机制在管理层中的应用5.3.2.1Linux的多线程机制进程(Process)和线程Thread是现代操作系统在多任务方面的核心概念一个进程通常定义为程序的一个运行实例线程则是进程中指令的不同执行路线又称为轻量级进程(LightweightProcess)UNIX操作系统通常以进程作为计算机资源分配的最小单位这些资源包括处理器物理及虚拟内存文件I/O缓冲通信端口等为了适应多处理器环境下日益增长的细粒度并行运算的需要现代操作系统提供了线程机制线程是操作系统进行处理器调度的最小单位一个线程同所属进程中的其它线程共享该进程占有的资源值得注意的是这两个概念都是指正在运行中的程序是动态的概念它们的状态永远是运行着的同一程序的不同运行实例是不同的进程多线程的实现方式分为用户级内核级用户级与内核级结合三种用户级方式是指在用户程序中实现线程的调度和上下文切换而不需要内核支持内核级方式则是由内核负责完成线程的调度和切换需要额外的内核开销用户级方式只能做到用户层次的资源抢先(Preemptive)其缺陷是不能实现真正的并行处理例如当一个线程因I/O操作处于等待时整个进程就会被调度程序切换为等待状态进程中的其它线程也得不到运行机会而内核级方式就没有这个限制因为线程是由内核负责处理器分配和调度用户级和内核级结合方式则是综合两者的优点在这种机制中用户级线程和内核级线程在同时运行而且它们之间可以进行线程通信Linux的内核本身并不涉及线程处理而是纯粹以进程为处理器调度单位但是在Linux中提供了Linuxthreads库它实现了符合POSIX1003.1c标准的多线程支持而且是内核级方式Linuxthreads的说明文档及源程序表明Linuxthreads中的每个线程实际上仍然是单独的UNIX进程但是该进程却具有和线程一样的轻负载特性因为这种进程是通过Linux特有的克隆(Clone系统调用)而不是衍生(Fork)系统调用生成的它与其他的同样克隆出的线程共享父进程的资源至于线程的调度实际上仍然是内核的调度程序在克隆进程时Linux允许两个进程共享相同的资源可共享的资源包括文件信号处理程序和虚拟内存等当某个资源被共享时该资源的引用计数值会增加1只有两个进程均终止时内核才会释放这些资源Linuxthreads库就是利用这种Clone系统调用实现了效率较高的内核级多线程支持按照POSIX1003.1c标准编写47 基于嵌入式RTLinux的通用数控平台的构建的程序与Linuxthreads库相链接即可支持Linux平台上的多线程即在程序头文件中包含pthread.h在编译链接时使用命令:gcc-D_REENTRANT-lpthreadxxx.c其中REENTRANT宏使得相关库函数(如stdio.herrno.h中的函数)是可以重入的即线程是安全的(thread-safe)-lpthread则会去链接库目录下的libpthread.a或libpthread.so文件使用Linuxthreads库需要2.0以上版本的Linux内核及相应版本的C库libc5.2.18,libc5.4.12,libc6)Linuxthreads可以支持Intel,Alpha,MIPS等平台上的多处理器系统5.3.2.2Linux多线程编程的关键技术1线程的创建终止及控制任何进程在启动时就已有了一个主线程如果需要再生成线程则使用pthread_create函数在该函数中可以指定线程的属性线程例程(Routine)传给线程例程的参数线程例程是一个用户自定义函数即线程执行的代码当线程例程返回时线程结束运行也可以显式调用pthread_exit来退出线程在创建后可以用pthread_self函数获取线程ID(TID)类似于getpid函数函数pthread_join使得进程等待线程的终止调用pthread_join后进程将被挂起直到指定的某个线程(在pthread_join的参数thread中指定)终止而pthread_detach函数正好相反它使得进程不必等待线程的结束从而允许进程继续执行别的操作被detach的线程在执行结束后其占用的资源由系统自动收回2线程间的互斥互斥操作就是对某段代码或某个变量修改的时候只能有一个线程在执行这段代码其他线程不能同时进入这段代码或同时修改变量pthread常用pthread_mutex互斥体来实现线程互斥操作pthread_mutex_init函数用于初始化一个互斥体变量Pthread_mutex_lock用于给互斥体变量上锁如果上锁时互斥体已经被别的线程锁住了那么调用该函数的线程将被阻塞到互斥体被解锁为止而pthread_mutex_trylock则是试图锁住互斥体但在互斥体己经被加锁时不会造成阻塞而是迅速返回pthread_mutex_unlock函数对互斥体解锁pthread_mutex_destroy则用来释放互斥体所占资源3线程的同步同步(Synchronize)就是多个并发的线程相互间在操作上保持一定的协调关系在Linuxthreads中用条件变量(conditionvariable)来实现同步函数pthread_cond_init用来创建一个条件变量pthread_cond_wait和pthread_cond_timedwait用来等待条件变量被设置这两个等待调用需要一个已经上锁的互斥体48 南京航空航天大学硕士学位论文mutex这是为了防止在真正进入等待状态之前别的线程有可能设置该条件变量而产生竞争pthread_cond_broadcast用于设置条件变量即使事件发生并使得所有等待该事件的线程不再阻塞而pthread_cond_signal则是解除某一个等待线程的阻塞状态pthread_cond_destroy用于释放一个条件变量的资源5.3.2.3Linux多线程机制在管理层软件开发中的使用[33]以下是Linux线程编程用到的一些函数1创建线程#includeintpthread_create(pthread_t*thread,constpthread_attr_t*attr,void*(*start_routine)(void*),void*art);pthread_create()函数用来在某个进程中创建一个新线程线程的属性通过attr指定如果attr是NULL则使用缺省属性如果attr指定的属性在创建线程后被修改则所创建线程的属性不受影响本函数成功执行后pthread_create()将所创建线程的ID保存在由thread指向的目标start_routine就是线程执行的代码本函数将arg作为唯一参数传给start_routine并立即开始其执行这样一个线程就生成了如果start_routine返回(用return语句)相当于用start_routine的返回值作为退出状态隐含调用了pthread_exit()注意启动main()的线程(也就是主线程)与此不同当从main()返回时相当于用main()的返回值作为退出状态隐含调用了exit()2指定线程调度策略#includeintpthread_attr_setschedpolicy(pthread_attr_t*attr,intpolicy);intpthread_attr_getschedpolicy(constpthead_attr_t*attr,intpolicy);函数pthread_attr_setschedpolicy()和pthread_attr_getschedpolicy()分别设置和获取attr参数中的schedpolicy属性policy的值包括SCHED_FIFOSCHED_RR和SCHED_OTHER它们在头文件中定义Linux定义了3种标准调度策略用下面3个符号常量表示SCHED_FIFO(FIFO,Fistin-firstout)是实时的基于优先级的先进先出调度策略SCHED_RR(RR,Roundrobin)是实时的基于优先级的轮转调度策略SCHED_OTHER为非实时的基于优先级的轮转法3线程的退出#include49 基于嵌入式RTLinux的通用数控平台的构建voidpthread_exit(void*value_ptr);pthread_exit()函数终止调用线程并使值value_ptr对所有此线程的连接(join)可用当某个线程(启动main()的那个线程除外)从用来创建它的例程start_routine中返回(用return语句)时pthread_exit()会被隐含调用函数的返回值作为线程的退出状态4等待线程结束#includevoidpthread_join(pthread_tthread,void*value_ptr);pthread_join()函数挂起调用线程的执行直到目标thread结束线程的停止点是在pthread-join()函数内部目标thread终止后此函数才返回因此当此函数成功返回后目标thread已经结束5放弃处理器#includeintsched_yield(voic);sched_yield()函数强迫调用线程放弃处理器直到它再一次成为其所在线程队列的头线程6获取调用线程的ID#includepthread_tpthread_self(void);下面是管理层线程程序的实现框架void*sch_thread(void*p)//线程的执行代码{}intstart_sch_thread(void)//在其中启动sch_thread{intret;pthread_attr_tattr;//线程属性变量structsched_paramsched_param;//调度参数变量pthread_tthread_sch;//线程变量pthread_attr_init(attr);//初始化线程属性50 南京航空航天大学硕士学位论文sched_param.sched_prority=-10;//采用的优先级pthread_attr_setschedparam(&attr,&sched_param);//设置调度参数pthread_attr_setschedpolicy(&attr,SCHED_RR);//设置调度策略ret=pthread_create(&thread_sch,NULL,(void*)sch_thread,(void*)0);//创建线程return0;}需要说明的是线程在创建后即成为一个独立的CPU分配单位因此创建线程(进程的主线程)和被创建线程是两条不同的执行路线它们的运行是独立的又因为它们实际上是同一个进程的不同副本共享相同的地址空间等进程资源所以它们之间有密切的连带关系如果进程结束了则其所创建的线程也就被终止而如果在线程中执行exit()则整个进程(当然包括从属于它的线程)都会结束进程的终止可以通过显式调用exit()来实现也可以用return语句使用后者时实际上隐含地调用了exit()线程的终止通过调用pthread_exit()实现(注意不能用exit())为了避免它们的运行冲突(比如被对方强迫终止)我们必须加入某种机制也就是线程的同步问题这一点可以通过调用pthread_join()函数实现也可以通过互斥体(mutex)或者旗语(semaphore)来实现5.4控制层的工作原理与实现方法5.4.1控制层模块间的通信本系统中控制层实时模块共六个各模块在完成各自任务的同时还要同其它模块进行通信这样才能保证整个系统功能的实现本系统中控制域实时模块需要进行如下多方面的通信软CNC控制模块根据管理层的控制信息决定唤醒哪个模块挂起哪个模块当按下手动命令时应唤醒手动模块和位控模块永久挂起插补模块当按下自动加工命令时应唤醒插补模块和位控模块永久挂起手动模块等这就涉及到以下三种通信软CNC控制模块与插补模块之间的通信软CNC控制模块与手动模块之间的通信软CNC控制模块与手动模块之间的通信插补模块对数据进行插补处理处理完的数据要传递给位控模块这就涉及到插51 基于嵌入式RTLinux的通用数控平台的构建补模块与位控模块间的通信手动模块对手动命令进行处理产生各轴的位移量并传递给位控模块这就涉及到手动模块与位控模块间的通信当遇到换刀命令T时需要PLC执行换刀本系统中换刀命令在位控线程中执行这就涉及到位控模块与软PLC模块间的通信位控模块对各轴位移量进行修正将修正后的数据传给信号输出模块由信号输出模块通过PC104总线发往精插补器这就涉及到位控模块与信号输出模块间的通信软CNC控制模块与插补模块之间的通信软CNC控制模块与手动模块之间的通信和软CNC控制模块与手动模块之间的通信主要传递的是命令和状态信息插补模块与位控模块间的通信手动模块与位控模块间的通信和位控模块与信号输出模块间通信主要是传递数据信息位控模块与软PLC模块间主要是对输入输出映象区的操作即数据共享前两种类型数据的传递都可通过RTLinux的RT-FIFO机制实现第三种数据的共享可采用RTLinux的共享内存机制实现当RT-FIFO用来传递命令和状态信息时通常要求某种操作在该命令或信息到来后立即执行这时就要为该RT-FIFO创建一个响应函数有程序访问该RT-FIFO时响应函数就会自动运行用与此种目的的RT-FIFO就是RTLinux中的管道处理器机制当RT-FIFO用作数据传递缓冲区时它只是一个普通的RT-FIFO管道只能执行缓冲功能本系统中实时域各模块间的通信及通信方式如图5.5软CNC控制模块将命令和状态信息通过相应的管道处理器传送给插补模块手动模块和位控模块插补模块和手动模块与位控模块以及位控模块与信号输出模块间的数据信息的传递由实时管道FIFO实现位控模块与软PLC模块间的输入映象区和输出映象区由共享RAM实现52 南京航空航天大学硕士学位论文软CNC控制模块管道处理器管道处理器插补模块手动模块输入管道处理器映象FIFOFIFO区共享RAM数据管道数据管道位控模块软PLC模块FIFO输出映象区共数据管道享RAM信号输出模块图5.5控制层模块间通信5.4.2控制层系统状态和控制字定义1系统状态定义各模块间除了传递相应命令外还需要传递系统当前的状态数控平台主要有自动运行手动运行MDI模拟运行等状态因此在整个系统中我们定义了如下系统状态typedefunsignedintSYS_STATE;SYS_STATE的值如下//系统工作状态#defineAUTOSTATE1//自动运行状态#defineMANUSTATE2//手动运行状态#defineMDISTATE3//MDI状态#defineEMULATORSTATE4//模拟运行状态#definePLCSTATE5//PLC状态#definePARASTATE6//参数设置状态53 基于嵌入式RTLinux的通用数控平台的构建#defineFILEMANAGESTATE7//文件管理状态2模块运行状态定义软CNC模块根据管理程传来的命令激活挂起和停止相应模块如当按下手动按钮时软CNC模块接收到手动命令需要激活手动模块和位控模块同时挂起插补模块因此在控制层还需要定义如下的模块控制命令typedefunsignedintMODULE_CMD;//模块命令#defineSTOP_TASK0//停止模块运行#defineSTART_TASK1//唤醒模块#definePAUSE_TASK2//挂起模块#defineCONTINUE_TASK3//模块正常运行3手动模块控制字控制层中手动模块命令复杂有增量点动连续点动和回零三类控制命令同时在增量点动中的步长还有多种步长连续点动又分为加速和非加速状态为了提高系统中手动模块的通用性在本系统的设计过程中在软CNC模块和手动模块间的命令我们采用了统一的命令格式用一个字来表示由该字的不同位来表示不同的命令在使用该字的过程中我们定义了CMD_WORD数据类型如下typedefunsignedintMANU_CMD_WORD;当要使用该命令字时可定义一个这样的变量MANU_CMD_WORDcommand;4模块间控制命令数据结构本系统中各个模块间的控制命令数据结构如下软CNC模块与位控模块间的控制命令数据结构typedefstructmsg_to_location_struct//软CNC模块与位控模块的控制命令{SYS_STATEstate;//系统当前状态MODULE_CMDmodule_location_cmd;//模块控制命令}STR_LOCATION_MSG;软CNC模块与插补模块间的控制命令数据结构typedefstructmsg_to_feed_struct//软CNC模块与插补模块的控制命令{SYS_STATEstate;//系统当前状态MODULE_CMDmodule_feed_cmd;//模块控制命令54 南京航空航天大学硕士学位论文}STR_FEED_MSG;软CNC模块与手动模块间的控制命令数据结构typedefstructmsg_to_manu_struct//软CNC模块与手动模块的控制命令{SYS_STATEstate;//系统当前状态MODULE_CMDmodule_manu_cmd;//模块控制命令MANU_CMD_WORDmanu_cmd;//手动命令}STR_MAUN_MSG;软CNC模块与管理层总控模块间的控制命令数据结构typedefstructmsg_from_up_to_manage_struct{SYS_STATEstate;//系统当前状态MANU_CMD_WORDcommandNULL;//管理层控制命令当系统为手动状态时为手动命令当系统为其他状态时该值无意义}STR_UP_TO_MANAGE_MSG;5.4.3利用RTLinux进行控制层软件开发的关键技术控制层各模块工作在RTLinux实时层各模块在内核中都是以线程的形式出现[29][34]接下来我们介绍一下利用RTLinux进行控制层软件开发的关键技术1进程间的通信IPCRTLinux要求将应用程序分成实时部分和非实时部分应用程序的实时部分应该是简单的和轻负荷的在RTLinux的实时内核中完成而非实时部分在Linux的用户空间完成因此RTLinux提过了多种内核实时进程和Linux用户空间进程间的通讯机制最重要的是实时FIFO和共享内存实时FIFO是能够被内核实时进程和Linux用户空间进程访问的快进快出队列是一种单向的通讯机制可以通过两路实时FIFO构成双向的数据交换方式在使用实时FIFO前先要对实时FIFO通道初始化#includeintrtf_create(unsignedintfifo,intsize)使用后应该注销实时FIFO通道intrtf_destroy(unsignedintfifo)在初始化实时FIFO通道后RTLinux内核的实时进程和Linux用户空间的进程都可以使用标准的POSIX函数openreadwrite和close等对实时FIFO通道进行访问内核实时进程还可以使用RTLinux的专有函数rtf_put和rtf_get对实时FIFO55 基于嵌入式RTLinux的通用数控平台的构建通道进行读写RTLinux共享内存由mbuff.o模块支持可以使用下面的函数分配和释放共享内存块#includevoid*mbuff_alloc(constchar*name,intsize)voidmbuff_free(constchar*name,void*mbuf)函数mbuff_alloc有两个参数共享内存名name和共享内存块的大小size如果指定的内存共享名并不存在分配成功时返回共享内存指针访问计数置为1分配失败时返回空指针如果指定的内存共享名已经存在返回该块共享内存的指针并将访问计数值直接加1函数mbuff_free将该块共享内存的访问计数值减1当计数值为0时该共享内存被释放在实时内核模块中使用该函数时应该将函数mbuff_alloc和mbuff_free分别放在init_module和cleanup_module模块之中2中断和访问硬件硬中断实时中断具有最低的延时在系统内核中只有少数的实时进程使用函数rtl_request_irq和rtl_free_irq用于安装和卸载指定硬件中断的中断服务程序#includeintrtl_request_irq(unsignedintirq,unsignedint(*handler)(unsignedint,structpt_regs*))intrtl_free_irq(unsignedintirq)中断驱动的线程可以使用唤醒和挂起函数intpthread_wakeup_np(pthread_tthread)intpthread_suspend_np(void)一个中断驱动的线程可以调用函数pthread_suspend_np(pthread_self())阻塞自身线程的执行然后由中断服务函数调用函数pthread_wakeup_np唤醒该线程的换行直到此线程再次调用函数pthread_suspend_np(pthread_self)将自身挂起软中断是Linux内核常常使用的中断它能够更安全地调用系统函数无论如何对于许多任务来说并不能提供硬实时性能将会导致一定的延时intrtl_get_soft_irq(void(*handler)int,void*,struetpt_regsconstchar*devname)分配一个虚中断并安装中断voidrtl_free_soft_irq(unsignedintirq)释放分配的虚中断RTLinux与Linux一样通过/dev/mem设备访问物理内存具体由模块rtl_posixio.o提供此项功能首先应用程序应该打开/dev/mem设备通过函数mmap56 南京航空航天大学硕士学位论文对某段物理内存进行映射后即可使用映射后的地址访问该段物理内存应用程序只能在Linux进程中即在应用程序的init_module()模块中调用mmap在实时进程中调用mmap将会失败另一种访问物理内存的方法是通过Linux的函数ioremapRTLinux访问I/O端口的函数如下对于x86结构输出一个字节到端口#includevoidoutb(unsignedintvalue,unsignedshortport)voidoutb_p(unsignedintvalue,unsignedshortport)输出一个字到端口#includevoidoutw(unsignedintvalue,unsignedshortport)voidoutw_p(unsignedintvalue,unsignedshortport)从端口读一个字节#includecharinb(unsignedshortport)charinb_p(unsignedshortport)从端口读一个字#includeshortinw(unsignedshortport)shortinw_p(unsignedshortport)其中带后缀_p的函数使读写端口时有一个小的延时这在快速的计算机访问慢速的ISA设备时是必需的3线程同步当多个实时线程需要访问共享资源时如果没有一种同步机制将破坏共享资源中数据的完整性RTLinux提供一种简单的加锁方法mutex来控制对共享资源的存取并支持POSIX的pthread_mutex_family函数组目前有以下函数可以使用pthread_mutexattr_getpshared//得到指定属性线程共享属性值pthread_mutexattr_setpshared//设置指定属性线程共享属性值pthread_mutexattr_init//初始化mutex的属性pthread_mutexattr_destroy//删除mutex的属性pthread_mutexattr_settype//设置mutex信号的类型pthread_mutexattr_gettype//得到mutex信号的类型pthread_mutex_init//按指定的属性初始化mutex57 基于嵌入式RTLinux的通用数控平台的构建pthread_mutex_destroy//删除给定的mutexpthread_mutex_lock//锁定mutex,如果mutex已被锁定阻塞当前线程直到解锁prhread_untex_trylock//锁定mutex,如果mutex已被锁定函数立即返回pthread_untex_unlock//解锁mutex互斥信号类型有PTHREAD_MUTEX_NORMALdefaultPOSIXmutexes的PTHREAD_MUTEX_SPINLOCKspinlocks5.4.4信号输出模块的实现框架信号输出模块负责将各轴的脉冲数发往精插补器它是精插补器与软件数控系统的接口它由精插补器发出的硬件中断驱动以下是信号输出模块的实现框架#include#include#include#include#include#include#include#include"pc104.h"#include"cnc_fifo.h"#defineFEED_IRQ5pthread_toutput_thread;void*thread_code(void*param){intret=0;FEED_DATA_STRUCTfeed_data;pthread_make_periodic_np(pthread_self(),gethrtime(),10000000);while(1){rtl_printf("output_threadoutput_threadoutput_thread ");while((ret=rtf_get(CONTRLOUTPUTFIFO,&feed_data,sizeof(feed_data)))==sizeof(feed_data))58 南京航空航天大学硕士学位论文{outw(feed_data.ix,DX_ADDRESS);outw(feed_data.iy,DY_ADDRESS);outw(feed_data.iz,DZ_ADDRESS);pthread_suspend_np(pthread_self());}pthread_wait_np();}return0;}unsignedintintr_handler(unsignedintirq,structpt_regs*regs){pthread_wakeup_np(output_thread);rtl_hard_enable_irq(FEED_IRQ);}intinit_module(void){pthread_attr_tattr;structsched_paramsched_param;intstatus,ret;pthread_attr_init(&attr);//线程创建sched_param.sched_priority=1;pthread_attr_setschedparam(&attr,&sched_param);ret=pthread_create(&output_thread,&attr,thread_code,(void*)0);if(ret){printk("failedtocreateoutput_thread(%d) ",ret);return-1;}else59 基于嵌入式RTLinux的通用数控平台的构建{printk("output_threadcreatedsucessfully ");}rtl_irqstate_tf;rtl_no_interrupts(f);status=rtl_request_irq(FEED_IRQ,intr_handler);//设置硬件中断的处理程序rtl_hard_enable_irq(FEED_IRQ);//使能中断rtl_restore_interrupts(f);//按照变量f恢复当前的中断状态标志并使能中断return0;}voidcleanup_module(void){rtl_free_irq(FEED_IRQ);//禁止中断pthread_cancel(output_thread);pthread_join(output_thread,NULL);}在实时域各模块程序中至少含有两个函数:init_module()和cleanup_module(),init_module在模块第一次装入内核中时被调用完成实时任务的参数的设置进行任务的启动和终止等操作cleanup_module在模块卸载时被调用其功能与init_module恰好相反一般在调试或系统退出时使用编写实时域模块程序需要特别注意的地方是由于实时域模块本身作为内核的一个部分运行拥有很高的权限因此内核程序中的bug会很容易导致系统崩溃RTLinux以内核实时线程的形式实现实时任务最大程度保证了实时性而且实时任务在内核中运行可以方便地实现对硬件端口的访问实时任务运行在内核的代价是可使用的函数资源较少许多函数库的函数不能被内核程序安全调用5.5系统运行过程分析所谓运行过程分析是指对系统在实际运行过程中各任务或者说各进(线)程的动作的分析旨在把前面各层的单独分析综合起来从整体上把握系统的运行过程60 南京航空航天大学硕士学位论文数控系统不同于一般的过程式串行系统而是一个典型的并发异步系统因此这里各任务的动作既包括任务本身的数据处理也包括任务的之间的协调5.5.1系统启动过程系统总体启动过程如图5.6启动精插补器启动控制层内核实时模块启动管理层启动界面层图5.6数控系统启动过程第一步启动精插补器精插补器在循环等待控制层发送来的握手信号第二步启动控制层内核实时模块当内核层实时模块启动后信号输出模块通过PC104总线发送握手信号这样控制层与精插补器建立起了通信通道信号输出模块发送完握手信号后自我挂起精插补器接收到握手信号后会发送中断信号给输出模块输出模块由中断信号激活等待从位控线程传来的数据此时由于传递数据的FIFO为空所以信号输出模块周期性挂起此时控制层其它模块都处于挂起状态第三步启动管理层管理层等待从界面层发来的命令第四步启动界面层等待用户的操作经过以上四步整个系统启动就启动成功了这四步启动过程精插补器是由FPGA实现的硬件系统它是上电自动启动其它三步可以手动启动也可以用Linux的System系统调用做自动启动自动启动就是在RTLinux启动后自动加载下面的脚本文件#!/bin/bashecho"开启rtlinux"RTLinuxstartecho"启动数控系统控制层"insmodmanage_thread.oinsmodplc_thread.o61 基于嵌入式RTLinux的通用数控平台的构建insmodcontrl_set.oinsmodfeed_fifo.oinsmodmanucontrol.oinsmodoutput_thread.oecho"启动数控系统管理层"shmanagecnclayerecho"启动系统界面层"shcncguiecho"数控系统启动完成"5.5.2手动增量控制过程系统启动后用户可以通过图形用户界面和控制面板进行数控机床的基本操作如数控G代码的编辑通过手动控制来对刀或者自动运行G代码进行数控加工本小节将详细描述手动增量控制的运行机制当用户在手动控制窗口中输入合理的进给速度和步长值后按控制面板上的X,X-,Y,Y,Z,Z中的任意一个按钮指定的机床轴将朝指定的方向进给指定的距离这一过程中:首先是内核中的键盘驱动程序通过中断的方式获得控制面板按键键值当驱动程序检测到有按钮被按下时将键值传递给Qt键盘驱动程序继续等待其它按键中断于是界面层得到了这一某个按钮被按下的信息此时Qt通过信号与槽机制响应相应的按键然后Qt把这一信息送到连接管理层(总控模块)的管道然后给总控模块发SIGUSR1信号一直被挂起的总控模块由于信号被唤醒调度线程的SIGUSR1信号处理函数被调用该函数从管道中读取按钮信息并调用手动功能模块处理手动功能模块完成相应任务后调度线程激活内核交互线程同时挂起自身接着管理程内核调度模块将手动模块处理过的控制命令通过管道传递给控制层软CNC控制模块软CNC控制模块处于实时域当与管理层交互的管道中有数据时通过管道处理器立即被唤醒接着软CNC控制模块读取管道中的控制和数据信息并根据这些信息向与手动模块和与位控模块连通的管道发送控制命令由于位控模块优先级较高当被管道处理器激活后读取从软CNC控制模块传递来的命令从命令中得到获知当前状态为手动于是从手动模块与位控模块间连通的管道读取数据但此时由于手动模块还未执行管道为空位控模块周期性挂起62 南京航空航天大学硕士学位论文此时手动模块获得CPU资源并从软CNC模块相连通的管道中读取命令判断出用户的当前意图手动增量控制或者其它)并通过信息中的步长向与位控模块连通的管道发送数据接着位控模块由于与手动模块相连接的管道中有数据而周期性运行往与信号输出模块相连接的管道发送数据信号输出模块优先级最高当到下一周期来临时从与位控线程相连通的管道中读取数据并通过PC104总线传递给精插补器同时挂起自己等待下一次硬件中断的激活当按钮松开时界面层将数据传递给管理层管理层将控制命令传递给软CNC控制模块软CNC控制模块将控制命令通过管道发给手动模块手动模块通过管道处理器响应命令并自我挂起这样控制层中位控模块信号输出模块因为各管道为空所以都挂起等待其他命令的到来至此系统完成了一次手动增量控制5.5.3自动加工运行过程自动运行是数控系统最核心最复杂的功能当用户在图形界面中选定欲运行的G代码文件后按控制面板上的循环启动按钮自动运行启动开始数控加工直到加工完毕或者用户中途停止运行本小节试图说明原型系统自动运行功能的运行机制自动运行的开始阶段与上一小节的增量控制完全相同即通过系统的通信过程内核把控制面板上的操作信息(哪个按钮被按下)传给总控模块GUI进程把相关信息(如G代码文件名当前系统坐标当前激活窗口等等)传给总控模块然后由总控模块来决定到底要做什么(出错处理增量控制还是自动运行等等)此处总控模块应该判断出执行自动运行此后系统的动作就和上一节的不一样了管理层总控模块调用译码模块作译码处理确认译码无误后对译码结果进行刀补和前瞻处理把刀补和前瞻处理后的结果送入内核的插补准备管道最后通过内核交互线程发送启动自动运行命令给内核之后总控模块挂起内核收到命令后软CNC模块运行并根据控制命令唤醒插补模块和位控模块此时优先级较高的位控模块被与软CNC模块相连的管道处理器唤醒并从管道中读取命令根据状态和控制命令此时为自动运行状态位控模块确定从与插补模块相连接的管道中取数据当手动状态时从与手动模块相连接的管道中读取数据由于与插补模块通信的管道位控位控模块周期性挂起接着插补模块被与软CNC模块相连接的管道处理器唤醒它从与管理层中插补准备管道中读取刀补和前瞻处理后的数据并对数据进行插补将插补结果发到与位控模块相连的管道中从而位控模块得以运行根据各编码器的反馈结果通过PC104总线获得对数据进行修正最后将修正过的数据通过与信号输出模块相连的管道发63 基于嵌入式RTLinux的通用数控平台的构建给信号输出模块最后由信号输出模块通过PC104总线传给精插补器传给精插补器后信号输出模块挂起等待下一次中断当信号输出模块挂起后位控模块得以运行继续将修正过的数据写入位控管道当位控管道写满后位控模块周期性挂起接着插补模块得以运行插补模块进行插补并将插补后的数据写入插补位控管道当插补位控管道写满后插补模块挂起此时管理层中信号输出模块处于挂起状态等待中断唤醒位控模块插补模块由于上游管道已满处于周期性挂起状态软CNC管道也处于挂起状态系统的非实时层得以运行对数据进行刀补前瞻等并不断将刀补前瞻结果写进插补准备管道同时运行于用户空间的GUI进程也不断地从位置反馈管道和与实时域的共享RAM中获得了当前的位置和状态信息并刷新图形用户界面当精插补器处理完后给系统发一中断系统中控制层输出信号模块被中断唤醒将位控输出管道中的数据发往精插补器后自我挂起等待下一次中断这样周而复始就完成了系统的自动运行过程并保证了整个系统的连续运行那么各线程什么时候结束如何结束呢插补准备管道中最后一个数据是设置有结束标志的当插补模块取得这个数据时就会知道这是自己的最后一个任务它将所有数据插补结束后在最后一组发往位控模块的数据中放入结束标志并停止自己的运行位控输出线程对结束标志作相同的处理最后GUI进程也因结束标志而停止界面刷新至此自动运行完毕系统又回到了初始状态5.6本章小结本章详细介绍了基于RTLinux的软数控系统实现原理对界面层管理层和控制层中各模块的功能及实现原理作了比较全面的分析介绍最后又从整体上分析了系统的启动过程增量控制过程和自动运行过程64 南京航空航天大学硕士学位论文第六章软件开发与调试软件的开发与调试依赖于其所在的平台在不同平台上进行软件开发和调试的方式方法也不一样这一章将对在Linux平台上进行软件开发进行介绍同时结合本系统的调试过程对基于Linux的应用软件调试技术和内核调试技术进行了研究6.1软件开发在Linux平台上进行软件开发的基本过程如图6.1所示与在Windows平台上开发的过程大体相同但在Windows平台上有良好的开发环境它将预处理编译链接和运行都整合进了开发环境的后台程序员编辑完程序后点击运行按钮其预处理编译链接自动完成而在Linux平台上程序员必须对程序预处理编译链接和运行的过程非常了解才能得到生成最终的可执行文件开始编辑源程序FILE1.C编译有目标程序有错FILE1.O无连接执行文件FILE1库函数和其他运行目标文件不正确正确正确结束图6.1Linux开发过程6.1.1Linux中的文本编辑器1viLinux系统提供了几种文本编辑器可供选择其中最著名的是vi编辑器vi对文件所做的修改是在文件的副本上进行的并不直接对源文件本身进行修改如果在编辑过程中发生了错误可以将修改的结果全部放弃重新回到原始的文件以下是[35]进入vi的命令和vi的界面参见图6.2vi的具体使用可以参考相关的文档[root@localroot]#vihello.c65 基于嵌入式RTLinux的通用数控平台的构建图6.2vi编辑器(2)EmacsEmacs大概是Linux下最强大的文本编辑工具了Linux的许多设置工作都必须编辑配置文件才能完成因此掌握Emacs的使用是非常重要的Emacs功能非常强大[35]可以通过参考资料进行学习这里就不再赘述6.1.2GNUCC(简称为GCC)编译器GNUCC(简称为GCC)是GNU自由软件基金会项目的编译器套件它可以编译用CC++JavaFORTRANObjcAda等语言编写的程序你能在Linux的发行光盘上找到它,也可以在网上下载新的版本的源码进行安装安装新版本的GCC需要系统有旧的CC或GCC编译器如果系统上没有编译器不能安装源代码形式的GCC可以在网上找一个与系统相适应的二进制形式的GCC软件包来安装使用GCC有很多个编译选项其中只有一部分选项会经常使用如表1除了这些选项外还有其它很多选项不经常使用可以在命令行上键入mangcc查阅它们的使用方法另外有的GCC选项包括一个以上的字符所以要为每个选项指定各自的连字符-不能在一个连字符后跟几个选项例如-p-g和-pg选项执行结果是不一样的前者是建立剖析信息并且把调试信息加入到可执行的文件里后者只建立剖析信66 南京航空航天大学硕士学位论文息表6.1基本GCC常用选项表选项功能说明-C编译时跳过汇编和连接缺省扩展名是.O-S产生了汇编语言文件后停止编译缺省扩展名是.S-E仅对输入文件进行预处理被送到标准输出不是存储在文件里-O对源代码进行基本优化使程序执行得更快是优化选项-O2产生尽可能小和尽可能快的代码比-O慢是优化选项-G产生调试信息是调试和剖析选项-P建立剖析信息是调试和剖析选项-PG在程序里加入额外的代码产生剖析信息以显示程序的耗时情况6.1.3GNUmake在编写小型的Linux应用程序时一般情况下只会有少数几个源文件这样程序员能够很容易地理清它们之间的包含和应用关系但随着软件项目逐渐变大对源文件的处理也将变得越来越复杂起来此时单纯依赖手工方式进行管理的做法就显得有些力不从心为此Linux专门为软件开发提供了一个自动化管理工具GNUmake通过它程序员可以很方便地管理软件编译的内容方式和时机从而使程序员能够把主要精力集中在代码的编写上Make将整个软件项目的代码分开放在几个小的源文件里在改动其中一个文件的时候可以只对该文件重新进行编译然后重新连接所有的目标文件对于那些由许多源文件组成的大型软件项目来说全部重新进行编译需要花费很长的时间而采用这种项目管理方法则可以极大地提高工作效率让原本复杂繁琐的开发工作变得简单Make工具最主要也是最基本的功能就是通过Makefile文件来描述源程序之间的相互关系并自动维护编译工作而Makefile文件需要按照某种语法进行编写文件中需要说明如何编译各个源文件并连接生成可执行文件并要求定义源文件之间的依赖关系6.2软件调试软件调试是系统中相当重要的步骤调试的过程是一个较为艰辛的过程它往往占用整个项目约60的开发周期本系统各模块分布在非实时域和实时域在Linux67 基于嵌入式RTLinux的通用数控平台的构建系统上非实时域编程主要是应用程序编程而实时域上主要是进行内核编程因此在不同域上工作的模块其调试方法和手段不一样接下来就本系统中调试方法和手段进行介绍6.2.1非实时域模块调试在本系统中非实时域模块主要实现仿真文件解释刀补前瞻和界面显示等功能主要利用C++语言进行编程程序代码量多调试方法主要是打印调试和GDB调[36-40]试一打印调试在非实时域打印调试主要是通过printf()和fprintf()来实现printf()将相关信息打印到终端软件开发人员可以查看程序当前运行状态和位置fprintf()将信息打印到相关文件软件开发人员可以通过它来建立非实时域运行日志打印调试的优点是软件开发人员不需要中断程序的运行即可跟踪程序了解程序的执行结果和状态是程序调试过程中的一种常用调试方法为了方便打印调试的开启和关闭本系统中在非实时域头文件中定义如下宏#undefDEBUG//#defineDEBUG#ifdefDEBUG#defineDPRINTF(x...)printf("nonrealtime:"##x)#else#defineDPRINTF(x...)#endif当系统需要跟踪调试时使用#defineDEBUG语句预定义DEBUG当系统不需要跟踪调试时使用#undefDEBUG语句去掉对DEBUG的定义这样就实现了对跟踪调试的开关控制二GDB调试在非实时域另一种常用的调试方法就是GDB调试GDB是Linux操作系统中包含的调试器它是一个用来调试C语言程序工具GDB所提供的主要功能有能监视程序中变量的值能设置断点以使程序在指定的代码行上停止执行能单步地执行程序为了使GDB正常工作必须使程序在编译时包含调试信息调试信息包含程序里的每个变量的类型和在可执行文件里的地址映射以及源代码的行号GDB利用这些信息使源代码和机器码相关联如果要运行GDB调试器则在命令行上键入GDB并按回车键就可以运行GDB了68 南京航空航天大学硕士学位论文GDB启动后屏幕上有一些提示信息最后一行是GDB的提示符gdbGDB支持很多命令能实现不同的功能这些命令从简单的文件装入到允许检查所调用的堆栈内容的复杂命令表2列出了在使用GDB调试程序时会常用到的一些命令选项表6.2基本GDB命令表选项功能说明file装入想要调试的可执行文件kill终止正在调试的程序list列出产生执行文件的源代码的一部分next执行一行源代码但不进入函数内部step执行一行源代码而且进入函数内部run执行当前被调试的程序quit退出GDBwatch监视一个变量的值而不管它何时被改变break设置断点使程序执行到这里时被挂起make不退出GDB就可以重新产生可执行文件shell不离开GDB就执行外部命令可以在命令行上键入gdb-h得到一个有关这些选项的说明的简单列表下面以一个例子来说明gdb的使用被调试的程序源文件名yhsj.c是GDB的典型应用被调试的程序执行时在屏幕上显示一个杨辉三角#defineN11main(){inti,j,a[N][N];for(i=1;i中定义了八种可用的日志级别字符串下面以严重成都的降序来列出这些级别:KERN_EMERG用于紧急事件消息它们一般是系统崩溃之前提示的消息KERN_ALERT用于需要立即采取动作的情况KERN_CRIT临界状态通常涉及严重的硬件或软件操作失败KERN_ERR用于报告错误状态设备驱动程序会经常使用KERN_ERR来报告来自硬件的问题KERN_WARNING对可能出现问题的情况进行警告这类情况通常不会对系统造成严重问题KERN_NOTICE有必要进行提示的正常情形许多与安全相关的状况用这个级别进行汇报KERN_INFO提示性信息很多驱动程序在启动的时候以这个级别打印出它们找到的硬件信息KERN_DEBUG用于调试信息未指定优先级的printk语句采用默认级别是DEFAULT_MESSAGE_LOGLEVEL根据日志级别内核可能会把消息打印到当前控制台上这个控制台可以是一个字符模式的终端一个串口打印机或是一个并口打印机当优先级小于console_loglevel这个整数变量的值消息才能显示出来而且每次输出一行变量console_loglevel的初始值是DEFAULT_MESSAGE_LOGLEVEL而且还可以通过sys_syslog系统调用进行修改我们也可以通过对文本文件/proc/sys/kernel/printk的访问来读取和修改控制台的日志级别例如可以输入下面的命令使所有的内核消息显示到控制台上#echo8>/proc/sys/kernel/printk这样我们就可以有区分的在控制台上打印我们所需要的信息了在本系统中的实时域打印调试信息的开启和关闭是利用下面的宏实现72 南京航空航天大学硕士学位论文#undefDEBUG//#defineDEBUG#ifdefDEBUG#defineDPRINTK(x...)printk(KERN_DEBUG"realtime:"##x)#else#defineDPRINTK(x...)#endif6.2.3系统联调在各个功能模块单独调试完毕后便进入系统联调的阶段这一调试阶段的主要目的是将各个独立的功能模块整合起来形成可以整体应用的软件系统由于系统功能较多虽然各个功能模块已经调试通过但在联调过程中也不可避免地出现其它的问题如实时域模块优先级分配不当PC104总线数据接收不到等以下举例说明一些调试过程中需要注意的问题1在系统联调阶段应该规划好各模块间数据管道的大小由于各个模块在单独调试的过程中不会出现长时间等待管道数据的问题而在系统联调中各模块处于上下游的关系这个时候容易造成数据断流现象这时应该规划好各模块间数据管道的大小以保证整个系统的顺畅运行2在实时域控制层的联调过程中要注意优先级和运行周期的合理分配实时域各模块都是强实时性模块同时各模块间又相互依赖要保证加工过程的顺利进行防止在加工过程中出现停机现象应合理分配各模块的优先级同时根据各模块的任务量和插补周期分配好各周期任务的运行周期3在同精插补器的硬件联调过程中通过PC104总线传递和接收数据时容易出现数据读不到或数据无法传下去的问题这时需要对软件中使用的端口操作函数进行修改同时还要对精插补器FPGA中的程序进行修改此时可利用示波器对精插补器和PC104总线上各信号进行测量以保证数据的正确性4在系统联调过程中软件调试除了采用打印调试方法外还可采用查询调试和监视调试在调试过程中可以用如下方法对系统进行查询在/proc文件系统中创建文件使用驱动程序的ioctl方法以及供sysfs导出属性等图6.5为整个系统的硬件调试工作台73 基于嵌入式RTLinux的通用数控平台的构建图6.5系统硬件调试平台6.3本章小节本章介绍了本系统软件所采用的开发环境以及开发语言讨论了系统的软件测试及调试方法阐述了在各个功能模块调试和系统联调过程中需要注意的问题经过这几部分的软件调试已成功完成了本系统的原理样机74 南京航空航天大学硕士学位论文第七章总结展望7.1论文总结随着PC技术的发展数控系统正进入一个崭新的阶段基于PC的全软件CNC在全软件数控系统中CNC系统的各项功能包括插补位控和PLC等均由软件模块来实现而硬件部分通过标准化的通用接口卡完成PC与伺服驱动和外部I/O间的接口用户可以在PC机上通过软件开发或配置所需的各种数控功能构成各种类型的高性能数控系统其显著优势在于全软件CNC具有很高的性能价格比良好的通用性灵活性扩展性和开放性有利于系统进一步向智能化网络化方向发展根据数控加工原理和工艺对数控系统的要求本文利用PC104研究开发了基于实时RTLinux的全软件数控系统平台主要研究工作和成果如下1分析了目前广泛用于基于PC的数控系统的DOS和Windows平台的特点及其在实时性和多任务能力方面存在的不足指出RTLinux是开发数控系统的理想的软件平台2根据对数控系统功能和结构的分析对数控系统进行了实时性划分提出了基于RTLinux的通用数控平台系统的整体结构同时设计出了数控平台的三层模块化系统结构根据Linux和RTLinux编程资源规划设计了各层次模块间的通信方式根据数控系统内部的数据和命令信息流设计定义了各模块间的接口协议并给出了该接口协议的实现方法和部分代码3根据数控系统的功能与性能要求对LinuxRTLinux内核进行了定制并详细介绍了其在PC104上的移植过程对移植过程中容易出现的问题进行了分析和介绍4在平台实现中详细讨论了管理层模块中的Linux编程关键技术和控制层模块中的RTLinux编程关键技术同时利用Qt完成了系统界面层的开发利用C完成了管理层与控制层的开发整个系统运行于FrameBuffer上不需要Linux桌面系统以及XLib的支持减少了系统对内存和存储空间的要求5完成了样机系统软件的开发与调试工作包括各个功能模块的调试以及系统联调联调试验表明该软件数控系统平台达到了预期设计要求7.2研究展望本文主要是研究开发基于RTLinux的全软件数控系统虽然作为原型样机已经达到的预期的设计目标但由于时间有限系统在软件设计上和性能上仍有许多值得完75 基于嵌入式RTLinux的通用数控平台的构建善的地方主要包括以下几方面1软件结构的进一步完善和优化数控系统软件非常庞大系统软件未达到理想的模块化和层次化在今后的工作中应对此进行改善在系统的逻辑结构上真正实现模块化使得系统可以方便地进行扩展和维护在系统的时序结构上应对开放式数控系统的多任务时序关系进行进一步深入研究从理论上确定任务间数据缓冲区的大小保证CPU时间利用的充分性和有效性从而在尽可能低的成本上产生尽可能高的性能2现有软件功能模块的完善原型系统实现的部分功能受实验条件限制还未做功能性调试如换刀手摇脉冲发生器等功能需要进一步调试和完善原型系统的仿真系统采用线架结构实现三维显示效果不是很好可以用OpenGL技术实现的模块对现有模块进行替换从而提高系统的仿真效果3系统可靠性和稳定性的完善由于系统最终要工作在恶劣的工业控制环境因此对于系统的可靠性稳定性和可维护性必须在实际的应用过程中不断的完善和改进76 南京航空航天大学硕士学位论文参考文献[1]李来水基于PC的开放式数控系统的研究[硕士学位论文]南京南京航空航天大学1999[2]张春晓基于实时Linux平台的CNC系统研究与实现[硕士学位论文]南京南京航空航天大学2002[3]康书杰NURBS曲线实时插补技术研究[硕士学位论文]南京南京航空航天大学2007[4]王爱玲张吉堂吴雁现代数控原理及控制系统北京国防工业出版社20029-12[5]戴晓华王文等开放式数控系统研究综述组合机床与白动化加工技术2000.115-7[6]游有鹏开放式数控系统关键技术研究[博士学位论文]南京南京航空航天大学2001[7]朱心红PC平台开放式数控系统前景展望机械制造2002.102527[8]杨晓京张仲彦李浙昆等几种开放式数控系统的分析与研究制造业自动化2002.118-21[9]夏田文怀兴魏康民基于PC的开放式数控系统体系结构的分析航空制造技术2002.1262-63[10]迟永琳汤季安等全软件数控系统MM现代制造200315110-112[11]AutomationIntelligence,Inc.Sofrware-BasedMulti-AxisControlwithAML7,http://www.motiononline.com/home.htm[12]迟永琳明良玉吴祖育等基于WindowsNT和Linux的开放数控系统上海上海交通大学学报200337144-47[13]张蕾基于RTX的全软件数控系统的研究[硕士学位论文]燕山大学2006[14]陈友东樊锐陈五一等基于RT-Linux的开放式数控系统研究中国机械工程200314(16)1419-1422[15]李霞王永章郑佳听等开放式数控系统的关键技术研究及实现组合机床与自动化加工技术2003106-8[16]王世寰王永章路华等一种新体系结构的开放式软CNC的设计计算机集成制造系统2004102200-204[17]GoldenEH.DOSPlatformsinCNCs.ModernMachineShop199164(2)[18]张昆苍编著操作系统原理DOS篇北京清华人学出版社1994[19]陈家新彭丁嵩DOS环境下实时多任务调度策略的实现计算机应用2000.545-47[20]谢明红蔡伯阳朱国力段正澄基于Windows平台的CNC实时多任务设计机械与电子2000.136-3777 基于嵌入式RTLinux的通用数控平台的构建[21]迟关心Windows环境下实时数据采集与控制程序的开发微型机与应用1998(6)[22]张正勇熊清平李作清Windows系列平台下的实时控制研究机电工程1999(3)[23]孙勇张东亮基于Windows95/NT的开放式数控系统实时性分析机械与电子2000(1)[24]郭彬Windows实时处理中断程序的设计微型机与应用1998(7)[25]阳代平陈幼平周祖德魏任选基于Windows95/NT环境下的数控系统驱动程序的研究与开发机械与电子1995(5)[26]朱顺先基于LINUX的PCNC系统的实现及其DNC系统的集成研究[硕士学位论文]南京南京航空航天大学2004[27]郭晋峰基于RTLinux的数控系统关键技术研究及软件开发[硕士学位论文]华侨大学2001[28]吴寒基丁RTLinux的开放式数控系统设计与实现[硕士学位论文]华侨人学2002[29]VictorYodaikenRTLinuxwhitepaperhttp://www.rtlinux.org/documents[30]钟利明RTLinux系统实时性能评测及相关问题的研究[硕士学位论文]中国科学院沈阳计算技术研究所2005[31]王亚刚嵌入式Linux系统移植与裁剪技术研究[硕士学位论文]西北大学2005[32]王子强刘海燕李媛州Linux下图形用户界面程序的开发与实现计算机应用与软件20056[33]汤姆斯旺深入学习GNUC++forLinux编程技术北京:电子工业出版社2000,9[34]VictorYodaikenTheRTLinuxmanifestohttp://www.rtlinux.org[35]范永开杨爱林Linux应用开发技术详解北京人民邮电出版社2006.5[36]金西黄汪Linux小型化技术计算机工程2001(1)18-20[37]袁臻李新民实时Linux的研究与实现计算机应用研究2000(11)28-2[38]鲍忠贵Linux操作系统中断与工/0设备驱动程序设计与实现飞行器测控学报2000(2)81-85[39]朱达宁李彦吉华等基RTLinux的全软件数控系统计算机集成制造系统2004.121571-1576[40]MichaelK.Johnson,ErikW.Troan,LinuxApplicationDevelopment,北京电子工业出版社2005.11[41]张明亮解旭辉李圣怡开放性数控技术的发展机电工程1999(4)65-67[42]RaymondE.Chalmers,Open-architectureCNCcontinuesadvancing,ManufacturingEngineering,2001,126(7)48-52[43]FrederickM.Proctor,JamesS.Albus,Openarchitecturecontrollers,IEEESpectrum,1997,34(6)60-6478 南京航空航天大学硕士学位论文[44]雷为民乔建中李本忍关于软件数控的一些基本构想小型微型计算机系统199920(2)81-87[45]陈金成多轴联动高性能数控加工的运动优化与复杂轨迹实时控制策略研究[博士学位论文]上海上海交通大学2001[46]StoutP,LenoardRTheIntroductionofDNCTechnologyasaPartialApproachtoAchievingtheObjectivesofCIMComputer-AidedEngineeringJiurna1,1989(2)[47]陈蔚芳王宏涛机床数控技术及应用科学出版社2005146-159[48]王润孝秦现生机床数控原理与系统西安西北工业大学出版社200048-78[49]周慧比较积分法插补过程的研究与仿真机床与液压2004(13)70-71[50]StatioT,TakahashiT.NCMachingwithG-bufferMethod,ComputerGraphics,1991,25(4)[51]唐才峰基于DSP的雕刻机数控系统研制与开发[硕士学位论文]南京南京航空航天大学2005[52]叶伯生计算机数控系统原理编程与操作武汉华中理工大学出版社1998111-118[53]叶伯生等编著计算机数控系统原理编程与操作武汉华中理工大学出版社1999.5[54]严乐乐基于DSP的运动控制器的软件开发[硕士学位论文]南京南京航空航天大学2007[55]王亚军蒲洁何建国CNC软件系统设计的可靠性与实时性技术组合机床与自动化加工技术2003(5)4-6[56]P.K.Wright,I.Greenfield,Openarchitecturemanufacturing:theimpactofopen-systemcomputersonself-sustainingmachineryandthemachinetoolindustry,ProceedingsofManufacturingInternational,1990,241-4779 基于嵌入式RTLinux的通用数控平台的构建致谢本论文是在导师游有鹏教授的悉心指导和关怀下完成的在两年多的学习生活中导师渊博的知识敏锐的洞察力创造性的思维方式忘我的工作作风使我受益匪浅值此论文完成之际谨向导师致以深深的敬意和衷心的感谢在课题的选题方案论证过程中得到了机电学院503教研室赵东标吴洪涛王化明等各位老师热心的帮助和指导在此表示衷心的感谢感谢同实验室的张远孙禾风吕孟军赵毅杨文安以及何均博士在科研工作及论文撰写过程中给予的帮助感谢我的女朋友叶蘅正是有了她的鼓励和支持我的论文才得以顺利的完成感谢父母一直以来对我的支持最后感谢所有给予我关心和帮助的人80 南京航空航天大学硕士学位论文硕士期间发表的学术论文[1]吴木林游有鹏液晶显示控制器S1D13305与LPC2210的接口设计南京航空航天大学第九届研究生学术会议81 基于RTLinux的通用数控平台构建作者:吴木林学位授予单位:南京航空航天大学相似文献(10条)1.学位论文骆学农实时操作系统QNX内核分析及其在数控系统主控结构中的应用1997在实时操作系统上开发自动控制应用,是当今工业用计算机的特点和趋势,它具有良好的开放性和可扩充性.该文就是介绍一种流行的实时多任务操作系统QNX,分析了其微内核结构,它的多任务特点,它的基于消息改善的进程同步和进程通讯方法以及QNX的开发环境;在此基础上提出了QNX的一个应用实例--开放性数控系统的主控结构的研究.介绍了数控系统的多任务原理.笔者用qnx消息改善机制实现多通道数控机床主控结构.最后提出笔者对QNX的使用体会和它的几点欠缺.2.期刊论文杨代华.陈志辉.YANGDaihua.CHENZhihui基于实时操作系统μC/OS-Ⅱ的数控系统研制-制造技术与机床2007,""(12)详细介绍了μC/OS-II实时操作系统在C8051F124单片机上的移植,并设计了一个基于μC/OS-II实时操作系统的数控系统的软硬件结构,并给出了数控系统软件模块的任务划分,在此基础上实现了嵌入式数控系统.3.学位论文李涛基于PC104总线的嵌入式数控系统的研究2008当前,数控系统正逐步向着灵活性、组件化、可重构的开放式体系结构方向发展。软件开发新技术对开放式数控系统进行研究,已成为一种趋势。当前,数控系统大多基于PC平台,相对于PC平台的研究模式而言,采用嵌入式体系结构设计开放数控系统,是一个全新的尝试。本文以此为目标进行了研究,构建了基于PC104总线的数控系统平台,可满足实际需要。研究内容主要包括以下几方面:1.硬件方面:设计了数控伺服系统和主轴驱动系统;为了实现数控系统对机床伺服系统和主轴控制,又设计了具有定时(Timer)、多路开关量输入输出(I/O)、数模(D/A)转换功能的PC104总线接口板卡。2.在嵌入式实时操作系统中,分析了嵌入式实时操作系统的体系结构,根据嵌入式实时操作系统的原理,提出了CNC系统上的实时操作系统的实现方案,论述了数控系统应用嵌入式实时操作系统的必要性和可行性。分析了Windows操作系统结构特点和当前在Windows操作系统下实现实时应用的各种方案,根据实时操作系统的原理,搭建了实时操作系统编程模型,结合外部定时中断电路以及核心层VxD设备驱动程序开发,解决了Windows操作系统难于应用于实时控制的难题。3.通过对设备驱动层的框架设计和设备驱动层设计,把设备驱动层分成控制、交互和连接三大功能模块,尤其针对交互驱动中的键盘驱动设计与显示驱动设计问题进行研究。4.本文对插补的原理和算法作了简单分析,重点分析了适合三坐标经济型数控系统的脉冲增量插补算法。给出了两种不同的脉冲增量插补算法一逐点比较法和数字积分法。最后,作者对本文的研究工作进行了总结,并对基于PC104总线的嵌入式数控系统的发展作了展望。4.学位论文万加富面向软数控系统的混合任务调度理论研究2008开放式数控系统主要有三种结构,即专用CNC+PC、通用PC+运动控制器和软数控系统。其中软数控系统是采用多任务实时操作系统,将运动控制部分与管理部分集成到一个硬件平台上,满足数控系统在功能方面和非功能方面(主要表现在实时性)的要求。这种结构形式的数控系统,其主要功能部件均表现为应用软件的形式,并且软件实现的灵活性和硬件平台的无关性将有利于系统实现更深入的开放性,这是数控系统实现形式上的一种技术变革。但是硬件功能软件化增加了软件任务的数量和种类,无疑对系统任务的管理和调度提出了更高的要求。由于软数控任务具有混杂性、并发性及相关性等特点,目前的调度理论并不能很好的满足软数控任务的实施要求。为此,本文提出了面向软数控系统的混合任务两级调度策略和模糊反馈调度算法,并且通过基于模型的仿真试验量化了软数控任务的时间特性对加工精度的影响,这为软数控的任务调度奠定了理论基础。主要研究内容包括以下几个方面:软数控系统是典型的混合任务系统,时间触发和事件触发并存。本文针对软数控的混合任务调度问题,提出一种两级结构调度算法:对周期性实时任务采用时间触发,非周期性实时任务则采用事件触发。周期性实时任务又分两种形式实现,一种方法是将每个周期性实时任务对应一段程序模块,在一个线程中实现;另一种方法是每个周期性实时任务对应一个实时线程,在不同的线程中实现。文中分析了混合任务模型并定义相关概念,然后对调度策略的架构、调度算法、可调度性、抖动、调度时标选择等分别进行研究,采用WindowsCE.NET实时操作系统,结合试验评估和液压机控制系统项目,分别进行了调度策略的验证,结果表明该方法能提高混合实时任务的确定性,减小抖动,能很好的满足软数控任务调度需求。另外,文章还讨论了调度时标间隔对处理器利用率和周期分辨率的影响。在软数控任务实施过程中,由于受系统资源限制和处理器利用率的影响,导致不确定性因素的增加(主要表现为时间的不确定性),直接影响控制系统的性能,从而引起软数控系统的加工精度下降。本文为了量化软数控实时任务的不确定性与加工精度的关系,提出一种基于模型的仿真试验方法。研究了采样抖动、输入-输出抖动、数控任务可调度性及加工误差评估等相关理论,建立软数控系统加工误差分析的仿真模型。对任务抖动、任务不可调度及非周期性实时任务等与加工误差的相关性进行仿真,结果表明采样抖动为任务周期的60%,加工误差达4.15%;输入-输出抖动为任务周期的60%,加工误差达1.26%;12.5%的事务不能在时间限内完成,加工误差达7.78%。该结果体现了软数控实时任务的时间特性与加工误差的相关程度,并且表明不可调度事务会引起较大的加工误差,这为减小任务实施过程中的不确定性引起的加工误差提供了理论依据。在研究任务时间特性与加工精度量化关系的基础上,为了提高软数控系统的加工精度,提出了面向软数控的模糊反馈调度算法。文章对模糊反馈调度的结构、输入量、输出量及模糊调度规则等进行研究,分析了模糊反馈调度的决策和判决方法,并且通过实例比较寻求到最适合于软数控任务模糊反馈调度的判决方法。在此基础上,求出调度响应表,仿真试验结果表明该算法能将加工精度提高一个数量级,从而验证了模糊反馈调度算法的有效性。最后,应用本文提出的混合任务两级调度策略,在系统仿真验证的基础上,实现了基于WindowsCE.NET的软数控混合任务的具体实施。首先,给出基于WindowsCE.NET的软数控系统的实现架构及任务层次,并研究了软数控任务的特性关系。然后,通过对比仿真试验方法,验证了两级调度策略在软数控系统中的有效性。最后,讨论了任务在实施过程中关键任务周期的选择,并在软数控硬件平台上实现了混合任务的运行,实测任务波形表明,周期性实时任务具有很好的确定性,非周期性实时任务也能及时响应。因此,本文提出的调度策略在软数控系统中的应用是切实可行的。本文提出了混合任务的两级调度策略和面向软数控任务的模糊反馈调度算法,采用基于模型仿真的加工误差分析方法,量化了软数控任务时间特性与加工精度的关系,这为软数控系统的进一步发展奠定了坚实的基础,对提升我国装备制造业的技术水平具有重要意义。5.期刊论文王太勇.王涛.杨洁.许爱芬.赵丽.李波.胡世广.WANGTai-yong.WANGTao.YANGJie.XUAi-fen.ZHAOLi.LIBo.HUShi-guang基于嵌入式技术的数控系统开发设计-天津大学学报2006,39(12)针对基于PC的数控系统的不足,提出了基于嵌入式微控制器和嵌入式实时操作系统的数控系统开发设计的新方法,旨在增强数控系统运行的稳定性和任务调度的实时性.设计了以MC68F375和MCX314为双CPU架构的硬件开发平台,规划出了基于VxWorks的层次化软件结构体系和任务调度运行机制,设计了一种引导型的二次开发平台的理论模型,在此基础上设计出了TDNCM4数控系统的原型机,并将其应用于四轴加工中心TDNC-M40A的设计上,探索出一条数控系统开发设计的新途径.6.学位论文李小辉嵌入式数控系统开发平台的研究2006数控系统正逐步向着灵活性、组件化、可重构的开放式体系结构方向发展.软件开发新技术对开放式数控系统进行研究,已成为一种趋势.当前,数控系统大多基于PC平台,相对于PC平台的研究模式而言,采用嵌入式体系结构设计开放数控系统,是一个全新的尝试.本文以此为目标进行了研究,通过分析现场加工特征及嵌入式开放结构,构建了基于嵌入式MCU的数控系统平台,可满足实际需要.研究内容主要包括嵌入式实时操作系统、CNC设备驱动和应用程序的数据处理等方面.在嵌入式实时操作系统中,分析了嵌入式实时操作系统的体系结构,根据嵌入式实时操作系统的原理,搭建了实时操作系统编程模型,并且提出了CNC系统上的实时操作系统的实现方案,论述了数控系统应用嵌入式实时操作系统的必要性和可行性.在CNC设备驱动中根据设备驱动原理和数控系统的分层分块原理,提出了用以建立软硬件之间安全简便的交互接口,并具体设计了数控系统的主要驱动模块,通过对设备驱动层的框架设计和设备驱动层设计,把设备驱动层分成控制、交互和连接三大功能模块,尤其针对交互驱动中的键盘驱动设计与显示驱动设计和连接驱动中的网络连接与底层通讯的问题进行研究.在应用程序的数据处理中针对采用面向对象的程序设计技术,将每个应用程序分解为独立的功能体,每一个功能体就可以简单的看成由操作和数据构成的对象实体,引出了数据流的概念,又提出了依据数据功能和用途来划分数据流模块的数据管理方案,为了最大限度加快数据显示的速度和优化图形用户界面,提出把显示数据单独拿出来,并对其模块设计,工作流程和数据结构进行研究.7.学位论文陈海鹏基于MC68K平台和RTOS的嵌入式数控系统的研究2004数控技术在现代制造系统中扮演着十分重要的角色,目前的数控技术正向着高精度、高速度、柔性化和网络化等方向发展。随着微电子技术的不断进步,为新一代数控系统的发展提供了广阔的空间,本文介绍了一种基于32位微控制器MC68F375和实时性操作系统VxWorks的嵌入式数控系统的设计方案。论文首先详细介绍了数控系统的历史,现状及发展趋势,并对现有的数控系统所存在的问题进行了分析。同时,针对现有数控系统所存在的问题,提出了基于MC68F375和实时性操作系统的数控系统的设计思路,并阐述了其在数控领域应用的优势。其次,论文对MC68F375的特点、结构及其性能进行了详细的分析,重点阐述了基于MC68F375和CPLD的嵌入式数控系统的硬件电路设计。按照模块化设计方法,把复杂的数控系统细化为功能相对独立的子系统,再对数控系统的各个子系统分别进行设计,如:电源模块,存储器模块,控制模块,通讯模块,交互模块,采集模块等。再次,论文详细阐述了系统的软件设计方案。在对数控系统的整体结构和功能进行细分的基础上,将实时多任务管理、调度的方法即嵌入式系统内核VxWorks应用到数控系统中,同时详细论述了基于VxWorks的数控系统的软件设计方法。第四,为了提高系统的稳定性和可靠性,论文从电磁兼容性的角度,详细介绍了本设计中的抗电磁干扰和稳定性设计,分析了在工业现场的电磁干扰来源,并着重介绍了电路板级的电磁兼容设计。最后,论文还对本课题的研究内容进行了总结,并对数控系统的发展做了展望。8.期刊论文郑君民.赵万生.李志勇.李论.宋颖慧.ZHENGJun-min.ZHAOWan-sheng.LIZhi-yong.LILun.SONGYing-hui基于RT Linux平台的开放式电火花数控系统-计算机集成制造系统2005,11(8)针对电火花数控加工特点,采用RTLinux解决数控系统的多线程和实时性问题,根据RTLinux特点,设计了电火花数控系统总体结构,采用分层设计和模块化的方法构造了软件插补的计算机数字控制(SoftCNC),提出了以SoftCNC为基础的电火花数控加工中心;利用Linux丰富的软件资源,构造了数控系统的外围软件,即基于Flex和Bison的数控代码解释器、基于客户机/服务器和浏览器/服务器架构的工艺数据库和图形用户界面,实现了可扩展、可配置、开放体系结构电火花数控加工系统.9.学位论文陈志辉嵌入式开放型数控系统软件设计2007制造业当中的机械制造业从来就是发达国家整个工业和国民经济的基石。机械制造业最基本的装备-数控机床又是这个基石中的关键。它是现代科学技术的最前沿-信息技术与传统机床相结合的产物,是先进制造技术的基础。数控技术,简称数控(Numericalcomrol),是利用数字化的信息对机床运动及加工过程进行控制的一种方法。现代数控技术的发展方向是高速化、高精度化、高可靠性、多功能、复合化、智能化和开放式结构。信息技术、微电子技术、自动化技术和检测技术的发展,为新一代的数控系统提供了广阔的发展空间。市场全球化的后果是竞争空前剧烈,从而要求制造商具有较强的市场适应能力,因而市场对适合中小批量加工,具有良好柔性和多功能性的制造系统的需求己逐步超过对大型单一功能的制造系统的需求。这一趋势促成了一个新概念的产生,即模块化、可重构、可扩充的软硬件系统,这就是开放式控制系统。开放式数控系统是上世纪九十年代出现的一种先进的计算机数控体系结构,具有扩展性好、开发和维护方便、运行稳定性高、能灵活适应不同需要等特点,是未来数控技术的主要发展趋势。随着现代计算机技术、微电子技术和现代控制技术的不断发展,开放式数控系统如何有效地利用这些先进的技术,多快好省地进行控制系统的开发就显得十分的必要。嵌入式系统是一种以应用为中心,以计算机技术为基础,软硬件可裁剪,适应对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。随着计算机软硬件技术的迅速发展,嵌入式系统技术日趋成熟和完善,其可靠性高、性能强、功耗低等优点促使它在工业控制、交通管理、环境检测、数控系统等众多领域中获得了广泛的应用。本文根据开放型数控系统的理论,对开放型控制系统进行探讨,并设计开发了实时嵌入式开放型数控系统。在系统硬件上,采用以高速51微控制器(C8051F124单片机)作为硬件的控制核心,嵌入式系统的控制软件使用了嵌入式实时操作系统μC/OS-Ⅱ,进行开放型数控系统的软件开发,本文主要采用C语言进行程序设计。将μC/OS-Ⅱ移植到c8051F124微控制器上之后,开发了多个任务,实现了数控系统的基本功能。以源码公开的μC/OS-Ⅱ实时嵌入式操作系统作为系统的软件核心,开发系统所需的应用软件,将μC/OS-Ⅱ实时嵌入式操作系统扩展为一个完整、实用的嵌入式数控系统,使得系统不仅具有可靠性高、稳定性好、功能强的优点,而且具有良好的可移植性和可裁剪性,便于根据实际需求进行功能的扩展和裁剪。本论文共有7章,主要包括的内容如下:第一章,绪论。综述嵌入式技术的发展概况;嵌入式数控技术的研究现状与发展方向;最后,提出本论文的研究内容和研究意义。第二章,系统总体结构介绍。本章针对嵌入式数控系统软硬件两方面进行了总体结构分析。第三章,μC/OS-Ⅱ在C8051F124上的移植及任务实现。本章介绍了基于μC/OS-Ⅱ实时操作系统的数控系统的软硬件结构,详细介绍了μC/OS-Ⅱ在C8051F124单片机上的移植过程,并给出了数控系统软件模块的任务划分及其实现。第四章,嵌入式USB-HOST设计。介绍了一种USB总线的通用接口芯片CH375,并在此基础上提出了一种外部单片机读写U盘的基本方法及其硬件设计方法,实现了与嵌入式CNC系统的数据交换。第五章,嵌入式数控系统人机界面开发。本章对嵌入式数控系统人机界面进行了分析和探讨,论述了功能模块的程序实现。第六章,数控代码解释程序设计。在分析NC代码和编译原理特点的基础上,提出了NC代码翻译模块的实现技术。第七章,总结与展望。对本研究课题进行了总结和展望。本文的系统软件结构采用模块化的思想,可根据功能需求进行剪裁,符合开放型数控的开放性要求。同时,将嵌入式实时操作系统引入到开放型数控系统开发当中,对开放型数控系统的研究和发展具有创新和现实推动意义。10.会议论文赵万生.李论.李志勇.王振龙基于实时Linux平台的电火花加工数控系统的研究2003介绍了基于实时Linux的电火花加工数控系统的研究.在分析了电火花加工对操作系统实时性需求的基础上,以实时Linux作为操作系统平台进行数控系统软件设计,实现了数控系统的低响应时间和更高的可靠性.最后,介绍了本系统的软件结构,它分为用于放电状态数据采集和运动控制的硬实时部分以及代码编译和用户界面组成的标准Linux进程部分等.本文链接:http://d.g.wanfangdata.com.cn/Thesis_D052360.aspx授权使用:上海海事大学(wflshyxy),授权号:917a0840-6025-4355-a8d1-9dec01484c02下载时间:2010年9月9日

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭