<style id="7i3y3"></style>

      <sub id="7i3y3"><i id="7i3y3"></i></sub>

        午夜精品一区二区三区成人,中文字幕av一区二区,亚洲AVAV天堂AV在线网阿V,肥臀浪妇太爽了快点再快点,国产网友愉拍精品视频手机,国产精品无码a∨麻豆,久久中文字幕一区二区,a级国产乱理伦片在线观看al
        首頁 新聞 工控搜 論壇 廠商論壇 產品 方案 廠商 人才 文摘 下載 展覽
        中華工控網首頁
          P L C | 變頻器與傳動 | 傳感器 | 現場檢測儀表 | 工控軟件 | 人機界面 | 運動控制
          D C S | 工業以太網 | 現場總線 | 顯示調節儀表 | 數據采集 | 數傳測控 | 工業安全
          電 源 | 嵌入式系統 | PC based | 機柜箱體殼體 | 低壓電器 | 機器視覺
        用 VC 在win95下編寫用于串行通訊的程序
        中華工控網
        收藏本文     查看收藏
        用 VC 在win95下編寫用于串行通訊的程序 </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實現部分: </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(被通知的窗口句柄,串口端口號1或2); <BR> OpenConnection();//建立聯結它會調用SetupConnection <BR> DestroyGPSInfo();//解除聯結它會調用CloseConnection </P><P> 可以用ReadCommBlock/WriteCommBlock來讀/寫串口 <BR> CommWatchProc是監視串口的線程,由OpenConnection建立 </P><P> 當串口有數據來的時侯,它會通知'被通知的窗口句柄'的窗口數據傳到的消息(自定義的) <BR> ∶:SendMessage(hGPSWnd,CN_SEND,nLength,(LONG)(LPSTR)abIn); </P><P> <BR>
         

        狀 態: 離線

        公司簡介
        產品目錄

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

        關于我們 | 聯系我們 | 廣告服務 | 本站動態 | 友情鏈接 | 法律聲明 | 不良信息舉報
        工控網客服熱線:0755-86369299
        版權所有 中華工控網 Copyright©2022 Gkong.com, All Rights Reserved

        主站蜘蛛池模板: 99精品人妻少妇一区二区| 丁香婷婷色综合激情五月| 九九热免费在线观看视频| 精品无码国产自产拍在线观看蜜 | 亚洲色一色噜一噜噜噜| 国产精品人成在线播放蜜臀| 欧美三级中文字幕在线观看| 五月综合激情婷婷六月| 激情综合网激情五月我去也| 日韩精品国产二区三区| 国产不卡一区二区三区视频| 亚洲最大福利视频网| 亚洲香蕉伊综合在人在线| 国产好大好硬好爽免费不卡| 日韩欧美中文字幕在线精品| 中文有无人妻vs无码人妻激烈| 亚洲国产综合自在线另类| 一区二区三区四区黄色片| 国产成人av片在线观看| 99久久国产综合精品色| 国产人成亚洲第一网站在线播放| 成av人电影在线观看| 欧乱色国产精品兔费视频| 无码国产精品一区二区免费网曝| 亚洲一二三区精品美妇| 国产高清-国产av| 熟妇激情一区二区三区| 色综合久久久久久久久久| 中文在线天堂中文在线天堂 | 亚洲欧美日韩在线码| 亚洲国产韩国一区二区| 国产一区二区高清不卡| 国模小黎自慰337p人体| 久久免费网站91色网站| 国产主播精品福利午夜二区| 四虎成人精品永久网站| 一本色道久久综合亚洲精品蜜臀| 亚洲精品麻豆一二三区| 国产精品∧v在线观看| 国产亚洲亚洲国产一二区| 国产日韩在线视看高清视频手机|