金刚石合成控制系统中多串口通信技术的设计与实现

发布者:EnchantedDream最新更新时间:2012-07-20 来源: 国外电子元器件 关键字:合成控制系统  多串口  通信技术 手机看文章 扫描二维码
随时随地手机看文章

1 引言

传统的金刚石合成机控制系统是由一个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类的简单介绍。[page]

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);

DCB GetDCB(); //获得DCB参数

//SetDCB()函数实现设置DCB参数

BOOL SetDCB(

UINT BaudRate=9600,

UINT Parity=0,

UNIT ByteSize=8,

UINT StopBits=1);

// GetTimeOuts()函数获得超时参数

COMMTIMEOUTS GetTimeOuts();

// SetTimeOuts()函数设置超时参数

BOOL SetTimeOuts(

UINT ReadMultiplier=0,

UINT ReadConstant=0,

UINT WriteMultiplier=10,

UINT WriteConstant=1000);

// WritePort()函数实现写串口操作

void WritePort(HANDLE port,CString);

CString ReadPort(HANDLE port); //读串口操作

BOOL ClosePort(); //关闭串口

};

下面对该类的重要函数作以说明:

 (1)在构造函数CSerialPort()中已对该类的数据成员进行了初始化操作。

(2)初始化串口函数InitPort()函数用于完成串口的初始化工作,包括打开串口、设置DCB参数、设置通信的超时时间等。

打开串口使用CreateFile()函数,其中InitPort()函数中的第一个参数为要打开的串口,通常将该参数赋给CreateFile()函数中的第一个参数;设置DCB参数应调用该类中的SetDCB()函数,并将InitPort()函数中的第2至第5参数赋给SetDCB()函数;设置通信的超时时间应调用该类中的SetTimeOuts()函数,并将InitPort()函数中的第6至第9参数赋给SetTimeOuts()函数。另外,该串口是系统资源,应该根据不同要求对其安全属性进行设置。[page]

(3)SetDCB()函数用于设置DCB参数,包括传输的波特率、是否进行奇偶校验、每字节长度以及停止位等。

(4)SetTimeOuts()函数用于设定访问的超时值,根据设置的值可以计算出总的超时间隔。前面两个参数用来设置读操作总的超时值,后面两个参数用来设置写操作总的超时值。

(5)WritePort()函数用来完成向串口写数据。由于该系统需要对多个串口进行通信,所以首先应把串口号作为参数传递给该函数;接着该函数把按参数传递过来的、要发送的数据进行编码(也就是加入校验,这样能减少误码率),然后再调用Windows API函数WriteFile()并把数据发送到串口。

(6)ReadPort()函数用来完成从串口读数据,由于有多个串口,所以应把串口作为参数传递进来,然后调用API函数ReadFile(),并把下位机发送到串口,数据读出来放到缓存里面,接着对数据进行处理以将其变换成字符串(CString)类型并返回。

(7)GetDCB()函数主要用于获得串口的当前配置,可通过调用API函数GetCommState()来实现,然后再进行相应的处理。

(8)GetTimeOuts()函数用于获得访问超时值。

(9)ClosePort()函数可用来关闭串口。因为在Windows系统中串口是系统资源,因而在不用时,应将其释放掉,以便于其它进程对该资源的使用。

4 基于串口通信的金刚石合成控制

金刚石合成控制系统采用主从式控制方式,上位机为微机、下位机为PLC。上位机的主要功能是对系统进行实时监控,下位机的主要功能是对系统进行实时控制。上位机采用Windows 98操作系统,其监控程序可用VC开发,上、下位机之间通过RS-232与RS-485串口进行通信,它们之间采用的通信波特率为9600bps,无奇偶校验,每字节8位,并有1位停止位。上、下位机之间传送的数据格式可自己定义。由于传输数据时可能会引起错误,所以加入了校验算法。该系统通过上位机向下位机发送数据,下位机收到后就把当前系统的状态参数返回给上位机。由于该系统中所控制的参数具有迟滞性,所以应采用定时发送数据的方法来采集现场状态信息。

上位机编程时,可用VC6.0生成一个对话框类型的程序框架,然后将自己编写的CSerialPort类加入到该工程中,并在主界面类CCrystal中添加一个CSerialPort类的成员变量serial。当监控系统开始工作时,可用AfxBeginThread函数创建辅助线程来管理串口通信,当调用CSerialPort类中的WritePort 函数向串口发送数据后,可调用_sleep 函数使辅助线程休眠一段时间,以便使PLC有充分的时间返回数据;接着再调用CSerialPort类中的ReadPort()函数并从串口读数据,然后再调用_sleep()函数使辅助线程再休眠一定的时间。这样设计后,当进行串口通信时,主线程就能继续完成监控功能和处理其他事务。辅助线程函数的主要代码如下:

