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

📄 configdlg.cpp

📁 一个很好的VC++程序
💻 CPP
字号:
// ConfigDlg.cpp : implementation file
//

#include "stdafx.h"
#include "SMT5K.h"
#include "ConfigDlg.h"
#include "SM5000.h"
#include "SM5000chip.h"
#include "SerialPort.h"

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

extern CSm5000Chip chip;
extern int CurrentAxis;
extern CSerialPort m_ComPort; 
extern CString m_strTXDataCOM1; //COM1发送数据
extern int ChipSel ;

/////////////////////////////////////////////////////////////////////////////
// CConfigDlg dialog


CConfigDlg::CConfigDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CConfigDlg::IDD, pParent)
{
	int m_WR1;
	int m_WR2;
	int m_WR3;
	int m_WR5;

	m_WR1 = chip.GetWR1(CurrentAxis);
	m_WR2 = chip.GetWR2(CurrentAxis);
	m_WR3 = chip.GetWR3(CurrentAxis);
	m_WR5 = chip.GetWR5();


	m_AxisU_En = 1;//FALSE;
	m_AxisX_En = 1;//FALSE;
	m_AxisY_En = 1;//FALSE;
	m_AxisZ_En = 1;//FALSE;


	m_IN0_En  = GetBit(m_WR1, 1);
	m_IN1_En  = GetBit(m_WR1, 3);
	m_IN2_En  = GetBit(m_WR1, 5);
	m_IN3_En  = GetBit(m_WR1, 7);
	m_IN0_L   = GetBit(m_WR1, 0);
	m_IN1_L   = GetBit(m_WR1, 2);
	m_IN2_L   = GetBit(m_WR1, 4);
	m_IN3_L   = GetBit(m_WR1, 6);
	m_INT0_En = GetBit(m_WR1, 8);
	m_INT1_En = GetBit(m_WR1, 9);
	m_INT2_En = GetBit(m_WR1,10);
	m_INT3_En = GetBit(m_WR1,11);
	m_INT4_En = GetBit(m_WR1,12);
	m_INT5_En = GetBit(m_WR1,13);
	m_INT6_En = GetBit(m_WR1,14);
	m_INT7_En = GetBit(m_WR1,15);

	m_INPOS_En = GetBit(m_WR2,15);
	m_INP_L    = GetBit(m_WR2,14);
	m_Alarm_En = GetBit(m_WR2,13);
	m_ALM_L    = GetBit(m_WR2,12);
	m_PIND     = GetBit(m_WR2,10,2);
	m_PINMD    = GetBit(m_WR2, 9);
	m_DIR_L    = GetBit(m_WR2, 8);
	m_PLS_L    = GetBit(m_WR2, 7);
	m_PLSMD    = 1;//GetBit(m_WR2, 6);
	m_CMPSL    = GetBit(m_WR2, 5);
	m_HLMTM    = GetBit(m_WR2, 4);
	m_HLMTP    = GetBit(m_WR2, 3);
	m_LMTMD    = GetBit(m_WR2, 2);
	m_SLMTM_En = GetBit(m_WR2, 1);
	m_SLMTP_En = GetBit(m_WR2, 0);

	m_MANLD = GetBit(m_WR3, 0);
	m_DSNDE	= GetBit(m_WR3, 1);
	m_SACC  = GetBit(m_WR3, 2);
	m_EXOP	= GetBit(m_WR3, 3, 2);
	m_OUTSL = GetBit(m_WR3, 7);
	
	if( ChipSel == 2 )
	{
		if( CurrentAxis == 1 )
		{
			m_HLMTP_En = GetBit(m_WR5, 2);
			m_HLMTM_En = GetBit(m_WR5, 3);
		}
		else
		{
			m_HLMTP_En = GetBit(m_WR5, 0);
			m_HLMTM_En = GetBit(m_WR5, 1);
		}
		m_EMGN_L   = GetBit(m_WR5, 4);
		m_EMGN_En  = GetBit(m_WR5, 5);
	}
	else
	{
		m_HLMTP_En = 1;//GetBit(m_WR3, 12);
		m_HLMTM_En = 1;//GetBit(m_WR3, 13);
		m_EMGN_L   = GetBit(m_WR3, 14);
		m_EMGN_En  = 1;//GetBit(m_WR3, 15);
	}

	//{{AFX_DATA_INIT(CConfigDlg)
	//}}AFX_DATA_INIT
}


void CConfigDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CConfigDlg)
	DDX_Check(pDX, IDC_CHECK_ALARM, m_Alarm_En);
	DDX_Check(pDX, IDC_CHECK_AU, m_AxisU_En);
	DDX_Check(pDX, IDC_CHECK_AX, m_AxisX_En);
	DDX_Check(pDX, IDC_CHECK_AY, m_AxisY_En);
	DDX_Check(pDX, IDC_CHECK_AZ, m_AxisZ_En);
	DDX_Check(pDX, IDC_CHECK_HLMTM, m_HLMTM_En);
	DDX_Check(pDX, IDC_CHECK_HLMTP, m_HLMTP_En);
	DDX_Check(pDX, IDC_CHECK_IE_0, m_INT0_En);
	DDX_Check(pDX, IDC_CHECK_IE_1, m_INT1_En);
	DDX_Check(pDX, IDC_CHECK_IE_2, m_INT2_En);
	DDX_Check(pDX, IDC_CHECK_IE_3, m_INT3_En);
	DDX_Check(pDX, IDC_CHECK_IE_4, m_INT4_En);
	DDX_Check(pDX, IDC_CHECK_IE_5, m_INT5_En);
	DDX_Check(pDX, IDC_CHECK_IE_6, m_INT6_En);
	DDX_Check(pDX, IDC_CHECK_IE_7, m_INT7_En);
	DDX_Check(pDX, IDC_CHECK_IN0, m_IN0_En);
	DDX_Check(pDX, IDC_CHECK_IN1, m_IN1_En);
	DDX_Check(pDX, IDC_CHECK_IN2, m_IN2_En);
	DDX_Check(pDX, IDC_CHECK_IN3, m_IN3_En);
	DDX_Check(pDX, IDC_CHECK_INPOS, m_INPOS_En);
	DDX_Check(pDX, IDC_CHECK_SLMTM, m_SLMTM_En);
	DDX_Check(pDX, IDC_CHECK_SLMTP, m_SLMTP_En);
	DDX_Radio(pDX, IDC_CMPSL_0, m_CMPSL);
	DDX_Radio(pDX, IDC_DIR_LEVEL_0, m_DIR_L);
	DDX_Radio(pDX, IDC_DSNDE_0, m_DSNDE);
	DDX_Radio(pDX, IDC_EXOP_00, m_EXOP);
	DDX_Radio(pDX, IDC_HLMTP_LEVEL_0, m_HLMTP);
	DDX_Radio(pDX, IDC_HLMTM_LEVEL_0, m_HLMTM);
	DDX_Radio(pDX, IDC_IN0_LEVEL_0, m_IN0_L);
	DDX_Radio(pDX, IDC_IN1_LEVEL_0, m_IN1_L);
	DDX_Radio(pDX, IDC_IN2_LEVEL_0, m_IN2_L);
	DDX_Radio(pDX, IDC_IN3_LEVEL_0, m_IN3_L);
	DDX_Radio(pDX, IDC_INPOS_LEVEL_0, m_INP_L);
	DDX_Radio(pDX, IDC_LMTMD_0, m_LMTMD);
	DDX_Radio(pDX, IDC_MANLD_0, m_MANLD);
	DDX_Radio(pDX, IDC_OUTSL_0, m_OUTSL);
	DDX_Radio(pDX, IDC_PIND_00, m_PIND);
	DDX_Radio(pDX, IDC_PINMD_0, m_PINMD);
	DDX_Radio(pDX, IDC_PLS_LEVEL_0, m_PLS_L);
	DDX_Radio(pDX, IDC_PLSMD_0, m_PLSMD);
	DDX_Radio(pDX, IDC_SACC_0, m_SACC);
	DDX_Radio(pDX, IDC_ALARM_LEVEL_0, m_ALM_L);
	DDX_Check(pDX, IDC_CHECK_EMGN, m_EMGN_En);
	DDX_Radio(pDX, IDC_EMGN_LEVEL_0, m_EMGN_L);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CConfigDlg, CDialog)
	//{{AFX_MSG_MAP(CConfigDlg)
	ON_BN_CLICKED(IDC_RESTORE, OnRestore)
	ON_BN_CLICKED(IDC_CHECK_AX, OnCheckAx)
	ON_BN_CLICKED(IDC_CHECK_AY, OnCheckAy)
	ON_BN_CLICKED(IDC_CHECK_AZ, OnCheckAz)
	ON_BN_CLICKED(IDC_CHECK_AU, OnCheckAu)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CConfigDlg message handlers

