Windows平台下串行通信的几种实现方法

Windows 平台下串行通信的几种实现方法

冯雪飞, 陈文亮

(南京航空航天大学机电学院, 江苏南京210016)

摘 要:本文主要介绍了在Window s (Window s 9x /NT , Window s 2000) 平台上利用串口COM x

遵循RS -232C 标准进行串行通信的实现机制, 论述了采用Visual C ++为工具设计串行通信程序的几种常用方法。最后给出一个采用多线程方法实现的实例。关键词:Window s 异步串行通讯; RS -232C , 数控机床通信

中图分类号:TP316, TP311. 52 文献标识码:A  文章编号:1671-5276(2002) 01-0033-03

The Several Methods for Serial Ports Communication under Windows

FENG Xue -fei , CHEN Wen -liang

(Nanjing University of Aeronautios , JS Nanjing 210016, China ) A bstract :This article mainly describes the implemented mechanism of serial po rts communication under Win -dow 9x /NT and Window s 2000platform . Microsoft ' s development platform Visual C ++6. 0is the main tool for im plementing the several common methods w hich are discussed here fo r Serial communication . At last , there is an instance adopted multithread method .

Key words :w indow s asynchronous serial communication ; RS -232C ; numerical control machine communica -tio n

1 引言

串行通信是终端与计算机或计算机之间进行数据通信的一种方式, 现在它的应用仍然很广泛, 利用计算机的串行通信端口COMx 与其他设备如打印机、计算机、单片机、数控机床等提供的遵循RS -232C 标准的串行通信端口进行数据通讯。特别是工业上与数控机床进行通讯, 应用价值更大。

两个通信设备(以1、2表示) 之间通信最简单的连接方法:发送端1—接收端2; 发送端2—接收端1, 地1—地2, 还可以实现更加复杂的连接方式。串行通信方式有同步和异步之分, 根据收发操作的能力又可分为:全双工、半双工和单工通信。在具体通信中, 常常采用的流量控制(Flow Con -trol ) 又称握手(handshaking ) , 可分为硬件握手/硬件流控和软件握手/软件流控。

作系统提供的设备驱动程序来进行数据传递。

在Window s 平台下, 对各种通信资源(串行口、并行口、传真机和MODEM 等) 都作为文件来

处理。利用大量的API 函数如CreateFile 、Close -H andle 、ReadFile (ReadFileEx ) 和WriteFile (Write -FileEx ) 等对通讯资源COMx 端口的创建和关闭、读取和发送数据等操作来实现。此外, 可以参考MSDN 中涉及的通讯结构和其他API 函数。具体实现按下面步骤:

a ) 创建通信设备。在应用程序中, 要在通信类中添加创建通信设备的函数, 创建通信资源的函数是:

HANDLE CreateFile (LPCTSTR DWO RD Mode ,

lpFileName , dwShare -lpSecurity -pointer

dwDesiredAccess , DWORD

LPSECURIT Y ATTRIBUTES

Attributes , DWORD dwCreationDisposition , DWORD dwFlagsAnd Attribute s , HANDLE hTem plateFile ) ;

2 利用Windows A PI 实现串行通讯

DOS 平台下串行通信程序特点是直接控制硬件, 而Window s 则不同, 它是通过控制Window s 操

收稿日期:2001-10-19

, Feb ,(1) , 该函数有7个参数, 各参数含义参见MSDN , 但要注意第三个参数为0(设备不共享) ; 第五个参数必

··

须为OPEN EXISTING ; 第六个参数含有FLAG OVERLAPPED (指定为异步传输模式) 。该函数返回一个文件句柄, 这个句柄为其他通信函数引用该通信设备之用。

b ) 通信设备设置。通信设备的设置是指对通信的一些参数的指定, 如波特率、数据位、停止位、检验位、流控制方式、发送和接收缓冲区大小的指定、传输超时的时间设定。

在通讯设备创建好之后, 通信设备的属性被设成默认状态值。这个通信设备的属性是由一个DCB (Device Co ntrol Block ) 的结构来指定的。对该属性修改就要涉及几个API 函数:

BOOL

GetCommState (HANDLE

hFile ,

LPDGB lpDCB ) ;

通过函数返回的DCB 结构的指针重新指定新属性。重设DCB 结构函数是SetCommstate

BOOL

GetCommState (HANDLE

hFile ,

LPDGB lpDCB ) ;

缓冲区的大小用函数SetupComm 来指定。

BOOL SetupComm (HANDLE hFile , DWORD dwlnQueue , DWORD dwOutQueue ) ;

超时的设置是对COMM TIM EOUTS 结构的填充, 用函数SetCommTimeouts 设置;

BOOL SetCom mTimeouts (HANDLE hFile , LPCOM M TIM EOU TS lpComm Timeouts ) ;

通过几个函数和两个结构的运用就能很简单的实现对通信设备的设置。

c ) 通过通信设备发送和接收数据。接收和发送数据ReadFile 和WriteFile , 这两个函数都用OVERLAPPED 这个结构, 该结构是用在异步输入输出中的参数指定。

BOOL ReadFile (HANDLE hFile , LPVOlD lpBuf fer , DWORD nNumberOfBytesToRead , LPDWORD

lpNumberOfBytesReed ,

LPOVER -LAPPED lpOverlapped ) ; BOOL WriteFile (HANDLE hEile , LPCVOID lp -Buf fer , DWORD nNumberO fBytesTowrite , LPDWORD lpNumberO fBytesWritten , LPOVER -LAPPED lpOverlapped ) ;

typedef struct OVERLAPPED {DWORD Internal ; DWORD InternalHigh ; DWORD offset ;

DWORD OffsetHigh ; HANDLE hEvent ; }OVER -LAPPED ;

这两个函数返回值为FALSE 时, 并不能说明

1。

void SetCommPort (short nNewValue ) ; 设置波特率, 奇偶校验位, 数据位, 停止位等参数, 如“4800, N , 8, 1”含义为波特率为4800, 无奇偶

校验, 8位数据, 一个停止位。

void SetSettings (LPCTSTR lpszNew Value ) ; 设置接收、发送缓冲区的大小。

void SetInBufferSize (short nNew Value ) ; void SetOutBufferSize (short nNew Value ) ; 接收数据前要清空接收缓冲区, 发送数据前要清空发送缓冲区。

void SetInBufferCount (shoft nNewValue ) ;

void SetOutBufferCount (sho rt nNew Value ) ; 设置数据获取方式, 0代表以文本方式, 1以二进制方式。

void SetInputMode (long nNew Value ) ;

设置每次读取字符的个数, 缺省值为0, 表明读取接收缓冲区中的全部内容。void SetInputLen (short nNew Value ) ;

c ) 发送和接收数据。通过事件驱动来实现数这两个函数操作失败。而要调用函数GetLastEr -ro r ()来判断失败类型。如果返回值是ERROR IO PENDING , 则I /O 操作在后台继续执行。一般是事件驱动I /O 来读写, 事件是在OVERLAPPED 结构中指定的。函数SetComm -Mask () 来指定需要监听的事件, 函数WaitCcom -mEvent () 监听事件发生。

d ) 通信结束

当通信过程结束以后, 就要关闭该打开的通信设备, API 函数为CloseHandle () 。

3 利用Windows ActiveX 控件实现串行通讯

  采用Window s API 函数来实现异步串行通信, 通信过程稳定, 适用于要求较高的通信环境。除此种方法之外, 还有利用Window s ActiveX 控件———M SComm 来实现基于对话框的通信工程(该控件一定要在对话框上使用) 。

a ) 创建通信设备/结束通信。方法SetPo r -tOpen () 中的参数设为1是打开指定的端口, 参数为0关闭端口。

BOOL SetPortOpen (BOOL bNew Value ) ;

b ) 通信设备设置。指定打开的端口号是方法SetCommPort () 。参数一般为1, 2, 3, 4。默认为

·:http /. CHINA . . CN /Z ZH ://. CNKI /ZZ H D 》

据的接收和发送, 要为事件OnComm 添加消息处理函数来具体处理是发送还是接收数据, 同时作出相应的处理。

(LPVOID ) m pCom ,

THREAD PRIORITY ABOVE NO RMAL , (U IN T ) 0, (DWORD ) CREATE SUSPENDED , (LPSECURITY ATT RIBUTES ) NULL ) ;

下面是端口事件监控子线程, 在该线程中要实现监控端口事件(接收数据事件) 的截获功能并发出消息给界面线程功能。然后在界面线程中对消息进行响应, 在该消息响应处理函数中完成接收数据的工作。

