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

📄 phaseladlg.cpp

📁 ADE7758校正程序,只需根据需要添加通信子程序
💻 CPP
字号:
// PhaseLCDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Calibration.h"
#include "PhaseLADlg.h"
#include "calcomp.h"
#include "interface.h"

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

/////////////////////////////////////////////////////////////////////////////
// CPhaseLADlg property page

IMPLEMENT_DYNCREATE(CPhaseLADlg, CPropertyPage)

CPhaseLADlg::CPhaseLADlg() : CPropertyPage(CPhaseLADlg::IDD)
{
	//{{AFX_DATA_INIT(CPhaseLADlg)
	m_iPhase = 0;
	m_iWATTHR = 0;
	m_iWATTHR5 = 0;
	m_iFreq = 0;
	m_iAPCFDEN = 0;
	m_dPHERR = 0.0;
	m_iAPCFNUM = 1;
	m_iPHCAL = 0;
	m_dTestCur = 10.0;
	m_dTestVol = 220.0;
	//}}AFX_DATA_INIT
#ifdef _DEBUG
	m_iWATTHR = 24020;
	m_iWATTHR5 = 12036;
	m_iFreq = 2083;
	m_iAPCFDEN = 277;
#endif
	for (int i=0;i<3;i++)
	{
		iWATTHR[i] = 0;
		iWATTHR5[i] = 0;
		dPHERR[i] = 0.0;
		iAPCFNUM[i] = 1;
		iAPCFDEN[i] = 0;
		iPHCAL[i] = 0;
		iFreq[i] = 0;
	}
}

CPhaseLADlg::~CPhaseLADlg()
{
}

void CPhaseLADlg::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPhaseLADlg)
	DDX_CBIndex(pDX, IDC_COMBO_PHASE, m_iPhase);
	DDX_Text(pDX, IDC_EDIT_WATTHR, m_iWATTHR);
	DDX_Text(pDX, IDC_EDIT_WATTHR5, m_iWATTHR5);
	DDX_Text(pDX, IDC_EDIT_PHERR, m_dPHERR);
	DDX_Text(pDX, IDC_EDIT_APCFDEN, m_iAPCFDEN);
	DDX_Text(pDX, IDC_EDIT_APCFNUM, m_iAPCFNUM);
	DDX_Text(pDX, IDC_EDIT_PHCAL, m_iPHCAL);
	DDX_Text(pDX, IDC_EDIT_TESTCUR, m_dTestCur);
	DDX_Text(pDX, IDC_EDIT_TESTVOL, m_dTestVol);
	DDX_Text(pDX, IDC_EDIT_FREQ, m_iFreq);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPhaseLADlg, CPropertyPage)
	//{{AFX_MSG_MAP(CPhaseLADlg)
	ON_BN_CLICKED(IDC_BUTTON_CAL_PHASE, OnButtonCalPhase)
	ON_BN_CLICKED(IDC_BUTTON_WRITE, OnButtonWrite)
	ON_CBN_SELCHANGE(IDC_COMBO_PHASE, OnSelchangeComboPhase)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPhaseLADlg message handlers

void CPhaseLADlg::OnButtonCalPhase() 
{
	int i;
	double mc = 3200.0;
	
	UpdateData(TRUE);

	// Step 1: Set LCYCMODE, LINECYC and mask registers
	InitLineMode();

	// Step 2: Setup system for Itest, Vnom and pf = 0.5
	SetupSystem(m_dTestCur, m_dTestVol, 0.5);

	// Step 3: Reset STATUS register
	ResetStatusRegister();

	// Step 4: Read all xWATTHR registers after LENERGY interrupt
	ReadRegistersWATTHR(iWATTHR5);
		
	// Step 5: Calculate phase error and register values
	// 注: 函数phase_cal2中参数iWATTHR[i]为 pf = 1时从寄存器xWATTHR中读出的值。
	//	   这个值在前面VAWATT Gain Calibration (Line Mode) 的步骤中已经得到了,
	//     在这里,这个参数可以手动将前面得到的值输入,也可以在程序中通过全局变量或者其他方法传递过来,
	//     也可以安下面的方法再计算一遍
			//	SetupSystem(m_dTestCur, m_dTestVol, 1);
			//	ResetStatusRegister();
			//	ReadRegistersWATTHR(iWATTHR);
	
	for (i=0; i<3; i++)
	{
		// 从寄存器中读取频率值
		// iFreq(i) = GetFreq(i);

		iPHCAL[i] = phase_cal2(iWATTHR[i], iWATTHR5[i], iFreq[i], dPHERR[i]);
	}

	// Step 6: Write calibration results to xPHCAL registers
	WriteRegistersPhase(iPHCAL);

	// 在界面上显示校正结果
	m_dPHERR = dPHERR[m_iPhase];

	// 在界面上显示校正结果
	m_iPHCAL = iPHCAL[m_iPhase];
	
	UpdateData(FALSE);
	
}

void CPhaseLADlg::OnButtonWrite() 
{
	int i;
	UpdateData(TRUE);
	
	i = m_iPhase;
	iWATTHR[i] = m_iWATTHR;
	iWATTHR5[i] = m_iWATTHR5;
	iFreq[i] = m_iFreq;
	
}

void CPhaseLADlg::OnSelchangeComboPhase() 
{
	UpdateData(TRUE);
	int i = m_iPhase;
	
	m_iWATTHR = iWATTHR[i];
	m_iWATTHR5 = iWATTHR5[i];
	m_iAPCFDEN = iAPCFDEN[i];
	m_iAPCFNUM = iAPCFNUM[i];
	m_dPHERR = dPHERR[i];
	m_iPHCAL = iPHCAL[i];
	m_iFreq = iFreq[i];
	
	UpdateData(FALSE);
	
}

⌨️ 快捷键说明

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