void CConfigDlg::OnOK() 
{
	// TODO: Add extra validation here
	CDialog::OnOK();

	int m_WR1;
	int m_WR2;
	int m_WR3;
	int WR5Old, WR5New, m_WR5;

	m_WR1 = Bit2Int(
					m_INT7_En,
					m_INT6_En,
					m_INT5_En,
					m_INT4_En,
					m_INT3_En,
					m_INT2_En,
					m_INT1_En,
					m_INT0_En,
					m_IN3_En,
					m_IN3_L,
					m_IN2_En,
					m_IN2_L,
					m_IN1_En,
					m_IN1_L,
					m_IN0_En,
					m_IN0_L
					);

	m_WR2 = Bit2Int(
					m_INPOS_En,
					m_INP_L,
					m_Alarm_En,
					m_ALM_L,
					0,
					m_PIND,
					m_PINMD,
					m_DIR_L,
					m_PLS_L,
					m_PLSMD,
					m_CMPSL,
					m_HLMTM,
					m_HLMTP,
					m_LMTMD,
					m_SLMTM_En,
					m_SLMTP_En
					);


	if( ChipSel == 2 )
		m_WR3 = Bit2Int(
					0,
					0,
					0,
					0,
					0,
					0,
					0,
					0,
					m_OUTSL,
					0,
					0,
					0,
					m_EXOP,
					m_SACC,
					m_DSNDE,
					m_MANLD
					);
	else 
		m_WR3 = Bit2Int(
					m_EMGN_En,
					m_EMGN_L,
					m_HLMTM_En,
					m_HLMTP_En,
					0,
					0,
					0,
					0,
					m_OUTSL,
					0,
					0,
					0,
					m_EXOP,
					m_SACC,
					m_DSNDE,
					m_MANLD
					);

	if( ChipSel == 2 )
	{
		WR5Old = chip.GetWR5();
		WR5New = Bit2Int(
					0,
					0,
					0,
					0,
					0,
					0,
					0,
					0,
					0,
					0,
					m_EMGN_En,
					m_EMGN_L,
					m_HLMTM_En,
					m_HLMTP_En,
					m_HLMTM_En,
					m_HLMTP_En
					);
		m_WR5 = WR5Old & 0xffc0 | WR5New;
	}


	int mAxis=GetmAxisValue(m_AxisX_En, m_AxisY_En, m_AxisZ_En, m_AxisU_En);
	if(mAxis!=0) 
	{
		m_strTXDataCOM1.Empty();

		WriteReg( 1, m_WR1, m_AxisX_En, m_AxisY_En, m_AxisZ_En, m_AxisU_En);
		WriteReg( 2, m_WR2, m_AxisX_En, m_AxisY_En, m_AxisZ_En, m_AxisU_En);
		WriteReg( 3, m_WR3, m_AxisX_En, m_AxisY_En, m_AxisZ_En, m_AxisU_En);
		if( ChipSel == 2 )	WriteReg( 5, m_WR5 );

		m_ComPort.WriteToPort((LPCTSTR)m_strTXDataCOM1);

	}
}

void CConfigDlg::OnRestore() 
{
	// TODO: Add your control notification handler code here
	int AxisArray[4];
	
	m_AxisU_En = 1;
	m_AxisX_En = 1;
	m_AxisY_En = 1;
	m_AxisZ_En = 1;

	AxisArray[0] = m_AxisX_En;
	AxisArray[1] = m_AxisY_En;
	AxisArray[2] = m_AxisZ_En;
	AxisArray[3] = m_AxisU_En;

	chip.SetWR1(0,AxisArray);
	chip.SetWR2(0,AxisArray);
	chip.SetWR3(0,AxisArray);

	m_IN0_En  = 0;
	m_IN1_En  = 0;
	m_IN2_En  = 0;
	m_IN3_En  = 0;
	m_IN0_L   = 0;
	m_IN1_L   = 0;
	m_IN2_L   = 0;
	m_IN3_L   = 0;
	m_INT0_En = 0;
	m_INT1_En = 0;
	m_INT2_En = 0;
	m_INT3_En = 0;
	m_INT4_En = 0;
	m_INT5_En = 0;
	m_INT6_En = 0;
	m_INT7_En = 0;

	m_INPOS_En = 0;
	m_INP_L    = 0;
	m_Alarm_En = 0;
	m_ALM_L    = 0;
	m_PIND     = 0;
	m_PINMD    = 0;
	m_DIR_L    = 0;
	m_PLS_L    = 0;
	m_PLSMD    = 1;
	m_CMPSL    = 0;
	m_HLMTM    = 0;
	m_HLMTP    = 0;
	m_LMTMD    = 0;
	m_SLMTM_En = 0;
	m_SLMTP_En = 0;

	m_MANLD = 0;
	m_DSNDE	= 0;
	m_SACC  = 0;
	m_EXOP	= 0;
	m_OUTSL = 0;
	m_HLMTP_En = 1;
	m_HLMTM_En = 1;
	m_EMGN_L    = 0;
	m_EMGN_En   = 1;

	CDialog::OnInitDialog();
}

void CConfigDlg::OnCheckAx() 
{
	m_AxisX_En = !m_AxisX_En;

}

void CConfigDlg::OnCheckAy() 
{
	m_AxisY_En = !m_AxisY_En;
}

void CConfigDlg::OnCheckAz() 
{
	m_AxisZ_En = !m_AxisZ_En;
}

void CConfigDlg::OnCheckAu() 
{
	m_AxisU_En = !m_AxisU_En;
}


BOOL CConfigDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here

	if(ChipSel==2)
	{
		GetDlgItem(IDC_CHECK_AZ)->EnableWindow(FALSE);
		GetDlgItem(IDC_CHECK_AU)->EnableWindow(FALSE);
		SetDlgItemText(IDC_CHECK_IN0, "使用STOP0" );
		SetDlgItemText(IDC_CHECK_IN1, "使用STOP1" );
		SetDlgItemText(IDC_CHECK_IN2, "使用STOP2" );
		SetDlgItemText(IDC_CHECK_IN3, "允许EPCLR" );
		SetDlgItemText(IDC_IN3_LEVEL_0, "禁止反向计数" );
		SetDlgItemText(IDC_IN3_LEVEL_1, "允许反向计数" );
	}
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

⌨️ 快捷键说明

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