if (WaitComm Event (pCom ->hComDevice , &dw Ev tMask , N ULL ) ) {

if ((dw Ev tMask &pCom ->dw EvtM ask ) ==pCom ->dw EvtM ask )

{

WaitForSingleObject (pCom

->hEvent ,

0xFFFFFFFF ) ;

    ResetEvent (pCom ->hEvent ) ; ∥置同步事件对象为非信号态

    ∷PostMessage (CMainCom , ID -DATA RECEIVE , 0, 0) ; ∥发送通知消息    }

}

在界面线程中要定义消息ID -DATA RECEIVE , 然后手工添加映射和处理函数, 具体参见vc ++的参考资料, 发送数据直接采用响应按钮事件, 下面是主要代码。if (! WriteFile (com ->hComDevice , lpstr , dw -BytesToWrite , &dwBytesWritten , &w riteOS ) ) {

w hile (! GetOverlappedResult (com ->hComDevice , &w riteOS , &dw BytesWritten , TRUE ) ) {

if (GetLasError () ==IO PLETE )

dw ByesSent +=dw By tesWritten ;

附图 模块结构图

4 利用多线程实现串行通讯

采用Window s API 函数方法可以同时利用Window s 提供的多线程来提高CPU 的利用效率。

使用多线程的方法可以实现复杂的功能:如可以同多个外设建立连接, 而每个外设的频率不同。而这里主要介绍用多线程方式来实现全双工的通信。Win 32区分两种不同类型的线程, 一种是用户界面线程UI (User Interface Thread ) ; 另一种是工作线程(Wo rk Thread ) 。用户界面线程包含消息循环(消息泵) , 用于处理接收到的消息, 而工作线程没有消息循环, 用于执行后台任务。

实现多线程有三种途径:利用C 语言; 利用Window s API 函数; 利用M FC 提供的封装类Cw inThread 和线程帮助函数。子线程与主线程之间的通讯有三种方式:使用全局变量; 使用消息; 使用事件对象。线程之间的同步有几种处理方法:事件体(Event ) , 临界区(Critical ) , 互斥体(Mutex ) , 信号量(Semaphor ) 。具体使用参考相关的资料。

5 实例

在作者参与开发的数控加工仿真教学系统中需要具有与数控机床进行通信的功能(将数控代码上传到数控机床上, 同时也要实现从数控机床上下载数控代码到计算机中) , 它的实现利用RS -232C 串行端口与机床的标准接口进行通信, 以vc ++6. 0作为开发工具, 采用多线程技术中的线程帮助函数和CWinThread 类来完成。模块结构如附图

INCOM -

{    ∥没有传输完毕, 继续处理dw BytesToSent =dwBy tesSent ;

continue ; }

else {    ∥清除错误终止传输

(下转第38页)

首先构造一个通讯类CCom , 然后创建工作线程。下面是工作线程的创建:

CWnThread  CComThread =AfxBeginThread (CComWatchThread ,

, Feb ,(1) *

··

们的工艺成本是不同的; 所以对特征参数化的工艺设计应有一个优化目标, 选择合适的特征加工工艺段为最优工艺段。

根据以上的一些规则, 可以对零件模型的所有特征工艺段中的各工步重新进行合并组合, 得到零件的特征工艺。工艺人员还可以对生成的工艺进行编辑和修改, 使之更加合理, 更加符合实际的生产情况。

[1]李 伟, 谭豫之. 基于特征的齿轮轴类零件工艺规程推理机制

的研究[J ].设计与研究, 1999,(9) :33-35.

[2]田锡天, 黄乃康. 特征技术与集成化CAPP 系统[J ].航空制造

工程, 1997,(1) :29-30.

[3]吴会林, 徐燕申, 牛占文, 等. 回转类零件基于CAD /CAM 的工

艺设计[J ].机械工业自动化, 1998, (4) :20-28.

[4]葛友华, 安鲁陵, 廖文和, 周儒荣. 基于特征和实例的工艺路线

决策方法[J ].机械设计与制造工程, 1999,(5) :49-51.

参考文献:

2 应用实例

依据上述方法, 作者以轴类零件为例, 建立了轴的特征参数化工艺设计系统, 在该系统中有轴的6种特征:轴段拉伸、退刀槽、键槽、轴向孔、方形轴段、花键。该系统是在WindowsN T4. 0环境下用Pro /Engineer 的二次开发工具Pro /Toolkit 和Jbuilder3. 0下开发的, 数据库开发工具为Oracle7. 3. 3, 开发采用流行的三层浏览器/服务器模型(B /S ) 模型。

按照系统的体系结构和特征参数化工艺设计的基本方法, 可以把系统划分为以下几个功能模块:Pro /E 特征造型、轴特征信息识别、特征参数化工艺设计、工艺数据库的维护。系统建立了以特征为核心的零件信息模型, 能自动产生CAPP 。当零件模型改变时, CAPP 自动进行更新, 避免了传统手工输入的繁重工作和输入差错。轴的特征参数化工艺产生结果如图2所示

(上接第35页)

ClearComm Error (com ->hComDevice , &dw ErrorFlags , &ComStat ) ;

break ;   }   }  }

6 结束语

上述通讯模块已经应用于数控加工仿真教学系统。具体功能包括:设置通讯端口号、波特率、停止位、奇偶校验位、数据位等和流控方式指定等; 实时临控通信进程; 全双工异步通信。经过实际验证表明用该方法实现串行通信具有传输稳定可靠、高效的特点。

参考文献:

[1]陈 坚, 孙志月. M odem 通信编程技术[M ].西安:西安电子

科技大学出版社, 1998-03.

图2 轴特征参数化工艺

[2]饶彦平, 赵宗周, 吴忠彦. 微型计算机与加工中心的通讯[J ].

组合机床与自动化加工技术, 2000,(4) :16-19.

[3]蔡新平, 魏亚光. 微机与数控机床控制系统的串口通讯[J ].

3 结束语

本文介绍了特征参数化工艺的设计方法。运用该方法, 在Pro /Eng ineer 平台之上开发了一个完整的轴类零件的CAPP 系统; 并充分考虑了现实的制造资源数据, 使系统具有较强的适应性, 其结果符合生产实际。

风机技术, 1999,(1) :32-33.

[4]谭亲四, 王 忠. PC 机与CNC 装置通讯软件的开发[J ].应用

技术研究, 2000,(6) :16-17.

[5]刘志和, 聂秋根. PC 机与数控机床CNC 系统通讯[J ].南昌航

空工业学院学报, 1995,(2) :67-70.

[6]曾 刚, 赵伟民, 张 健. Window s 环境下串行通讯的实现[J ].

黑龙江电子技术, 1999,(7) :20.

·:http /. CHINA . . CN /Z ZH ://. CNKI /ZZ H D 》

Windows 平台下串行通信的几种实现方法

冯雪飞, 陈文亮

(南京航空航天大学机电学院, 江苏南京210016)

摘 要:本文主要介绍了在Window s (Window s 9x /NT , Window s 2000) 平台上利用串口COM x

遵循RS -232C 标准进行串行通信的实现机制, 论述了采用Visual C ++为工具设计串行通信程序的几种常用方法。最后给出一个采用多线程方法实现的实例。关键词:Window s 异步串行通讯; RS -232C , 数控机床通信

中图分类号:TP316, TP311. 52 文献标识码:A  文章编号:1671-5276(2002) 01-0033-03

The Several Methods for Serial Ports Communication under Windows

FENG Xue -fei , CHEN Wen -liang

(Nanjing University of Aeronautios , JS Nanjing 210016, China ) A bstract :This article mainly describes the implemented mechanism of serial po rts communication under Win -dow 9x /NT and Window s 2000platform . Microsoft ' s development platform Visual C ++6. 0is the main tool for im plementing the several common methods w hich are discussed here fo r Serial communication . At last , there is an instance adopted multithread method .

Key words :w indow s asynchronous serial communication ; RS -232C ; numerical control machine communica -tio n

1 引言

串行通信是终端与计算机或计算机之间进行数据通信的一种方式, 现在它的应用仍然很广泛, 利用计算机的串行通信端口COMx 与其他设备如打印机、计算机、单片机、数控机床等提供的遵循RS -232C 标准的串行通信端口进行数据通讯。特别是工业上与数控机床进行通讯, 应用价值更大。

两个通信设备(以1、2表示) 之间通信最简单的连接方法:发送端1—接收端2; 发送端2—接收端1, 地1—地2, 还可以实现更加复杂的连接方式。串行通信方式有同步和异步之分, 根据收发操作的能力又可分为:全双工、半双工和单工通信。在具体通信中, 常常采用的流量控制(Flow Con -trol ) 又称握手(handshaking ) , 可分为硬件握手/硬件流控和软件握手/软件流控。

作系统提供的设备驱动程序来进行数据传递。

在Window s 平台下, 对各种通信资源(串行口、并行口、传真机和MODEM 等) 都作为文件来

处理。利用大量的API 函数如CreateFile 、Close -H andle 、ReadFile (ReadFileEx ) 和WriteFile (Write -FileEx ) 等对通讯资源COMx 端口的创建和关闭、读取和发送数据等操作来实现。此外, 可以参考MSDN 中涉及的通讯结构和其他API 函数。具体实现按下面步骤:

a ) 创建通信设备。在应用程序中, 要在通信类中添加创建通信设备的函数, 创建通信资源的函数是:

