999国内精品永久免费视频,色偷偷9999www,亚洲国产成人爱av在线播放,6080亚洲人久久精品,欧美超高清xxxhd

首頁(yè) 新聞 工控搜 論壇 廠(chǎng)商論壇 產(chǎn)品 方案 廠(chǎng)商 人才 文摘 下載 展覽
中華工控網(wǎng)首頁(yè)
  P L C | 變頻器與傳動(dòng) | 傳感器 | 現(xiàn)場(chǎng)檢測(cè)儀表 | 工控軟件 | 人機(jī)界面 | 運(yùn)動(dòng)控制
  D C S | 工業(yè)以太網(wǎng) | 現(xiàn)場(chǎng)總線(xiàn) | 顯示調(diào)節(jié)儀表 | 數(shù)據(jù)采集 | 數(shù)傳測(cè)控 | 工業(yè)安全
  電 源 | 嵌入式系統(tǒng) | PC based | 機(jī)柜箱體殼體 | 低壓電器 | 機(jī)器視覺(jué)
用 VC 在win95下編寫(xiě)用于串行通訊的程序
中華工控網(wǎng)
收藏本文     查看收藏
用 VC 在win95下編寫(xiě)用于串行通訊的程序 </P><P> <BR> 源自<img align=absmiddle src=pic/url.gif border=0><a target=_blank href=http://www.sixthnet.com/netech/articles/195.htm>http://www.sixthnet.com/netech/articles/195.htm<;/a></P><P> 頭文件(.H) </P><P> #include "StdAfx.h" </P><P> #define GWL_PGPSINFO 0 <BR> #define GPSEXTRABYTES sizeof( LONG ) </P><P> #define MAXPORTS 4 </P><P> #define CN_SEND WM_USER+100 </P><P> #define RXQUEUE 4096 <BR> #define TXQUEUE 4096 </P><P> // cursor states </P><P> #define CS_HIDE 0x00 <BR> #define CS_SHOW 0x01 </P><P> // Flow control flags </P><P> #define FC_DTRDSR 0x01 <BR> #define FC_RTSCTS 0x02 <BR> #define FC_XONXOFF 0x04 </P><P> // ascii definitions </P><P> #define ASCII_BEL 0x07 <BR> #define ASCII_BS 0x08 <BR> #define ASCII_LF 0x0A <BR> #define ASCII_CR 0x0D <BR> #define ASCII_XON 0x11 <BR> #define ASCII_XOFF 0x13 </P><P> // data structures </P><P> typedef struct tagGPSINFO <BR> { <BR> HANDLE idComDev; <BR> BYTE bPort; <BR> BOOL fConnected; <BR> BYTE bByteSize,bParity,bStopBits; <BR> DWORD dwBaudRate; </P><P> HANDLE hPostEvent,hWatchThread,hWatchEvent; <BR> HWND hTermWnd; <BR> DWORD dwThreadID; <BR> OVERLAPPED osWrite,osRead; <BR> } GPSINFO, *PGPSINFO ; </P><P> #define COMDEV( x ) (x -> idComDev) <BR> #define PORT( x ) (x -> bPort) <BR> #define CONNECTED( x ) (x -> fConnected) <BR> #define BYTESIZE( x ) (x -> bByteSize) <BR> #define PARITY( x ) (x -> bParity) <BR> #define STOPBITS( x ) (x -> bStopBits) <BR> #define BAUDRATE( x ) (x -> dwBaudRate) </P><P> #define POSTEVENT( x ) (x -> hPostEvent) <BR> #define HTHREAD( x ) (x -> hWatchThread) <BR> #define THREADID( x ) (x -> dwThreadID) <BR> #define WRITE_OS( x ) (x -> osWrite) <BR> #define READ_OS( x ) (x -> osRead) </P><P> // function prototypes (private) </P><P> LRESULT NEAR CreateGPSInfo(HWND,BYTE nPort=1); <BR> BOOL NEAR DestroyGPSInfo(); </P><P> int NEAR ReadCommBlock(LPSTR,int); <BR> BOOL NEAR WriteCommBlock(LPSTR,DWORD); <BR> BOOL NEAR OpenConnection(); <BR> BOOL NEAR SetupConnection(); <BR> BOOL NEAR CloseConnection(); </P><P> // function prototypes (public) </P><P> DWORD FAR PASCAL CommWatchProc(LPSTR); <BR> CPP實(shí)現(xiàn)部分: </P><P> #include "StdAfx.h" <BR> #include "Com.h" </P><P> HWND hGPSWnd=NULL; <BR> PGPSINFO npGPSInfo=NULL; </P><P> LRESULT NEAR CreateGPSInfo(HWND hWnd,BYTE nPort) <BR> { <BR> if (NULL==(npGPSInfo=(PGPSINFO)LocalAlloc(LPTR,sizeof(GPSINFO)))) <BR> return ((LRESULT)-1) ; </P><P> hGPSWnd=hWnd; </P><P> COMDEV(npGPSInfo)=0; <BR> CONNECTED(npGPSInfo)=FALSE; <BR> PORT(npGPSInfo)=nPort; <BR> BAUDRATE(npGPSInfo)=CBR_9600; <BR> BYTESIZE(npGPSInfo)=8; <BR> PARITY(npGPSInfo)=NOPARITY; <BR> STOPBITS(npGPSInfo)=ONESTOPBIT; </P><P> WRITE_OS(npGPSInfo).Offset=0; <BR> WRITE_OS(npGPSInfo).OffsetHigh=0; <BR> READ_OS(npGPSInfo).Offset=0; <BR> READ_OS(npGPSInfo).OffsetHigh=0; </P><P> // create I/O event used for overlapped reads / writes </P><P> READ_OS(npGPSInfo).hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); <BR> if (READ_OS(npGPSInfo).hEvent==NULL) <BR> { LocalFree( npGPSInfo ) ; <BR> return ( -1 ) ; <BR> } <BR> WRITE_OS(npGPSInfo).hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); <BR> if (NULL==WRITE_OS(npGPSInfo).hEvent) <BR> { CloseHandle(READ_OS(npGPSInfo).hEvent); <BR> LocalFree(npGPSInfo) ; <BR> return (-1) ; <BR> } </P><P> return ( (LRESULT) TRUE ) ; <BR> } </P><P> BOOL NEAR DestroyGPSInfo() <BR> { <BR> if (!npGPSInfo) return (FALSE); </P><P> if (CONNECTED(npGPSInfo)) CloseConnection(); </P><P> CloseHandle(READ_OS(npGPSInfo).hEvent); <BR> CloseHandle(WRITE_OS(npGPSInfo).hEvent); <BR> CloseHandle(POSTEVENT(npGPSInfo)); </P><P> LocalFree(npGPSInfo); <BR> return (TRUE); <BR> } </P><P> BOOL NEAR OpenConnection() <BR> { <BR> char szPort[15]; <BR> BOOL fRetVal; <BR> HCURSOR hOldCursor,hWaitCursor; </P><P> HANDLE hCommWatchThread; <BR> DWORD dwThreadID; <BR> COMMTIMEOUTS CommTimeOuts; </P><P> if (!npGPSInfo) return (FALSE); </P><P> hWaitCursor=LoadCursor(NULL,IDC_WAIT) ; <BR> hOldCursor=SetCursor(hWaitCursor) ; </P><P> wsprintf(szPort,"COM%d",PORT(npGPSInfo)); </P><P> if ((COMDEV(npGPSInfo)=CreateFile(szPort,GENERIC_READ|GENERIC_WRITE, <BR> 0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, <BR> NULL))==(HANDLE)-1) <BR> return ( FALSE ) ; <BR> else <BR> { SetCommMask(COMDEV(npGPSInfo),EV_RXCHAR); <BR> SetupComm(COMDEV(npGPSInfo),4096,4096); <BR> PurgeComm(COMDEV(npGPSInfo),PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR); <BR> CommTimeOuts.ReadIntervalTimeout=0xFFFFFFFF; <BR> CommTimeOuts.ReadTotalTimeoutMultiplier=0; <BR> CommTimeOuts.ReadTotalTimeoutConstant=1000; <BR> CommTimeOuts.WriteTotalTimeoutMultiplier=0; <BR> CommTimeOuts.WriteTotalTimeoutConstant=1000; <BR> SetCommTimeouts(COMDEV(npGPSInfo),&CommTimeOuts); <BR> } </P><P> fRetVal=SetupConnection(); </P><P> if (fRetVal) <BR> { CONNECTED(npGPSInfo)=TRUE; <BR> if (NULL==(hCommWatchThread=CreateThread((LPSECURITY_ATTRIBUTES)NULL, <BR> 0,(LPTHREAD_START_ROUTINE)CommWatchProc, <BR> (LPVOID)NULL,0,&dwThreadID))) <BR> { CONNECTED(npGPSInfo)=FALSE; <BR> CloseHandle(COMDEV(npGPSInfo)); <BR> fRetVal=FALSE; <BR> } <BR> else <BR> { THREADID(npGPSInfo)=dwThreadID; <BR> HTHREAD(npGPSInfo)=hCommWatchThread; <BR> EscapeCommFunction(COMDEV(npGPSInfo),SETDTR); <BR> } <BR> } <BR> else <BR> { CONNECTED(npGPSInfo)=FALSE; <BR> CloseHandle(COMDEV(npGPSInfo)); <BR> } </P><P> SetCursor(hOldCursor); <BR> return (fRetVal); <BR> } </P><P> BOOL NEAR SetupConnection() <BR> { BOOL fRetVal; <BR> DCB dcb; </P><P> if (!npGPSInfo) return(FALSE); </P><P> dcb.DCBlength=sizeof(DCB); </P><P> GetCommState(COMDEV(npGPSInfo),&dcb); </P><P> dcb.BaudRate=BAUDRATE(npGPSInfo); <BR> dcb.ByteSize=BYTESIZE(npGPSInfo); <BR> dcb.Parity=PARITY(npGPSInfo); <BR> dcb.StopBits=STOPBITS(npGPSInfo); </P><P> dcb.fOutxDsrFlow=FALSE; <BR> dcb.fDtrControl=DTR_CONTROL_ENABLE; </P><P> dcb.fOutxCtsFlow=FALSE; <BR> dcb.fRtsControl=RTS_CONTROL_ENABLE; <BR> dcb.fInX=dcb.fOutX=FALSE; <BR> dcb.fBinary=TRUE; <BR> dcb.fParity=TRUE; </P><P> fRetVal=SetCommState(COMDEV(npGPSInfo),&dcb); <BR> return (fRetVal); <BR> } </P><P> BOOL NEAR CloseConnection() <BR> { <BR> if (!npGPSInfo) return(FALSE); </P><P> CONNECTED(npGPSInfo)=FALSE; </P><P> SetCommMask(COMDEV(npGPSInfo),0); <BR> while(THREADID(npGPSInfo)!=0); </P><P> EscapeCommFunction(COMDEV(npGPSInfo),CLRDTR); <BR> PurgeComm(COMDEV(npGPSInfo),PURGE_TXABORT|PURGE_RXABORT| <BR> PURGE_TXCLEAR|PURGE_RXCLEAR); <BR> CloseHandle(COMDEV(npGPSInfo)); </P><P> return (TRUE); <BR> } </P><P> int NEAR ReadCommBlock(LPSTR lpszBlock,int nMaxLength) <BR> { <BR> BOOL fReadStat ; <BR> COMSTAT ComStat ; <BR> DWORD dwErrorFlags; <BR> DWORD dwLength; <BR> DWORD dwError; </P><P> if (!npGPSInfo) return(FALSE); </P><P> ClearCommError(COMDEV(npGPSInfo),&dwErrorFlags,&ComStat); <BR> dwLength=min((DWORD)nMaxLength,ComStat.cbInQue); </P><P> if (dwLength>0) <BR> { fReadStat=ReadFile(COMDEV(npGPSInfo),lpszBlock, <BR> dwLength,&dwLength,&READ_OS(npGPSInfo)); <BR> if (!fReadStat) <BR> { if (GetLastError()==ERROR_IO_PENDING) <BR> { OutputDebugString("\n\rIO Pending"); <BR> while(!GetOverlappedResult(COMDEV(npGPSInfo),&READ_OS(npGPSInfo),&dwLength,TRUE)) <BR> { dwError=GetLastError(); <BR> if(dwError == ERROR_IO_INCOMPLETE) continue; <BR> } </P><P> } <BR> else <BR> { dwLength=0; <BR> ClearCommError(COMDEV(npGPSInfo),&dwErrorFlags,&ComStat); <BR> } <BR> } <BR> } <BR> return ( dwLength ) ; <BR> } </P><P> BOOL NEAR WriteCommBlock(LPSTR lpByte,DWORD dwBytesToWrite) <BR> { BOOL fWriteStat; <BR> DWORD dwBytesWritten; <BR> DWORD dwErrorFlags; <BR> DWORD dwError; <BR> COMSTAT ComStat; </P><P> if (!npGPSInfo) return(FALSE); </P><P> fWriteStat=WriteFile(COMDEV(npGPSInfo),lpByte,dwBytesToWrite, <BR> &dwBytesWritten,&WRITE_OS(npGPSInfo)); </P><P> if (!fWriteStat) <BR> { if(GetLastError()==ERROR_IO_PENDING) <BR> { while(!GetOverlappedResult(COMDEV(npGPSInfo), <BR> &WRITE_OS(npGPSInfo),&dwBytesWritten,TRUE)) <BR> { dwError=GetLastError(); <BR> if(dwError == ERROR_IO_INCOMPLETE) continue; <BR> else <BR> { ClearCommError(COMDEV(npGPSInfo),&dwErrorFlags,&ComStat); <BR> break; <BR> } <BR> } <BR> } <BR> else <BR> { ClearCommError(COMDEV(npGPSInfo),&dwErrorFlags,&ComStat); <BR> return ( FALSE ); <BR> } <BR> } <BR> return ( TRUE ) ; </P><P> } </P><P> DWORD FAR PASCAL CommWatchProc(LPSTR) <BR> { DWORD dwEvtMask; <BR> OVERLAPPED os; <BR> int nLength; <BR> BYTE abIn[1024]; </P><P> memset(&os,0,sizeof(OVERLAPPED)); </P><P> // create I/O event used for overlapped read </P><P> os.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); <BR> if (os.hEvent==NULL) <BR> { MessageBox(NULL,"Failed to create event for thread!","GPS Error!",MB_ICONEXCLAMATION|MB_OK); <BR> return ( FALSE ) ; <BR> } </P><P> if (!SetCommMask(COMDEV(npGPSInfo),EV_RXCHAR)) return (FALSE); </P><P> while (CONNECTED( npGPSInfo)) <BR> { dwEvtMask=0 ; <BR> WaitCommEvent(COMDEV(npGPSInfo),&dwEvtMask,NULL); </P><P> if ((dwEvtMask&EV_RXCHAR)==EV_RXCHAR) <BR> { do <BR> { if (nLength=ReadCommBlock((LPSTR)abIn,1024)) <BR> { //WriteCommBlock((LPSTR)abIn,nLength ); <BR> *(abIn+nLength)=0; <BR> ::SendMessage(hGPSWnd,CN_SEND,nLength,(LONG)(LPSTR)abIn); <BR> } <BR> } <BR> while ((nLength>0)&&(CONNECTED( npGPSInfo))); <BR> } <BR> } </P><P> CloseHandle(os.hEvent); <BR> THREADID(npGPSInfo)=0; <BR> HTHREAD(npGPSInfo)=NULL; <BR> return(TRUE); <BR> } <BR> 一般使用的順序是: <BR> CreateGPSInfo(被通知的窗口句柄,串口端口號(hào)1或2); <BR> OpenConnection();//建立聯(lián)結(jié)它會(huì)調(diào)用SetupConnection <BR> DestroyGPSInfo();//解除聯(lián)結(jié)它會(huì)調(diào)用CloseConnection </P><P> 可以用ReadCommBlock/WriteCommBlock來(lái)讀/寫(xiě)串口 <BR> CommWatchProc是監(jiān)視串口的線(xiàn)程,由OpenConnection建立 </P><P> 當(dāng)串口有數(shù)據(jù)來(lái)的時(shí)侯,它會(huì)通知'被通知的窗口句柄'的窗口數(shù)據(jù)傳到的消息(自定義的) <BR> ∶:SendMessage(hGPSWnd,CN_SEND,nLength,(LONG)(LPSTR)abIn); </P><P> <BR>
 

