資源簡介
用VS2010創(chuàng)建的MFC完整界面工程,具有完整的串口初始化和收發(fā)功能類,界面的初始化按鈕和查詢按鈕功能以及支持,其余功能研究者可以進(jìn)一步在類上擴(kuò)展。僅供學(xué)習(xí)用。本人親自開發(fā)的,請大家多提意見!

代碼片段和文件信息
#include?“StdAfx.h“
#include?“LYVRSerial.h“
/*
(1)該程序為串口通訊設(shè)備調(diào)試的初步測試程序,僅供學(xué)習(xí)研究C++程序之
范例,未經(jīng)作者書面同意,不得隨意用于商業(yè)用途。
(2)如果你在運(yùn)用于商業(yè)用途時明確標(biāo)識該段程序的代碼來源為“成都朗玉測控”
即可免費(fèi)使用,否則視為侵權(quán)。
(3)在用于商業(yè)及其它用途時,對任何損失及后果本作者不負(fù)任何責(zé)任!
成都朗玉測控,版權(quán)所有,2018年~2025年
權(quán)利人:甘亞東,聯(lián)系人:甘亞東,13981885178,qq:891219042
*/
//該型模塊的實(shí)例化數(shù)量累計,用于互斥量初始化。
int?sc_module_cnt?=?0;
CLYVRSerial::CLYVRSerial():
m_bInitOK(false)
{
m_hComm?=?INVALID_HANDLE_VALUE;
dwInQueue?=?COMM_INQUEUE_BUFLEN;?//輸入緩沖區(qū)字節(jié)數(shù)
dwOutQueue?=?COMM_OUTQUEUE_BUFLEN;?//輸出緩沖區(qū)字節(jié)數(shù)
m_dcb.BaudRate?=?57600;//波特率
????m_dcb.fBinary?=?TRUE;//是否允許傳二進(jìn)制
????m_dcb.fParity?=?FALSE;//是否奇偶校驗
????m_dcb.ByteSize?=?8;//數(shù)據(jù)位
????m_dcb.Parity?=?NOPARITY;//ODDPARITY;//奇偶校驗方式
????m_dcb.StopBits?=?ONESTOPBIT;//停止位
m_inLen?=?0;
m_outLen?=?0;
//只設(shè)置讀取的間隔超時,不設(shè)置讀取的總超時,因為其系數(shù)只能設(shè)定
//最小為1ms,會時間太長,也沒有意義。
//設(shè)定發(fā)送總超時,是為了防止萬一有什么故障。
memset(&m_timeOver?0?sizeof(m_timeOver));
//總超時?=?constant?+?multipilier?*?rcvNumber.
m_timeOver.ReadTotalTimeoutConstant?=?1;
m_timeOver.ReadTotalTimeoutMultiplier?=?1;
m_timeOver.ReadIntervalTimeout?=?1;//1ms,兩個字符間的最大延遲。
m_timeOver.WriteTotalTimeoutConstant?=?1;
m_timeOver.WriteTotalTimeoutMultiplier?=?1;
sc_module_cnt++;
TCHAR?temp[16];
wsprintf(temp?L“LYVRCONTROL_%02d“?sc_module_cnt);
m_rsMutex?=?CreateMutex(NULL?FALSE?temp);
}
CLYVRSerial::~CLYVRSerial(void)
{
Close();
}
//?在指定的串口號上打開SC73調(diào)理板。
//?返回0表示無異常,一切操作順利,否則返回非零的數(shù)表示錯誤號。
int?CLYVRSerial::Open(int?comPort)
{
if(m_hComm?!=?INVALID_HANDLE_VALUE)
return?COMM_ALREADY_OPEN;
m_Port?=?comPort;
int?err?=?InitCommPort();
if(err?!=?0)
return?err;
return?0;
}
//?關(guān)閉SC73調(diào)理板,釋放全部資源。
//?返回0表示無異常,一切操作順利,否則返回非零的數(shù)表示錯誤號。
int?CLYVRSerial::Close(void)
{
//丟棄通信資源的輸出或輸入緩沖區(qū)字符并終止在通信資源上掛起的讀、寫操操作
if(m_hComm?!=?INVALID_HANDLE_VALUE)
{
PurgeComm(?m_hComm?PURGE_TXABORT?|?PURGE_RXABORT?|?PURGE_TXCLEAR?|?PURGE_RXCLEAR?)?;
CloseHandle(?m_hComm?);
}
m_hComm?=?INVALID_HANDLE_VALUE;
return?0;
}
//?查詢SC73調(diào)理板,其應(yīng)返回一個確認(rèn)報文,表明其存在且正常。
//?返回1表示正常,0表示異常。其它數(shù)值表示執(zhí)行函數(shù)過程中發(fā)生錯誤。
int?CLYVRSerial::Touch(void)
{
if(m_hComm?==?INVALID_HANDLE_VALUE)
return?COMM_INVALID_HANDLE;
DWORD?dwWaitResult?=?WaitForSingleobject(?
m_rsMutex????//?handle?to?mutex
2000);??//1秒等待//?INFINITE:no?time-out?interval
if?(dwWaitResult?==?WAIT_object_0)?
{
//在接收/發(fā)送數(shù)據(jù)前緩沖區(qū)中可能有垃圾數(shù)據(jù)或者中途想清空緩沖區(qū)數(shù)據(jù).
PurgeComm(m_hComm?PURGE_TXABORT?|?PURGE_RXABORT?|?PURGE_TXCLEAR?|?PURGE_RXCLEAR?);
//組裝報文
int?i=0;
m_outBuf[i++]?=?0xA5;//主機(jī)命令標(biāo)識頭為固定值
m_outBuf[i++]?=?0x01;//數(shù)據(jù)的個數(shù),字節(jié)數(shù)
m_outBuf[i++]?=?0x00;//地址/分頁?兩個字節(jié)
m_outBuf[i++]?=?0x00;
m_outBuf[i++]?=?0x00;//命令:查詢
m_outBuf[i++]?=?0x01;//數(shù)據(jù):反射式詢問
m_outBuf[i]?=?CalcCheckSum(m_outBuf?i);
m_outLen?=?i+1;
//發(fā)送報文
int?nErr?=?0;
BYTE?nresult?=?0;
if((nErr?=?SendBuf())?!=?0)
{
nErr?=?COMM_SENDBUF_FAIL;
}
else
{
//接收報文
int?num?=?7;//期望收到的字符數(shù)。
if((nErr?=?RecvBuf(num))?!=?0)
nErr?=?COMM_RECVBUF_FAIL;
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????9787??2018-04-24?12:15??VRControlRS232\VRControlRS232\LYVRSerial.cpp
?????文件???????2139??2018-04-24?12:15??VRControlRS232\VRControlRS232\LYVRSerial.h
?????文件???????3146??2018-04-24?11:07??VRControlRS232\VRControlRS232\ReadMe.txt
?????文件??????67777??2018-04-24?12:19??VRControlRS232\VRControlRS232\res\VRControlRS232.ico
?????文件????????684??2018-04-24?11:07??VRControlRS232\VRControlRS232\res\VRControlRS232.rc2
?????文件???????2570??2018-04-24?11:33??VRControlRS232\VRControlRS232\resource.h
?????文件????????147??2018-04-24?11:07??VRControlRS232\VRControlRS232\stdafx.cpp
?????文件???????1632??2018-04-24?11:07??VRControlRS232\VRControlRS232\stdafx.h
?????文件????????234??2018-04-24?11:07??VRControlRS232\VRControlRS232\targetver.h
?????文件?????106904??2018-04-24?11:33??VRControlRS232\VRControlRS232\VRControlRS232.aps
?????文件???????2097??2018-04-24?11:07??VRControlRS232\VRControlRS232\VRControlRS232.cpp
?????文件????????879??2018-04-24?12:15??VRControlRS232\VRControlRS232\VRControlRS232.h
?????文件??????12336??2018-04-24?11:33??VRControlRS232\VRControlRS232\VRControlRS232.rc
?????文件???????6066??2018-04-24?11:19??VRControlRS232\VRControlRS232\VRControlRS232.vcxproj
?????文件???????2223??2018-04-24?11:19??VRControlRS232\VRControlRS232\VRControlRS232.vcxproj.filters
?????文件????????143??2018-04-24?11:07??VRControlRS232\VRControlRS232\VRControlRS232.vcxproj.user
?????文件???????6538??2018-04-24?12:15??VRControlRS232\VRControlRS232\VRControlRS232Dlg.cpp
?????文件???????1525??2018-04-24?12:15??VRControlRS232\VRControlRS232\VRControlRS232Dlg.h
?????文件????????909??2018-04-24?11:07??VRControlRS232\VRControlRS232.sln
????..A..H.?????14336??2018-04-24?12:22??VRControlRS232\VRControlRS232.suo
?????目錄??????????0??2018-04-24?12:23??VRControlRS232\VRControlRS232\Debug
?????目錄??????????0??2018-04-24?12:19??VRControlRS232\VRControlRS232\res
?????目錄??????????0??2018-04-24?12:24??VRControlRS232\Debug
?????目錄??????????0??2018-04-24?12:23??VRControlRS232\ipch
?????目錄??????????0??2018-04-24?11:33??VRControlRS232\VRControlRS232
?????目錄??????????0??2018-04-24?12:23??VRControlRS232
-----------?---------??----------?-----??----
???????????????242072????????????????????26
評論
共有 條評論