已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WIN95界面下的VC+串口通讯程序在WIN32下是不建议对端口进行操作的,在WIN32中所有的设备都被看成是文件,串行口也不例外也是作为文件来进行处理的。关键词串行口,DWORD,缓冲区WIN95界面下的VC+串口通讯程序在WIN32下是不建议对端口进行操作的,在WIN32中所有的设备都被看成是文件,串行口也不例外也是作为文件来进行处理的。这是我的一份关于串口编程的读书笔记,对于使用VC进行编程的同行应该有一定的帮助。1.打开串口:在Window 95下串行口作为文件处理,使用文件操作对串行口进行处理。使用CreateFile()打开串口,CreateFile()将返回串口的句柄。HANDLE CreateFile(LPCTSTR lpFileName, / pointer to name of the fileDWORD dwDesiredAccess, / access (read-write) modeDWORD dwShareMode, / share modeLPSECURITY_ATTRIBUTES lpSecurityAttributes, / pointer to security attributesDWORD dwCreationDistribution, / how to createDWORD dwFlagsAndAttributes, / file attributesHANDLE hTemplateFile / handle to file with attributes to copy);lpFileName: 指明串口制备,例:COM1,COM2dwDesiredAccess:指明串口存取方式,例:GENERIC_READ|GENERIC_WRITEdwShareMode: 指明串口共享方式lpSecurityAttributes: 指明串口的安全属性结构,NULL为缺省安全属性dwCreateionDistribution: 必须为OPEN_EXISTINdwFlagAndAttributes: 对串口唯一有意义的是FILE_FLAG_OVERLAPPEDhTemplateFile: 必须为NULL2.关闭串口:CloseHandle(hCommDev);3.设置缓冲区长度:BOOL SetupComm(HANDLE hFile, / handle of communications deviceDWORD dwInQueue, / size of input bufferDWORD dwOutQueue / size of output buffer);4.COMMPROP结构:可使用GetCommProperties()取得COMMPROP结构,COMMPROP结构中记载了系统支持的各项设置。typedef struct _COMMPROP / cmmpWORD wPacketLength; / packet size, in bytesWORD wPacketVersion; / packet versionDWORD dwServiceMask; / services implementedDWORD dwReserved1; / reservedDWORD dwMaxTxQueue; / max Tx bufsize, in bytesDWORD dwMaxRxQueue; / max Rx bufsize, in bytesDWORD dwMaxBaud; / max baud rate, in bpsDWORD dwProvSubType; / specific provider typeDWORD dwProvCapabilities; / capabilities supportedDWORD dwSettableParams; / changeable parametersDWORD dwSettableBaud; / allowable baud ratesWORD wSettableData; / allowable byte sizesWORD wSettableStopParity; / stop bits/parity allowedDWORD dwCurrentTxQueue; / Tx buffer size, in bytesDWORD dwCurrentRxQueue; / Rx buffer size, in bytesDWORD dwProvSpec1; / provider-specific dataDWORD dwProvSpec2; / provider-specific dataWCHAR wcProvChar1; / provider-specific data COMMPROP;dwMaxBaud:BAUD_075 75 bpsBAUD_110 110 bpsBAUD_134_5 134.5 bpsBAUD_150 150 bpsBAUD_300 300 bpsBAUD_600 600 bpsBAUD_1200 1200 bpsBAUD_1800 1800 bpsBAUD_2400 2400 bpsBAUD_4800 4800 bpsBAUD_7200 7200 bpsBAUD_9600 9600 bpsBAUD_14400 14400 bpsBAUD_19200 19200 bpsBAUD_38400 38400 bpsBAUD_56K 56K bpsBAUD_57600 57600 bpsBAUD_115200 115200 bpsBAUD_128K 128K bpsBAUD_USER Programmable baud rates availabledwProvSubType:PST_FAX 传真设备PST_LAT LAT协议PST_MODEM 调制解调器设备PST_NETWORK_BRIDGE 未指定的网桥PST_PARALLELPORT 并口PST_RS232 RS-232口PST_RS422 RS-422口PST_RS423 RS-432口PST_RS449 RS-449口PST_SCANNER 扫描仪设备PST_TCPIP_TELNET TCP/IP Telnet协议PST_UNSPECIFIED 未指定PST_X25 X.25标准dwProvCapabilitiesPCF_16BITMODE 支持特殊的位模式PCF_DTRDSR 支持DTR(数据终端就绪)/DSR(数据设备就绪)PCF_INTTIMEOUTS 支持区间超时PCF_PARITY_CHECK 支持奇偶校验PCF_RLSD 支持RLSD(接收线信号检测)PCF_RTSCTS 支持RTS(请求发送)/CTS(清除发送)PCF_SETXCHAR 支持可设置的XON/XOFFPCF_SPECIALCHARS 支持特殊字符PCF_TOTALTIMEOUTS 支持总(占用时间)超时PCF_XONXOFF 支持XON/XOFF流控制标准RS-232和WINDOW支持除PCF_16BITMODE和PCF_SPECIALCHAR外的所有功能dwSettableParamsSP_BAUD 可配置波特率SP_DATABITS 可配置数据位个数SP_HANDSHAKING 可配置握手(流控制)SP_PARITY 可配置奇偶校验模式SP_PARITY_CHECK 可配置奇偶校验允许/禁止SP_RLSD 可配置RLSD(接收信号检测)SP_STOPBITS 可配置停止位个数标准RS-232和WINDOW支持以上所有功能wSettableDataDATABITS_5 5个数据位DATABITS_6 6个数据位DATABITS_7 7个数据位DATABITS_8 8个数据位DATABITS_16 16个数据位DATABITS_16X 通过串行硬件线路的特殊宽度路径WINDOWS 95支持的所有设置5.DCB结构:typedef struct _DCB / dcbDWORD DCBlength; / sizeof(DCB)DWORD BaudRate; / current baud rate指定当前的波特率DWORD fBinary: 1;/binary mode,no EOF check指定是否允许二进制模式,WINDOWS 95中必须为TRUEDWORD fParity: 1; / enable parity checking指定奇偶校验是否允许DWORD fOutxCtsFlow:1;/ CTS output flow control指定CTS是否用于检测发送控制。当为TRUE是CTS为OFF,发送将被挂起。DWORD fOutxDsrFlow:1; / DSR output flow control指定CTS是否用于检测发送控制。当为TRUE是CTS为OFF,发送将被挂起。DWORD fDtrControl:2; / DTR flow control typeDTR_CONTROL_DISABLE值将DTR置为OFF, DTR_CONTROL_ENABLE值将DTR置为ON, DTR_CONTROL_HANDSHAKE允许DTR握手,DWORD fDsrSensitivity:1; / DSR sensitivity 当该值为TRUE时DSR为OFF时接收的字节被忽略DWORD fTXContinueOnXoff:1; / XOFF continues Tx指定当接收缓冲区已满,并且驱动程序已经发送出XoffChar字符时发送是否停止。TRUE时,在接收缓冲区接收到缓冲区已满的字节XoffLim且驱动程序已经发送出XoffChar字符中止接收字节之后,发送继续进行。FALSE时,在接收缓冲区接收到代表缓冲区已空的字节XonChar且驱动程序已经发送出恢复发送的XonChar之后,发送继续进行。DWORD fOutX: 1; / XON/XOFF out flow controlTRUE时,接收到XoffChar之后便停止发送接收到XonChar之后将重新开始DWORD fInX: 1; / XON/XOFF in flow controlTRUE时,接收缓冲区接收到代表缓冲区满的XoffLim之后,XoffChar发送出去接收缓冲区接收到代表缓冲区空的XonLim之后,XonChar发送出去DWORD fErrorChar: 1; / enable error replacement该值为TRUE且fParity为TRUE时,用ErrorChar 成员指定的字符代替奇偶校验错误的接收字符DWORD fNull: 1; / enable null strippingTRUE时,接收时去掉空(值)字节DWORD fRtsControl:2; / RTS flow controlRTS_CONTROL_DISABLE时,RTS置为OFFRTS_CONTROL_ENABLE时, RTS置为ONRTS_CONTROL_HANDSHAKE时,当接收缓冲区小于半满时RTS为ON当接收缓冲区超过四分之三满时RTS为OFFRTS_CONTROL_TOGGLE时,当接收缓冲区仍有剩余字节时RTS为ON ,否则缺省为OFFDWORD fAbortOnError:1; / abort reads/writes on error TRUE时,有错误发生时中止读和写操作DWORD fDummy2:17; / reserved未使用WORD wReserved; / not currently used未使用,必须为WORD XonLim; / transmit XON threshold指定在XON字符发送这前接收缓冲区中可允许的最小字节数WORD XoffLim; / transmit XOFF threshold指定在XOFF字符发送这前接收缓冲区中可允许的最小字节数BYTE ByteSize; / number of bits/byte, 4-8指定端口当前使用的数据位BYTE Parity; / 0-4=no,odd,even,mark,space指定端口当前使用的奇偶校验方法,可能为:EVENPARITY,MARKPARITY,NOPARITY,ODDPARITYBYTE StopBits; / 0,1,2 = 1, 1.5, 2指定端口当前使用的停止位数,可能为:ONESTOPBIT,ONE5STOPBITS,TWOSTOPBITSchar XonChar; / Tx and Rx XON character指定用于发送和接收字符XON的值char XoffChar; / Tx and Rx XOFF character指定用于发送和接收字符XOFF值char ErrorChar; / error replacement character本字符用来代替接收到的奇偶校验发生错误时的值char EofChar; / end of input character当没有使用二进制模式时,本字符可用来指示数据的结束char EvtChar; / received event character当接收到此字符时,会产生一个事件WORD wReserved1; / reserved; do not use 未使用 DCB;6.改变端口设置使用如下的两个方法BOOL GetCommState(hComm,&dcb);BOOL SetCommState(hComm,&dcb);7.改变普通设置BuildCommDCB(szSettings,&DCB);szSettings的格式:baud parity data stop例: baud=96 parity=n data=8 stop=1简写:96,N,8,1szSettings 的有效值baud:or 110 = 110 bpsor 150 = 150 bpsor 300 = 300 bpsor 600 = 600 bpsor 1200 = 1200 bpsor 2400 = 2400 bpsor 4800 = 4800 bpsor 9600 = 9600 bpsor 19200= 19200bpsparity:n=nonee=eveno=oddm=marks=spacedata:,6,7,8StopBit,1.5,28.COMMCONFIG结构:typedef struct _COMM_CONFIGDWORD dwSize;WORD wVersion;WORD wReserved;DCB dcb;DWORD dwProviderSubType;DWORD dwProviderOffset;DWORD dwProviderSize;WCHAR wcProviderData1; COMMCONFIG, *LPCOMMCONFIG;可方便的使用BOOL CommConfigDialog(LPTSTR lpszName,HWND hWnd,LPCOMMCONFIG lpCC);来设置串行口。9.超时设置:可通过COMMTIMEOUTS结构设置超时,typedef struct _COMMTIMEOUTS DWORD ReadIntervalTimeout;DWORD ReadTotalTimeoutMultiplier;DWORD ReadTotalTimeoutConstant;DWORD WriteTotalTimeoutMultiplier;DWORD WriteTotalTimeoutConstant; COMMTIMEOUTS,*LPCOMMTIMEOUTS;区间超时:(仅对从端口中读取数据有用)它指定在读取两个字符之间要经历的时间总超时: 当读或写特定的字节数需要的总时间超过某一阈值时,超时触发.超时公式:ReadTotalTimeout = (ReadTotalTimeoutMultiplier * bytes_to_read)+ReadToTaltimeoutConstantWriteTotalTimeout = (WriteTotalTimeoutMuliplier * bytes_to_write)+WritetoTotalTimeoutConstantNOTE:在设置超时时参数为无限等待,既无超时参数MAXDWORD为立即返回超时设置:GetCommTimeouts(hComm,&timeouts);SetCommTimeouts(hComm,&timeouts);10.查询方式读写数据例程:COMMTIMEOUTS to;DWORD ReadThread(LPDWORD lpdwParam)BYTE inbuff100;DWORD nBytesRead;if(!(cp.dwProvCapabilities&PCF_INTTIMEOUTS)return 1L;memset(&to,0,sizeof(to);to.ReadIntervalTimeout = MAXDWORD;SetCommTimeouts(hComm,&to);while(bReading)if(!ReadFile(hComm,inbuff,100,&nBytesRead,NULL)locProcessCommError(GetLastError();else if(nBytesRead)locProcessBytes(inbuff,nBytesRead);PurgeComm(hComm,PURGE_RXCLEAR);return 0L;NOTE:PurgeComm()是一个清除函数,它可以中止任何未决的后台读或写,并且可以冲掉I/O缓冲区.BOOL PurgeComm(HANDLE hFile,DWORD dwFlags);dwFlages的有效值:PURGE_TXABORT: 中止后台写操作PRUGE_RXABORT: 中止后台读操作PRUGE_TXCLEAR: 清除发送缓冲区PRUGE_RXCLEAR: 清除接收缓冲区技巧:可通过ClearCommError()来确定接收缓区中处于等待的字节数。BOOL ClearCommError(HANDLE hFile, / handle to communications deviceLPDWORD lpErrors, / pointer to variable to receive error codesLPCOMSTAT lpStat/ pointer to buffer for communications status);ClearCommError()将返回一个COMSTAT结构:typedef struct _COMSTAT / cstDWORD fCtsHold : 1; / Tx waiting for CTS signalDWORD fDsrHold : 1; / Tx waiting for DSR signalDWORD fRlsdHold : 1; / Tx waiting for RLSD signalDWORD fXoffHold : 1; / Tx waiting, XOFF char recdDWORD fXoffSent : 1; / Tx waiting, XOFF char sentDWORD fEof : 1; / EOF character sentDWORD fTxim : 1; / character waiting for TxDWORD fReserved : 25; / reservedDWORD cbInQue; / bytes in input bufferDWORD cbOutQue; / bytes in output buffer COMSTAT, *LPCOMSTAT;其中的cbInQue和cbOutQue中即为缓冲区字节。11.同步I/O读写数据COMMTIOMOUTS to;DWORD ReadThread(LPDWORD lpdwParam)BYTE inbuff100;DWORD nByteRead,dwErrorMask,nToRead;COMSTAT comstat;if(!cp.dwProvCapabilities&PCF_TOTALTIMEOUTS)return 1L;memset(&to,0,sizeof(to);to.ReadTotalTimeoutMultiplier = 5;to.ReadTotalTimeoutConstant = 50;SetCommTimeouts(hComm,&to);while(bReading)ClearCommError(hComm,&dwErrorMask,&comstat);if(dwErrorMask)locProcessCommError(dwErrorMask);if(comstat.cbInQue 100)nToRead = 100;elsenToRead = comstat.cbInQue;if(nToRead = 0)continue;if(!ReadFile(hComm,inbuff,nToRead,&nBytesRead,NULL)locProcessCommError(GetLastError();else if(nBytesRead)locProcessBytes(inbuff,nBytesRead);return 0L;12.异步I/O读写数据当CreateFile()中的fdwAttrsAndFlags参数为FILE_FLAG_OVERLAPPEN时, 端口是为异步I/O打开的,此时可以在ReadFile的最后一个参数中指定一个OVERLAPPED结构,使数据的读操作在后台进行。WINDOWS 95包括了异步I/O的许多变种。typedef struct _OVERLAPPED DWORD Internal;DWORD InternalHigh;DWORD Offset;DWORD OffsetHigh;HANDLE hEvent; OVERLAPPED;对于串行口仅hEvent成员有效,其于成员必须为。例程:COMMTIMEOUTS to;.DWORD ReadThread(LPDWORD lpdwParam)BYTE inbuff100;DWORD nRytesRead,endtime,lrc;static OVERLAPPED o;if(!cp.dwProvCapabilities & PCF_TOTALTIMEOUTS)return 1L;memset(&to,0,sizeof(to);to.ReadTotalTimeoutMultiplier = 5;to.ReadTotalTimeoutConstant = 1000;SetCommTimeouts(hComm,&to);o.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);while(bReading)if(!ReadFile(hComm,inbuff,10,&nBytesRead,&o)nBytesRead = 0;if(lrc=GetLastError() = ERROR_IO_PENDING)endtime = GetTickCount() + 1000;while(!GetOverlappedResult(hComm,&o,&nBytesRead,FALSE)if(GetTickCount() endtime)break;if(nBytesRead)locProcessBytes(inbuff,nBytesRead);else/(!ReadFile(hComm,inbuff,10,&nBytesRead,&o)if(nBytesRead) locProcessBytes(inbuff,nBytesRead);ResetEvent(o.hEvent);PurgeComm(hComm,PURGE_RXCLEAR);return 0L;这一例程是对一开始读缓冲区就读到所需的字节时的处理:while(bReading)if(!ReadFile(hComm,inbuff,10,&nBytesRead,&o)if(lrc=GetLastError() =ERROR_IO_PENDING)if(GetOverlappedResult(hComm,&o,&nBytesRead,TRUE)if(nBytesRead)locProcessBytesa(inbuff,nBytesRead);elselocProcessCommError(GetLastError();elselocProcessCommError(GetLastError);elseif(nBytesRead) locProcessBytes(inbuff,nBytesRead);ResetEvent(o.hEvent);13.事件驱I/O读写:GetCommMask(hComm,&dwMask)Windows 95报告给应用程序的事件由此方法返回。SetCommMasl(hComm,&dwMask)添加或修改Windows 95所报告的事件列表。事件掩码如下:EV_BREAK 检测到输入为止EV_CTS CTS(清除发送)信号改变状态EV_DSR DSR(数据设置就绪)信号改变状态EV_ERR 发生了线路状态错误.线路状态错误为:CE_FRAME(帧错误)CE_OVERRUN(接收缓冲区超限)CE_RXPARITY(奇偶校验错误)EV_RING 检测到振铃EV_RLSD RLSD(接收线路信号检测)信号改变状态EV_EXCHAR 接收到一个字符,并放入输入缓冲区EV_RXFLAG 接收到事件字符(DCB成员的EvtChar成员),度放入输入缓冲区EV_TXEMPTY 输出缓冲区中最后一个字符发送出去在用SetCommMask指定了有用的事件后,应用程序可调用WaitCommEvent()来等待事件发生.BOOL WaitCommEvent(HANDLE hFile, / handle of communications deviceLPDWORD lpEvtMask, / address of variable for event that occurredLPOVERLAPPED lpOverlapped, / address of overlapped structure);此方法可以以同步或异步方式操作例程:COMMTIMEOUTS to.DWORD ReadTherad(LPDWORD lpdwParam)BYTE binbuff100;DWORD nBytesRead,dwEvent,dwError;COMSTAT cs;SetCommMask(hComm,EV_RXHAR);while(bReading)if(WaitCommEvent(hComm,&dwEvent,NULL)ClearCommError(hComm,&dwError,&cs);if(dwEvent&EV_RXCHAR)&cs.cbInQue)if(!ReadFile(hComm,inbuff,cs.cbInQue,&nBytesRead,NULL)locProcessCommError(GetLastError();elseif(nByteRead)locProcessBytes(inbuff,nBytesRead);elselocProcessCommError(GetLastError();PurgeComm(hComm,PURGE_RXCLEAR);return 0L;NOTE: SetCommMask(hComm,0)可使WaitCommEvent()中止.可使用GetCommmodemStatus()方法,例程:if(cp.dwProvCapabilities&PCF_RTSCTS)SetCommMask(hComm,EV_CTS);WaitCommEvent(hComm,&dwMask,NULL);if(dwMask&EV_CTS)GetCommModemStatus(hComm,&dwStatus)if(dwStatus&MS_CTS_ON) /* CTS stransition OFF-ON */else /* CTS stransition ON-OFF */MS_CTS_ON CTS为ONMS_DSR_ON DSR为ONMS_RING_ON RING为ONMS_ELSD_ON RLSD为ON14.错误当发生错误时应用方法ClearCommError(hComm,&dwErrorMask,&constat)得到错误掩码。CE_BREAK 中止条件CE_FRAME 帧错误CW_IOE 一般I/O错误,常伴有更为详细的错误标志CE_MODE 不支持请求的模式CE_OVERRUN 缓冲区超限下一个字符将丢失CE_RXOVER 接收缓冲区超限CE_RXPARITY 奇偶校验错误CE_TXFULL 发送缓冲区满CE_DNS 没有选择并行设备CE_PTO 并行设备发生超时CE_OOP 并行设备缺纸15.控制命令EscapeCommFunction()可将硬件信号置ON或OFF,模拟XON或XOFFBOOL EscapeCommFunction(HANDLE hFile, / handle to communications deviceDWORD dwFunc / extended function to perform);dwFunc的有效值(可用|同时使用多个值)CLRDTR DTR置OFFCLRRTS RTS置OFFSETDTR STR置ONSETRTS TRS置ONSETXOFF 模拟XOFF字符的接收SETXON 模拟XON字符的接收SETBREAK 在发送中产生一个中止CLRBREAK 在发送中清除中止第一部分完VC+ 的串口通讯在VC+中有两种方法可以进行串口通讯。一种是利用Microsoft公司提供的ActiveX控件Microsoft Communications Control。另一种是直接用VC+访问串口。下面将简述这两种方法。一、Microsoft Communications ControlMicrosoft公司在WINDOWS中提供了一个串口通讯控件,用它,我们可以很简单的利用串口进行通讯。在使用它之前,应将控件加在应用程序的对话框上。然后再用ClassWizard 生成相应的对象。现在我们可以使用它了。该控件有很多自己的属性,你可以通过它的属性窗口来设置,也可以用程序设置。我推荐用程序设置,这样更灵活。SetCommPort:指定使用的串口。GetCommPort:得到当前使用的串口。SetSettings:指定串口的参数。一般设为默认参数9600,N,。这样方便与其他串口进行通讯。GetSettings:取得串口参数。SetPortOpen:打开或关闭串口,当一个程序打开串口时,另外的程序将无法使用该串口。GetPortOpen:取得串口状态。GetInBufferCount:输入缓冲区中接受到的字符数。SetInPutLen:一次读取输入缓冲区的字符数。设置为时,程序将读取缓冲区的全部字符。GetInPut:读取输入缓冲区。GetOutBufferCount:输出缓冲区中待发送的字符数。SetOutPut:写入输出缓冲区。一般而言,使用上述函数和属性就可以进行串口通讯了。以下是一个范例。#define MESSAGELENGTH 100class CMyDialog : public CDialogprotected: VARIANT InBuffer;VARIANT OutBuffer;CMSComm m_Com;public:.;BOOL CMyDiaLog:OnInitDialog()CDialog:OnInitDialog();m_Com.SetCommPort(1);if (!m_Com.GetPortOpen() m_Com.SetSettings(57600,N,8,1);m_Com.SetPortOpen(true);m_Com.SetInBufferCount(0);SetTimer(1,10,NULL);InBuffer.bstrVal=new unsigned shortMESSAGELENGTH;OutBuffer.bstrVal=new unsigned shortMESSAGELENGTH;OutBuffer.vt=VT_BSTR;return true;void CMyDiaLog:OnTimer(UINT nIDEvent) if (m_Com.GetInBufferCount()=MESSAGELENGTH)InBuffer=m_Com.GetInput();/ handle the InBuffer. / Fill the OutBuffer. m_Com.SetOutput(OutBuffer);CDialog:OnTimer(nIDEvent);用该控件传输的数据是UNICODE格式。关于UNICODE和ANSI的关系和转换请参看MSDN。关于该控件的其他详细资料请查看MSDN关于COMM CONTROL部分。二、直接用VC+访问串口。在VC+中,串口和磁盘文件可以统一的方式来简单读写。这两者几乎没有什么不同,只是在WINDOWS 9X下磁盘文件只能做同步访问,而串口只能做异步访问。CreateFile:用指定的方式打开指定的串口。通常的方式为m_hCom = CreateFile( COM1, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL );m_hCom为文件句柄。GENERIC_READ | GENERIC_WRITE指定可以对串口进行读写操作。第三个参数表示串口为独占打开。OPEN_EXISTING表示当指定串口不存在时,程序将返回失败。FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED则表示文件属性。当打开串口时,必须指定FILE_FLAG_OVERLAPPED,它表示文件或设备不会维护访问指针,则在读写时,必须使用OVERLAPPED 结构指定访问的文件偏移量。ReadFile:读取串口数据。WriteFile:向串口写数据。CloseHandle:关闭串口。COMMTIMEOUTS:COMMTIMEOUTS主要用于串口超时参数设置。COMMTIMEOUTS结构如下:typedef struct _COMMTIMEOUTS DWORD ReadIntervalTimeout; DWORD ReadTotalTimeoutMultiplier; DWORD ReadTotalTimeoutConstant; DWORD WriteTotalTimeoutMultiplier; DWORD WriteTotalTimeoutConstant; COMMTIMEOUTS,*LPCOMMTIMEOUTS; ReadIntervalTimeout:两字符之间最大的延时,当读取串口数据时,一旦两个字符传输的时间差超过该时间,读取函数将返回现有的数据。设置为表示该参数不起作用。ReadTotalTimeoutMultiplier:读取每字符间的超时。ReadTotalTimeoutConstant:一次读取串口数据的固定超时。所以在一次读取串口的操作中,其超时为ReadTotalTimeoutMultiplier乘以读取的字节数再加上ReadTotalTimeoutConstant。将ReadIntervalTimeout设置为MAXDWORD,并将ReadTotalTimeoutMultiplier 和ReadTotalTimeoutConstant设置为,表示读取操作将立即返回存放在输入缓冲区的字符。WriteTotalTimeoutMultiplier:写入每字符间的超时。WriteTotalTimeoutConstant:一次写入串口数据的固定超时。所以在一次写入串口的操作中,其超时为WriteTotalTimeoutMultiplier乘以写入的字节数再加上WriteTotalTimeoutConstant。SetCommTimeouts函数可以设置某设备句柄的超时参数,要得到某设备句柄的超时参数可以用GetCommTimeouts函数。DCB:DCB结构主要用于串口参数设置。该结构太庞大,这里就不一一讲述了,有兴趣者可查看MSDN关于DCB的描述。其中下面两个是比较重要的属性。BaudRate:串口的通讯速度。一般设置为。ByteSize:字节位数。一般设置为。DCB结构可以用SetCommState函数来设置,并可以用GetCommState来得到现有串口的属性。SetupComm:设置串口输入、输出缓冲区。OVERLAPPED:保存串口异步通讯的信息。具体结构如下:typedef struct _OVERLAPPED DWORD Internal; DWORD InternalHigh; DWORD Offset; DWORD OffsetHigh; HANDLE hEvent; OVERLAPPED; Internal,InternalHigh是保留给系统使用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 卫生间改造合同模板
- 2026-2031中国宠物托运行业发展现状调研与投资前景预测报告文档
- 2026-2031中国硅酸四甲酯行业市场分析及投资机遇研究报告
- 2026-2031中国光电子材料市场前景展望分析及竞争格局预测研发报告
- 2026-2031中国工艺陶瓷行业市场研究及发展前景预测
- 建筑结构与施工管理题库及答案
- 2025年电工证考试试题及答案
- 2025年成人高考专升本政治统一考试试卷真题及答案
- 2025年曲靖市加氢工艺操作证理论考试练习题含答案
- 2025年防灾减灾与应急求援知识考察试题及答案解析
- 国有土地上房屋征收社会稳定风险评估报告
- 胸腺瘤放射治疗临床应用与进展
- 基于CFD的新型超音速冷喷涂喷管气动设计与数值模拟
- 牧原企业文化培训考试题及答案
- 借用金融牌照协议书
- DB31T 1553-2025 城市轨道交通设施设备日常维护与大修更新改造技术要求
- 《儿童流行性感冒》课件
- 2025年电子信息工程专业考试卷及答案
- 住宅保安合同样本
- QGDW11882-2018预制舱式10kV~35kV一二次组合设备技术规范
- 降低术后疼痛护理品管圈
评论
0/150
提交评论