前言:
程式實現:
我在經過許多的專案的開發和實踐中發現,採用win api函式進行串列埠的開發能夠給程式設計師很大的控制項,並且程式運也很穩定。所以我將與串列埠接觸的函式進行封裝,然後在各個工程中進行呼叫,效果還是比較好的,現將各個函式和呼叫方法列舉出來,希望對各位有所幫助。
一、設定串列埠相關工作
#define maxblock 2048
#define xon 0x11
#define xoff 0x13
bool set***(handle &m_h***, const char *m_sport, int baudrate, int databit, cstring parity, cstring stopbit)
setup***m(m_h***,maxblock,maxblock); //設定緩衝區
memset(&timeouts,0,sizeof(timeouts));
timeouts.readintervaltimeout=maxdword; // 把間隔超時設為最大,把總超時設為0將導致readfile立即返回並完成操作
timeouts.readtotaltimeoutmultiplier=0; //讀時間係數
timeouts.readtotaltimeoutconstant=0; //讀時間常量
timeouts.writetotaltimeoutmultiplier=50; //總超時=時間係數*要求讀/寫的字元數+時間常量
timeouts.writetotaltimeoutconstant=2000; //設定寫超時以指定write***m成員函式中的
if(!get***mstate(m_h***, &dcb)) 串列埠開啟方式、埠、波特率 與埠匹配的裝置
dcb.fparity=true; //允許奇偶校驗
dcb.fbinary=true;
if(parity=="none")
dcb.parity=noparity;
if(parity=="odd")
dcb.parity=oddparity;
if(parity=="even")
dcb.parity=evenparity;
if(stopbit=="1")//設定波特率
dcb.stopbits=onestopbit;
//if(stopbit=="0")//設定波特率
// dcb.stopbits=nonestopbit;
if(stopbit=="2")//設定波特率
dcb.stopbits=twostopbits;
bool m_becho=false; ///
int m_nflowctrl=0;
bool m_bnewline=false; ///
dcb.baudrate=baudrate; // 波特率
dcb.bytesize=databit; // 每位元組位數
// 硬體流控制設定
dcb.foutxctsflow=m_nflowctrl==1;
dcb.frtscontrol=m_nflowctrl==1 ?rts_control_handshake:rts_control_enable;
// xon/xoff流控制設定(軟體流控制!)
dcb.finx=dcb.foutx=m_nflowctrl==2;
dcb.xonchar=xon;
dcb.xoffchar=xoff;
dcb.xonlim=50;
dcb.xofflim=50;
if(set***mstate(m_h***, &dcb))
return true; ***的通訊口設定
else
} 二、讀串列埠操作:
int read***(handle h***m, byte inbuff, dword &nbytesread, int readtime)
}
}return 1;
loop: return 0;
}三、寫串列埠命令
int write***(handle h***m, byte outbuff, int size, int bwrite)
if(dwerror=error_io_in***plete)
continue; //未完全讀完時的正常返回結果
else
}}
}
flushfilebuffers(h***m);
purge***m(h***m,purge_txclear);
bwrite=0;
return 1;
}四、呼叫方法很簡單,只需要將你的串列埠引數進行簡單的設定就可以了。比如:
bool main_open***()//設定***
void main()
;size=sizeof(outbuff);
write***(m_h***,outbuff,size,bwrite);
read***(m_h***,m_inbuff,bytestoread,readtime);
//進行湘陰的解包處理
} 有了上面的函式的封裝,相信大家程式設計應該能夠方便快捷一些吧。
使用winAPI 串列埠通訊 一
串列埠和其他通訊裝置是作為檔案處理的.簡單的可以採用查詢方式 定時方式 複雜些的可以採用事件驅動的方式.所謂驅動方式,即當有序列資料進入輸入緩衝區時,自動執行接受程式.使用winapi來編寫 串列埠通訊程式時,讀寫操作可以有同步方式與重疊的非同步方式.所謂同步方式,就是當命令發出後,直到資料確實寫入...
使用winAPI串列埠通訊 二
採用同步方式的查詢方式讀取串列埠資料時,若由於串列埠操作耗費較長的時間,則程式會被掛起.為解決這種問題,可以在讀取資料時採用重疊i o操作.此時,讀寫資料的操作在單獨的執行緒中進行,發出讀寫要求的主線程可以繼續執行.當讀寫資料成功後,讀寫資料線程可以通過某種方式通知主線程.兩個執行緒協調工作,可以明...
使用winAPI串列埠通訊 二
採用同步方式的查詢方式讀取串列埠資料時,若由於串列埠操作耗費較長的時間,則程式會被掛起.為解決這種問題,可以在讀取資料時採用重疊i o操作.此時,讀寫資料的操作在單獨的執行緒 中進行,發出讀寫要求的主線程可以繼續執行.當讀寫資料成功後,讀寫資料線程可以通過某種方式通知主線程.兩個執行緒協調工作 可以...