HANDLE CreateFile (LPCTSTR DWO RD Mode ,

lpFileName , dwShare -lpSecurity -pointer

dwDesiredAccess , DWORD

LPSECURIT Y ATTRIBUTES

Attributes , DWORD dwCreationDisposition , DWORD dwFlagsAnd Attribute s , HANDLE hTem plateFile ) ;

2 利用Windows A PI 实现串行通讯

DOS 平台下串行通信程序特点是直接控制硬件, 而Window s 则不同, 它是通过控制Window s 操

收稿日期:2001-10-19

, Feb ,(1) , 该函数有7个参数, 各参数含义参见MSDN , 但要注意第三个参数为0(设备不共享) ; 第五个参数必

··

须为OPEN EXISTING ; 第六个参数含有FLAG OVERLAPPED (指定为异步传输模式) 。该函数返回一个文件句柄, 这个句柄为其他通信函数引用该通信设备之用。

b ) 通信设备设置。通信设备的设置是指对通信的一些参数的指定, 如波特率、数据位、停止位、检验位、流控制方式、发送和接收缓冲区大小的指定、传输超时的时间设定。

在通讯设备创建好之后, 通信设备的属性被设成默认状态值。这个通信设备的属性是由一个DCB (Device Co ntrol Block ) 的结构来指定的。对该属性修改就要涉及几个API 函数:

BOOL

GetCommState (HANDLE

hFile ,

LPDGB lpDCB ) ;

通过函数返回的DCB 结构的指针重新指定新属性。重设DCB 结构函数是SetCommstate

BOOL

GetCommState (HANDLE

hFile ,

LPDGB lpDCB ) ;

缓冲区的大小用函数SetupComm 来指定。

BOOL SetupComm (HANDLE hFile , DWORD dwlnQueue , DWORD dwOutQueue ) ;

超时的设置是对COMM TIM EOUTS 结构的填充, 用函数SetCommTimeouts 设置;

BOOL SetCom mTimeouts (HANDLE hFile , LPCOM M TIM EOU TS lpComm Timeouts ) ;

通过几个函数和两个结构的运用就能很简单的实现对通信设备的设置。

c ) 通过通信设备发送和接收数据。接收和发送数据ReadFile 和WriteFile , 这两个函数都用OVERLAPPED 这个结构, 该结构是用在异步输入输出中的参数指定。

BOOL ReadFile (HANDLE hFile , LPVOlD lpBuf fer , DWORD nNumberOfBytesToRead , LPDWORD

lpNumberOfBytesReed ,

LPOVER -LAPPED lpOverlapped ) ; BOOL WriteFile (HANDLE hEile , LPCVOID lp -Buf fer , DWORD nNumberO fBytesTowrite , LPDWORD lpNumberO fBytesWritten , LPOVER -LAPPED lpOverlapped ) ;

typedef struct OVERLAPPED {DWORD Internal ; DWORD InternalHigh ; DWORD offset ;

DWORD OffsetHigh ; HANDLE hEvent ; }OVER -LAPPED ;

这两个函数返回值为FALSE 时, 并不能说明

1。

void SetCommPort (short nNewValue ) ; 设置波特率, 奇偶校验位, 数据位, 停止位等参数, 如“4800, N , 8, 1”含义为波特率为4800, 无奇偶

校验, 8位数据, 一个停止位。

void SetSettings (LPCTSTR lpszNew Value ) ; 设置接收、发送缓冲区的大小。

void SetInBufferSize (short nNew Value ) ; void SetOutBufferSize (short nNew Value ) ; 接收数据前要清空接收缓冲区, 发送数据前要清空发送缓冲区。

void SetInBufferCount (shoft nNewValue ) ;

void SetOutBufferCount (sho rt nNew Value ) ; 设置数据获取方式, 0代表以文本方式, 1以二进制方式。

void SetInputMode (long nNew Value ) ;

设置每次读取字符的个数, 缺省值为0, 表明读取接收缓冲区中的全部内容。void SetInputLen (short nNew Value ) ;

c ) 发送和接收数据。通过事件驱动来实现数这两个函数操作失败。而要调用函数GetLastEr -ro r ()来判断失败类型。如果返回值是ERROR IO PENDING , 则I /O 操作在后台继续执行。一般是事件驱动I /O 来读写, 事件是在OVERLAPPED 结构中指定的。函数SetComm -Mask () 来指定需要监听的事件, 函数WaitCcom -mEvent () 监听事件发生。

d ) 通信结束

当通信过程结束以后, 就要关闭该打开的通信设备, API 函数为CloseHandle () 。

3 利用Windows ActiveX 控件实现串行通讯

  采用Window s API 函数来实现异步串行通信, 通信过程稳定, 适用于要求较高的通信环境。除此种方法之外, 还有利用Window s ActiveX 控件———M SComm 来实现基于对话框的通信工程(该控件一定要在对话框上使用) 。

a ) 创建通信设备/结束通信。方法SetPo r -tOpen () 中的参数设为1是打开指定的端口, 参数为0关闭端口。

BOOL SetPortOpen (BOOL bNew Value ) ;

b ) 通信设备设置。指定打开的端口号是方法SetCommPort () 。参数一般为1, 2, 3, 4。默认为

·:http /. CHINA . . CN /Z ZH ://. CNKI /ZZ H D 》

据的接收和发送, 要为事件OnComm 添加消息处理函数来具体处理是发送还是接收数据, 同时作出相应的处理。

(LPVOID ) m pCom ,

THREAD PRIORITY ABOVE NO RMAL , (U IN T ) 0, (DWORD ) CREATE SUSPENDED , (LPSECURITY ATT RIBUTES ) NULL ) ;

下面是端口事件监控子线程, 在该线程中要实现监控端口事件(接收数据事件) 的截获功能并发出消息给界面线程功能。然后在界面线程中对消息进行响应, 在该消息响应处理函数中完成接收数据的工作。

if (WaitComm Event (pCom ->hComDevice , &dw Ev tMask , N ULL ) ) {

if ((dw Ev tMask &pCom ->dw EvtM ask ) ==pCom ->dw EvtM ask )

{

WaitForSingleObject (pCom

->hEvent ,

0xFFFFFFFF ) ;

    ResetEvent (pCom ->hEvent ) ; ∥置同步事件对象为非信号态

    ∷PostMessage (CMainCom , ID -DATA RECEIVE , 0, 0) ; ∥发送通知消息    }

}

