📄 vawattgaindlg.cpp
字号:
// VaWattGainDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Calibration.h"
#include "VaWattGainDlg.h"
#include "calcomp.h"
#include "interface.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CVaWattGainDlg property page
IMPLEMENT_DYNCREATE(CVaWattGainDlg, CPropertyPage)
CVaWattGainDlg::CVaWattGainDlg() : CPropertyPage(CVaWattGainDlg::IDD)
{
//{{AFX_DATA_INIT(CVaWattGainDlg)
m_dAPCF = 0.0;
m_dVARCF = 0.0;
m_iAPCFDEN = 0;
m_iAPCFNUM = 1;
m_dAPCFERR = 0.0;
m_dAPCFEXP = 0.0;
m_iVARCFDEN = 0;
m_iVARCFNUM = 1;
m_dVARCFERR = 0.0;
m_dVARCFEXP = 0.0;
m_iPHASE = 0;
m_dMaxCur = 130.0;
m_dMaxVol = 500.0;
m_dTestCur = 10.0;
m_dTestVol = 220.0;
m_dWLSB = 0.0;
m_dVALSB = 0.0;
m_iWDIV = 1;
m_iVADIV = 1;
m_iWG = 0;
m_iVAG = 0;
//}}AFX_DATA_INIT
#ifdef _DEBUG
m_dAPCF = 1.92;
m_dVARCF = 1.92;
#endif
for (int i=0;i<3;i++)
{
dAPCF[i]=0.0;
iAPCFDEN[i]=0;
iAPCFNUM[i]=1;
dAPCFERR[i]=0.0;
dAPCFEXP[i]=0.0;
dVARCF[i]=0.0;
iVARCFDEN[i]=0;
iVARCFNUM[i]=1;
dVARCFERR[i]=0.0;
dVARCFEXP[i]=0.0;
iWG[i]=0;
iVAG[i]=0;
dWLSB[i]=0.0;
dVALSB[i]=0.0;
}
}
CVaWattGainDlg::~CVaWattGainDlg()
{
}
void CVaWattGainDlg::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CVaWattGainDlg)
DDX_Text(pDX, IDC_EDIT_APCF, m_dAPCF);
DDX_Text(pDX, IDC_EDIT_APCFDEN, m_iAPCFDEN);
DDX_Text(pDX, IDC_EDIT_APCFNUM, m_iAPCFNUM);
DDX_Text(pDX, IDC_EDIT_APCFERR, m_dAPCFERR);
DDX_Text(pDX, IDC_EDIT_APCFEXP, m_dAPCFEXP);
DDX_Text(pDX, IDC_EDIT_VARCF, m_dVARCF);
DDX_Text(pDX, IDC_EDIT_VARCFDEN, m_iVARCFDEN);
DDX_Text(pDX, IDC_EDIT_VARCFERR, m_dVARCFERR);
DDX_Text(pDX, IDC_EDIT_VARCFEXP, m_dVARCFEXP);
DDX_Text(pDX, IDC_EDIT_VARCFNUM, m_iVARCFNUM);
DDX_Text(pDX, IDC_EDIT_WG, m_iWG);
DDX_Text(pDX, IDC_EDIT_WLSB, m_dWLSB);
DDX_CBIndex(pDX, IDC_COMBO_PHASE, m_iPHASE);
DDX_Text(pDX, IDC_EDIT_MAXCUR, m_dMaxCur);
DDX_Text(pDX, IDC_EDIT_MAXVOL, m_dMaxVol);
DDX_Text(pDX, IDC_EDIT_TESTCUR, m_dTestCur);
DDX_Text(pDX, IDC_EDIT_TESTVOL, m_dTestVol);
DDX_Text(pDX, IDC_EDIT_WDIV, m_iWDIV);
DDX_Text(pDX, IDC_EDIT_VALSB, m_dVALSB);
DDX_Text(pDX, IDC_EDIT_VADIV, m_iVADIV);
DDX_Text(pDX, IDC_EDIT_VAG, m_iVAG);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CVaWattGainDlg, CPropertyPage)
//{{AFX_MSG_MAP(CVaWattGainDlg)
ON_BN_CLICKED(IDC_BUTTON_WRITE, OnButtonWrite)
ON_CBN_SELCHANGE(IDC_COMBO_PHASE, OnSelchangeComboPhase)
ON_BN_CLICKED(IDC_BUTTON_CAL_WVARG, OnButtonCalWvarg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CVaWattGainDlg message handlers
BOOL CVaWattGainDlg::OnSetActive()
{
CPropertySheet* pSheet = (CPropertySheet*)GetParent();
ASSERT_KINDOF(CPropertySheet, pSheet);
pSheet->SetWizardButtons( PSWIZB_BACK | PSWIZB_NEXT);
return CPropertyPage::OnSetActive();
}
// 将编辑框的数据写入相应的变量
void CVaWattGainDlg::OnButtonWrite()
{
int i;
UpdateData(TRUE);
i = m_iPHASE;
dAPCF[i] = m_dAPCF;
//iAPCFDEN[i] = m_iAPCFDEN;
//iAPCFNUM[i] = m_iAPCFNUM;
//dAPCFERR[i] = m_dAPCFERR;
//dAPCFEXP[i] = m_dAPCFEXP;
dVARCF[i] = m_dVARCF;
//iVARCFDEN[i] = m_iVARCFDEN;
//dVARCFERR[i] = m_dVARCFERR;
//dVARCFEXP[i] = m_dVARCFEXP;
//iVARCFNUM[i] = m_iVARCFNUM;
//dVALSB[i] = m_dVALSB;
//iWG[i] = m_iWG;
//iVAG[i] = m_iVAG;
//dWLSB[i] = m_dWLSB;
}
// 组合框的选择改变之后,编辑框中的显示也应该改变
void CVaWattGainDlg::OnSelchangeComboPhase()
{
UpdateData(TRUE);
int i = m_iPHASE;
m_dAPCF = dAPCF[i];
m_dAPCFEXP = dAPCFEXP[i];
m_iAPCFDEN = iAPCFDEN[i];
m_iAPCFNUM = iAPCFNUM[i];
m_dAPCFERR = dAPCFERR[i];
m_dVARCF = dVARCF[i];
m_dVARCFEXP = dVARCFEXP[i];
m_iVARCFDEN = iVARCFDEN[i];
m_iVARCFNUM = iVARCFNUM[i];
m_dVARCFERR = dVARCFERR[i];
m_iWG = iWG[i];
m_iVAG = iVAG[i];
m_dVALSB = dVALSB[i];
m_dWLSB = dWLSB[i];
UpdateData(FALSE);
}
void CVaWattGainDlg::OnButtonCalWvarg()
{
int i;
double mc = 3200.0;
int cfden;
UpdateData(TRUE);
// 计算基准频率
double cfexp = cfref_comp(mc,m_dTestCur,m_dTestVol,1);
for (i=0;i<3;i++)
{
dAPCFEXP[i] = dVARCFEXP[i] = cfexp;
}
// 计算CFDEN和CFNUM
cfden = cfden_comp(mc,m_dTestCur,m_dTestVol,m_dMaxCur,m_dMaxVol);
for (i=0;i<3;i++)
{
iAPCFDEN[i] = iVARCFDEN[i] = cfden;
//iAPCFNUM[i] = iVARCFNUM[i] = 1;
}
// Step 1 - 2: Enable CF and VARCF pulse outputs
// Select VA for VARCF output
// Set gain registers to logic 0
InitVAWATTGainCalibration();
for(i=0; i<3; i++)
{
// Step 3: Setup pulse output
SetupPulseOutput(i);
// Step 4: Set APCFNUM/VARCFNUM and APCFDEN/VARCFDEN to calculated values
SetRegistersAPCF(iAPCFNUM[i], iAPCFDEN[i]);
SetRegistersVARCF(iVARCFNUM[i], iVARCFDEN[i]);
// Step 5: Setup system for Itest, Vnom and PF = 1
SetupSystem(m_dTestCur, m_dTestVol, 1);
// Step 6: Calculate values for xWG and xVAG
// 读取测量时的输出频率
// dAPCF[m_iPHASE] = ReadFrequencyAPCF();
// dVARCF[m_iPHASE] = ReadFrequencyVARCF();
// 根据测量频率和基准频率的差别,计算寄存器的校正值
iWG[i] = gain_cal(dAPCF[i],dAPCFEXP[i],dAPCFERR[i]);
iVAG[i] = gain_cal(dVARCF[i],dVARCFEXP[i],dVARCFERR[i]);
// 计算Wh/LSB,VAh/LSB
dWLSB[i] = whlsb_comp(mc,iAPCFDEN[i],iAPCFNUM[i],m_iWDIV);
dVALSB[i] = whlsb_comp(mc,iVARCFDEN[i],iVARCFNUM[i],m_iVADIV);
}
// Step 7: Write VAWATT gain calibration results to registers XWG and XVAG
// 将计算得到的校正值写入ADE7758的相应寄存器
WriteRegistersVAWATT(iWG, iVAG);
// 显示基准频率
m_dAPCFEXP = dAPCFEXP[m_iPHASE];
m_dVARCFEXP = dVARCFEXP[m_iPHASE];
// 显示CFDEN和CFNUM
m_iAPCFDEN = iAPCFDEN[m_iPHASE];
m_iVARCFDEN = iVARCFDEN[m_iPHASE];
m_dAPCFERR = dAPCFERR[m_iPHASE];
m_dVARCFERR = dVARCFERR[m_iPHASE];
// 显示校正结果和Wh/LSB, VAh/LSB
m_iWG = iWG[m_iPHASE];
m_iVAG = iVAG[m_iPHASE];
m_dWLSB = dWLSB[m_iPHASE];
m_dVALSB = dVALSB[m_iPHASE];
UpdateData(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -