📄 cgedoc.cpp
字号:
//用正弦曲线模拟数据
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.RemoveHead();
m_CMyLineList.RemoveAll();// CAge's aren't destroyed.
ASSERT(m_CMyLineList.IsEmpty()); // Yes it is.
}
for( i=0;i<Num_Line;i++)
{
for( j=0;j<Num_Pointes;j++)
{
//y = 21448 * sin(j*0.0314159); //m_stepY = 60;i*basline+
y = 32768 * sin(j*0.0314159); //模拟原始数据
//而实际采样数据 512*x = 512* y / 放大倍数
//其中y是从硬件直接获得的数据,x是硬件放大器放大以前的数据,
//其中512是归一系数
//stepY
AddLine(y);
//m_dlg.StepIt(); //修改进度条的值
}
m_dlg.StepIt(); //修改进度条的值
}
m_dlg.DestroyWindow ();
//调用绘图函数(直接使用链表中的数据)
SetModifiedFlag(true);//设置修改标志为真,提醒存盘
caiyangKey = false;
drawlineKey = true;
Y_Max(); //获得最大值
E_Value(); //获得算术平均值
//OnYmanping();
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;
//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", 1) ;
m_Mcishu = 1;
UpdateAllViews(NULL); //立刻画线
canshuKey = false;
drawlineKey = false;
olddataKey = false;// 采样后是新数据
}
BOOL CCgeDoc::yiqi_zjiaozhun()
{
MyTTY.CloseConnection(); //关闭串口
//初始化串口
MyTTY.ComPort = m_com;
MyTTY.CreateTTYInfo();
if(MyTTY.OpenConnection() == FALSE)
return false;
BYTE testbyte=0x0f; //仪器自校准
BOOL bret;
int nLength;
BYTE abIn[1];
// char s_abIn[10];
CString sd;
DWORD dwwritenlen;
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);
//读第一片
if (MyTTY.npTTYInfo!=NULL)
{
bret = WriteCommBlock( MyTTY.npTTYInfo, &testbyte , 1,&dwwritenlen); //(DWORD )strlen(c_temp) = 6
if (bret && (dwwritenlen>0))
{
PurgeComm(COMDEV(MyTTY.npTTYInfo),PURGE_TXCLEAR);
// char temp[256];
// sprintf(temp,"write %d success!",dwwritenlen);
// AfxMessageBox(temp);
}
else
{ AfxMessageBox("Write failed!");
return false;
}
}
else
{ AfxMessageBox("COM not opened!");
return false;
}
//回读0x0e
do
{
nLength = ReadCommBlock( MyTTY.npTTYInfo, (LPSTR) abIn, 2); //MAXBLOCK );
if (nLength>0)
{
// itoa(abIn[0],s_abIn,16);
// AfxMessageBox(s_abIn);
}
}while (nLength<=0); //(nLength<=0);
if(abIn[0]!=0x0e)
{
AfxMessageBox("通讯失败...");
return false;
}
if(abIn[0]==0x0e)
{
AfxMessageBox("发送正确...");
}
//回读0x0d
do
{
nLength = ReadCommBlock( MyTTY.npTTYInfo, (LPSTR) abIn, 2); //MAXBLOCK );
if (nLength>0)
{
// itoa(abIn[0],s_abIn,16);
// AfxMessageBox(s_abIn);
m_dlg.StepIt ();
}
}while (nLength<=0); //(nLength<=0);
if(abIn[0]!=0x0d)
{
AfxMessageBox("通讯失败...");
return false;
}
//读电压和零点(+8v,-8v,-5v)
BOOL Read_key,ReadKey;
ReadKey = true;
BYTE Data_epp[3];
float Data_v0[8]; //零点电压
float Data_v[3]; //电源电压
//第一片的零点电压
Read_key = Read_Epp(Data_epp); //空读
for(Iepp0=0;Iepp0<512;Iepp0++)
{
Read_Epp(Data_epp);
ReadKey = ReadKey && Read_key;
Temp_Data_v0[Iepp0] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/1; //增益1
}
Read_key = Read_Epp(Data_epp); //空读
//ReadKey = ReadKey && Read_key;
//Data_v0[0] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/1; //增益1
Data_v0[0] = E_Data_v0(Temp_Data_v0);
m_dlg.StepIt ();
Read_key = Read_Epp(Data_epp); //空读
for(Iepp0=0;Iepp0<512;Iepp0++)
{
Read_Epp(Data_epp);
ReadKey = ReadKey && Read_key;
Temp_Data_v0[Iepp0] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/8; //增益8
}
Read_key = Read_Epp(Data_epp); //空读
//ReadKey = ReadKey && Read_key;
//Data_v0[1] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/8; //增益8
Data_v0[1] = E_Data_v0(Temp_Data_v0);
m_dlg.StepIt ();
Read_key = Read_Epp(Data_epp); //空读
for(Iepp0=0;Iepp0<512;Iepp0++)
{
Read_Epp(Data_epp);
ReadKey = ReadKey && Read_key;
Temp_Data_v0[Iepp0] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/64; //增益64
}
Read_key = Read_Epp(Data_epp); //空读
//ReadKey = ReadKey && Read_key;
//Data_v0[2] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/64; //增益64
Data_v0[2] = E_Data_v0(Temp_Data_v0);
Read_key = Read_Epp(Data_epp); //空读
for(Iepp0=0;Iepp0<512;Iepp0++)
{
Read_Epp(Data_epp);
ReadKey = ReadKey && Read_key;
Temp_Data_v0[Iepp0] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/512; //增益512
}
Read_key = Read_Epp(Data_epp); //空读
//ReadKey = ReadKey && Read_key;
//Data_v0[3] = 2500.00*BtoInt(Data_epp[1],Data_epp[2])/(512*32767); //增益512
Data_v0[3] = E_Data_v0(Temp_Data_v0);
m_dlg.StepIt ();
//电源电压(+8v,+5,-8v)
Read_key = Read_Epp(Data_epp); //空读
for(Iepp0=0;Iepp0<512;Iepp0++)
{
Read_Epp(Data_epp);
ReadKey = ReadKey && Read_key;
ReadKey = ReadKey && Read_key;
Temp_Data_v0[Iepp0] = 25*2.5/32767*BtoInt(Data_epp[1],Data_epp[2])/1; //+8v
}
Read_key = Read_Epp(Data_epp); //空读
//ReadKey = ReadKey && Read_key;
//Data_v[0] = 25*2.5/32767*BtoInt(Data_epp[1],Data_epp[2])/1; //+8v
Data_v[0] = E_Data_v0(Temp_Data_v0);
m_dlg.StepIt ();
Read_key = Read_Epp(Data_epp); //空读
for(Iepp0=0;Iepp0<512;Iepp0++)
{
Read_Epp(Data_epp);
ReadKey = ReadKey && Read_key;
Temp_Data_v0[Iepp0] = 25*2.5/32767*BtoInt(Data_epp[1],Data_epp[2])/1; //+5v
}
Read_key = Read_Epp(Data_epp); //空读
//ReadKey = ReadKey && Read_key;
//Data_v[1] = 25*2.5/32767*BtoInt(Data_epp[1],Data_epp[2])/1; //+5v
Data_v[1] = E_Data_v0(Temp_Data_v0);
m_dlg.StepIt ();
Read_key = Read_Epp(Data_epp); //空读
for(Iepp0=0;Iepp0<512;Iepp0++)
{
Read_Epp(Data_epp);
ReadKey = ReadKey && Read_key;
Temp_Data_v0[Iepp0] = 25*2.5/32767*BtoInt(Data_epp[1],Data_epp[2])/1.0; //-8v
}
Read_key = Read_Epp(Data_epp); //空读
//ReadKey = ReadKey && Read_key;
//Data_v[2] = 25*2.5/32767*BtoInt(Data_epp[1],Data_epp[2])/1; //-8v
Data_v[2] = E_Data_v0(Temp_Data_v0);
m_dlg.StepIt ();
if(!ReadKey)
{
AfxMessageBox("读并口第一片失败...");
// return false;
}
if(Data_v[0]<7.5 || Data_v[0]>8.5 )
{
sd.Format("%f",Data_v[0]);
sd = "电源电压异常...\n +8v = " + sd;
AfxMessageBox(sd);
//return false;
}
if(Data_v[2]<-8.5 || Data_v[2]>-7.5 )
{
sd.Format("%f",Data_v[2]);
sd = "电源电压异常...\n -8v = " + sd;
AfxMessageBox(sd);
//return false;
}
//读第二片
testbyte=0x0e; //通知读第二片
bret = WriteCommBlock( MyTTY.npTTYInfo, &testbyte , 1,&dwwritenlen); //(DWORD )strlen(c_temp) = 6
if (bret && (dwwritenlen>0))
{
PurgeComm(COMDEV(MyTTY.npTTYInfo),PURGE_TXCLEAR);
// char temp[256];
// sprintf(temp,"write %d success!",dwwritenlen);
// AfxMessageBox(temp);
}
else
{ AfxMessageBox("Write failed!");
return false;
}
//回读0x0d
do
{
nLength = ReadCommBlock( MyTTY.npTTYInfo, (LPSTR) abIn, 2); //MAXBLOCK );
if (nLength>0)
{
// itoa(abIn[0],s_abIn,16);
// AfxMessageBox(s_abIn);
}
m_dlg.StepIt ();
}while (nLength<=0); //(nLength<=0);
if(abIn[0]!=0x0d)
{
AfxMessageBox("通讯失败...");
return false;
}
//第二片的零点
Read_key = Read_Epp(Data_epp); //空读
for(Iepp0=0;Iepp0<512;Iepp0++)
{
Read_Epp(Data_epp);
ReadKey = ReadKey && Read_key;
Temp_Data_v0[Iepp0] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/1; //增益1
}
Read_key = Read_Epp(Data_epp); //空读
//ReadKey = ReadKey && Read_key;
//Data_v0[0] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/1; //增益1
Data_v0[4] = E_Data_v0(Temp_Data_v0);
m_dlg.StepIt ();
Read_key = Read_Epp(Data_epp); //空读
for(Iepp0=0;Iepp0<512;Iepp0++)
{
Read_Epp(Data_epp);
ReadKey = ReadKey && Read_key;
Temp_Data_v0[Iepp0] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/8; //增益8
}
Read_key = Read_Epp(Data_epp); //空读
//ReadKey = ReadKey && Read_key;
//Data_v0[5] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/8; //增益8
Data_v0[5] = E_Data_v0(Temp_Data_v0);
m_dlg.StepIt ();
Read_key = Read_Epp(Data_epp); //空读
for(Iepp0=0;Iepp0<512;Iepp0++)
{
Read_Epp(Data_epp);
ReadKey = ReadKey && Read_key;
Temp_Data_v0[Iepp0] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/64;//增益64
}
Read_key = Read_Epp(Data_epp); //空读
//ReadKey = ReadKey && Read_key;
//Data_v0[6] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/64;//增益64
Data_v0[6] = E_Data_v0(Temp_Data_v0);
m_dlg.StepIt ();
Read_key = Read_Epp(Data_epp); //空读
for(Iepp0=0;Iepp0<512;Iepp0++)
{
Read_Epp(Data_epp);
ReadKey = ReadKey && Read_key;
Temp_Data_v0[Iepp0] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/512;//增益512
}
Read_key = Read_Epp(Data_epp); //空读
//ReadKey = ReadKey && Read_key;
//Data_v0[7] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/512;//增益512
Data_v0[7] = E_Data_v0(Temp_Data_v0);
m_dlg.StepIt ();
if(!ReadKey)
{
AfxMessageBox("读并口第二片失败...");
return false;
}
//读完了所有的数据后,发送 0x0e 结束
testbyte=0x0e;
bret = WriteCommBlock( MyTTY.npTTYInfo, &testbyte , 1,&dwwritenlen); //(DWORD )strlen(c_temp) = 6
if (bret && (dwwritenlen>0))
{
PurgeComm(COMDEV(MyTTY.npTTYInfo),PURGE_TXCLEAR);
// char temp[256];
// sprintf(temp,"write %d success!",dwwritenlen);
// AfxMessageBox(temp);
}
else
{ AfxMessageBox("Write failed!");
return false;
}
m_dlg.SetPos (120);
m_dlg.DestroyWindow ();
MyTTY.CloseConnection(); //关闭串口
//float Data_v0[8]; //零点电压
//float Data_v[3]; //电源电压
CjiaozhunDLG jiaozhundlg;
jiaozhundlg.m_1_1 = Data_v0[0];
jiaozhundlg.m_8_1 = Data_v0[1];
jiaozhundlg.m_64_1 = Data_v0[2];
jiaozhundlg.m_512_1 = Data_v0[3];
jiaozhundlg.m_1_2 = Data_v0[4];
jiaozhundlg.m_8_2 = Data_v0[5];
jiaozhundlg.m_64_2 = Data_v0[6];
jiaozhundlg.m_512_2 = Data_v0[7];
jiaozhundlg.m_z8v = Data_v[0]; //+8v
jiaozhundlg.m_z5v = Data_v[1]; //+5v
jiaozhundlg.m_f8v = Data_v[2]; //-8v
jiaozhundlg.DoModal();
return true;
}
void CCgeDoc::OnYiqizijiao()
{
// TODO: Add your command handler code here
BOOL yiKey ;
yiKey = yiqi_zjiaozhun();
if(!yiKey)
{
}
}
//叠加采样
void CCgeDoc::OnMcaiyang()
{
int OKOrCANCEL,i;
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;
}
//diejiadlg.m_Mcishu.Format("%d",m_Mcishu); //数值转成字符串
m_Mcishu = atoi(diejiadlg.m_Mcishu);
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.RemoveHead();
m_CMyLineList.RemoveAll();// CAge's aren't destroyed.
ASSERT(m_CMyLineList.IsEmpty()); // Yes it is.
}
BOOL Cai_key;
monicaiyang = false;
for(i=0;i<m_Mcishu;i++)
{
m_Mps = m_CMyLineList.GetHeadPosition();//获得连表的头
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -