You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
TwoLaserHead-PushJig/LaiPuLaser/LaserDeviceMgr.cpp

681 lines
20 KiB
C++

#include "StdAfx.h"
#include "LaserDeviceMgr.h"
#include "Propertie.h"
#include "PropertieMgr.h"
#include "AuthorityMgr.h"
#include "CStringFuc.h"
#include "ExceptionMsg.h"
#include "LogMgr.h"
#include "GlobalFunction.h"
#define MAX_CUR 7.8 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
#define DelayTime 200
CLaserDeviceMgr *gCLaserDeviceMgr = new CLaserDeviceMgr;
CLaserDeviceMgr::CLaserDeviceMgr(void)
{
m_bUse = true;
m_ComPort = 11;//ͨ<><CDA8><EFBFBD><EFBFBD>com <20>ڱ<EFBFBD><DAB1><EFBFBD>
m_ComBaudrate = 9600;//ͨ<>Ų<EFBFBD><C5B2><EFBFBD><EFBFBD><EFBFBD>(innolase 19200)(SpectraPhysics 9600)
m_Power = 7;//<2F><><EFBFBD><EFBFBD> <20>ٷֱ<D9B7>%
m_Fre = 50000;//<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>
//m_DeviceType = _LASER_INNOLASE;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_DeviceType = _LASER_SPECTRA_PHYSICS;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_LaserSleepTimeMinutes = 30;//<2F>̹⼤<CCB9><E2BCA4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>ʱ(<28><><EFBFBD><EFBFBD>)
m_CurLeftTimes = "00:00:00";
m_bExitAppCloseLaser = true;//<2F>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
}
CLaserDeviceMgr::~CLaserDeviceMgr(void)
{
//TurnOffEmission();
}
void CLaserDeviceMgr::Ini()
{
if(m_DeviceType==_LASER_INNOLASE)
{
//<2F>򿪴<EFBFBD><F2BFAAB4><EFBFBD>
if(m_ComMgr.Open(m_ComPort,m_ComBaudrate))
{
//StartReadInfo();
}
else
{
gLogMgr->WriteDebugLog("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>!");
}
}
}
#if 1//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMFCPropertyGridProperty *CLaserDeviceMgr::CreatGridProperty()
{
CString PropertyName;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CString Description;//<2F><><EFBFBD><EFBFBD>
CString Path = _T("SpectraPhysicsLaser");//<2F>洢·<E6B4A2><C2B7>
CString Name;
//-------------------------------------------------------------------------------//
PropertyName = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
CMFCPropertyGridProperty* pGroup = new CMFCPropertyGridProperty(PropertyName);
//-------------------------------------------------------------------------------//
if(gAuthorityMgr->CheckAuthority(_FACTORY))
{
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ӳ<EFBFBD><D3B3>
Name = _T("m_bUse");//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_bUse);
pPropertie->SetType(_PROP_TYPE_BOOL);
pPropertie->SetpModule(this);
pPropertie->SetPath(Path);
pPropertie->SetName(Name);
pPropertie->WriteRead(true);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
PropertyName = _T("<EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD><EFBFBD>");
Description = _T("<EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD>ü<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD><EFBFBD><EFBFBD>");
CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_bUse, Description);
pGroup->AddSubItem(p);
gDevicePropertieMgr.Insert(p, pPropertie);
}
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ӳ<EFBFBD><D3B3>
Name = _T("m_bExitAppCloseLaser");//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_bExitAppCloseLaser);
pPropertie->SetType(_PROP_TYPE_BOOL);
pPropertie->SetpModule(this);
pPropertie->SetPath(Path);
pPropertie->SetName(Name);
pPropertie->WriteRead(true);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
PropertyName = _T("<EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ر<EFBFBD>");
Description = _T("<EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Զ<EFBFBD><EFBFBD>رռ<EFBFBD><EFBFBD><EFBFBD>");
CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_bExitAppCloseLaser, Description);
pGroup->AddSubItem(p);
gDevicePropertieMgr.Insert(p, pPropertie);
}
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ӳ<EFBFBD><D3B3>
Name = _T("m_Com");//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_ComPort);
pPropertie->SetType(_PROP_TYPE_INT);
pPropertie->SetpModule(this);
pPropertie->SetPath(Path);
pPropertie->SetName(Name);
pPropertie->WriteRead(true);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
PropertyName = _T("ͨ<EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD>");
Description = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PC ͨ<><CDA8>ʹ<EFBFBD>õĴ<C3B5><C4B4>ڱ<EFBFBD><DAB1><EFBFBD>");
CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_ComPort, Description);
pGroup->AddSubItem(p);
gDevicePropertieMgr.Insert(p, pPropertie);
}
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ӳ<EFBFBD><D3B3>
Name = _T("m_ComBaudrate");//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_ComBaudrate);
pPropertie->SetType(_PROP_TYPE_INT);
pPropertie->SetpModule(this);
pPropertie->SetPath(Path);
pPropertie->SetName(Name);
pPropertie->WriteRead(true);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
PropertyName = _T("ͨ<EFBFBD>Ų<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Description = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD>Ų<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_ComBaudrate, Description);
pGroup->AddSubItem(p);
gDevicePropertieMgr.Insert(p, pPropertie);
}
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ӳ<EFBFBD><D3B3>
Name = _T("m_Diode");//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_Power);
pPropertie->SetType(_PROP_TYPE_DOUBLE);
pPropertie->SetpModule(this);
pPropertie->SetPath(Path);
pPropertie->SetName(Name);
pPropertie->WriteRead(true);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
PropertyName = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Description = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_Power, Description);
pGroup->AddSubItem(p);
gDevicePropertieMgr.Insert(p, pPropertie);
}
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ӳ<EFBFBD><D3B3>
Name = _T("m_Fre");//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_Fre);
pPropertie->SetType(_PROP_TYPE_INT);
pPropertie->SetpModule(this);
pPropertie->SetPath(Path);
pPropertie->SetName(Name);
pPropertie->WriteRead(true);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
PropertyName = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>");
Description = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>(hz)");
CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_Fre, Description);
pGroup->AddSubItem(p);
gDevicePropertieMgr.Insert(p, pPropertie);
}
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ӳ<EFBFBD><D3B3>
Name = _T("m_LaserSleepTimeMinutes");//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_LaserSleepTimeMinutes);
pPropertie->SetType(_PROP_TYPE_INT);
pPropertie->SetpModule(this);
pPropertie->SetPath(Path);
pPropertie->SetName(Name);
pPropertie->WriteRead(true);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
PropertyName = _T("<EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>ʱ");
Description = _T("<EFBFBD>ӹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>󼤹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬(<28><><EFBFBD><EFBFBD>)");
CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_LaserSleepTimeMinutes, Description);
pGroup->AddSubItem(p1);
gDevicePropertieMgr.Insert(p1, pPropertie);
}
}
//-------------------------------------------------------------------------------//
return pGroup;
}
void CLaserDeviceMgr::ExportPar(ofstream *pFile)
{
(*pFile)<<"<><C4A3>] [CLaserDeviceMgr]------------------------------------------------"<<endl;
(*pFile)<<"[<5B>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>]"<<m_bUse<<endl;
(*pFile)<<"[<5B><><EFBFBD>ں<EFBFBD>]"<<m_ComPort<<endl;
}
#endif
#if 1
void CLaserDeviceMgr::WriteWorkFileExt(vector<CLab> &LabVec)
{
}
void CLaserDeviceMgr::ReadWorkFile(CLabVecRang &LabVecRang)
{
}
#endif
#if 1
//<2F><>ʼ<EFBFBD>ӹ<EFBFBD>֮ǰ<D6AE>IJ<EFBFBD><C4B2><EFBFBD>
void CLaserDeviceMgr::OnWorkStart()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>ʱ
//StopLaserSleepTime();
SetParToLaserDevice(true);
}
//<2F>ӹ<EFBFBD><D3B9><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
void CLaserDeviceMgr::OnWorkEnd()
{
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>ʱ
//StartLaserSleepTime();
}
void CLaserDeviceMgr::SetParToLaserDevice(bool bException)
{
if(m_bUse)
{
//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
if(m_DeviceType==_LASER_SPECTRA_PHYSICS)
{
SetParToLaserSpectraPhysics();
}
else if(m_DeviceType==_LASER_INNOLASE)
{
SetParToLaserInnolase(bException);
}
}
}
#endif
#if 1//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---<2D><><EFBFBD><EFBFBD>
void CLaserDeviceMgr::SetParToLaserSpectraPhysics()
{
gLogMgr->WriteDebugLog("func ; CLaserDeviceMgr---->SetParToLaserSpectraPhysics");
CCommPortMgr com;
if(com.Open(m_ComPort))
{
{//<2F><><EFBFBD><EFBFBD>emission
CString str1 = _T("ON");
CString str = str1+char(13)+char(10);
com.Write(str);
Sleep(DelayTime);
}
{//<2F><><EFBFBD><EFBFBD>emission
CString str1 = _T("?D");
CString str = str1+char(13)+char(10);
com.Write(str);
Sleep(DelayTime);
CString ret = com.ReadStr();
if(ret == "0")
{
CString str = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>emission <20><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>");
CExceptionMsg Msg;
Msg.SetMsg(str);
throw Msg;
}
}
//<2F><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>
{
CString str1 = Db2CString(m_Power*MAX_CUR*0.01);
CString str = "C:"+ str1+char(13)+char(10);
com.Write(str);
Sleep(DelayTime);
}
//<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>
{
CString str1 = Int2CString(m_Fre*1000);
CString str = "Q:"+ str1+char(13)+char(10);
com.Write(str);
Sleep(DelayTime);
}
}
else
{
CString str = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>");
gLogMgr->WriteDebugLog(str);
}
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ״̬
CString CLaserDeviceMgr::GetLaserState()
{
CString State;
CCommPortMgr com;
//<2F>򿪴<EFBFBD><F2BFAAB4><EFBFBD>
if(com.Open(m_ComPort))
{
CString str1 = _T("?F");
CString str = str1+char(13)+char(10);
com.Write(str);
Sleep(DelayTime);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
State = com.ReadStr();
com.Close();
}
else
{
State = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>");
}
return State;
}
//<2F><><EFBFBD>õ<EFBFBD>ǰ<EFBFBD>Ȼ<EFBFBD>ʱ<EFBFBD><CAB1>
CString CLaserDeviceMgr::GetWarmTime()
{
CString time = _T("0");
CCommPortMgr com;
//<2F>򿪴<EFBFBD><F2BFAAB4><EFBFBD>
if(com.Open(m_ComPort))
{
CString str1 = _T("WARMUPTIME?");
CString str = str1+char(13)+char(10);
com.Write(str);
Sleep(DelayTime);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
time = com.ReadStr();
com.Close();
}
return time;
}
void CLaserDeviceMgr::TurnOnEmission()
{
gLogMgr->WriteDebugLog("func ; CLaserDeviceMgr---->TurnOnEmission");
CCommPortMgr com;
//<2F>򿪴<EFBFBD><F2BFAAB4><EFBFBD>
if(com.Open(m_ComPort)==false)
{
return;
}
//<2F><><EFBFBD><EFBFBD>emission
{
CString str1 = _T("ON");
CString str = str1+char(13)+char(10);
com.Write(str);
Sleep(DelayTime);
}
com.Close();
}
void CLaserDeviceMgr::TurnOffEmission()
{
CCommPortMgr com;
//<2F>򿪴<EFBFBD><F2BFAAB4><EFBFBD>
if(com.Open(m_ComPort)==false)
{
return;
}
//<2F><><EFBFBD><EFBFBD>emission
{
CString str1 = _T("OFF");
CString str = str1+char(13)+char(10);
com.Write(str);
Sleep(DelayTime);
}
com.Close();
}
#endif
#if 1//<2F>¹<EFBFBD>innolase <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(bException <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>Ƿ<EFBFBD><C7B7>׳<EFBFBD><D7B3>쳣)
void CLaserDeviceMgr::SetParToLaserInnolase(bool bException)
{
gLogMgr->WriteDebugLog("func ; CLaserDeviceMgr---->SetParToLaserInnolase");
//<2F><><EFBFBD><EFBFBD>û<EFBFBD>б仯ʱ<E4BBAF><CAB1>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(IsTwoDbEqual(m_CurLaserCurr,m_Power) && IsTwoDbEqual(m_CurLaserFre,m_Fre))
{
gLogMgr->WriteDebugLog("par not change");
return;
}
SendMsgToDevice(_INNOLAS_CURRENT,true,m_Power,bException);
SendMsgToDevice(_INNOLAS_FRE,true,m_Fre,bException);//m_Fre <20><>λ<EFBFBD><CEBB>khz
Sleep(100);//<2F>ٷ<EFBFBD>һ<EFBFBD><D2BB>
SendMsgToDevice(_INNOLAS_CURRENT,true,m_Power,bException);
SendMsgToDevice(_INNOLAS_FRE,true,m_Fre,bException);
//<2F><>¼<EFBFBD><C2BC>ǰֵ
m_CurLaserCurr = m_Power;
m_CurLaserFre = m_Fre;
//Sleep(1000);
//<2F><><EFBFBD><EFBFBD>Innolase <20>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>óɹ<C3B3>
//CheckInnolaseLaserPar(m_Power,m_Fre,bException);
}
//<2F><><EFBFBD><EFBFBD>Innolase <20>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>óɹ<C3B3>
void CLaserDeviceMgr::CheckInnolaseLaserPar(double Power,double Fre,bool bException)
{
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ʵIJ<CAB5><C4B2><EFBFBD>ֵ
ReadLaserPar();
//<2F>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ
double GetPower = GetCurLaserCurr();
double GetFre = GetCurLaserFre();
CString str;
gLogMgr->WriteDebugLog("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>532 <20>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>óɹ<C3B3>");
str.Format("GetPower = %lf,SetPower = %lf",GetPower,Power);
gLogMgr->WriteDebugLog(str);
str.Format("GetFre = %lf,SetFre = %lf",GetFre,Fre);
gLogMgr->WriteDebugLog(str);
double eps = 0.1;
if(bException)
{
if(!IsTwoDbEqual(GetPower,Power,eps) || !IsTwoDbEqual(GetFre,Fre,eps))
{
CExceptionMsg Msg;
CString str("532 <20>̹⼤<CCB9><E2BCA4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>趨ʧ<E8B6A8><CAA7>!");
Msg.SetMsg(str);
throw Msg;
}
}
}
//<2F><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>(bException ʧ<><CAA7>ʱ<EFBFBD>׳<EFBFBD><D7B3>쳣)
double CLaserDeviceMgr::SendMsgToDevice(INNOLAS_LASER_OP_TYPE type,bool bSet,double val,bool bException)
{
double GetVal = 0;//<2F><>ȡֵ
bool ret = true;
CString str;
//<2F>򿪴<EFBFBD><F2BFAAB4><EFBFBD>
if(m_ComMgr.IsOpen())
{
CInnolasOpPar OpPar;
OpPar.bSet = bSet;
OpPar.SetVal = val;
OpPar.Type = type;
SendMsgToDeviceExt(m_ComMgr,OpPar);
if(!bSet)//<2F><>ȡ
{
Sleep(100);
char ReadBuf[256];
memset(ReadBuf,0,256);
m_ComMgr.ReadBuf(ReadBuf,256);
int ValIdx1 = 8;//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>λ<EFBFBD><CEBB>
int ValIdx2 = 9;
unsigned char ValChar1 = ReadBuf[ValIdx1];
unsigned char ValChar2 = ReadBuf[ValIdx2];
unsigned int Val1 = ValChar1;
unsigned int Val2 = ValChar2;
GetVal = HexByte2Int(Val1,Val2);
GetVal /=GetLaserUnit(OpPar.Type);//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
else
{
ret = false;
//str = "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣!";
}
if(bException && !ret && !gExitApp)
{
CExceptionMsg Msg;
Msg.SetMsg(str);
throw Msg;
}
return GetVal;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>
void CLaserDeviceMgr::SendMsgToDeviceExt(CCommPortMgr&Comm,CInnolasOpPar &OpPar)
{
unsigned char buf[256];
memset(buf,0,256);
int idx = 0;
//Startbyte 2 byte ,Value is 0xFF00
buf[idx++] = 0xff;
buf[idx++] = 0x00;
//Length of command ,1 byte <20>ֽ<EFBFBD><D6BD><EFBFBD>
buf[idx++] = GetLenOfCmd(OpPar.Type);
//Message ID 2 byte, <20><>Χ0 ~ 0x7FFF
buf[idx++] = 0x00;
buf[idx++] = GetMsgID(OpPar.Type);
//Command type,1 byte,0x57 command (set) 0x47 query (get)
buf[idx++] = GetOpType(OpPar.bSet);
//Opcode 2 byte
buf[idx++] = GetOpCode1(OpPar.Type);
buf[idx++] = GetOpCode2(OpPar.Type);
//Parameter ,0...245 byte
//if(OpPar.bSet)
{
int IntVal = OpPar.SetVal * GetLaserUnit(OpPar.Type);
char HexVal[128];
memset(HexVal,0,128);
IntTo2ByteHex(IntVal,HexVal);
if(OpPar.Type == _INNOLAS_SYS_ENABLE)
{
buf[idx++] = 0x01;//<2F><><EFBFBD><EFBFBD>
}
else
{
buf[idx++] = HexVal[0];
buf[idx++] = HexVal[1];
}
}
//Checksum,1 byte,Addition mod 256 (У<><D0A3><EFBFBD><EFBFBD>)
int Checksum = 0;
for(int k=0;k<idx;k++)
{
Checksum += (int)buf[k];
}
Checksum %= 256;
buf[idx++] = (char)Checksum;
//Endbyte ,1 byte
buf[idx++] = char(13);//<CR>
Comm.WriteBuf(buf,idx);
}
//<2F><>ȡָ<C8A1><D6B8><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
unsigned char CLaserDeviceMgr::GetLenOfCmd(INNOLAS_LASER_OP_TYPE Type)
{
unsigned c = 0x09;
if(Type == _INNOLAS_SYS_ENABLE)
{
c = 0x08;
}
return c;
}
//<2F><>ȡMSG ID
unsigned char CLaserDeviceMgr::GetMsgID(INNOLAS_LASER_OP_TYPE Type)
{
int id = (int)Type;
unsigned char c = (unsigned char)id;
return c;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned char CLaserDeviceMgr::GetOpType(bool bSet)
{
return (bSet)?0x57:0x47;
}
//<2F><><EFBFBD><EFBFBD>code <20>ĵ<EFBFBD>1 <20><><EFBFBD>ֽ<EFBFBD>
unsigned char CLaserDeviceMgr::GetOpCode1(INNOLAS_LASER_OP_TYPE Type)
{
unsigned char c = 0x00;
return c;
}
//<2F><><EFBFBD><EFBFBD>code <20>ĵ<EFBFBD>2 <20><><EFBFBD>ֽ<EFBFBD>
unsigned char CLaserDeviceMgr::GetOpCode2(INNOLAS_LASER_OP_TYPE Type)
{
unsigned char c = 0x00;
if(Type == _INNOLAS_FRE)
{
c = 0x81;
}
else if(Type == _INNOLAS_SYS_ENABLE)
{
c = 0xc1;
}
else if(Type == _INNOLAS_CURRENT)
{
c = 0x70;
}
else if(Type == _INNOLAS_SYS_STATE)
{
c = 0xa4;
}
return c;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
double CLaserDeviceMgr::GetLaserUnit(INNOLAS_LASER_OP_TYPE Type)
{
double n = 1;
if(Type == _INNOLAS_FRE)
{
n = 10;
}
else if(Type == _INNOLAS_CURRENT)
{
n = 100;
}
return n;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ʵIJ<CAB5><C4B2><EFBFBD>ֵ
void CLaserDeviceMgr::ReadLaserPar()
{
if(gExitApp)
return;
m_CurLaserCurr = SendMsgToDevice(_INNOLAS_CURRENT,false,0,false);//<2F><><EFBFBD><EFBFBD>
m_CurLaserFre= SendMsgToDevice(_INNOLAS_FRE,false,0,false);//Ƶ<><C6B5>
}
#endif
#if 1//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD>
UINT LaserSleepThread(LPVOID pParam)
{
CLaserDeviceMgr *p = (CLaserDeviceMgr *)pParam;
p->LaserSleepTimeExt();
return 0;
}
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>ʱ
void CLaserDeviceMgr::StartLaserSleepTime()
{
m_LaserSleepTime.StartBackTime(m_LaserSleepTimeMinutes*60);
m_bStopLaserSleepTime = false;//<2F><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD>߳<EFBFBD>
AfxBeginThread(LaserSleepThread,this);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>ʱ
void CLaserDeviceMgr::StopLaserSleepTime()
{
m_bStopLaserSleepTime = true;//<2F><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD>߳<EFBFBD>
}
void CLaserDeviceMgr::LaserSleepTimeExt()
{
while(1)
{
Sleep(600);
if(gExitApp)
return;
if(m_bStopLaserSleepTime)
break;
if(m_LaserSleepTime.IsBackTimeEnd())//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0
if(m_DeviceType==_LASER_INNOLASE)
{
SendMsgToDevice(_INNOLAS_CURRENT,true,0,false);
}
break;
}
m_CurLeftTimes = m_LaserSleepTime.GetLeftTimes();
}
}
void CLaserDeviceMgr::OnExitApp()
{
if(m_bExitAppCloseLaser)
{
//<2F>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0
if(m_DeviceType==_LASER_INNOLASE)
{
SendMsgToDevice(_INNOLAS_CURRENT,true,0,true);
}
if(m_DeviceType==_LASER_SPECTRA_PHYSICS)
{
TurnOffEmission();
}
}
}
#endif
#if 1//<2F><>ȡ<EFBFBD>豸״̬
UINT ReadInfoThread(LPVOID pParam)
{
CLaserDeviceMgr *p = (CLaserDeviceMgr *)pParam;
p->ReadInfoExt();
return 0;
}
void CLaserDeviceMgr::StartReadInfo()
{
AfxBeginThread(ReadInfoThread,this);
}
void CLaserDeviceMgr::ReadInfoExt()
{
while(1)
{
Sleep(200);
if(gExitApp)
return;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ReadLaserPar();
}
}
#endif