金刚石合成控制系统中多串口通信技术的设计与实现
发布时间:2008/5/27 0:00:00 访问次数:450
    
    
     来源:国外电子元器件 作者:西安交通大学 杜小智 邱祖廉
     摘要:通过多串口通信技术在金刚石合成控制系统中的应用,讨论了32位windows操作系统下,vc多串口通信技术的设计与实现方法,并运用面向对象方法和多线程技术设计了一个比较完善的串口通信类。阐述了用vc开发上位机与plc之间的串口通信程序设计方法和实现技术。 关键词:串口通信;面向对象方法;多线程;plc1 引言 传统的金刚石合成机控制系统是由一个plc和一个可显示终端构成。这种传统的控制系统一般具有如下缺点:(1)系统所有的工作都由plc完成,其控制精度较差,致使合成的金刚石质量较差;(2)显示终端的平面尺寸过小,这一方面使得操作人员观察系统的状态很不方便,另一方面也常常会引起误操作;(3)金刚石合成工艺复杂,需控制的参数很多,但原控制系统不能对参数进行保存,这样在根据不同产品和工艺要求对部分参数进行调整时,每次都必须重新设置所有的参数,操作非常麻烦;(4) 界面不友好;(5)不能通过控制系统自动考核操作人员的工作质量。 为了提高控制精度、方便操作,开发新的控制系统迫在眉睫。笔者针对以上问题,将ipc与plc有机结合在一起,开发了一套新的控制系统。通过该系统可在上位机(ipc)和plc之间通过rs-232与rs-485进行大量串口通信。2 vc串口通信分析 在32位windows系统下使用vc开发串口通信程序通常有如下4种方法:(1)使用microsoft公司提供的名为mscomm的通信控件;(2)直接使用windows应用程序接口(api);(3)自行设计一个串口通信类;(4)通过开发一个activex控件来实现串口通信功能。 在上述几种方法中,实际上还是使用windows api函数,然后把串口通信的细节给封装起来,同时提供给用户几个简单的接口函数。上述几种方法各有优缺点,但在实际情况下,大多数编程人员喜欢使用api函数自行设计串口通信类。 用windows api函数进行串口通信的编程流程如图1所示。其中打开串口是确定串口号与串口的打开方式;初始化串口用于配置通讯的波特率、每字节位数、校验位、停止位和读写超时等;读写串口用于向串口进行发送数据和从串口接收数据;关闭串口用于将串口关闭并释放串口资源(windows系统下串口是系统资源)。 由于绝大多数控制系统中串口通信是比较费时的,而且监控系统还要进行数据处理和显示等,所以一般采用多线程技术,并用afxbeginthread()函数创建辅助线程来管理串口通信,这样,主进程就能在进行串口读写的同时,处理数据并完成用户指令的响应,但是设计时一定要处理好数据的共享问题。 串口读写既可以选择同步、异步方式,也可以选择查询、定时读写和事件驱动方式。由于同步方式容易造成线程阻塞,所以一般采用异步方式;而查询方式要占用大量的cpu时间,所以一般采用定时读写或者事件驱动方式,事件驱动方式相关文献较多,故此重点讨论定时读写方式。定时读写方式就是上位机向下位机发送固定格式的数据,在下位机收到后向上位机返回状态信息数据。由于数据的传输需要时间,所有上位机发送数据后就调用_sleep()函数进行休眠,休眠的时间可根据需要进行不同的设置。这样,可以节省cpu时间,以使系统能够很好地进行监控工作和处理其它事务。3 vc串口通信的设计与实现 笔者在windows系统下,采用面向对象的方法和多线程技术,并使用visual c6.0作为编程工具开发了一个通用串口通信类cserialport,该cserialport类封装了串口通信的基本数据和方法,下面给出cserialport类的简单介绍。cserialport类头文件中的主要成员变量和成员函数如下:class cserialport{private:handel m_hport;dcb m_dcb;commtimeouts m_timeouts;dword m_error;public:cserialport(); //构造函数virtual~cserialport(); //析构函数//initport() 函数实现初始化串口bool initport(char* str=“com1”,uint baudrate=9600,uint parity=0,uint bytesize=8,uint stopbits=1,uint readmultiplier=0,uint readconstant=0,uint writemultiplier=10,uint writeconstant=1000);dc
    
    
     来源:国外电子元器件 作者:西安交通大学 杜小智 邱祖廉
     摘要:通过多串口通信技术在金刚石合成控制系统中的应用,讨论了32位windows操作系统下,vc多串口通信技术的设计与实现方法,并运用面向对象方法和多线程技术设计了一个比较完善的串口通信类。阐述了用vc开发上位机与plc之间的串口通信程序设计方法和实现技术。 关键词:串口通信;面向对象方法;多线程;plc1 引言 传统的金刚石合成机控制系统是由一个plc和一个可显示终端构成。这种传统的控制系统一般具有如下缺点:(1)系统所有的工作都由plc完成,其控制精度较差,致使合成的金刚石质量较差;(2)显示终端的平面尺寸过小,这一方面使得操作人员观察系统的状态很不方便,另一方面也常常会引起误操作;(3)金刚石合成工艺复杂,需控制的参数很多,但原控制系统不能对参数进行保存,这样在根据不同产品和工艺要求对部分参数进行调整时,每次都必须重新设置所有的参数,操作非常麻烦;(4) 界面不友好;(5)不能通过控制系统自动考核操作人员的工作质量。 为了提高控制精度、方便操作,开发新的控制系统迫在眉睫。笔者针对以上问题,将ipc与plc有机结合在一起,开发了一套新的控制系统。通过该系统可在上位机(ipc)和plc之间通过rs-232与rs-485进行大量串口通信。2 vc串口通信分析 在32位windows系统下使用vc开发串口通信程序通常有如下4种方法:(1)使用microsoft公司提供的名为mscomm的通信控件;(2)直接使用windows应用程序接口(api);(3)自行设计一个串口通信类;(4)通过开发一个activex控件来实现串口通信功能。 在上述几种方法中,实际上还是使用windows api函数,然后把串口通信的细节给封装起来,同时提供给用户几个简单的接口函数。上述几种方法各有优缺点,但在实际情况下,大多数编程人员喜欢使用api函数自行设计串口通信类。 用windows api函数进行串口通信的编程流程如图1所示。其中打开串口是确定串口号与串口的打开方式;初始化串口用于配置通讯的波特率、每字节位数、校验位、停止位和读写超时等;读写串口用于向串口进行发送数据和从串口接收数据;关闭串口用于将串口关闭并释放串口资源(windows系统下串口是系统资源)。 由于绝大多数控制系统中串口通信是比较费时的,而且监控系统还要进行数据处理和显示等,所以一般采用多线程技术,并用afxbeginthread()函数创建辅助线程来管理串口通信,这样,主进程就能在进行串口读写的同时,处理数据并完成用户指令的响应,但是设计时一定要处理好数据的共享问题。 串口读写既可以选择同步、异步方式,也可以选择查询、定时读写和事件驱动方式。由于同步方式容易造成线程阻塞,所以一般采用异步方式;而查询方式要占用大量的cpu时间,所以一般采用定时读写或者事件驱动方式,事件驱动方式相关文献较多,故此重点讨论定时读写方式。定时读写方式就是上位机向下位机发送固定格式的数据,在下位机收到后向上位机返回状态信息数据。由于数据的传输需要时间,所有上位机发送数据后就调用_sleep()函数进行休眠,休眠的时间可根据需要进行不同的设置。这样,可以节省cpu时间,以使系统能够很好地进行监控工作和处理其它事务。3 vc串口通信的设计与实现 笔者在windows系统下,采用面向对象的方法和多线程技术,并使用visual c6.0作为编程工具开发了一个通用串口通信类cserialport,该cserialport类封装了串口通信的基本数据和方法,下面给出cserialport类的简单介绍。cserialport类头文件中的主要成员变量和成员函数如下:class cserialport{private:handel m_hport;dcb m_dcb;commtimeouts m_timeouts;dword m_error;public:cserialport(); //构造函数virtual~cserialport(); //析构函数//initport() 函数实现初始化串口bool initport(char* str=“com1”,uint baudrate=9600,uint parity=0,uint bytesize=8,uint stopbits=1,uint readmultiplier=0,uint readconstant=0,uint writemultiplier=10,uint writeconstant=1000);dc