在界面线程中要定义消息ID -DATA RECEIVE , 然后手工添加映射和处理函数, 具体参见vc ++的参考资料, 发送数据直接采用响应按钮事件, 下面是主要代码。if (! WriteFile (com ->hComDevice , lpstr , dw -BytesToWrite , &dwBytesWritten , &w riteOS ) ) {

w hile (! GetOverlappedResult (com ->hComDevice , &w riteOS , &dw BytesWritten , TRUE ) ) {

if (GetLasError () ==IO PLETE )

dw ByesSent +=dw By tesWritten ;

附图 模块结构图

4 利用多线程实现串行通讯

采用Window s API 函数方法可以同时利用Window s 提供的多线程来提高CPU 的利用效率。

使用多线程的方法可以实现复杂的功能:如可以同多个外设建立连接, 而每个外设的频率不同。而这里主要介绍用多线程方式来实现全双工的通信。Win 32区分两种不同类型的线程, 一种是用户界面线程UI (User Interface Thread ) ; 另一种是工作线程(Wo rk Thread ) 。用户界面线程包含消息循环(消息泵) , 用于处理接收到的消息, 而工作线程没有消息循环, 用于执行后台任务。

实现多线程有三种途径:利用C 语言; 利用Window s API 函数; 利用M FC 提供的封装类Cw inThread 和线程帮助函数。子线程与主线程之间的通讯有三种方式:使用全局变量; 使用消息; 使用事件对象。线程之间的同步有几种处理方法:事件体(Event ) , 临界区(Critical ) , 互斥体(Mutex ) , 信号量(Semaphor ) 。具体使用参考相关的资料。

5 实例

在作者参与开发的数控加工仿真教学系统中需要具有与数控机床进行通信的功能(将数控代码上传到数控机床上, 同时也要实现从数控机床上下载数控代码到计算机中) , 它的实现利用RS -232C 串行端口与机床的标准接口进行通信, 以vc ++6. 0作为开发工具, 采用多线程技术中的线程帮助函数和CWinThread 类来完成。模块结构如附图

INCOM -

{    ∥没有传输完毕, 继续处理dw BytesToSent =dwBy tesSent ;

continue ; }

else {    ∥清除错误终止传输

(下转第38页)

首先构造一个通讯类CCom , 然后创建工作线程。下面是工作线程的创建:

CWnThread  CComThread =AfxBeginThread (CComWatchThread ,

, Feb ,(1) *

··

们的工艺成本是不同的; 所以对特征参数化的工艺设计应有一个优化目标, 选择合适的特征加工工艺段为最优工艺段。

根据以上的一些规则, 可以对零件模型的所有特征工艺段中的各工步重新进行合并组合, 得到零件的特征工艺。工艺人员还可以对生成的工艺进行编辑和修改, 使之更加合理, 更加符合实际的生产情况。

[1]李 伟, 谭豫之. 基于特征的齿轮轴类零件工艺规程推理机制

的研究[J ].设计与研究, 1999,(9) :33-35.

[2]田锡天, 黄乃康. 特征技术与集成化CAPP 系统[J ].航空制造

工程, 1997,(1) :29-30.

[3]吴会林, 徐燕申, 牛占文, 等. 回转类零件基于CAD /CAM 的工

艺设计[J ].机械工业自动化, 1998, (4) :20-28.

[4]葛友华, 安鲁陵, 廖文和, 周儒荣. 基于特征和实例的工艺路线

决策方法[J ].机械设计与制造工程, 1999,(5) :49-51.

参考文献:

2 应用实例

依据上述方法, 作者以轴类零件为例, 建立了轴的特征参数化工艺设计系统, 在该系统中有轴的6种特征:轴段拉伸、退刀槽、键槽、轴向孔、方形轴段、花键。该系统是在WindowsN T4. 0环境下用Pro /Engineer 的二次开发工具Pro /Toolkit 和Jbuilder3. 0下开发的, 数据库开发工具为Oracle7. 3. 3, 开发采用流行的三层浏览器/服务器模型(B /S ) 模型。

按照系统的体系结构和特征参数化工艺设计的基本方法, 可以把系统划分为以下几个功能模块:Pro /E 特征造型、轴特征信息识别、特征参数化工艺设计、工艺数据库的维护。系统建立了以特征为核心的零件信息模型, 能自动产生CAPP 。当零件模型改变时, CAPP 自动进行更新, 避免了传统手工输入的繁重工作和输入差错。轴的特征参数化工艺产生结果如图2所示

(上接第35页)

ClearComm Error (com ->hComDevice , &dw ErrorFlags , &ComStat ) ;

break ;   }   }  }

6 结束语

上述通讯模块已经应用于数控加工仿真教学系统。具体功能包括:设置通讯端口号、波特率、停止位、奇偶校验位、数据位等和流控方式指定等; 实时临控通信进程; 全双工异步通信。经过实际验证表明用该方法实现串行通信具有传输稳定可靠、高效的特点。

参考文献:

[1]陈 坚, 孙志月. M odem 通信编程技术[M ].西安:西安电子

科技大学出版社, 1998-03.

图2 轴特征参数化工艺

[2]饶彦平, 赵宗周, 吴忠彦. 微型计算机与加工中心的通讯[J ].

组合机床与自动化加工技术, 2000,(4) :16-19.

[3]蔡新平, 魏亚光. 微机与数控机床控制系统的串口通讯[J ].

3 结束语

本文介绍了特征参数化工艺的设计方法。运用该方法, 在Pro /Eng ineer 平台之上开发了一个完整的轴类零件的CAPP 系统; 并充分考虑了现实的制造资源数据, 使系统具有较强的适应性, 其结果符合生产实际。

风机技术, 1999,(1) :32-33.

[4]谭亲四, 王 忠. PC 机与CNC 装置通讯软件的开发[J ].应用

技术研究, 2000,(6) :16-17.

[5]刘志和, 聂秋根. PC 机与数控机床CNC 系统通讯[J ].南昌航

空工业学院学报, 1995,(2) :67-70.

[6]曾 刚, 赵伟民, 张 健. Window s 环境下串行通讯的实现[J ].

黑龙江电子技术, 1999,(7) :20.

·:http /. CHINA . . CN /Z ZH ://. CNKI /ZZ H D 》


相关内容

  • 单片机论文
  • 目 录 摘要---------------------...1 关键词---------------------1 前言--------------------.......1 一.火灾智能报警控制系统基本功能及硬件组成--...2 二.报警系统软件设计-----------..--.3 三.系统可 ...

  • DSP与PC机串行通信接口设计及应用
  • tms320f24x是美国ti公司tms320系列定点数字信号处理器(dsp)之一,tms320f240是f24x系列面向数字控制芯片的典型代表.由于tms320f240并不具备人机界面,在实际使用过程中,需要为它提供一个人机接口或上层控制接口,以便于观察控制效果或传递必要的控制信息.因此,实现tm ...

  • sscanf(函数)
  • sscanf 名称: 名称 sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: 函数原型 Int sscanf( string str, string fmt, mixed var1, mixed var2 ... ); int scanf( const char *form ...

  • 不稳定燃烧主动控制系统的设计与实现
  • 匿亘查垂蔓堑园困匿因 文章编号:1008--0570(2008)05一l-咖37-02 控制系统 不稳定燃烧主动控制系统的设计与实现 TheDesignandRealizationofActiveControlSystemofCombustionInstability ' (空军工程大学)唐浔 TA ...

  • 高性能计算系统设计方案
  • 高性能计算系统 方案设计 第1章 需求分析 1.1 高性能计算的和大规模数据处理的应用 高性能计算作为一种先进的科研手段,在国内的应用发展很快,得到了普遍的重视,近年来国家投入逐年加大. 高性能计算的应用条件已经成熟,表现在: ◆ 价格相对低廉的高性能机群系统为高性能计算应用提供了物质基础: ◆ 高 ...

  • 嵌入式实验报告
  • 实验一 ARM 开发环境 一.实验目的 1. 了解嵌入式系统的开发过程,熟悉嵌入式系统的开发特点. 2. 了解嵌入式系统开发环境的功能与组成,了解开发嵌入式系统使用的几种调试工具,熟悉JTAG 调试技术的原理.工具和连接方法. 3. 了解ADS .SDT 等集成开发工具的功能与特点,熟悉并掌握它们的 ...

  • KJ616煤矿矿山压力监测系统A
  • KJ616煤矿矿山压力监测系统 一.矿压监测系统具有以下技术特点 1.该系统支持多个子系统和多元矿压参数监测,系统支持最多达16个独立采区(测区)的矿压监测,每个测区内可兼容工作阻力.顶板离层.围岩应力.锚杆支护应力.钻孔应力多元参数监测.系统容量达1000个测点. 2.系统根据采场地质条件采用了两 ...

  • 基于ARM的蓝牙无线通信模块的设计
  • 湖南文理学院 课程设计报告 课程名称: 嵌入式系统课程设计 专业班级: 应用电子技术09201班 学生姓名: 崔 剑 指导教师: 袁 里 弛 完成时间: 2011年12月25日 报告成绩: 卷 首 摘 要 传统工业数据通信系统以单片机为下位机采集系统.PC 构建的数据中心以及RS232等有线方式构建 ...

  • 考试简介-电子工程师
  • .考试简介: 全国电子工程师技术水平考试是在信息产业部领导下,信息产业部电子行业职业技能鉴定指导中心组织实施的,面向从事电子及相关类专业的企业工程技术人员.企业技术工人.各普通院校学生及技工学校学生. 全国电子技术水平考试按照市场对电子专业人才不同岗位的需求,将认证由低到高分为三个级别:一级对应能力 ...