📄 wattoffsetdlg.cpp
字号:
// WattOffsetDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Calibration.h"
#include "WattOffsetDlg.h"
#include "calcomp.h"
#include "interface.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CWattOffsetDlg property page
IMPLEMENT_DYNCREATE(CWattOffsetDlg, CPropertyPage)
CWattOffsetDlg::CWattOffsetDlg() : CPropertyPage(CWattOffsetDlg::IDD)
{
//{{AFX_DATA_INIT(CWattOffsetDlg)
m_iPhase = 0;
m_dAPCF = 0.0;
m_iAPCFDEN = 0;
m_iFreq = 0;
m_dAPCFERR = 0.0;
m_dAPCFEXP = 0.0;
m_iAPCFNUM = 1;
m_dClkin = 10e6;
m_dMinCur = 0.05;
m_dTestVol = 220.0;
m_iWATTOS = 0;
//}}AFX_DATA_INIT
#ifdef _DEBUG
m_dAPCF = 0.009773;
m_iAPCFDEN = 277;
m_iFreq = 2083;
#endif
for (int i=0;i<3;i++)
{
iFreq[i] = 0;
iWATTOS[i] = 0;
iAPCFDEN[i] = 0;
iAPCFNUM[i] = 1;
dAPCF[i] = 0.0;
dAPCFEXP[i] = 0.0;
dAPCFERR[i] = 0.0;
}
}
CWattOffsetDlg::~CWattOffsetDlg()
{
}
void CWattOffsetDlg::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CWattOffsetDlg)
DDX_CBIndex(pDX, IDC_COMBO_PHASE, m_iPhase);
DDX_Text(pDX, IDC_EDIT_APCF, m_dAPCF);
DDX_Text(pDX, IDC_EDIT_APCFDEN, m_iAPCFDEN);
DDX_Text(pDX, IDC_EDIT_APCFERR, m_dAPCFERR);
DDX_Text(pDX, IDC_EDIT_APCFEXP, m_dAPCFEXP);
DDX_Text(pDX, IDC_EDIT_APCFNUM, m_iAPCFNUM);
DDX_Text(pDX, IDC_EDIT_CLKIN, m_dClkin);
DDX_Text(pDX, IDC_EDIT_FREQ, m_iFreq);
DDX_Text(pDX, IDC_EDIT_TESTCUR, m_dMinCur);
DDX_Text(pDX, IDC_EDIT_TESTVOL, m_dTestVol);
DDX_Text(pDX, IDC_EDIT_WATTOS, m_iWATTOS);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CWattOffsetDlg, CPropertyPage)
//{{AFX_MSG_MAP(CWattOffsetDlg)
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()
/////////////////////////////////////////////////////////////////////////////
// CWattOffsetDlg message handlers
BOOL CWattOffsetDlg::OnSetActive()
{
CPropertySheet* pSheet = (CPropertySheet*)GetParent();
ASSERT_KINDOF(CPropertySheet, pSheet);
pSheet->SetWizardButtons( PSWIZB_BACK | PSWIZB_FINISH);
return CPropertyPage::OnSetActive();
}
void CWattOffsetDlg::OnButtonCalWattos()
{
int i;
double mc = 3200.0;
UpdateData(TRUE);
// 计算基准频率
double cfexp = cfref_comp(mc,m_dMinCur,m_dTestVol,1);
for (i=0;i<3;i++)
{
dAPCFEXP[i] = cfexp;
}
// Step 1 - 2: Enable APCF output
// Set offset registers xWATTOS
InitWATTOffsetCalibration();
for (i=0; i<3; i++)
{
// Step 3: Setup pulse output for phase A, B or C
SetupPulseOutput(i);
// Step 4: Setup system for Imin Vnom and pf = 1
SetupSystem(m_dMinCur, m_dTestVol, 1);
// Step 5: calculate values for xWATTOS
// 读取测量时的输出频率
//dAPCF[m_iPhase] = ReadFrequencyAPCF();
// 读取i相的实测频率
//iFreq[i] = GetFreq(i);
// 计算寄存器的校正值
iWATTOS[i] = offset_cal(m_dClkin, dAPCF[i], dAPCFEXP[i], iAPCFDEN[i], iAPCFNUM[i], iFreq[i],0, dAPCFERR[i]);
}
// Step 6: Write calibration results to registers xWATTOS
// 将计算得到的校正值写入ADE7758的相应寄存器
WriteRegistersWATTOffset(iWATTOS);
// 显示基准频率
m_dAPCFEXP = dAPCFEXP[m_iPhase];
m_dAPCFERR = dAPCFERR[m_iPhase];
// 显示WATT Offset的校正结果
m_iWATTOS = iWATTOS[m_iPhase];
UpdateData(FALSE);
}
void CWattOffsetDlg::OnButtonWrite()
{
UpdateData(TRUE);
iFreq[m_iPhase] = m_iFreq;
iAPCFDEN[m_iPhase] = m_iAPCFDEN;
iAPCFNUM[m_iPhase] = m_iAPCFNUM;
dAPCF[m_iPhase] = m_dAPCF;
}
void CWattOffsetDlg::OnSelchangeComboPhase()
{
UpdateData(TRUE);
m_iFreq = iFreq[m_iPhase];
m_dAPCF = dAPCF[m_iPhase];
m_iWATTOS = iWATTOS[m_iPhase];
m_iAPCFDEN = iAPCFDEN[m_iPhase];
m_iAPCFNUM = iAPCFNUM[m_iPhase];
m_dAPCFERR = dAPCFERR[m_iPhase];
m_dAPCFEXP = dAPCFEXP[m_iPhase];
UpdateData(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -