⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adstatusview.cpp

📁 AD 数据采集卡基本的采集界面
💻 CPP
字号:
// ADStatusView.cpp : implementation file
//

#include "stdafx.h"
#include "Sys.h"

#include "ADFrm.h"
#include "ADDoc.h"
#include "ADDigitView.h"
#include "ADWaveView.h"
#include "ADStatusView.h"
#include "ParaCfgView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CADStatusView
extern BOOL m_bFirstCreateDeviceFile;
extern PCI2006_PARA_AD Para;
extern int  m_ProcessDigitalMode;
extern int  m_ProcessGraphicMode;
extern BOOL m_FirstScreenStop;
extern int  m_AnalyzeChannel;
extern int m_UpperLimit;
extern int m_LowerLimit;
extern int  m_ScreenVolume;
extern int  m_TriggerVolt;
extern CEdit* pCountEdit;
extern CEdit* pRangeEdit;
extern CEdit* pRatioEdit;
extern BOOL m_BounceStop;
extern BOOL m_AnalyzeCheck;
extern BOOL m_StopUpdateView;
extern int CurrentIndex;
extern int m_MiddleLsb;
extern float m_AnalyzeAllCount;
extern UINT m_OverLimitCount;
extern int m_ProcessMoveVolt;
extern BOOL bCreateDevice;
extern int nProcessMode;
extern BOOL bDeviceADRun;
extern int m_DigitalDataShowMode;
extern SHORT ADBuffer[MAX_SEGMENT][16384];
extern BOOL bCheckOverflow; // 是否检测FIFO溢出标志
extern int Volt_Range ; //电压处理方式 1:正负5伏 2:正负10伏 3:0至5伏 4:0至2.5伏
extern float PerLsbVolt; // 单位LSB的电压值
extern BOOL m_bProgress;
extern PCI2006_PARA_AD ADPara;
extern int  m_nBouncePointsCount;//多点分析所需要的点数

extern BOOL m_bBounce;//是否串道分析
extern int  m_nBounceNum;//串道次数
extern int m_nLower;//串道分析 下限
extern int m_nUpper;//串道分析 上限
extern int  m_nBounceChannel;//分析的通道号
extern BOOL m_bPointsAnalyze;//是否多点分析

IMPLEMENT_DYNCREATE(CADStatusView, CFormView)

CADStatusView::CADStatusView()
	: CFormView(CADStatusView::IDD)
{
	//{{AFX_DATA_INIT(CADStatusView)
	m_nStopFirstDigitalShow = FALSE;
	//}}AFX_DATA_INIT
	bFirstChangeTrigge=TRUE;  // 当某些类对象没有准备就绪时,不能操作CEdit框	
}

CADStatusView::~CADStatusView()
{
}

void CADStatusView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CADStatusView)
	DDX_Control(pDX, IDC_CHECK_Point, m_CHECK_Points);
	DDX_Control(pDX, IDC_EDIT_UpperLimit, m_EDIT_Upper);
	DDX_Control(pDX, IDC_EDIT_LowerLimit, m_EDIT_Lower);
	DDX_Control(pDX, IDC_COMBO_IndexChannel, m_COMBO_IndexChannel);
	DDX_Control(pDX, IDC_CHECK_Bunch, m_CHECK_Bunch);
	DDX_Control(pDX, IDC_EDIT_BunchCount, m_EDIT_BunchCount);
	DDX_Control(pDX, IDC_CHECK_BunchStop, m_CHECK_BunchStop);
	DDX_Control(pDX, IDC_EDIT_AnalyzeCount, m_nAnalyzeCount);
	DDX_Control(pDX, IDC_EDIT_OverRange, m_nOverRange);
	DDX_Control(pDX, IDC_EDIT_OverRatio, m_nOverRatio);
	DDX_Control(pDX, IDC_EDIT_TriggerVolt, m_nTringgerVolt);
	DDX_Control(pDX, IDC_EDIT_ScreenVolume, m_nScreenVolt);
	DDX_Control(pDX, IDC_EDIT_MoveVolt, m_nMoveVolt);
	DDX_Check(pDX, IDC_CHECK_StopFirstDigitalShow, m_nStopFirstDigitalShow);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CADStatusView, CFormView)
	//{{AFX_MSG_MAP(CADStatusView)
	ON_BN_CLICKED(IDC_CHECK_StopFirstDigitalShow, OnCHECKStopFirstDigitalShow)
	ON_EN_CHANGE(IDC_EDIT_ScreenVolume, OnChangeEDITScreenVolume)
	ON_EN_CHANGE(IDC_EDIT_TriggerVolt, OnChangeEDITTriggerVolt)
	ON_BN_CLICKED(IDC_CHECK_CheckOverflow, OnCHECKCheckOverflow)
	ON_BN_CLICKED(IDM_Check_DigitalShow, OnCheckDigitalShow)
	ON_BN_CLICKED(IDM_Check_DataSave, OnCheckDataSave)
	ON_BN_CLICKED(IDM_Check_GraphicShow, OnCheckGraphicShow)
	ON_BN_CLICKED(IDC_CHECK_Bunch, OnCHECKBunch)
	ON_BN_CLICKED(IDC_CHECK_BunchStop, OnCHECKBunchStop)
	ON_BN_CLICKED(IDC_CHECK_Point, OnCHECKPoint)
	ON_EN_CHANGE(IDC_EDIT_LowerLimit, OnChangeEDITLowerLimit)
	ON_EN_CHANGE(IDC_EDIT_UpperLimit, OnChangeEDITUpperLimit)
	ON_CBN_SELCHANGE(IDC_COMBO_IndexChannel, OnSelchangeCOMBOIndexChannel)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CADStatusView diagnostics

