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

📄 wattoffsetladlg.cpp

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CWattOffsetLADlg property page

IMPLEMENT_DYNCREATE(CWattOffsetLADlg, CPropertyPage)

CWattOffsetLADlg::CWattOffsetLADlg() : CPropertyPage(CWattOffsetLADlg::IDD)
{
	//{{AFX_DATA_INIT(CWattOffsetLADlg)
	m_iPhase = 0;
	m_dClkin = 10.0e6;
	m_dTestCur = 10;
	m_dTestVol = 220.0;
	m_dMinCur = 0.1;
	m_iWATTOS = 0;
	m_iWATTHR = 0;
	m_iWATTHRmin = 0;
	m_iLineCyc = 0;
	//}}AFX_DATA_INIT
#ifdef _DEBUG
	m_iWATTHR = 192489;
	m_iWATTHRmin = 1919;
	m_iLineCyc = 4095;
#endif

	for (int i=0;i<3;i++)
	{
		iWATTOS[i] = 0;
		iWATTHR[i] = 0;
		iWATTHRmin[i] = 0;
	}
}

CWattOffsetLADlg::~CWattOffsetLADlg()
{
}

void CWattOffsetLADlg::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CWattOffsetLADlg)
	DDX_CBIndex(pDX, IDC_COMBO_PHASE, m_iPhase);
	DDX_Text(pDX, IDC_EDIT_CLKIN, m_dClkin);
	DDX_Text(pDX, IDC_EDIT_TESTCUR, m_dTestCur);
	DDX_Text(pDX, IDC_EDIT_TESTVOL, m_dTestVol);
	DDX_Text(pDX, IDC_EDIT_MINCUR, m_dMinCur);
	DDX_Text(pDX, IDC_EDIT_WATTOS, m_iWATTOS);
	DDX_Text(pDX, IDC_EDIT_WATTHR, m_iWATTHR);
	DDX_Text(pDX, IDC_EDIT_WATTHRMIN, m_iWATTHRmin);
	DDX_Text(pDX, IDC_EDIT_LINECYC, m_iLineCyc);	
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CWattOffsetLADlg, CPropertyPage)
	//{{AFX_MSG_MAP(CWattOffsetLADlg)
	ON_BN_CLICKED(IDC_BUTTON_CAL_WATTOS, OnButtonCalWattos)
	ON_BN_CLICKED(IDC_BUTTON_WRITE, OnButtonWrite)
	ON_CBN_SELCHANGE(IDC_COMBO_PHASE, OnSelchangeComboPhase)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CWattOffsetLADlg message handlers

BOOL CWattOffsetLADlg::OnSetActive() 
{
	CPropertySheet* pSheet = (CPropertySheet*)GetParent();
	ASSERT_KINDOF(CPropertySheet, pSheet);
	pSheet->SetWizardButtons( PSWIZB_BACK | PSWIZB_FINISH);
	
	return CPropertyPage::OnSetActive();
}

void CWattOffsetLADlg::OnButtonCalWattos() 
{
	int i;
	UpdateData(TRUE);
	
	// Step 1: Set LCYCMODE, LINECYC and mask registers
	InitLineMode();

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

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

	// Step 4: Read all xWATTHR registers after LENERGY interrupt
	ReadRegistersWATTHR(iWATTHR);

	// Step 5: Setup system for Imin, Vnom and pf = 1
	SetupSystem(m_dMinCur, m_dTestVol, 1);

	// Step 6: repeat step 3
	ResetStatusRegister();

	// Step 7: repeat step 4
	ReadRegistersWATTHR(iWATTHRmin);

	// 这里actime_comp()调用使用了50Hz的固定频率,如果有变化,可以换成变量
	double actime = actime_comp(m_iLineCyc, 50, 3);

	// Step 8: calculate xWATTOS for all phases
	for (i=0;i<3;i++)
	{
		iWATTOS[i] = offset_cal2(m_dClkin, m_dMinCur, m_dTestCur, iWATTHRmin[i], iWATTHR[i], actime);
	}

	// Step 9: write calibration results (xWATTOS) to ADE7758 registers
	WriteRegistersWATTOffset(iWATTOS);

	// 将校正结果在界面上显示
	m_iWATTOS = iWATTOS[m_iPhase];

	UpdateData(FALSE);
}

void CWattOffsetLADlg::OnButtonWrite() 
{
	UpdateData(TRUE);
	iWATTHR[m_iPhase] = m_iWATTHR;
	iWATTHRmin[m_iPhase] = m_iWATTHRmin;
}

void CWattOffsetLADlg::OnSelchangeComboPhase() 
{
	UpdateData(TRUE);
	m_iWATTOS = iWATTOS[m_iPhase];
	m_iWATTHR = iWATTHR[m_iPhase];
	m_iWATTHRmin = iWATTHR[m_iPhase];
	UpdateData(FALSE);	
}

⌨️ 快捷键说明

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