资源描述:
《传统仪器与虚拟仪器中串行通信的实现new》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、2005年仪表技术与传感器2005第2期InstrumentTechniqueandSensorNo12传统仪器与虚拟仪器中串行通信的实现李诗晗,黄绵华(武汉大学,湖北武汉430072)摘要:调用Win32API函数和使用ActiveX控件MSComm是实现传统仪器与计算机之间的串行通信的常用方法,文中叙述了这两种方法并讨论了在虚拟仪器系统开发中,如何借助其软件平台LabWin2dows/CVI可靠地实现串行通信。关键词:串行通信;Win32API函数;MSComm;虚拟仪器;LabWindows/CVI中图分类号:TP393文献标识码:A文章编号:1
2、002-1841(2005)02-0023-03RealizationofSerialCommunicationinTraditionalInstrumentandVirtualInstrumentLIShi2han,HUANGMian2hua(WuhanUniversity,Wuhan430072,China)Abstract:DescribedtwomethodsthatcallingWin32APIfunctionandusingMSComm.Theywerefrequentlyusedtorealizethese2rialcommunicati
3、onbetweentraditionalinstrumentsandcomputers.ItalsodiscussedhowtouseLabWindows/CVI,avirtualinstrumentsoftwaredevelopmentplatformtorealizetheserialcommunicationreliably.KeyWords:SerialCommunication;Win32APIFunction;MSComm;VirtualInstrument;LabWindows/CVI1引言Windows系统将串口看成和文件一样操作,使用
4、[1]串行通信端口由于其简便、灵活和可靠而被广泛相同的读、写函数。用CreatFile函数打开串口,例地应用于工业控制和自动化仪器仪表中。串行通信如打开端口COM1:方式仍然是虚拟仪器系统中连接采集硬件和上位机Handle=CreateFile“(COM1”,GENERICËREAD1之间的最易实现和最经济的方式,虚拟仪器常用的软GENERICËWRITE,0,NULL,OPENËEXISTING,0,0);件开发平台LabWindows/CVI中提供了专门的函数库各参数意义如下:实现这种串行通信。“COM1”:文件名指针,对串口通讯来说就是2调用Wi
5、n32API函数COM1、COM2等Windows操作系统是通过Win32API函数为应用GENERICËREAD
6、GENERICËWRITE:读写模式常数程序提供编程接口和执行环境的。API函数使用的定0:dwShareMode,设为0表示不共享串口义都是基于C和C++语言的定义方式,但是可以被NULL:设为NULL表示返回的HANDLE不可继承不同语言编写的程序调用,其中与串行通信相关的函POENEXISTING:文件打开方式数大概有20个。利用API函数实现串口通信的软件0:文件属性及相关标志,设置为0表示使用同步流程图如图1所示。的方式实现串行
7、数据传输打开成功后得到一个Handle值,在程序中使用此Handle值进行相关的串口操作。串口通信参数有很多,但是经常会修改的只有几个,如波特率、数据位数、校验位种类、停止位等。所以通常先用GetComm2State函数得到串口的参数结构,修改参数后再用Set2CommState函数设置端口状态。/3取得端口的状态参数并存放在DCB结构类型的变量control中3/GetCommState(Handle,&control);/3修改参数3/control.BaudRate=CBRË9600;control.ByteSize=8;control.Pari
8、ty=NOPARITY;收稿日期:2004-03-23收修改稿日期:2004-10-23control.StopBits=0;©1994-2010ChinaAcademicJournalElectronicPublishingHouse.Allrightsreserved.http://www.cnki.net24InstrumentTechniqueandSensorFeb12005/3设置通信参数3/if(!MSComm1->PortOpen)SetCommState(Handle,&control);{用WriteFile函数向串行端口写入数据,
9、ReadFileMSComm12>CommPort=2;//指定要使用的串函数读取串口中的数据