📄 cgedoc.cpp
字号:
Cai_key = CaiYang_Fun();
if(!Cai_key)
{
return ;
}
//调用整理数据程序 BOOL ZhengLi_Fun(BOOL f)
BOOL bl;
if (i==0)
{
bl = false;
}
else
{
bl = true;
}
if(!ZhengLi_Fun(bl))
{
AfxMessageBox("数据有错误!");
return ;
}
}
/*
//调用绘图函数(直接使用链表中的数据)
SetModifiedFlag(true);//设置修改标志为真,提醒存盘
caiyangKey = false;
drawlineKey = true;
Y_Max(); //获得最大值
UpdateAllViews(NULL); //立刻画线
canshuKey = false;
drawlineKey = false;
*/
//调用绘图函数(直接使用链表中的数据)
SetModifiedFlag(true);//设置修改标志为真,提醒存盘
caiyangKey = false;
drawlineKey = true;
Y_Max(); //获得最大值 //m_maxY
E_Value();
Num_TimelabelStep = (int(Num_Pointes / m_TimelabelStep) + 1) * m_TimelabelStep;
pView->GetClientRect (&ViewRect);
basline = ViewRect.bottom*1.0 / (Num_Line + 1);
m_stepY0 = 3.0*basline/(32768*512.0); //m412
if(Num_Line != 2)
{
basline = (ViewRect.bottom*1.0-3*basline) / (Num_Line + 1);
}else
{
basline = (ViewRect.bottom*1.0-2*basline) / (Num_Line + 1);
}
// m_viewY0 = 3*basline;//m412
m_HAddX = 50;
m_stepX = 1;
m_stepY0 = 3.0*basline/(32768*512.0); //m412
//标准时以下面的步长为基准将样点放大6dB的整数倍
// m_stepY = pow(2,int(log(32768*512/m_maxY)/log(2)) )* m_stepY0; //1000/0x7fffffff //纵向比例
m_stepY = pow(2,int(log(m_averY)/log(2)) )* m_stepY0; //1000/0x7fffffff //纵向比例
//m611
//m_viewY0 = m_maxY * m_stepY + 2;
m_viewY0 = basline;
double tempx,mlog2;
tempx = log(m_stepY/m_stepY0);
mlog2 = log(2);
m_Ndb = tempx/mlog2;
m_H = 0;
m_xyAxisSize.cx = m_viewX0 + Num_TimelabelStep + m_HAddX ;
m_xyAxisSize.cy = (Num_Line + 1) * basline ;//修改纵向滚动轴
//m412
s[9].Format("%d", m_Mcishu) ;
UpdateAllViews(NULL); //立刻画线
canshuKey = false;
drawlineKey = false;
olddataKey = false;// 采样后是新数据
}
//模拟叠加采样
void CCgeDoc::OnMsin()
{
int OKOrCANCEL;
POSITION Position;
Position = GetFirstViewPosition();
CView* pVView = GetNextView(Position);
CCgeView *pView;
while(pVView!=NULL)
{
if(pVView->IsKindOf(RUNTIME_CLASS(CCgeView)))
{ break;};
pVView = GetNextView(Position);
}
pView = (CCgeView *)pVView;
if (IsModified()!=0)//提示数据已经修改,是否保存
{
//OnFileSave();
pView->m_Viewparfile();
SetModifiedFlag( false );
}
// Oncanshu5();
m_NdbKey = true;
m_Hkey = true;
m_Ndb = 0;
m_H = 0;
m_Mcishu = 0;
m_Mcishu = 5;
CdiejiaDLG diejiadlg;
diejiadlg.m_Mcishu.Format("%d",m_Mcishu);//保存上次的值
OKOrCANCEL = diejiadlg.DoModal();
if (OKOrCANCEL != IDOK)
{
return;
}
m_Mcishu = atoi(diejiadlg.m_Mcishu);
if(m_Mcishu<2 || m_Mcishu >30) //限定次数
{
return ;
}
moniKey = true;
// Oncanshu5();
int i,j,k;
float y,z;
blank=false;
unbas =false;
// m_stepY = 1;
CProgressDlg m_dlg;
m_dlg.Create (pView); //(this);
m_dlg.SetWindowText(_T(" 采样进度"));
m_dlg.SetRange (0,m_Mcishu);
m_dlg.SetPos (0);
m_dlg.SetStep (1);
CMyLine *pMyLine;
if(!m_CMyLineList.IsEmpty())
{
//m_CMyLineList.RemoveAll();// CAge's aren't destroyed.
//ASSERT(m_CMyLineList.IsEmpty()); // Yes it is.
CMyLine *pMyLine;
POSITION ps;
ps = m_CMyLineList.GetHeadPosition();
while ( ps != NULL )
{
pMyLine = (CMyLine *)m_CMyLineList.GetNext(ps);
delete pMyLine; // Now delete the CAge objects.
}
m_CMyLineList.RemoveAll();// CAge's aren't destroyed.
ASSERT(m_CMyLineList.IsEmpty()); // Yes it is.
}
//SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT));
for(k=0;k<m_Mcishu;k++) //开始叠加
{
m_Mps = m_CMyLineList.GetHeadPosition();//获得连表的头
// if(k!=0) pMyLine = (CMyLine* )m_CMyLineList.GetNext(m_Mps);
for( i=0;i<Num_Line;i++)
{
for( j=0;j<Num_Pointes;j++)
{
y = 21448 * sin(j*0.0314159); //模拟数据
if (k==0) //
{
AddLine(y);//第一次产生连表
}
else //叠加修改对象连表
{
//pMyLine = (CMyLine* )m_CMyLineList.GetNext(m_Mps);//不能与GetAt()或SetAt()连用
pMyLine = (CMyLine* )m_CMyLineList.GetAt( m_Mps );
z = pMyLine->y;
pMyLine->y = z + y;
m_CMyLineList.SetAt(m_Mps,pMyLine);
//pMyLine = (CMyLine* )m_CMyLineList.GetAt( m_Mps );
//z = pMyLine->y;
pMyLine = (CMyLine* )m_CMyLineList.GetNext(m_Mps);
}
}
}
m_dlg.StepIt(); //修改进度条的值
}//叠加m_Mcishu次
m_dlg.DestroyWindow ();
//调用绘图函数(直接使用链表中的数据)
SetModifiedFlag(true);//设置修改标志为真,提醒存盘
caiyangKey = false;
drawlineKey = true;
Y_Max();
E_Value(); //获得算术平均值
/*
//m412
pView->GetClientRect (&ViewRect);
basline = ViewRect.bottom*1.0 / (Num_Line + 1);
m_stepY0 = 3.0*basline/(32768*512.0); //m412
basline = (ViewRect.bottom*1.0-3*basline) / (Num_Line + 1);
m_viewY0 = 3*basline;//m412
m_HAddX = 50;
m_stepX = 1;
m_stepY0 = 3.0*basline/(32768*512.0); //m412
//标准时以下面的步长为基准将样点放大6dB的整数倍
m_stepY = pow(2,int(log(32768*512/m_maxY)/log(2)) )* m_stepY0; //1000/0x7fffffff //纵向比例
double tempx,mlog2;
tempx = log(m_stepY/m_stepY0);
mlog2 = log(2);
m_Ndb = tempx/mlog2; */
Num_TimelabelStep = (int(Num_Pointes / m_TimelabelStep) + 1) * m_TimelabelStep;
pView->GetClientRect (&ViewRect);
basline = ViewRect.bottom*1.0 / (Num_Line + 1);
m_stepY0 = 3.0*basline/(32768*512.0); //m412
if(Num_Line != 2)
{
basline = (ViewRect.bottom*1.0-3*basline) / (Num_Line + 1);
}else
{
basline = (ViewRect.bottom*1.0-2*basline) / (Num_Line + 1);
}
// m_viewY0 = 3*basline;//m412
m_HAddX = 50;
m_stepX = 1;
m_stepY0 = 3.0*basline/(32768*512.0); //m412
//标准时以下面的步长为基准将样点放大6dB的整数倍
m_stepY = pow(2,int(log(m_averY)/log(2)) )* m_stepY0; //1000/0x7fffffff //纵向比例
//m611
//m_viewY0 = m_maxY * m_stepY + 2;
m_viewY0 = basline;
double tempx,mlog2;
tempx = log(m_stepY/m_stepY0);
mlog2 = log(2);
m_Ndb = tempx/mlog2;
m_H = 0;
m_xyAxisSize.cx = m_viewX0 + Num_TimelabelStep + m_HAddX ;
m_xyAxisSize.cy = (Num_Line + 1) * basline ;//修改纵向滚动轴
//m412
s[9].Format("%d", m_Mcishu) ;
/*Num_TimelabelStep = (int(Num_Pointes / m_TimelabelStep) + 1) * m_TimelabelStep;
m_xyAxisSize.cx = m_viewX0 + Num_TimelabelStep + m_HAddX ;
m_xyAxisSize.cy = (Num_Line + 1) * basline ;
m_stepX = 1;
m_iniapage();
*/
UpdateAllViews(NULL); //立刻画线
canshuKey = false;
drawlineKey = false;
}
//整理数据
BOOL CCgeDoc::ZhengLi_Fun(BOOL f)
{
//电压值 HL*int(512/G) - V0(0,3,7,6)
BOOL mark;
BYTE data_b[3];
int Data_GHL;
int i,z;
CMyLine *pMyLine;
mark = f;
int Iepp0;
float Temp_Data_v0[512];
POSITION Position;
Position = GetFirstViewPosition();
CView* pVView = GetNextView(Position);
CCgeView *pView;
while(pVView!=NULL)
{
if(pVView->IsKindOf(RUNTIME_CLASS(CCgeView)))
{ break;};
pVView = GetNextView(Position);
}
pView = (CCgeView *)pVView;
CProgressDlg m_dlg;
m_dlg.Create (pView); //(this);
m_dlg.SetWindowText(_T(" 整理数据"));
m_dlg.SetRange (0,120);
//m_dlg.SetRange (0,Num_Line);
m_dlg.SetPos (10);
//m_dlg.SetStep (1);
m_dlg.SetStep (10); //(Num_Line/4);
//同时打开两个片的数据文件
CFile Data1_re("Data_1.txt",CFile::modeRead);
CFile Data2_re("Data_2.txt",CFile::modeRead);
//读奇数通道零点
float Data_GHL_1[4];
//Data1_re.Seek(i*3,CFile::begin);
//for(i=0;i<4;i++)
//{
//Data1_re.Seek(i*3,CFile::begin);
// Data1_re.Read(data_b,3);
//switch (data_b[0])
//{
//case 0:
for(Iepp0=0;Iepp0<Main_amp_nullshift;Iepp0++)
{
Data1_re.Seek(Iepp0*3,CFile::begin);
Data1_re.Read(data_b,3);
Temp_Data_v0[Iepp0] = 512.0/1 * BtoInt(data_b[1],data_b[2]); //增益1
}
Data_GHL_1[0] = E_Data_v0(Temp_Data_v0);
m_dlg.StepIt ();
// Data_GHL_1[0] = 512/1 * BtoInt(data_b[1],data_b[2]); //增益1
// break;
//case 3:
for(Iepp0=0;Iepp0<Main_amp_nullshift;Iepp0++)
{
Data1_re.Seek((Main_amp_nullshift+Iepp0)*3,CFile::begin); //注意调整指针
Data1_re.Read(data_b,3);
Temp_Data_v0[Iepp0] = 512.0/8 * BtoInt(data_b[1],data_b[2]); //增益8
}
Data_GHL_1[1] = E_Data_v0(Temp_Data_v0);
m_dlg.StepIt ();
// Data_GHL_1[1] = 512/8 * BtoInt(data_b[1],data_b[2]); //增益8
// break;
//case 7:
for(Iepp0=0;Iepp0<Main_amp_nullshift;Iepp0++)
{
Data1_re.Seek((Main_amp_nullshift+Main_amp_nullshift+Iepp0)*3,CFile::begin);
Data1_re.Read(data_b,3);
Temp_Data_v0[Iepp0] = 512.0/64 * BtoInt(data_b[1],data_b[2]); //增益64
}
Data_GHL_1[2] = E_Data_v0(Temp_Data_v0);
m_dlg.StepIt ();
//Data_GHL_1[2] = 512/64 * BtoInt(data_b[1],data_b[2]); //增益64
// break;
//case 6:
for(Iepp0=0;Iepp0<Main_amp_nullshift;Iepp0++)
{
Data1_re.Seek((3*Main_amp_nullshift+Iepp0)*3,CFile::begin);
Data1_re.Read(data_b,3);
Temp_Data_v0[Iepp0] = 1.0 * BtoInt(data_b[1],data_b[2]); //增益512
}
Data_GHL_1[3] = E_Data_v0(Temp_Data_v0);
m_dlg.StepIt ();
//Data_GHL_1[3] = 1 * BtoInt(data_b[1],data_b[2]); //增益512
// break;
//default:
// return false;
// break;
//}
//}
//读偶数通道零点
int Data_GHL_2[4];
//Data2_re.Seek(i*3,CFile::begin);
//for(i=0;i<4;i++)
//{
//Data2_re.Seek(i*3,CFile::begin);
//Data2_re.Read(data_b,3);
// switch (data_b[0])
// {
// case 0:
for(Iepp0=0;Iepp0<Main_amp_nullshift;Iepp0++)
{
Data2_re.Seek(Iepp0*3,CFile::begin);
Data2_re.Read(data_b,3);
Temp_Data_v0[Iepp0] = 512.0/1 * BtoInt(data_b[1],data_b[2]); //增益1
}
Data_GHL_2[0] = E_Data_v0(Temp_Data_v0);
m_dlg.StepIt ();
//Data_GHL_2[0] = 512/1 * BtoInt(data_b[1],data_b[2]);
//break;
//case 3:
for(Iepp0=0;Iepp0<Main_amp_nullshift;Iepp0++)
{
Data2_re.Seek((Main_amp_nullshift+Iepp0)*3,CFile::begin);
Data2_re.Read(data_b,3);
Temp_Data_v0[Iepp0] = 512.0/8 * BtoInt(data_b[1],data_b[2]); //增益8
}
Data_GHL_2[1] = E_Data_v0(Temp_Data_v0);
m_dlg.StepIt ();
//Data_GHL_2[1] = 512/8 * BtoInt(data_b[1],data_b[2]);
// break;
//case 7:
for(Iepp0=0;Iepp0<Main_amp_nullshift;Iepp0++)
{
Data2_re.Seek((Main_amp_nullshift+Main_amp_nullshift+Iepp0)*3,CFile::begin);
Data2_re.Read(data_b,3);
Temp_Data_v0[Iepp0] = 512.0/64 * BtoInt(data_b[1],data_b[2]); //增益64
}
Data_GHL_2[2] = E_Data_v0(Temp_Data_v0);
m_dlg.StepIt ();
//Data_GHL_2[2] = 512/64 * BtoInt(data_b[1],data_b[2]);
// break;
//case 6:
for(Iepp0=0;Iepp0<Main_amp_nullshift;Iepp0++)
{
Data2_re.Seek((3*Main_amp_nullshift+Iepp0)*3,CFile::begin);
Data2_re.Read(data_b,3);
Temp_Data_v0[Iepp0] = 1 * BtoInt(data_b[1],data_b[2]); //增益512
}
Data_GHL_2[3] = E_Data_v0(Temp_Data_v0);
m_dlg.StepIt ();
//Data_GHL_2[3] = 1 * BtoInt(data_b[1],data_b[2]);
// break;
//default:
// return false;
// break;
//}
// }
//整理奇、偶数通道数据
m_Mps = m_CMyLineList.GetHeadPosition();//获得连表的头
for(int No=0;No<Num_Line/2;No++)
{
//整理奇数数据
for(i=0;i<Num_Pointes;i++)
{
Data1_re.Seek((No + i*(Num_Line/2))*3+4*Main_amp_nullshift*3,CFile::begin); //???
Data1_re.Read(data_b,3);
//m_Mps = m_CMyLineList.GetHeadPosition();//获得连表的头
switch (data_b[0])
{
case 0:
Data_GHL = 512/1 * BtoInt(data_b[1],data_b[2]);// - Data_GHL_1[0];
break;
case 3:
Data_GHL = 512/8 * BtoInt(data_b[1],data_b[2]);// - Data_GHL_1[1];
break;
case 7:
Data_GHL = 512/64 * BtoInt(data_b[1],data_b[2]);// - Data_GHL_1[2];
break;
case 6:
Data_GHL = 512/512 * BtoInt(data_b[1],data_b[2]);// - Data_GHL_1[3];
break;
default: //??
Data_GHL = 512/1 * BtoInt(data_b[1],data_b[2]);// - Data_GHL_1[0];
break;
//return false;
}
//写入连表
if(mark)
{
//是叠加采样时
//AddLine(Data_GHL);
pMyLine = (CMyLine* )m_CMyLineList.GetAt( m_Mps );
z = pMyLine->y;
pMyLine->y = z + Data_GHL;
m_CMyLineList.SetAt(m_Mps,pMyLine);
pMyLine = (CMyLine* )m_CMyLineList.GetNext(m_Mps);
}
else
{
//是单次采样时,或者叠加采样的第一次
AddLine(Data_GHL); //512*y / 放大倍数作为样点数据写入链表,y是从硬件获得的原始数据
}
}//获得了一条奇数曲线的数据
m_dlg.StepIt ();
//整理偶数数据
for(i=0;i<Num_Pointes;i++)
{
//Data2_re.Seek(i*(Num_Line/2)*3+12,CFile::begin);
Data2_re.Seek((No + i*(Num_Line/2))*3+4*Main_amp_nullshift*3,CFile::begin); //???
Data2_re.Read(data_b,3);
// m_Mps = m_CMyLineList.GetHeadPosition();//获得连表的头
switch (data_b[0])
{
case 0:
Data_GHL = 512/1 * BtoInt(data_b[1],data_b[2]);// - Data_GHL_2[0];
break;
case 3:
Data_GHL = 512/8 * BtoInt(data_b[1],data_b[2]);// - Data_GHL_2[1];
break;
case 7:
Data_GHL = 512/64 * BtoInt(data_b[1],data_b[2]);// - Data_GHL_2[2];
break;
case 6:
Data_GHL = 512/512 * BtoInt(data_b[1],data_b[2]);// - Data_GHL_2[3];
break;
default:
break;
// return false;
}
//写入连表
if(mark)
{
//是叠加采样时
//AddLine(Data_GHL);
pMyLine = (CMyLine* )m_CMyLineList.GetAt( m_Mps );
z = pMyLine->y;
pMyLine->y = z + Data_GHL;
m_CMyLi
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -