数控仿真论文基于线程局部存储技术的多通道数控系统仿.doc_第1页
数控仿真论文基于线程局部存储技术的多通道数控系统仿.doc_第2页
数控仿真论文基于线程局部存储技术的多通道数控系统仿.doc_第3页
数控仿真论文基于线程局部存储技术的多通道数控系统仿.doc_第4页
数控仿真论文基于线程局部存储技术的多通道数控系统仿.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

文章源于科技论文发表网: QQ:1003 59168 数控仿真论文:基于线程局部存储技术的多通道数控系统仿真【摘要】:在多实例多线程情况下,ActiveX组件的不同实例共享同一全局数据缓冲区,在改造集成面向过程开发的传统代码时必须修改代码以消除全部全局变量。针对该情况,使用线程局部存储技术实现全局变量的局部化,采用具有大量全局变量的实体仿真代码实现ActiveX封装。该技术已成功应用于基于工业以太网的多通道数控系统中。【关键词】:数控系统;线程局部存储;组件对象模型;ActiveX组件Simulation of Multiple Channel Computer Numeric Control SystemBased on Thread Local Storage Technology【Abstract】In multiple instance and threads runtime system,global variables of the component are shared by each instance.When usingActiveX tointegrate historical codes,such global variables must be removed by modifying source code.Aiming at this situation,this paper uses the ThreadLocal Storage(TLS)technology to realize the localization of global variables,and uses the entity simulation codes which have a large number ofglobal variables to realize the encapsulation of ActiveX.The ActiveX implementation is successfully applied in a new generation of Ethernet basedmultiple channel Computer Numeric Control(CNC)system.【Key words】Computer Numeric Control(CNC)system;Thread Local Storage(TLS);Component Object Model(COM);ActiveX component1概述组件对象模型(Component Object Model,COM)是由美国微软公司提出的一种二进制代码互操作规范,ActiveX是实现了一些特定接口(例如IDispatch)的标准COM组件。COM/ActiveX规范已成为软件业内最重要的工业标准之一。基于组件的软件构架方法通过重用已有的软件组件,可使软件开发者像搭积木一样快速构造应用软件,从而提高生产效率,使软件设计更加规范可靠。目前基于组件的软件开发方法已经在业界得到广泛应用1-2。文献3在数控系统中也使用组件技术实现加工仿真,但现有文献较少涉及多个ActiveX组件实例的情况。ActiveX组件采用类似Windows消息运行机制的单套间模型(Single Threaded Apartment,STA)来串行化对组件属性和方法的调用,即对ActiveX组件的所有调用由COM系统负责线程的同步。因此,该组件的调用是线程安全的。COM在STA套间内的线程中创建一个隐藏窗口,将套间外的线程对这个对象的调用都转变成对隐藏窗口发送消息,并由隐藏窗口的消息处理函数来实际调用组件对象,从而实现STA套间模型4。一个进程中的所有线程均处于同一虚拟地址空间,每个函数的局部变量在运行该函数的每个线程中都是唯一的,但静态和全局变量则被所有线程所共享。即在多个ActiveX组件实例的情况下,ActiveX组件的STA模型不能保证全局数据成员是线程安全的。2线程局部存储原理线程局部存储(Thread Local Storage,TLS)是Win32系统提供的一种简化多线程程序设计的底层基础技术,其实质是介入全局数据创建过程,建立并管理全局数据与线程的关联,使得全局数据为其关联线程所私有。TLS原理5如图1所示。每个进程拥有一组TLS槽口(Slot),每个槽口用序号标识,Windows 2000有1 088个这样的槽口。线程通过API函数可以分配TLS槽口,在TLS槽口存取数据,进程中使用同一个序号的不同线程可指向独立的局部堆内存中进行数据存储,即线程ID和槽口号确定了一个二维空间映射,线程通过API函数获得线程间相互独立的数据存储地址。图1也表明了采用TLS机制的具有2个ActiveX组件实例的运行时软件内存结构,进程分配了2个TLS索引值gdwTlsIndex1和gdwTlsIndex2,这2个索引值代表了TLS槽口的序号,但不同线程按照相同的序号却得到2个独立的局部堆地址,而这些数据在线程内却具有全局数据的可访问性,即每个线程有单独的全局数据拷贝,该数据对线程内的函数具有全局作用域。Win32系统中与TLS有关的API及用法如下:(1)进程初始化时分配TLS槽口:DWORD gdwTlsIndex;gdwTlsIndex=TlsAlloc();(2)调用TlsSetValue保存数据:LPVOID lpvBuffer;lpvBuffer=(LPVOID)LocalAlloc(LPTR,256);TlsSetValue(gdwTlsIndex,lpvBuffer);/保存存储区指针(3)调用TlsGetValue取数据:LPVOID lpvData;lpvData=TlsGetValue(gdwTlsIndex);/取TLS槽口中保存的存/储区指针(4)调用TlsFree释放槽口:lpvBuffer=TlsGetValue(gdwTlsIndex);LocalFree(HLOCAL)lpvBuffer);/释放存储区TlsFree(gdwTlsIndex);/释放TLS槽口3应用实例文献6提出了一种基于Z-Buffer的铣削实体加工仿真算法,华中数控HNC-32数控系统HMI的仿真系统继承自该代码,其主要结构如下:typedef structIMG8 *CIndexDEXEL;IMG16 *nearZDEXEL,*farZDEXEL;HANDLECIndexDEXEL,hNearZDEXEL,hFarZDEXEL;DEXBUF;typedef structDEXBFT;typedef structDEX;typedef structGBUFF;DEXBUF *MIL_wP;/毛坯Z-BufferDEXBFT *MIL_Tl;/刀具扫描体Z-BufferDEX *MIL_CutterDex;/刀具Z-Buffer可见,文献6将显示缓存等核心数据结构设计为全局变量,但HNC-32的设计目标是多通道数控系统,每个通道都需要一个实体加工仿真组件的实例,由于全局缓存数据为所有实例共享,因此出现的所有通道显示内容将完全一致,无法实现多通道仿真。为简化改造工作,将原系统中约50多个全局变量合并为一个结构,并将原全局变量作为其成员,即一个大的结构变量包括了50个原全局变量。按照TLS要求该结构变量必须动态创建,如下代码表明了它的声明、创建过程,代码还表明每个ActiveX组件构造时即调用API函数TlsAlloc获得一个线程索引,在局部堆申请到存储空间后用API函数TlsSetValue将该存储区地址与线程索引对应。struct GlobalValuesDEXBUF*MIL_wP;/毛坯Z-BufferDEXBFT*MIL_Tl;/刀具扫描体Z-Buffer DEX*MIL_CutterDex;/刀具Z-Bufferclass CSimuCtrlBCtrl:public COleControlDWORD dwTlsIndex;/线程索引CSimuCtrlBCtrl:CSimuCtrlBCtrl()dwTlsIndex=TlsAlloc();InitializeIIDs(&IID_DSimuCtrlB,&IID_DSimuCtrlBEvents); /初始化仿真参数如显示和投影矩阵等Int CSimuCtrlBCtrl:WXYSetCtrlObj(LPVOID obj,DWORDdwTlsIndex)LPVOID lpvData;lpvData=(LPVOID)LocalAlloc(LPTR,sizeof(GlobalValues);if(!TlsSetValue(dwTlsIndex,lpvData)AfxMessageBox(TlsSetValue error);lpvData-CtrlObj=(CSimuCtrlBCtrl*)obj;lpvData-SUR_lpSim=(MSIMUL*)malloc(sizeof(MSIMUL);return 1;在其他函数中,可以通过线程索dwTlsIndex调用API函数TlsGetValue引访问到上述大结构变量,进而访问到原全局变量,代码如下:/被OpenPatg-hFile调用读刀位文件并显示刀位轨迹int CSimuCtrlBCtrl:ShowPath(FILE*fp)GlobalValues*g=(GlobalValues*)TlsGetValue(dwTlsIndex);g-CtrlObj-GetClientRect(&rt);应用实例界面如图2所示。在TLS改造后,每个ActiveX实例均有单独的、与线程索引对应的局部堆全局变量,各个通道运行不同的代码程序并在各自通道的实体仿真上显示各自的运行结果,实现了多通道的独立执行。4结束语基于组件的应用软件结构具有先进性,但在多实例条件下必须实现各实例全局数据的独立性,线程局部存储技术是最佳解决方案。在解决传统非面向对象开发的代码改造问题时,本文提出的改造方式具有对原有代码改动少、逻辑关系清楚等优点。在华中数控基于工业以太网现场总线的新一代多通道HNC-32数控系统中的成功应用表明了该方法具有实用性。参考文献1杨建宇,杨崇俊,刘冬林,等.基于OpenGIS规范的GIS组件的设计与实现J.计算机工程,2005,31(9):54-55.2王晓宇,王平江,陈吉红,等.一种基于Python的红外图像分析软件结构J.计算机应用与软件,2008,25(11):31-33.3沈春龙.基于组件技术的三维机床建模的仿真设计J.机床与液压,2003,11(5):63-64.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论