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.

488 lines
15 KiB
C++

#include "StdAfx.h"
#include "OptoWaveLaserMgr.h"
#include "Propertie.h"
#include "PropertieMgr.h"
#include "AuthorityMgr.h"
#include "CStringFuc.h"
#include "ExceptionMsg.h"
#include "LogMgr.h"
#include "MsgBox.h"
#include "GlobalFunction.h"
#include "FileMgr.h"
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹<EFBFBD><CDB9>ʵ<EFBFBD>У׼<D0A3>ļ<EFBFBD>
#define LASER_POWER_FILE _T("\\Parameter\\OptoWaveLaserMgr\\OptoWavePower.txt")
COptoWaveLaserMgr *gOptoWaveLaserMgr = new COptoWaveLaserMgr;
COptoWaveLaserMgr::COptoWaveLaserMgr(void)
{
m_Com = 2;//ͨ<><CDA8><EFBFBD><EFBFBD>com <20>ڱ<EFBFBD><DAB1><EFBFBD>
m_PowerCurr = 20;//<2F><><EFBFBD><EFBFBD>
m_Fre = 30;//<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>khz
m_SendDelay = 200;//ָ<><EFBFBD><EEB7A2><EFBFBD><EFBFBD>ʱ
m_CurrUpTime = 5;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1>(<28><>)
}
COptoWaveLaserMgr::~COptoWaveLaserMgr(void)
{
}
#if 1//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMFCPropertyGridProperty *COptoWaveLaserMgr::CreatGridProperty()
{
CString PropertyName;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CString Description;//<2F><><EFBFBD><EFBFBD>
CString Path = _T("OptoWaveLaserMgr");//<2F>洢·<E6B4A2><C2B7>
CString Name;
//-------------------------------------------------------------------------------//
PropertyName = _T("OptoWave <20><><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_Com");//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_Com);
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_Com, Description);
pGroup->AddSubItem(p);
gDevicePropertieMgr.Insert(p, pPropertie);
}
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ӳ<EFBFBD><D3B3>
Name = _T("m_PowerCurr");//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_PowerCurr);
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>");
Description = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ(<28><>λ:A)");
CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_PowerCurr, 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>");
Description = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>(<28><>λ:kHz)");
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_SendDelay");//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_SendDelay);
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>ʱ(<28><>λ:ms)");
CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_SendDelay, Description);
pGroup->AddSubItem(p);
gDevicePropertieMgr.Insert(p, pPropertie);
}
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ӳ<EFBFBD><D3B3>
Name = _T("m_CurrUpTime");//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_CurrUpTime);
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><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>(<28><>)");
CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_CurrUpTime, Description);
pGroup->AddSubItem(p);
gDevicePropertieMgr.Insert(p, pPropertie);
}
}
//-------------------------------------------------------------------------------//
return pGroup;
}
void COptoWaveLaserMgr::ExportPar(ofstream *pFile)
{
(*pFile)<<"<><C4A3>] [CLaserDeviceMgr]------------------------------------------------"<<endl;
(*pFile)<<"[<5B><><EFBFBD>ں<EFBFBD>]"<<m_Com<<endl;
}
#endif
void COptoWaveLaserMgr::Ini()
{
//ֻ<>ڿ<EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1><EFBFBD>򿪴<EFBFBD><F2BFAAB4><EFBFBD>
m_ComMgr.Open(m_Com);
}
#if 1
void COptoWaveLaserMgr::WriteWorkFileExt(vector<CLab> &LabVec)
{
//<2F><>ȡҲҪ<D2B2><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3>
LabVec.push_back(CLab(LAB_NULL,m_PowerCurr));//<2F><><EFBFBD><EFBFBD>
LabVec.push_back(CLab(LAB_NULL,m_Fre));//Ƶ<><C6B5>
}
void COptoWaveLaserMgr::ReadWorkFile(CLabVecRang &LabVecRang)
{
int idx = LabVecRang.GetStart()+1;
m_PowerCurr = LabVecRang.GetDouble(idx++);
m_Fre = LabVecRang.GetInt(idx++);
}
#endif
#if 1
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
CString COptoWaveLaserMgr::GetDeviceStateStr(OPTO_LASER_STATE state)
{
CString str;
switch(state)
{
case _STATE_COM_ERR:
str = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case _STATE_NOT_CONNECT:
str = _T("δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case _STATE_NOT_INI:
str = _T("δ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>");
break;
case _STATE_WAITING:
str = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case _STATE_STARTING:
str = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case _STATE_WORK:
str = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
default:
break;
}
return str;
}
COLORREF COptoWaveLaserMgr::GetColor(OPTO_LASER_STATE state)
{
COLORREF c;
switch(state)
{
case _STATE_COM_ERR:
c = RGB_RED;
break;
case _STATE_NOT_CONNECT:
c = RGB_RED;
break;
case _STATE_NOT_INI:
c = RGB_YELLOW;
break;
case _STATE_WAITING:
c = RGB_YELLOW;
break;
case _STATE_STARTING:
c = RGB_YELLOW;
break;
case _STATE_WORK:
c = RGB_GREEN;
break;
default:
break;
}
return c;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬0:δ<><CEB4>ʼ<EFBFBD><CABC>1:<3A><><EFBFBD><EFBFBD>2:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
OPTO_LASER_STATE COptoWaveLaserMgr::ReadDeviceState()
{
//<2F>򿪴<EFBFBD><F2BFAAB4><EFBFBD>-----------------------------
if(!m_ComMgr.IsOpen())
{
return _STATE_COM_ERR;
}
//ʵ<>ʵ<EFBFBD><CAB5><EFBFBD>ֵ
float IDI = 0;
{
//<2F><><EFBFBD>Ͳ<EFBFBD>ѯ
CString str1 = "?IDI";
CString strSend = str1+char(13)+char(10);
m_ComMgr.Write(strSend);
Sleep(m_SendDelay);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
CString str2 = m_ComMgr.ReadStr();
if(str2 == "")
{
return _STATE_NOT_CONNECT;
}
if(str2[0]=='L' && str2[1]=='O'&&str2[2]=='C')
{
return _STATE_NOT_INI;
}
IDI = atof(str2)/10;
if(IsDbEqualZero(IDI))
{
return _STATE_WAITING;
}
}
//<2F><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ֵ
float IDS = 0;
{
//<2F><><EFBFBD>Ͳ<EFBFBD>ѯ
CString str1 = "?IDS";
CString strSend = str1+char(13)+char(10);
m_ComMgr.Write(strSend);
Sleep(m_SendDelay);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
CString str2 = m_ComMgr.ReadStr();
IDS = atof(str2)/10;
}
if(abs(IDS-IDI)<2)
{
return _STATE_WORK;
}
return _STATE_STARTING;
}
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool COptoWaveLaserMgr::IniLaserDevice()
{
gLogMgr->WriteDebugLog("532 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Start");
//<2F><><EFBFBD><EFBFBD>״̬<D7B4>޸<EFBFBD>
CtrlIni();
OPTO_LASER_STATE state = ReadDeviceState();
if(state==_STATE_COM_ERR)
{
CMsgBox MsgBox;
MsgBox.Show(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>!"));
return false;
}
else if(state==_STATE_NOT_CONNECT)
{
CMsgBox MsgBox;
MsgBox.Show(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>!"));
return false;
}
//δ<><CEB4>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD>״̬
else if(state==_STATE_NOT_INI || state==_STATE_WAITING)
{
//<2F><><EFBFBD>ù<EFBFBD><C3B9>ʺ<EFBFBD>Ƶ<EFBFBD><C6B5>
SetFrequencyCurrent();
//<2F>򿪶<EFBFBD><F2BFAAB6><EFBFBD><EFBFBD><EFBFBD>
SwitchDiode(true);
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Sleep(m_CurrUpTime*1000);
}
else//_STATE_STARTING <20><>_STATE_WORK <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>Ƶ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>
{
//<2F><><EFBFBD>ù<EFBFBD><C3B9>ʺ<EFBFBD>Ƶ<EFBFBD><C6B5>
SetFrequencyCurrent();
}
return true;
}
//<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
void COptoWaveLaserMgr::CloseLaserDevice()
{
gLogMgr->WriteDebugLog("532 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>");
if(!m_ComMgr.IsOpen())
{
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>--------------
{
CString str1 = "MCH";
CString str = str1+char(13)+char(10);
m_ComMgr.Write(str);
Sleep(m_SendDelay);
}
//<2F><><EFBFBD><EFBFBD>QSW
{
CString str1 = "QSW=0";
CString str = str1+char(13)+char(10);
m_ComMgr.Write(str);
Sleep(m_SendDelay);
}
//<2F><><EFBFBD><EFBFBD>SHT
{
CString str1 = "SHT=0";
CString str = str1+char(13)+char(10);
m_ComMgr.Write(str);
Sleep(m_SendDelay);
}
{
CString str1 = "DIO=0";
CString str = str1+char(13)+char(10);
m_ComMgr.Write(str);
Sleep(m_SendDelay);
}
}
//<2F><><EFBFBD>Ƴ<EFBFBD>ʼ<EFBFBD><CABC>
void COptoWaveLaserMgr::CtrlIni()
{
if(!m_ComMgr.IsOpen())
{
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>--------------
{
CString str1 = "MCH";
CString str = str1+char(13)+char(10);
m_ComMgr.Write(str);
Sleep(m_SendDelay);
}
//<2F><><EFBFBD><EFBFBD>QSW
{
CString str1 = "QSW=1";
CString str = str1+char(13)+char(10);
m_ComMgr.Write(str);
Sleep(m_SendDelay);
}
//<2F><><EFBFBD><EFBFBD>SHT
{
CString str1 = "SHT=1";
CString str = str1+char(13)+char(10);
m_ComMgr.Write(str);
Sleep(m_SendDelay);
}
//<2F><><EFBFBD>ع<EFBFBD>դ<EFBFBD><D5A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>©<EFBFBD><C2A9>
{
CString str1 = "EXT=1";
CString str = str1+char(13)+char(10);
m_ComMgr.Write(str);
Sleep(m_SendDelay);
}
{
CString str1 = "EXT=0";
CString str = str1+char(13)+char(10);
m_ComMgr.Write(str);
Sleep(m_SendDelay);
}
}
//<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD>ʺ͵<CABA><CDB5><EFBFBD>f <20><>λkhz
void COptoWaveLaserMgr::SetFrequencyCurrent()
{
int f = m_Fre;
double c = m_PowerCurr;
//<2F>򿪴<EFBFBD><F2BFAAB4><EFBFBD>-----------------------------
if(!m_ComMgr.IsOpen())
{
return;
}
{
CString str1 = "PRF=";//<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD>ʣ<EFBFBD>kHZ
CString str2;
str2.Format("%ld",(f*1000));
CString str = str1+str2+char(13)+char(10);
m_ComMgr.Write(str);
Sleep(m_SendDelay);
}
{
CString str1 = "IDI=";//<2F><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>,A
long Current = c*10;
CString str2;
str2.Format("%ld",Current);
CString str = str1+str2+char(13)+char(10);
m_ComMgr.Write(str);
Sleep(m_SendDelay);
}
}
//<2F>򿪹رն<D8B1><D5B6><EFBFBD><EFBFBD><EFBFBD>
void COptoWaveLaserMgr::SwitchDiode(bool b)
{
//<2F>򿪴<EFBFBD><F2BFAAB4><EFBFBD>-----------------------------
if(!m_ComMgr.IsOpen())
{
return;
}
if(b)
{
CString str1 = "DIO=1";
CString str = str1+char(13)+char(10);
m_ComMgr.Write(str);
Sleep(m_SendDelay);
}
else
{
CString str1 = "DIO=0";
CString str = str1+char(13)+char(10);
m_ComMgr.Write(str);
Sleep(m_SendDelay);
}
}
//<2F><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>)
double COptoWaveLaserMgr::GetLaserPower()
{
//<2F><><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>͹<EFBFBD><CDB9>ʵĶ<CAB5><C4B6>ձ<EFBFBD><D5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD>ֵ
CFileMgr FileMgr;
CString FullPath;//<2F><><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
FileMgr.GetFullFilePath(FullPath,LASER_POWER_FILE);
//<2F><>ȡУ׼<D0A3><D7BC><EFBFBD><EFBFBD>
vector<vector<double>> Vec;//<2F><><EFBFBD><EFBFBD><><C6B5>,<2C><><EFBFBD><EFBFBD>
FileMgr.ReadFileToDoubleVec(FullPath,Vec);
double p = 1;
//<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD>
double MinDiff = 0;//<2F><>С<EFBFBD><D0A1>
double FindVal = m_PowerCurr;//<2F><>ѯֵ
vector<vector<double>>::iterator iter = Vec.begin();
vector<vector<double>>::iterator iter_end = Vec.end();
for(;iter!=iter_end;iter++)
{
vector<double> &Arr = (*iter);
if(Arr.size()==3)
{
double CurVal = Arr[0];//<2F><>ǰֵ
double Diff = FindVal-CurVal;
if(iter == Vec.begin())
{
MinDiff = Diff;
p = Arr[2];
}
else if(abs(Diff)<abs(MinDiff))
{
MinDiff = Diff;
p = Arr[2];
}
}
}
return p;
}
#endif