UINT SerialPro(void* param)

{

Ccrystal* mdlg=(Ccrystal*)param

CString str;

int flag=1;

//如果初始化串口失败返回

if(!InitPort(“com2”))

{AfxMessageBox(“打开串口2失败”);

return 0;

}

//循环读写串口,直到结束

while(flag)

{

//这里把要发送的数据传送给变量str

……

//向串口写数据

mdlg->serial.WritePort(hport,str);

//让辅助线程休眠100ms

_sleep(100);

//从串口读数据并赋给变量str

str=mdlg->serial.ReadPort(hport);

//这里把从串口得到的数据进行处理

……

5 结束语

运用面向对象方法和多线程技术设计的通用串口通信类CSerialPort类,通过对Windows API函数的封装使串口通信变得简单方便、容易维护。目前,该软件系统已成功地应用于金刚石合成控制系统,并成功解决了RS-232与RS-485两种串口通信的问题。经过几个月的运行表明,该串口通信软件工作稳定,出色地完成了系统的实时监控和显示任务。此外,由于采用了面向对象的方法和模块化设计,该软件的维护和升级十分方便;同时该系统具有很好的移植性,按照不同需求稍微改动一些代码就可以应用于其它控制系统中。

关键字:合成控制系统  多串口  通信技术 引用地址:金刚石合成控制系统中多串口通信技术的设计与实现

上一篇:基于NOR FLASH存储器的嵌入式文件系统的设计
下一篇:专家观点:从“绑好鞋带”谈嵌入式系统开发

推荐阅读最新更新时间:2024-05-02 22:13

中移动连推TD-LTE终端 4G牌照花落谁家引猜疑
迫切希望摆脱在3G时代的被动,中国移动最近在TD-LTE领域动作频频。 2月26日,中国移动董事长奚国华在巴塞罗那召开的2013年世界移动通信大会(MWC)上发布中国移动TD-LTE“双百”计划:TD-LTE网络覆盖将超过100个城市,TD-LTE终端采购将超过100万部。奚国华透露,较为成熟的、具备商用条件的TD-LTE终端将在今年三季度前后推出。 第二天,中国移动旋即在广州、深圳两地启动4G大规模体验。与以往不同,此次4G规模体验在终端上首次采用了智能手机。中国移动总裁李跃表示,2013年中国移动4G网络有望进入商用元年。 或许是受中国移动大张旗鼓部署下一代移动通信网的影响,一向认为“目前谈论4G技术言之尚早”的中国联通
[网络通信]
基于WINCE&S3C2410的串口移植技术
  嵌入式系统已经渗入到国民经济的各个领域,而嵌入式操作系统是嵌入式系统的灵魂。目前国际上常用的操作系统有 VxWorks、Windows CE、Linux等。其中,微软公司开发的 Windows CE 以其快速的开发流程、灵活的软硬件选择和健壮的最终产品已成为越来越多嵌入式产品开发的首选。   由于嵌入式系统的硬件平台种类繁多,WindowsCE.net支持的处理器种类就有ARM,POWER PC, MPS、X86等几大类,各个大类之内又包含多种CPU。各硬件厂商提供的 WindowsCE.net 的硬件驱动并不全,因此开发人员经常需要根据自己特定的硬件平台进行驱动开发。WindowsCE.net的标准BSP一般只为我们开通了一
[单片机]
基于WINCE&S3C2410的<font color='red'>多</font><font color='red'>串口</font>移植技术
基于OPCUA与西门子PLC通信技术解析
01 写在前面 很多人在学习OPCUA的时候,有个非常苦恼的问题,就是没有OPCUA服务器的环境,这时候,有些人可能会想到通过类似于KepServer这样的软件来实现。那么,有没有一种方式,实现快速搭建OPCUA环境呢?答案是有的,今天继续给大家分享S7-PLCSIM Advanced,S7-PLCSIM Advanced是SIEMENS推出的一款高功能仿真器,它的显著特点是除了可以仿真一般的PLC逻辑控制程序外还可以仿真通信,功能是非常强大的,今天主要讲述如何基于S7-PLCSIM Advanced搭建OPCUA通信仿真环境。 02 PLCSIM-Advanced安装 对于该软件的获取,大家可以去西门子相关网站下载。 图
[嵌入式]
基于OPCUA与西门子PLC<font color='red'>通信技术</font>解析
Zigbee通信技术在配电线路安全监测中的应用
随着 电力 工业的迅速发展,对 电力 系统的安全监测提出了更高的要求。特别是随着电网覆盖面的扩大以及电力设备数目种类的增加,电网安全监测变得越来越复杂。只有不断提高电网监测的自动化水平,才能使电力系统安全、可靠、经济地供电。目前变电站的改造是电网升级改造的重点,为此提出了变电站要少人或无人值守,提高效益。可是变电站的安全运行需要对大量设备的输入、输出数据进行在线检测,对设备的运行状态进行实时监控,对运行环境和突发事件也要及时掌握。以前都是工作人员到现场巡查检测各项参数 (电压、电流、频率、设备温升、振动、噪声等),这不但劳动强度大,且实时性差。为了使电网能承受住特定的事故,且在严重事故下尽量缩小事故范围,防止事故的扩大,或者能迅速
[模拟电子]
华为展示Beyond LTE技术 实现单站点30Gbps峰值速率
今天从巴塞罗那的2012年世界移动 通信 大会传来消息,全球领先的信息与通信技术 解决方案 提供商华为向全球展示了面向未来的BeyondLTE技术,可实现单站点30Gbps的峰值速率,比现有LTE商用网络快20倍以上。 华为无线网络业务部总裁汪涛表示,移动网络正处于全速发展的时代,未来技术的发展将呈现革命性的演进 - 更高的频谱效率、更宽的频谱聚合、更快的接入速率。 华为展示的Beyond LTE核心技术包括创新的天线结构,极大改善天线性能,满足现代无线通信技术对宽频带、高性能的要求;下一代中射频技术,降低成本和功耗,实现超宽带的频谱聚合;更先进的多天线编码算法,充分利用信道容量。 Beyond LTE实现了天线结构
[网络通信]
基于PC/104的串口通讯的设计
作者Email: liang_yue0625@sohu.com 摘 要:提出了一种在PC/104上进行多串口通讯的设计方法,介绍了多串口通讯在DOS平台上的软件设计,采用C语言进行编程,可以方便的移植到其他的平台上。 关 键 字:串行通讯;PC104; 0 引 言 目前,最先进的嵌入式工业计算机PC/l04,以其优良的品质、高可靠性及模块化,广泛应用于工业控制、航空航天、军事、医疗、消防设备、智能仪器仪表、导航、通讯、数控、自动化生产设备的数据采集、便携式计算机等领域。而在实际的应用中,有时需要借助微机的数据处理能力和丰富的软件资源,使组成的系统功能更为强大。这样必须实现PC机与PC104之间的通讯,在通常实时性要求不
[工业控制]
TD-LTE试商用 免费还是收费?
12月19日消息,目前,中国移动在全国多城市进行TD-LTE测试,和TD试商用一样,收费租机模式和免费体验模式均不可少。那么,中国移动究竟该采用何种模式? 中国移动在全国多城市进行TD-LTE测试 收费租机模式。杭州用户交500元钱押金之后,将领取一个MIFI终端,然后可选多档套餐,比如120元8G、200元15G及其它套餐,前3个月免费,之后开始收费。用户的TD-LTE套餐绑定到自己的移动手机缴费。 免费体验模式。深圳招募365位友好用户,免费发放TD-LTE上网卡、无线接入终端,免费使用半年。浙江6月份曾向四五千人发放过一种CPE终端,可免费测试TD-LTE。 由于没有发放4G牌照,因此,测试、试商用还是体验等
[网络通信]
TD-LTE试商用 免费还是收费?
Gartner 2023年中国信息与通信技术成熟度曲线显示国产人工智能芯片处于期望膨胀期
2023年9月27日 ---- Gartner于近日最新发布2023年中国信息与通信技术成熟度曲线,该曲线显示国产人工智能芯片目前处于期望膨胀期,CIO须持续关注可国产化工艺节点的新半导体技术的发展。 Gartner研究副总裁季新苏表示:中国企业正在大举投资于AI技术领域,而AI加速器芯片是其中的关键组成部分。然而从 2022年起,美国出口管制条例开始限制向中国公司出口先进的AI芯⽚,迫使中国企业寻找替代的AI芯片资源。成熟的IT巨头与获得风投的初创公司都已开始开发AI芯⽚,以迎接AI领域持续的全球竞争。 Gartner研究副总裁季新苏补充道:除了生成式AI和国产人工智能芯片之外,还有一些新兴的颠覆性技术也能为CIO
[工业控制]
Gartner 2023年中国信息与<font color='red'>通信技术</font>成熟度曲线显示国产人工智能芯片处于期望膨胀期
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved