无码中文字幕色专区_91av俱乐部_无码人妻h动漫_26uuu成人_91九色丨porny丨国产jk_青青视频在线播放_国内自拍第二页_国产又粗又长又爽又黄的视频_色哟哟免费网站_久久出品必属精品_a级黄色一级片_99日在线视频

首頁 新聞 工控搜 論壇 廠商論壇 產(chǎn)品 方案 廠商 人才 文摘 下載 展覽
中華工控網(wǎng)首頁
  P L C | 變頻器與傳動 | 傳感器 | 現(xiàn)場檢測儀表 | 工控軟件 | 人機界面 | 運動控制
  D C S | 工業(yè)以太網(wǎng) | 現(xiàn)場總線 | 顯示調(diào)節(jié)儀表 | 數(shù)據(jù)采集 | 數(shù)傳測控 | 工業(yè)安全
  電 源 | 嵌入式系統(tǒng) | PC based | 機柜箱體殼體 | 低壓電器 | 機器視覺
收藏本文     查看收藏
串行端口是系統(tǒng)資源的一部分,其本質(zhì)是作為CPU和串行設(shè)備間的編碼轉(zhuǎn)換器。當數(shù)據(jù)從 CPU經(jīng)過串行端口發(fā)送出去時,字節(jié)數(shù)據(jù)轉(zhuǎn)換為串行的位(Bit); 接收數(shù)據(jù)時,串行的位被轉(zhuǎn)換為字節(jié)數(shù)據(jù)。應用程序要使用串口進行通信,必須在使用之前向操作系統(tǒng)提出資源申請要求(即打開串口),通信完成后再釋放資源(即關(guān)閉串口)。

串行通信一般可以分為同步和異步兩種操作方式。所謂同步方式是指在串口的接收緩沖區(qū)中讀取規(guī)定數(shù)目的數(shù)據(jù),直到規(guī)定數(shù)目的數(shù)據(jù)全部被讀出或設(shè)定的超時時間已到才返回。如果規(guī)定的待讀取數(shù)據(jù)量大且設(shè)定的超時時間也較長,而接收緩沖區(qū)較小,則可能引起線程阻塞。而異步方式是利用Windows的多線程結(jié)構(gòu),讓串口的讀寫操作在后臺進行,而應用程序的其他部分在前臺執(zhí)行。
如果按驅(qū)動方式分,串口通信也可分為查詢和事件驅(qū)動兩種操作類型。所謂查詢方式是指一個進程中的某一線程定時查詢串口的接收緩沖區(qū),如果緩沖區(qū)中有數(shù)據(jù),就讀取數(shù)據(jù);若緩沖區(qū)中沒有數(shù)據(jù),該線程將繼續(xù)執(zhí)行。查詢方式會占用大量的CPU時間,它實際上是同步方式的一種派生。查詢方式是一種最直接的讀串口方式,但定時查詢可能發(fā)生得過早或過晚,在數(shù)據(jù)變化較快的情況下,特別是主控計算機的串口通過擴展板擴展至多個時,容易發(fā)生數(shù)據(jù)的丟失。雖然指定時間隔越小,數(shù)據(jù)的實時性越高,但系統(tǒng)的資源也被占去越多。而事件驅(qū)動方式則是一種高效的串口讀寫方式,通過設(shè)置事件來通知系統(tǒng)工作,即當所希望的事件發(fā)生時,Windows發(fā)出該事件已發(fā)生的通知,系統(tǒng)才進行相應處理,避免了數(shù)據(jù)丟失,與DOS環(huán)境下的中斷方式很相似,實時性較高。Windows中提供文件讀寫的異步方式,主要是針對文件I/O相對較慢的特點而進行的改進,它利用了Windows的多線程結(jié)構(gòu)。雖然在Windows中沒有實現(xiàn)任何對文件I/O的異步操作,但它卻能對串口進行異步操作,因此可以提高系統(tǒng)的整體性能。
通過Visual C++的標準通信函數(shù)_inp和_outp可直接通過串口輸入和輸出數(shù)據(jù)。一般來說,在Visual C++中開發(fā)串口通信程序主要有調(diào)用API函數(shù)和使用ActiveX控件技術(shù)兩種方式;静襟E為:打開串口設(shè)備,設(shè)置串口通信屬性,進行串口讀寫操作,關(guān)閉串口。下面將較為詳細地討論在VC中實現(xiàn)串口通信的上述兩種方法。


使用Win32的API

API是附帶在Windows內(nèi)部的一個極其重要的組成部分。Windows的32位API主要是一系列復雜的函數(shù)和消息集合,可以看做是Windows系統(tǒng)為其下運行的各種開發(fā)系統(tǒng)提供的開放式通用功能增強接口。Windows環(huán)境下對串行端口進行操作,是把它作為文件來處理的,其中涉及到大量API函數(shù),操作起來比較復雜,可以概括為以下的幾個操作步驟:
1. 打開串行通信設(shè)備。在VC中使用CreateFile函數(shù)打開串口,CreateFile將返回串口的句柄。該句柄將被用于后續(xù)的通信操作,并貫穿整個通信過程。當采用異步方式時,CreateFile函數(shù)的參數(shù)fdwAttrsAndFlags必須設(shè)為FILE_FLAG_ OVERLAPPED,如:
m_hComFile =CreateFile(“COM1”,
//HANDLE m_hComFile,全局變量
GENERIC_READ | GENERIC_WRITE,
// 允許讀寫操作
0, // 此項必須為0
NULL, // 安全設(shè)置
OPEN_EXISTING, //設(shè)置打開方式
FILE_FLAG_OVERLAPPED,
//使用異步通信標志
NULL );
2. 指定并初始化讀寫緩沖區(qū)。程序通過調(diào)用SetupComm函數(shù)來指定讀寫緩沖區(qū)的大小,并執(zhí)行重新分配內(nèi)部輸入和輸出緩沖的任務(wù),用PurgeComm函數(shù)對輸入和輸出緩沖進行初始化,如:
SetCommMask(m_hComFile, EV_RXCHAR | EV_TXEMPTY ); //設(shè)置事件驅(qū)動的類型
SetupComm(m_hComFile, 1024,1024) ;
//設(shè)置輸入、輸出緩沖區(qū)的大小
PurgeComm(m_hComFile,
PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR );
//清空輸入、輸出緩沖區(qū)
3.設(shè)置串口屬性,配置DCB結(jié)構(gòu)。當用CreateFile函數(shù)完成串口打開操作時,默認繼承設(shè)備控制塊(DCB結(jié)構(gòu))設(shè)置。通過調(diào)用GetCommState函數(shù)讀取當前串口設(shè)備控制塊DCB設(shè)置,修改后通過SetCommState函數(shù)將其寫入。也可以使用GetCommProperties獲取COMMPROP結(jié)構(gòu),其中記載了系統(tǒng)支持的各項設(shè)置,包括當前所使用的串行設(shè)備、數(shù)據(jù)傳輸波特率、輸入輸出緩沖區(qū)大小等。例如:
DCB dcb ;
//定義設(shè)備控制塊結(jié)構(gòu)
GetCommState(m_hComFile, &dcb ) ;
//讀取串口原來的參數(shù)設(shè)置
dcb.BaudRate =9600;
dcb.ByteSize =8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT ;
dcb.fBinary = TRUE ;
dcb.fParity = FALSE;
SetCommState(m_hComFile, &dcb ) ;
//串口參數(shù)配置
4. 設(shè)置超時值。串口打開后,I/O操作的超時值采用默認值。超時值的設(shè)置與結(jié)構(gòu)COMMTIMEOUTS及函數(shù)GetCommTimeouts和SetCommTimeouts有關(guān)。用GetCommTimeouts函數(shù)可以獲得當前I/O操作的超時值配置,而調(diào)用SetCommTimeouts函數(shù)可以修改此配置,如:
COMMTIMEOUTS timeouts ;
//定義超時結(jié)構(gòu),并填寫該結(jié)構(gòu)
timeouts.ReadIntervalTimeout = 500;
timeouts.ReadTotalTimeoutMultiplier = 1;
timeouts.ReadTotalTimeoutConstant = 1000;
timeouts.WriteTotalTimeoutMultiplier = 1;
timeouts.WriteTotalTimeoutConstant = 1000;  SetCommTimeouts(m_hComFile,&timeouts );
//設(shè)置讀寫操作所允許的超時
其中,區(qū)間超時(ReadIntervalTimeout)指的是在讀取兩個字符之間的時間間隔,它僅對從端口中讀取數(shù)據(jù)有效;總超時指的是當讀或?qū)懱囟ǖ淖止?jié)數(shù)需要的總時間超過某一閾值時,超時觸發(fā)。超時的計算公式如下:
ReadTotalTimeout= (ReadTotalTimeoutMultiplier * bytes_to_read)+ ReadToTaltimeoutConstant
WriteTotalTimeout = (WriteTotalTimeoutMuliplier * bytes_to_write) + WritetoTotalTimeoutConstant
5. 進行串行數(shù)據(jù)通信。調(diào)用函數(shù)ReadFile和WriteFile讀寫串口。若采用異步通信方式,兩函數(shù)中最后一個參數(shù)為指向OVERLAPPED結(jié)構(gòu)的非空指針,在讀寫函數(shù)返回值為FALSE的情況下,調(diào)用GetLastError函數(shù),返回值為ERROR_IO_PENDING,表明I/O操作懸掛,即操作轉(zhuǎn)入后臺繼續(xù)執(zhí)行。此時,可以用WaitForSingleObject函數(shù)來等待結(jié)束信號并設(shè)置最長等待時間。下面的例子中,在主線程中發(fā)送命令,用一個輔助線程來監(jiān)視串口,有數(shù)據(jù)到達時依靠事件驅(qū)動讀入數(shù)據(jù)并向主線程報告。
下面的代碼實現(xiàn)在主線程中準備并發(fā)送數(shù)據(jù):
BOOL  fWriteStat ;
char sndBuffer[count];
...... // sndBuffer[]中存放待發(fā)送的數(shù)據(jù)
OVERLAPPED overwrite;
//設(shè)置用于異步操作的OVERLAPPED結(jié)構(gòu)
overwrite. hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
fWriteStat = WriteFile(m_hComFile, sndBuffer, dwBytesToWrite, &dwBytesWritten, &overwrite); //寫數(shù)據(jù)
if (!fWriteStat){
   if (GetLastError() == ERROR_IO_PENDING) {……}
} 
創(chuàng)建輔助線程:
hReadThread=CreateThread( (LPSECURITY_ATTRIBUTES) NULL,
//安全屬性
0, //初始化線程棧的大小,缺省為與主線程大小相同
(LPTHREAD_START_ROUTINE) CommReadProc, //線程函數(shù)
GetSafeHwnd(), //此處傳入主框架的句柄
0, (LPDWORD)lpThreadID );
在輔助線程中監(jiān)視串口并接收數(shù)據(jù):
UINT CommReadProc(HWND hSendWnd){
  DWORD dwEvtMask=0 ;
  SetCommMask(m_hComFile, EV_RXCHAR|EV_TXEMPTY );
//設(shè)置串口事件驅(qū)動
  WaitCommEvent(m_hComFile, &dwEvtMask, os ); //等待串口事件
  if ((dwEvtMask & EV_RXCHAR) == EV_RXCHAR){ //緩沖區(qū)中有數(shù)據(jù)到達  
DWORD dwLength = ComStat.cbInQue ;
//輸入緩沖區(qū)數(shù)據(jù)長度
COMSTAT ComStat ;
ClearCommError(m_hComFile, &dwErrorFlags, &ComStat ) ;
OVERLAPPED overread;
overread. hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
if (dwLength > 0) {
BOOL fReadStat = ReadFile(m_hComFile, lpBuffer,dwLength, &dwBytesRead,&overread);
//讀數(shù)據(jù)
if (!fReadStat){
   if (GetLastError() == ERROR_IO_PENDING){
     ……}
}            
::PostMessage((HWND)hSendWnd,
WM_NOTIFYPROCESS,0,0);
//通知主線程,串口收到數(shù)據(jù)
}
6. 關(guān)閉串行端口。調(diào)用函數(shù)CloseHandle即可。
總體說來,調(diào)用API 函數(shù)實現(xiàn)串行通信,程序更為復雜,但應用更加靈活。在API串口通信中可以將串口的屬性設(shè)置和操作封裝成一個專用的串口類,同時結(jié)合Windows非阻塞通信、多線程、動態(tài)鏈接庫等手段,編寫出高質(zhì)量的通信程序,特別是在CPU處理任務(wù)比較繁重、與外圍設(shè)備中有大量的通信數(shù)據(jù)時,更具實際意義。
 

狀 態(tài): 離線

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

公司名稱: 武漢波仕電子有限公司
聯(lián) 系 人: 孫漢華
電  話: 027-87561487
傳  真: 027-87561486
地  址: 關(guān)東科技工業(yè)園
郵  編: 430074
主  頁:
 
該廠商相關(guān)技術(shù)文摘:
無源CAN隔離及其實現(xiàn)
更通用的RS-232/RS-485串口中繼轉(zhuǎn)換器
新型RS-232隔離器可實現(xiàn)多路RS232的多機通信
RS-485及RS-422的自動交叉連接
RS-485的節(jié)點和距離的理論極限
蜘蛛形RS-485多主機通信組網(wǎng)方式
雙向擴展,波仕RS485集線器獨辟蹊徑
通過互聯(lián)網(wǎng)用語音遙控電器
480M高速USB2.0的隔離方案
CAN交換機將替代集線器
RS-485交換機即將替代集線器
雜談USB光電隔離器
更多文摘...
立即發(fā)送詢問信息在線聯(lián)系該技術(shù)文摘廠商:
用戶名: 密碼: 免費注冊為中華工控網(wǎng)會員
請留下您的有效聯(lián)系方式,以方便我們及時與您聯(lián)絡(luò)

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

无码中文字幕色专区_91av俱乐部_无码人妻h动漫_26uuu成人_91九色丨porny丨国产jk_青青视频在线播放_国内自拍第二页_国产又粗又长又爽又黄的视频_色哟哟免费网站_久久出品必属精品_a级黄色一级片_99日在线视频
在线一区欧美| 日本亚洲三级在线| 深夜视频一区二区| 一区二区91| 欧美日韩调教| 亚洲免费高清| 免费看av不卡| 国产精品久久| 亚洲精品影院在线观看| 日产精品一区| 久久影院资源站| 日韩va亚洲va欧美va久久| 蜜桃视频欧美| 伊伊综合在线| 国产不卡人人| 久久精品国产在热久久| 日韩二区三区四区| 日韩在线观看一区二区| 不卡在线一区| 神马久久午夜| 日韩欧美不卡| 色一区二区三区| а√天堂8资源在线| 国产欧美三级| 欧美日韩91| 国产欧美自拍| 久久久久伊人| 久久免费精品| 精品国产网站| 中文在线а√天堂| 国产精品99视频| 欧美国产精品| 国产专区精品| 欧美亚洲日本精品| 婷婷综合六月| 欧美成人亚洲| 免费久久99精品国产| 免费观看在线综合色| 亚洲视频电影在线| 亚洲欧美日本国产| 天堂久久av| 日韩av黄色在线| 欧美激情网址| 精品国产免费人成网站| 日本精品不卡| 日韩一区二区免费看| 日韩视频精品在线观看| 一区二区精品| 久久尤物视频| 99精品在线免费在线观看| 女人天堂亚洲aⅴ在线观看| 日韩亚洲国产欧美| 日本91福利区| 久久精品伊人| 激情婷婷欧美| 日本精品国产| 视频在线不卡免费观看| 久久久9色精品国产一区二区三区| 亚洲国产一区二区在线观看| 蜜臀av亚洲一区中文字幕| 欧美日韩一区二区国产| 成人在线免费观看91| 国产一区久久| 青青国产精品| 激情国产在线| 亚洲色图综合| 丰满少妇一区| 日韩午夜av在线| 毛片不卡一区二区| 欧美特黄视频| 国产精品一区二区美女视频免费看| 精品久久久网| 午夜亚洲精品| 精品国产不卡一区二区| 欧美日韩国产综合网| 国产日产一区| 黄色av一区| 麻豆国产精品一区二区三区| 亚洲网站视频| 国产午夜精品一区在线观看| 色爱av综合网| 国产伦乱精品| 五月天激情综合网| 卡一卡二国产精品| 三级在线观看一区二区| 免费一级欧美片在线观看网站 | 亚洲综合欧美| 成年男女免费视频网站不卡| 欧美另类专区| 国产 日韩 欧美 综合 一区| 亚洲欧美网站| 精品在线99| 色综合五月天| 国产精品v亚洲精品v日韩精品| 99视频精品全部免费在线视频| 国产亚洲精品精品国产亚洲综合| 欧美在线资源| 国产精品久久久久av电视剧| 国产精品久久久久久久久久齐齐| 美女国产精品| 欧美 日韩 国产精品免费观看| 国产一区二区三区视频在线 | 欧美日韩视频一区二区三区| 日本а中文在线天堂| 久久不卡日韩美女| 日本一不卡视频| 视频一区二区三区在线| 亚洲激情二区| 久久中文字幕av| 色婷婷久久久| 日韩免费高清| 婷婷综合六月| 色婷婷狠狠五月综合天色拍| 欧美国产美女| 亚洲欧洲美洲av| 成人日韩精品| 四虎成人av| 国内精品伊人| 日韩深夜视频| 精品日韩视频| 免费av一区| 免费观看在线综合| 日韩精品五月天| 久久国内精品| 欧美国产先锋| 色婷婷色综合| 亚洲天堂黄色| 中文无码日韩欧| 99精品99| 亚洲激情二区| 久久国产精品毛片| 99riav国产精品| 日韩精品一二三四| 亚洲一区二区三区四区电影| 免费日本视频一区| 在线一区二区三区视频| 香蕉久久久久久| 国产日韩免费| 91日韩免费| 欧美国产91| 日韩中文av| 国精品产品一区| 久久久影院免费| 视频一区二区三区在线| 日本成人中文字幕| 国产精品毛片久久| 成人精品中文字幕| 亚洲天堂日韩在线| 嫩呦国产一区二区三区av| 久久精品一区| 精品欧美久久| 91精品国产自产在线丝袜啪| 麻豆国产欧美一区二区三区 | 精品国产第一福利网站| 欧美中文字幕一区二区| 亚洲精品99| 国产精选久久| 精品日韩视频| 日韩超碰人人爽人人做人人添| zzzwww在线看片免费| 国产女优一区| 久久三级中文| 亚洲一区二区动漫| 久久影院资源站| 亚洲激情另类| 毛片不卡一区二区| 丝袜亚洲精品中文字幕一区| 国产精品最新自拍| 亚洲激情av| 国产中文在线播放| 日韩av网站在线观看| 国产一区日韩一区| 国产欧美另类| 99综合视频| 久久男人天堂| 国产精品一在线观看| 中文精品视频| 国产66精品| 日本视频中文字幕一区二区三区| 久久九九精品| 国产一区二区三区精品在线观看 | 国产欧美日韩视频在线| 精品一区免费| 欧美日韩xxxx| 久久高清精品| 国产探花在线精品一区二区| 黄色日韩精品| 日韩欧美一区二区三区免费观看| 日韩精品国产欧美| 国产精品日本| 蜜桃tv一区二区三区| 日韩中文在线电影| 国产成人久久精品一区二区三区| 日本不卡视频在线观看| 国产亚洲精品久久久久婷婷瑜伽| 亚洲成av在线| 欧洲一级精品| 三级小说欧洲区亚洲区| 久久久久久婷| 国产一区2区在线观看|