📄 varoffsetladlg.cpp
字号:
// VarOffsetLCDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Calibration.h"
#include "VarOffsetLADlg.h"
#include "calcomp.h"
#include "interface.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CVarOffsetLADlg property page
IMPLEMENT_DYNCREATE(CVarOffsetLADlg, CPropertyPage)
CVarOffsetLADlg::CVarOffsetLADlg() : CPropertyPage(CVarOffsetLADlg::IDD)
{
//{{AFX_DATA_INIT(CVarOffsetLADlg)
m_iPhase = 0;
m_dClkin = 10.0e6;
m_dTestCur = 10;
m_dTestVol = 220.0;
m_dMinCur = 0.1;
m_iVAROS = 0;
m_iVARHR = 0;
m_iVARHRmin = 0;
m_iLineCyc = 0;
//}}AFX_DATA_INIT
#ifdef _DEBUG
m_iVARHR = 192489;
m_iVARHRmin = 1919;
m_iLineCyc = 4095;
#endif
for (int i=0;i<3;i++)
{
iVAROS[i] = 0;
iVARHR[i] = 0;
iVARHRmin[i] = 0;
}
}
CVarOffsetLADlg::~CVarOffsetLADlg()
{
}
void CVarOffsetLADlg::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CVarOffsetLADlg)
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_VAROS, m_iVAROS);
DDX_Text(pDX, IDC_EDIT_VARHR, m_iVARHR);
DDX_Text(pDX, IDC_EDIT_VARHRMIN, m_iVARHRmin);
DDX_Text(pDX, IDC_EDIT_LINECYC, m_iLineCyc);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CVarOffsetLADlg, CPropertyPage)
//{{AFX_MSG_MAP(CVarOffsetLADlg)
ON_BN_CLICKED(IDC_BUTTON_CAL_VAROS, OnButtonCalVaros)
ON_BN_CLICKED(IDC_BUTTON_WRITE, OnButtonWrite)
ON_CBN_SELCHANGE(IDC_COMBO_PHASE, OnSelchangeComboPhase)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CVarOffsetLADlg message handlers
void CVarOffsetLADlg::OnButtonCalVaros()
{
int i;
UpdateData(TRUE);
// Step 1: Set LCYCMODE, LINECYC and mask registers
InitLineMode();
// Step 2: Setup system for Itest, Vnom and pf = 0
SetupSystem(m_dTestCur, m_dTestVol, 0);
// Step 3: Reset status register
ResetStatusRegister();
// Step 4: Read all xVARHR registers after LENERGY interrupt
ReadRegistersVARHR(iVARHR);
// Step 5: Setup system for Imin, Vnom and pf = 0
SetupSystem(m_dMinCur, m_dTestVol, 0);
// Step 6: repeat step 3
ResetStatusRegister();
// Step 7: repeat step 4
ReadRegistersVARHR(iVARHRmin);
// 这里actime_comp()调用使用了50Hz的固定频率,如果有变化,可以换成变量
double actime = actime_comp(m_iLineCyc, 50, 3);
// Step 8: calculate xVAROS for all phases
for (i=0; i<3; i++)
{
iVAROS[i] = offset_cal2(m_dClkin, m_dMinCur, m_dTestCur, iVARHRmin[i], iVARHR[i], actime);
}
// Step 9: Write calibration results (xVAROS) to ADE7758 registers
WriteRegistersVAROffset(iVAROS);
// 在界面上显示校正结果
m_iVAROS = iVAROS[m_iPhase];
UpdateData(FALSE);
}
void CVarOffsetLADlg::OnButtonWrite()
{
UpdateData(TRUE);
iVARHR[m_iPhase] = m_iVARHR;
iVARHRmin[m_iPhase] = m_iVARHRmin;
}
void CVarOffsetLADlg::OnSelchangeComboPhase()
{
UpdateData(TRUE);
m_iVAROS = iVAROS[m_iPhase];
m_iVARHR = iVARHR[m_iPhase];
m_iVARHRmin = iVARHR[m_iPhase];
UpdateData(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -