<nobr id="zkazv"></nobr>

      午夜精品一区二区三区成人,中文字幕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

      主站蜘蛛池模板: 亚洲日本国产精品一区| 亚洲精品在线二区三区| 国产一区二区三区色成人| 亚洲顶级裸体av片| 国产人妻精品午夜福利免费| 4480yy亚洲午夜私人影院剧情| 免费国产高清在线精品一区| 欧美人与动牲交a免费| 97一区二区国产好的精华液| 国产久爱免费精品视频| 色8久久人人97超碰香蕉987| 精品国产一区二区三区大| 国产精品黄色精品黄色大片 | 国产成人99亚洲综合精品| 久久香蕉欧美精品| 中文字幕精品无码一区二区| 久久人妻精品大屁股一区| 日韩欧国产美一区二区在线| 国产亚洲一区二区三区成人| 国内不卡的一区二区三区| 亚洲欧美高清在线精品一区二区| 婷婷久久香蕉五月综合加勒比| 一区二区不卡国产精品| 日韩在线视频线观看一区| 久久精品国产亚洲AV瑜伽| 亚洲精品成人久久久| 免费中文字幕无码视频| 国产精品视频全国免费观看| 欧美视频二区欧美影视| 久久碰国产一区二区三区| 国产蜜臀视频一区二区三区| 国产日韩一区二区在线看| 激情内射亚洲一区二区三区| 国产尤物精品自在拍视频首页| 成人av午夜在线观看| 一区二区三区精品视频免费播放| 亚洲精品色哟哟一区二区| 韩国无码AV片午夜福利| 亚洲日本精品一区二区| 欧美成本人视频免费播放| 九九电影网午夜理论片|