#ifdef _DEBUG
void CADStatusView::AssertValid() const
{
	CFormView::AssertValid();
}

void CADStatusView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CADStatusView message handlers

void CADStatusView::OnInitialUpdate() 
{

	CFormView::OnInitialUpdate();
	CString str;
	// TODO: Add your specialized code here and/or call the base class
	str.Format("%d", m_ScreenVolume);
	m_nScreenVolt.SetWindowText(str);	
	str.Format("%d", m_TriggerVolt);
	m_nTringgerVolt.SetWindowText(str);	
	m_nMoveVolt.SetWindowText("0");	
	m_nAnalyzeCount.SetWindowText("0");	
	m_nOverRange.SetWindowText("0");//要返回的	
	m_nOverRatio.SetWindowText("0");//要返回的
//	Volt_Range=1 ;//默认正负5伏量程
	SetDlgCheck();
	OnCHECKBunch();
	Volt_Range=RANGE_N5000_TO_P5000;
	//正负5伏
	PerLsbVolt = (float)(10000.0/16384.0);	
	
	m_nLower=0;//串道下限
	m_nUpper=16383;//串道上限
	switch(m_DigitalDataShowMode)
	{
	case 0://十进制显示
		str.Format("%d",m_nLower);
		break;
	case 1://十六进制显示
		str.Format("%x",(WORD)m_nLower);
		break;
	case 2://电压显示
		switch(Volt_Range) //电压处理方式 1:正负5伏 2:正负10伏 3:0至5伏 4:0至2.5伏
		{
		case RANGE_N5000_TO_P5000:
			str.Format("%4.2f",(m_nLower-8192)*(10000.0/16384));
			break;
		case RANGE_N10000_TO_P10000:
			str.Format("%4.2f",(m_nLower-8192)*(20000.0/16384));
			break;
		case RANGE_0_TO_P5000:
			str.Format("%4.2f",(m_nLower)*(5000.0/16384));
			break;
		case RANGE_0_TO_P2500:
			str.Format("%4.2f",(m_nLower)*(2500.0/16384));
			break;
		}
		
		break;
	}
	m_EDIT_Lower.SetWindowText(str);
	
	switch(m_DigitalDataShowMode)
	{
	case 0://十进制显示
		str.Format("%d",m_nUpper);
		break;
	case 1://十六进制显示
		str.Format("%x",(WORD)m_nUpper);
		break;
	case 2://电压显示
		switch(Volt_Range) //电压处理方式 1:正负5伏 2:正负10伏 3:0至5伏 4:0至2.5伏
		{
		case RANGE_N5000_TO_P5000:
			str.Format("%4.2f",(m_nUpper-8192)*(10000.0/16384));
			break;
		case RANGE_N10000_TO_P10000:
			str.Format("%4.2f",(m_nUpper-8192)*(20000.0/16384));
			break;
		case RANGE_0_TO_P5000:
			str.Format("%4.2f",(m_nUpper)*(5000.0/16384));
			break;
		case RANGE_0_TO_P2500:
			str.Format("%4.2f",(m_nUpper)*(2500.0/16384));
			break;
		}
		break;
	}
	m_EDIT_Upper.SetWindowText(str);
	//----------------------------------------------------------------------------------------
	while(m_COMBO_IndexChannel.GetCount())//清除原来串道分析索引
		m_COMBO_IndexChannel.DeleteString(0);

	for(int oldlast=0;oldlast< (int)ADPara.ChannelCount ;oldlast++)
	{//制 串道分析索引
		str.Format("%d",ADPara.ChannelArray[oldlast].ADChannel);
		m_COMBO_IndexChannel.AddString(str);
	}
	m_COMBO_IndexChannel.SetCurSel(0);
//----------------------------------------------------------------------------------------

}