狀 態(tài): 離線(xiàn)

公司簡(jiǎn)介
產(chǎn)品目錄

公司名稱(chēng): 中華工控網(wǎng)
聯(lián) 系 人: 客服中心
電  話(huà): 0755-26546361
傳  真: 0755-26585268
地  址: 深圳市南山區(qū)創(chuàng)業(yè)路現(xiàn)代城華庭1棟6A
郵  編: 518054
主  頁(yè):
 
該廠(chǎng)商相關(guān)技術(shù)文摘:
智能儀器儀表的發(fā)展特點(diǎn)與前景分析
電動(dòng)機(jī)性能虛擬儀器測(cè)試系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
視頻監(jiān)控護(hù)航高鐵安全運(yùn)營(yíng)
基于PLC,觸摸屏及變頻器對(duì)吹膜機(jī)的改造
永宏P(guān)LC應(yīng)用于自助圖書(shū)借還終端機(jī)
基于永宏P(guān)LC的GSM通訊原理及其應(yīng)用
改善汽車(chē)生態(tài)學(xué)、安全性和舒適性,四大測(cè)試分析是關(guān)鍵
改善汽車(chē)生態(tài)學(xué)、安全性和舒適性,四大測(cè)試分析是關(guān)鍵
數(shù)控技術(shù)的發(fā)展趨勢(shì)及產(chǎn)業(yè)化
數(shù)控技術(shù)發(fā)展戰(zhàn)略與發(fā)展途徑的思考
用Energid 的軟件進(jìn)行機(jī)器人的抓取和操作
如何借助RFID技術(shù)升級(jí)企業(yè)信息管理水平
更多文摘...
立即發(fā)送詢(xún)問(wèn)信息在線(xiàn)聯(lián)系該技術(shù)文摘廠(chǎng)商:
用戶(hù)名: 密碼: 免費(fèi)注冊(cè)為中華工控網(wǎng)會(huì)員
請(qǐng)留下您的有效聯(lián)系方式,以方便我們及時(shí)與您聯(lián)絡(luò)

關(guān)于我們 | 聯(lián)系我們 | 廣告服務(wù) | 本站動(dòng)態(tài) | 友情鏈接 | 法律聲明 | 不良信息舉報(bào)
工控網(wǎng)客服熱線(xiàn):0755-86369299
版權(quán)所有 中華工控網(wǎng) Copyright©2022 Gkong.com, All Rights Reserved