atmeasuredoc.cpp
来自「串口应变采集系统」· C++ 代码 · 共 758 行 · 第 1/2 页
CPP
758 行
for(int l=0;l<peaknum;l++)
{
wave[l]=wavesum[l]/6;
wavesum[l]=0;
if((ctrlcont>200)&&((pt[sndNum][l].Wave-wave[l]>1)||(wave[l]-pt[sndNum][l].Wave>1)))
{
sndNum=0;
sndTempNum=0;
}
else
pt[sndNum][l].Wave=wave[l];
}
if(sndNum==ChannelNum-1)
Calculate();
ctrlcont++;
if(ctrlcont>200)
ctrlcont=0;
}
return 0;
// this->Pointpos(62);
}
void CAtmeasureDoc::OnSysChannel()
{
// TODO: Add your command handler code here
CSysDialog dlg;
dlg.DoModal();
}
void CAtmeasureDoc::SampPara()
{
CPhSet *ph;
ph=new CPhSet;
CPortSet *ms;
ms=new CPortSet;
if(ms->IsOpen())
ms->Close();
ms->Open();
SamNormHZ=ms->m_cyfreq;
CtrlPort=ms->m_strctrl;
DataPort=ms->m_strdata;
ms->Close();
/////////////////需要什么参数///////////////////
CSysSet *ws;
ws=new CSysSet;
CPointSet *ww;
ww=new CPointSet;
// CDatabase m_database;
//取通道数
ws->Open();
ws->MoveLast();
ChannelNum=ws->m_channel_id+1;
ws->Close();
//取出点数
ww->Open();
for (int m=0;m<ChannelNum;m++)
{
// ww->Open();
// m_database.ExecuteSQL("select count(*) as ct from 参数初始化 where channel_id=""+i+");
PointNum[m]=ww->m_Point;
ww->MoveNext();
// ww->Close();
}
ww->Close();
ws->Open();
// CString str;
for(int i=0;i<ChannelNum;i++)
{
for(int j=0;j<PointNum[i];j++)
{
// int flag;
// flag=ws->m_flag;
// if flag=0;
pt[i][j].Wave0=ws->m_wave;//标定波长
pt[i][j].K=ws->m_T0; //标定温度
pt[i][j].T0=ws->m_K; //温度参数
pt[i][j].L=ws->m_L;//应变参数
pt[i][j].H=ws->m_H;//应变参数
pt[i][j].P=ws->m_P;//压力参数
pt[i][j].Q=ws->m_Q;//压力参数
pt[i][j].Comchannel=ws->m_ybchannel;
pt[i][j].Compoint=ws->m_ybpoint;
pt[i][j].Flag=ws->m_flag;
ws->MoveNext();
}
}
ws->Close();
int channel,point;
ph->Open();
if(!ph->IsEOF())
{
if(ph->IsEOF()==0)
{
ph->MoveFirst();
}
while(!ph->IsEOF())
{
channel=ph->m_p_channel;
point=ph->m_p_point;
// if(ph->m_flag==1)
pt[channel][point].StrainBalance=ph->m_p_change;
// else if(ph->m_flag==2)
// pt[channel][point].SPBalance=ph->m_p_tpresure;
// else if(ph->m_flag==3)
// pt[channel][point].WPBalance=ph->m_p_spresure;
ph->MoveNext();
}
}
ph->Close();
ph->Open();
if(ph->IsBOF())
{
ph->Close();
ws->Open();
while(!ws->IsEOF())
// while(!ph->IsEOF())
{
if(ws->m_flag==1)
{
channel=ws->m_channel_id;
point=ws->m_point_id;
pt[channel][point].StrainBalance=0;
}
ws->MoveNext();
}
}
ws->Close();
ph->Close();
}
void CAtmeasureDoc::Calculate()
{
//////////////////////////////计算温度/////////////
// this->Pointpos(71);
for(int i=0;i<ChannelNum;i++)
for(int j=0;j<PointNum[i];j++)
{
if(pt[i][j].Flag==0)
{
pt[i][j].T=pt[i][j].K*(pt[i][j].Wave-pt[i][j].Wave0)+pt[i][j].T0;//最后温度
}
}
////////////////////////////计算应变和压力////////////////////
for(int k=0;k<ChannelNum;k++)
for(int l=0;l<PointNum[k];l++)
{
int comi,comj;
comi=pt[k][l].Comchannel;
comj=pt[k][l].Compoint;
double ktemp,ltemp,htemp;
ktemp=pt[k][l].K;
ltemp=pt[k][l].L;
htemp=pt[k][l].H;
double ptemp,qtemp;
ptemp=pt[k][l].P;
qtemp=pt[k][l].Q;
double wavetemp,wave0temp;
wavetemp=pt[k][l].Wave;
wave0temp=pt[k][l].Wave0;
double t,t0;
t=pt[comi][comj].T;
t0=pt[comi][comj].T0;
if(pt[k][l].Flag==1)
{
if((wavetemp-wave0temp)>=ltemp*ktemp*(t-t0))
{
pt[k][l].Strain=(wavetemp-wave0temp)/wave0temp-ltemp*ktemp*(t-t0);
}
else if((wavetemp-wave0temp)<ltemp*ktemp*(t-t0))
{
pt[k][l].Strain=ltemp*ktemp*(t-t0)-(wavetemp-wave0temp)/wave0temp;
}
pt[k][l].Strain=pt[k][l].Strain/htemp;
pt[k][l].Strain=pt[k][l].Strain-pt[k][l].StrainBalance;//最后应变值
}
if(pt[k][l].Flag==2)
{
if((wavetemp-wave0temp)>=ptemp*ktemp*(t-t0))
{
pt[k][l].SP=(wavetemp-wave0temp)/wave0temp-ptemp*ktemp*(t-t0);
}
else if((wavetemp-wave0temp)<ptemp*ktemp*(t-t0))
{
pt[k][l].SP=ptemp*ktemp*(t-t0)-(wavetemp-wave0temp)/wave0temp;
}
pt[k][l].SP=pt[k][l].SP/qtemp;
pt[k][l].SP=pt[k][l].SP-pt[k][l].SPBalance;//最后土压值
}
if(pt[k][l].Flag==3)
{
if((wavetemp-wave0temp)>=ptemp*ktemp*(t-t0))
{
pt[k][l].WP=(wavetemp-wave0temp)/wave0temp-ptemp*ktemp*(t-t0);
}
else if((wavetemp-wave0temp)<ptemp*ktemp*(t-t0))
{
pt[k][l].WP=ptemp*ktemp*(t-t0)-(wavetemp-wave0temp)/wave0temp;
}
pt[k][l].WP=pt[k][l].WP/qtemp;
pt[k][l].WP=pt[k][l].WP-pt[k][l].WPBalance;//最后水压值
}
}
// this->Pointpos(72);
savechange();
}
void CAtmeasureDoc::OnBalance()
{
/* if(PHflag==2)
{
AfxMessageBox("同一次采样不能两次设置平衡点!!!!");
}*/
// AfxMessageBox("设置平衡点!!!!");
PHflag=1;
for(int i=0;i<ChannelNum;i++)
for(int j=0;j<PointNum[i];j++)
{
if(pt[i][j].Flag==1)
{
pt[i][j].StrainBalance=pt[i][j].Strain;
}
if(pt[i][j].Flag==2)
{
pt[i][j].SPBalance=pt[i][j].SP;
}
if(pt[i][j].Flag==3)
{
pt[i][j].WPBalance=pt[i][j].WP;
}
}
}
void CAtmeasureDoc::savechange()
{
// this->Pointpos(81);
CString tm;
CTime time;
time=time.GetCurrentTime();
int x,y;
double temp=0,presure=0,change=0;
tm=time.Format("%Y-%m-%d %H:%M:%S");
// CDatabase m_database;
TRY
{
// m_database.Open("dbat" );
CString str;
for(x=0;x<ChannelNum;x++)
{
for(y=0;y<PointNum[x];y++)
{
if(PHflag==1)
{
// m_database.ExecuteSQL("delete from 平衡点 ");
if(pt[x][y].Flag==1)
{
str.Format("insert into 平衡点 VALUES('%s','%d','%d','%f','%f','%f')",tm,x,y,pt[x][y].Strain,0,0);
// AfxMessageBox(str);
m_database.ExecuteSQL(str);
}
}
if (pt[x][y].Flag==0)
{
str.Format("insert into 测量值 VALUES('%s','%d','%d','%f','%f','%f','%f','%d')",tm,x,y,pt[x][y].Wave,pt[x][y].T,change,presure,pt[x][y].Flag);
m_database.ExecuteSQL(str);
}
if(pt[x][y].Flag==1)
{
str.Format("insert into 测量值 VALUES('%s','%d','%d','%f','%f','%f','%f','%d')",tm,x,y,pt[x][y].Wave,temp,pt[x][y].Strain,presure,pt[x][y].Flag);
m_database.ExecuteSQL(str);
}
}
}
}
CATCH(CDBException, e)
{
CString msg;
msg=e->m_strError;
int i=1;
// m_database.Close();
}
END_CATCH
// m_database.Close();
JobOK=true;
// this->Pointpos(82);
PHflag=2;
}
void CAtmeasureDoc::Pointpos(int pos)
{
CTime time;
CString tm;
m_id=m_id+1;
time=time.GetCurrentTime();
tm=time.Format("%Y-%m-%d %H:%M:%S");
TRY
{
CString str;
str.Format("insert into dbpos VALUES('%s','%d','%d')",tm,m_id,pos);
// AfxMessageBox(str);
m_TestDB.ExecuteSQL(str);
}
CATCH(CDBException, e)
{
CString msg;
msg=e->m_strError;
int i=1;
// m_database.Close();
}
END_CATCH
// m_database.Close();
}
void CAtmeasureDoc::Onqkbanlance()
{
// TODO: Add your command handler code here
CPhSet *ph;
ph=new CPhSet;
ph->Open();
while(!ph->IsEOF())
{
ph->MoveFirst();
ph->Delete();
ph->MoveNext();
}
ph->Requery();
ph->Close();
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?