void CADStatusView::OnCHECKStopFirstDigitalShow() 
{
	// TODO: Add your control notification handler conde here
	UpdateData(TRUE);
	if(m_nStopFirstDigitalShow)
	{
		m_FirstScreenStop=true;
	}
	else
	{
		m_FirstScreenStop=false;
	}
}
void CADStatusView::OnChangeEDITScreenVolume()//改变屏幕量程 
{
	// TODO: Add your control notification handler code here
	CSysApp *pApp=(CSysApp *)AfxGetApp();
	CADDoc* pDoc=pApp->m_pADDoc; 
	
	CString str;
	m_nScreenVolt.GetWindowText(str);
	m_ScreenVolume=strtol(str,NULL,10);
	if(bFirstChangeTrigge==FALSE)
	{
		CADWaveView* pWaveView=(CADWaveView*)(CWnd::FromHandle(pDoc->m_hWndWave)); 
		pWaveView->RedrawWindow();
	}
	bFirstChangeTrigge=FALSE;  // 不是第一次操作这个CEdit框,说明这个框可以被操作
}

void CADStatusView::OnChangeEDITTriggerVolt() //改变触发电压的值
{
	// TODO: Add your control notification handler code here
	CString str;
	m_nTringgerVolt.GetWindowText(str);
	m_TriggerVolt=strtol(str,NULL,10);
	// 当重新设置触发电平时,重置超限数和统计总数
	m_OverLimitCount=0; 
	m_AnalyzeAllCount=0;	
}

void CADStatusView::SetDlgCheck()
{
	CButton* pCheck=(CButton*)GetDlgItem(IDM_Check_DigitalShow);
	pCheck->SetCheck(nProcessMode==1?BST_CHECKED:BST_UNCHECKED);
	pCheck->EnableWindow(m_bFirstCreateDeviceFile);

	pCheck=(CButton*)GetDlgItem(IDM_Check_GraphicShow);
	pCheck->SetCheck(nProcessMode==2?BST_CHECKED:BST_UNCHECKED);
	pCheck->EnableWindow(m_bFirstCreateDeviceFile);

	pCheck=(CButton*)GetDlgItem(IDM_Check_DataSave);
	pCheck->SetCheck(nProcessMode==3?BST_CHECKED:BST_UNCHECKED);
	pCheck->EnableWindow(!m_bFirstCreateDeviceFile);
}

void CADStatusView::OnCHECKCheckOverflow() 
{
	// TODO: Add your control notification handler code here
	CButton* pCheck;
	pCheck=(CButton*)GetDlgItem(IDC_CHECK_CheckOverflow);
	bCheckOverflow = pCheck->GetCheck();
}

void CADStatusView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
{
	// TODO: Add your specialized code here and/or call the base class
	if(lHint==1||lHint==2) return;
	CView::OnUpdate(pSender, lHint, pHint);
}

void CADStatusView::OnCheckDigitalShow() 
{
	// TODO: Add your control notification handler code here
	nProcessMode=1;
	m_bProgress=TRUE;
	SetDlgCheck();
}

void CADStatusView::OnCheckDataSave() 
{
	// TODO: Add your control notification handler code here
	nProcessMode=3;	
	SetDlgCheck();
}

void CADStatusView::OnCheckGraphicShow() 
{
	// TODO: Add your control notification handler code here
	nProcessMode=2;
	m_bProgress=FALSE;
	SetDlgCheck();
}
void CADStatusView::OnCHECKBunch() 
{
	// TODO: Add your control notification handler code here
	m_bBounce=m_CHECK_Bunch.GetCheck();
	if(m_bBounce)
	{
		m_EDIT_BunchCount.EnableWindow(TRUE);
		m_COMBO_IndexChannel.EnableWindow(TRUE);
		m_EDIT_Lower.EnableWindow(TRUE);
		m_EDIT_Upper.EnableWindow(TRUE);
		m_CHECK_BunchStop.EnableWindow(TRUE);
		m_CHECK_Points.EnableWindow(TRUE);
		m_EDIT_BunchCount.SetWindowText("0");
		m_nBounceNum=0;
	}
	else
	{
		m_EDIT_BunchCount.EnableWindow(FALSE);
		m_COMBO_IndexChannel.EnableWindow(FALSE);
		m_EDIT_Lower.EnableWindow(FALSE);
		m_EDIT_Upper.EnableWindow(FALSE);
		m_CHECK_BunchStop.EnableWindow(FALSE);
		m_CHECK_Points.EnableWindow(FALSE);
	}
}

void CADStatusView::OnChangeEDITUpperLimit() 
{
	// TODO: Add your control notification handler code here
	CString str;
	m_EDIT_Upper.GetWindowText(str);

	switch(m_DigitalDataShowMode)
	{
	case 0://十进制显示
		m_nUpper=(WORD)strtol(str,NULL,10);
		break;
	case 1://十六进制显示
		m_nUpper=(WORD)strtol(str,NULL,16);
		break;
	case 2://电压显示
		switch(Volt_Range) //电压处理方式 1:正负5伏 2:正负10伏 3:0至5伏 4:0至2.5伏
		{
		case RANGE_N5000_TO_P5000:
			m_nUpper=(short)((atof(str))*(16384/10000.0))+8192;
			break;
		case RANGE_N10000_TO_P10000:
			m_nUpper=(short)((atof(str))*(16384/20000.0))+8192;
			break;
		case RANGE_0_TO_P5000:
			m_nUpper=(short)((atof(str))*(16384/5000.0));
			break;
		case RANGE_0_TO_P2500:
			m_nUpper=(short)((atof(str))*(16384/2500.0));
			break;
		}

		break;
	}

}

void CADStatusView::OnChangeEDITLowerLimit() 
{
	// TODO: Add your control notification handler code here
	CString str;
	m_EDIT_Lower.GetWindowText(str);

	switch(m_DigitalDataShowMode)
	{
	case 0://十进制显示
		m_nLower=(WORD)strtol(str,NULL,10);
		break;
	case 1://十六进制显示
		m_nLower=(WORD)strtol(str,NULL,16);
		break;
	case 2://电压显示
		switch(Volt_Range) //电压处理方式 1:正负5伏 2:正负10伏 3:0至5伏 4:0至2.5伏
		{
		case RANGE_N5000_TO_P5000:
			m_nLower=(short)((atof(str))*(16384/10000.0))+8192;
			break;
		case RANGE_N10000_TO_P10000:
			m_nLower=(short)((atof(str))*(16384/20000.0))+8192;
			break;
		case RANGE_0_TO_P5000:
			m_nLower=(short)((atof(str))*(16384/5000.0));
			break;
		case RANGE_0_TO_P2500:
			m_nLower=(short)((atof(str))*(16384/2500.0));
			break;
		}
		break;
	}
}

void CADStatusView::OnCHECKPoint() 
{
	// TODO: Add your control notification handler code here
	m_bPointsAnalyze=m_CHECK_Points.GetCheck();
	if(m_bPointsAnalyze)
	{
		int nChannelCount=ADPara.ChannelCount ;
		m_nBouncePointsCount=(8192-8192%nChannelCount)/nChannelCount;//多点分析所需要的点数
	}
	else
	{
		m_nBouncePointsCount=1;
	}
}

void CADStatusView::OnCHECKBunchStop() 
{
	// TODO: Add your control notification handler code here
	m_BounceStop=m_CHECK_BunchStop.GetCheck();
}

void CADStatusView::OnSelchangeCOMBOIndexChannel() 
{
	// TODO: Add your control notification handler code here
	m_nBounceChannel=m_COMBO_IndexChannel.GetCurSel();
	CString str;
	str.Format ("%d",m_nBounceChannel);
	AfxMessageBox(str);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -