射擊模擬訓(xùn)練器激光靶設(shè)計
m_CommDpj.SetRThreshold(10);//設(shè)置OnComm事件的響應(yīng)
m_Opened=m_CommDpj.SetPortOpen(m_Port);// 打開指定的串口
打開所需串口后,使用OnComm事件和CommEvent屬性捕捉并檢查通信事件和錯誤的值。發(fā)生通信事件或錯誤時將觸發(fā)OnComm事件,CommEvent屬性的值將被改變,應(yīng)用程序通過檢查CommEvent屬性值并作出相應(yīng)的反應(yīng)。以下為OnComm事件的源代碼:
VARIANT m_input1;
COleSafeArray m_input2;
long length,i;
if(m_CommDpj.GetCommEvent()==2)//接收緩沖區(qū)內(nèi)有字符
{
m_input1=m_CommDpj.GetInput();//讀取緩沖區(qū)內(nèi)的數(shù)據(jù)
m_input2=m_input1;//將VARIANT型變量轉(zhuǎn)換為ColeSafeArray型變量
length=m_input2.GetOneDimSize();//確定數(shù)據(jù)長度
for(i=0;ilength;i++)
m_input2.GetElement(i,m_Data+i);//將數(shù)據(jù)轉(zhuǎn)換為BYTE型數(shù)組
FromDpj();//進行事件處理
DpjLock=false;
}
4.4 數(shù)據(jù)文件的生成
數(shù)據(jù)文件才文本形式進行存儲。在數(shù)據(jù)文檔中建立如下結(jié)構(gòu)體:
struct ShotData{
unsigned int m_uNum;//編號
unsigned int m_uSNum;//站號
unsigned int m_uPlot;//射擊點
CTime m_Curtime;//當(dāng)前時間};
數(shù)據(jù)記錄的源代碼如下:
void CJGBDoc::GetFileName()//獲取記錄文件名
{
CString m_str;
GetCurrentDirectory(128,m_str.GetBuffer(128));
m_str.ReleaseBuffer(-1);
CFileDialog dlg(false,Txt,m_str+*.Txt,NULL,記錄文件(*.Txt));
if(dlg.DoModal()==IDOK)
{
if(file.Open(dlg.GetPathName(),CFile::modeRead)!=0)
{
if(AfxMessageBox(文件已存在,是否覆蓋?,MB_YESNO)==IDNO)
{
AfxMessageBox(文件保存失敗!);
return;
}
file.Close();
}
if(file.Open(dlg.GetPathName(),CFile::modeWrite|CFile::modeCreate)==0)
{
AfxMessageBox(文件保存失??!);
}
}
else
AfxMessageBox(文件保存失??!);
}
實時記錄函數(shù):
{
---
CString m_record;
m_record.Format(%d,%d,%d,%s,m_pDoc-> ShotData.m_uNum,
m_pDoc-> ShotData.m_uNum, m_pDoc-> ShotData.m_uNum
m_pDoc-> ShotData.m_CurTime.Format (%y-%m-%d %H:%M:%S));
file.Write(m_record);
---
}
模擬信號相關(guān)文章:什么是模擬信號
脈寬調(diào)制相關(guān)文章:脈寬調(diào)制原理 激光器相關(guān)文章:激光器原理
評論