射擊模擬訓練器激光靶設計
m_CommDpj.SetRThreshold(10);//設置OnComm事件的響應
m_Opened=m_CommDpj.SetPortOpen(m_Port);// 打開指定的串口
打開所需串口后,使用OnComm事件和CommEvent屬性捕捉并檢查通信事件和錯誤的值。發生通信事件或錯誤時將觸發OnComm事件,CommEvent屬性的值將被改變,應用程序通過檢查CommEvent屬性值并作出相應的反應。以下為OnComm事件的源代碼:
VARIANT m_input1;
COleSafeArray m_input2;
long length,i;
if(m_CommDpj.GetCommEvent()==2)//接收緩沖區內有字符
{
m_input1=m_CommDpj.GetInput();//讀取緩沖區內的數據
m_input2=m_input1;//將VARIANT型變量轉換為ColeSafeArray型變量
length=m_input2.GetOneDimSize();//確定數據長度
for(i=0;ilength;i++)
m_input2.GetElement(i,m_Data+i);//將數據轉換為BYTE型數組
FromDpj();//進行事件處理
DpjLock=false;
}
4.4 數據文件的生成
數據文件才文本形式進行存儲。在數據文檔中建立如下結構體:
struct ShotData{
unsigned int m_uNum;//編號
unsigned int m_uSNum;//站號
unsigned int m_uPlot;//射擊點
CTime m_Curtime;//當前時間};
數據記錄的源代碼如下:
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(文件保存失敗!);
}
實時記錄函數:
{
---
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);
---
}
模擬信號相關文章:什么是模擬信號
脈寬調制相關文章:脈寬調制原理 激光器相關文章:激光器原理
評論