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

📄 motordlgrigid.cpp

📁 一个用于无刷直流电动机的驱动与控制程序.里面所用的采集卡的型号为MC08.
💻 CPP
字号:
// MotorDlgRigid.cpp : implementation file
//

#include "stdafx.h"
#include "TestForm.h"
#include "MotorDlgRigid.h"

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

/////////////////////////////////////////////////////////////////////////////
// MotorDlgRigid dialog


MotorDlgRigid::MotorDlgRigid(CWnd* pParent /*=NULL*/)
	: CDialog(MotorDlgRigid::IDD, pParent)
{
	//{{AFX_DATA_INIT(MotorDlgRigid)
	m_dModlgrigArm = 0.0;
	m_nModlgrigNumber = 0;
	m_dModlgrigWeight = 0.0;
	m_dModlgrigUnweight = 0.0;
	//}}AFX_DATA_INIT
	/*布尔变量初始化*/
	m_bModlgrigInitflag =FALSE; //未进行设备自检

	/*浮点数变量初始化*/
	 m_dModlgrigTorque=0.0;//当前转矩大小
	 m_dModlgrigTweight=0.0;//当前所承总重量
}


void MotorDlgRigid::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(MotorDlgRigid)
	DDX_Control(pDX, IDC_BUMODLGRIG_ULCAN, m_cModlgrigUlcan);
	DDX_Control(pDX, IDC_BUMODLGRIG_LCAN, m_cModlgrigLcan);
	DDX_Control(pDX, IDC_EDMODLGRIG_WEIGHT, m_cModlgrigWeight);
	DDX_Control(pDX, IDC_BUMODLGRIG_UNLOAD, m_cModlgrigUnload);
	DDX_Control(pDX, IDC_BUMODLGRIG_LOAD, m_cModlgrigLoad);
	DDX_Control(pDX, IDC_EDMODLGRIG_UNWEIGHT, m_cModlgrigUnweight);
	DDX_Text(pDX, IDC_EDMODLGRIG_ARM, m_dModlgrigArm);
	DDX_Text(pDX, IDC_EDMODLGRIG_NUMBER, m_nModlgrigNumber);
	DDX_Text(pDX, IDC_EDMODLGRIG_WEIGHT, m_dModlgrigWeight);
	DDX_Text(pDX, IDC_EDMODLGRIG_UNWEIGHT, m_dModlgrigUnweight);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(MotorDlgRigid, CDialog)
	//{{AFX_MSG_MAP(MotorDlgRigid)
	ON_BN_CLICKED(IDC_BUMODLGRIG_INIT, OnBumodlgrigInit)
	ON_BN_CLICKED(IDC_BUMODLGRIG_START, OnBumodlgrigStart)
	ON_BN_CLICKED(IDC_BUMODLGRIG_STOP, OnBumodlgrigStop)
	ON_BN_CLICKED(IDC_BUMODLGRIG_FINISH, OnBumodlgrigFinish)
	ON_BN_CLICKED(IDC_BUMODLGRIG_LOAD, OnBumodlgrigLoad)
	ON_BN_CLICKED(IDC_BUMODLGRIG_UNLOAD, OnBumodlgrigUnload)
	ON_BN_CLICKED(IDC_BUMODLGRIG_LCAN, OnBumodlgrigLcan)
	ON_BN_CLICKED(IDC_BUMODLGRIG_ULCAN, OnBumodlgrigUlcan)
	//手动添加,编码器读取数据达到设定值的消息响应函数
	ON_MESSAGE(WM_CODERDAQ_FINISH,OnCoderDaqFinish)
	ON_MESSAGE(WM_OPENDATA,OnOpendata)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// MotorDlgRigid message handlers
////////////////////////////////////

BOOL MotorDlgRigid::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	////----------------------------------------------////
	/*初始时单次试验操作不能进行*/
	m_cModlgrigWeight.EnableWindow(FALSE);//加载编辑框无效
	m_cModlgrigLoad.EnableWindow(FALSE);//加载按钮无效
	m_cModlgrigLcan.EnableWindow(FALSE);//取消加载按钮无效
	m_cModlgrigUnweight.EnableWindow(FALSE);//卸载编辑框无效
	m_cModlgrigUnload.EnableWindow(FALSE);//卸载按钮无效
	m_cModlgrigUlcan.EnableWindow(FALSE);//取消卸载按钮无效
	////----------------------------------------------////	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

//设备自检
void MotorDlgRigid::OnBumodlgrigInit() 
{
	// TODO: Add your control notification handler code here
	m_bModlgrigInitflag =TRUE;//设备自检完成
}

//开始试验
void MotorDlgRigid::OnBumodlgrigStart() 
{
	// TODO: Add your control notification handler code here
	if (m_bModlgrigInitflag)//设备自检完成
	{
		//读取控制面板参数
		UpdateData(TRUE);
		
		CTestFormApp *pApp=(CTestFormApp *)AfxGetApp();

		//开始试验时,加载操作有效
		m_cModlgrigWeight.EnableWindow(TRUE);//加载编辑框有效
		m_cModlgrigLoad.EnableWindow(TRUE);//加载按钮有效
		
		//发送消息给画图窗口
		pApp->pCTestFormView->rigidDrawDlg.PostMessage(WM_MOTDLGRIGSTART_HIT,m_nModlgrigNumber,0);
		//发送消息给编码器控制窗口	
		pApp->pPeDialogBase->coderDlg.PostMessage(WM_MOTDLGRIGSTART_HIT,m_nModlgrigNumber,0);
	}
	else
		MessageBox("请先进行设备自检和编码器的串口设置操作!");
}

//中止试验
void MotorDlgRigid::OnBumodlgrigStop() 
{
	// TODO: Add your control notification handler code here
	
}

//完成试验
void MotorDlgRigid::OnBumodlgrigFinish() 
{
	// TODO: Add your control notification handler code here
	
}

//加载操作
void MotorDlgRigid::OnBumodlgrigLoad() 
{
	// TODO: Add your control notification handler code here
	//读取控制面板参数
	UpdateData(TRUE);

	CTestFormApp *pApp=(CTestFormApp *)AfxGetApp();

	m_dModlgrigTweight=+m_dModlgrigWeight;//当前总重量
	m_dModlgrigTorque=m_dModlgrigTweight*m_dModlgrigArm;//当前转矩

	m_cModlgrigLoad.EnableWindow(FALSE);//加载按钮无效
	m_cModlgrigLcan.EnableWindow(TRUE);//取消加载按钮有效

 	pApp->pCTestFormDoc->m_dRigidDatatorque=m_dModlgrigTorque;//获得当前转矩	
	//发送消息给编码器控制窗口	
	pApp->pPeDialogBase->coderDlg.PostMessage(WM_MOTDLGRIGLOAD_HIT,0,0);
	
}

//卸载操作
void MotorDlgRigid::OnBumodlgrigUnload() 
{
	// TODO: Add your control notification handler code here
	//读取控制面板参数
	UpdateData(TRUE);

	CTestFormApp *pApp=(CTestFormApp *)AfxGetApp();

	m_dModlgrigTweight=-m_dModlgrigWeight;//当前总重量
	m_dModlgrigTorque=m_dModlgrigTweight*m_dModlgrigArm;//当前转矩

	m_cModlgrigUnload.EnableWindow(FALSE);//卸载按钮无效
	m_cModlgrigUlcan.EnableWindow(TRUE);//取消卸载按钮有效
	
	pApp->pCTestFormDoc->m_dRigidDatatorque=m_dModlgrigTorque;//获得当前转矩
	//发送消息给编码器控制窗口	
	pApp->pPeDialogBase->coderDlg.PostMessage(WM_MOTDLGRIGUNLOAD_HIT,0,0);
}

//取消加载操作
void MotorDlgRigid::OnBumodlgrigLcan() 
{
	// TODO: Add your control notification handler code here
	//读取控制面板参数
	UpdateData(TRUE);

	CTestFormApp *pApp=(CTestFormApp *)AfxGetApp();

	m_dModlgrigTweight=-m_dModlgrigWeight;//当前总重量
	m_dModlgrigTorque=m_dModlgrigTweight*m_dModlgrigArm;//当前转矩

	m_cModlgrigLoad.EnableWindow(TRUE);//加载按钮有效
	m_cModlgrigLcan.EnableWindow(FALSE);//取消加载按钮无效
	
	pApp->pCTestFormDoc->m_dRigidDatatorque=m_dModlgrigTorque;//获得当前转矩
	//发送消息给编码器控制窗口	
	pApp->pPeDialogBase->coderDlg.PostMessage(WM_MOTDLGRIGCLOAD_HIT,0,0);
}

//取消卸载操作
void MotorDlgRigid::OnBumodlgrigUlcan() 
{
	// TODO: Add your control notification handler code here
	//读取控制面板参数
	UpdateData(TRUE);

	CTestFormApp *pApp=(CTestFormApp *)AfxGetApp();

	m_dModlgrigTweight=+m_dModlgrigWeight;//当前总重量
	m_dModlgrigTorque=m_dModlgrigTweight*m_dModlgrigArm;//当前转矩
	
	m_cModlgrigUlcan.EnableWindow(FALSE);//取消卸载按钮无效
	m_cModlgrigUnload.EnableWindow(TRUE);//卸载按钮有效	

	pApp->pCTestFormDoc->m_dRigidDatatorque=m_dModlgrigTorque;//获得当前转矩
	//发送消息给编码器控制窗口	
	pApp->pPeDialogBase->coderDlg.PostMessage(WM_MOTDLGRIGCUNLOAD_HIT,0,0);
}

//编码器读取数据达到设定值的消息响应函数
void MotorDlgRigid::OnCoderDaqFinish(WPARAM wParam, LPARAM lParam)
{
	int ntime =(int)wParam;//发送消息的次数
	switch(ntime)
	{
	case 0:
		m_cModlgrigLoad.EnableWindow(FALSE);	//加载按钮无效
		m_cModlgrigLcan.EnableWindow(FALSE);	//取消加载按钮无效
		m_cModlgrigUlcan.EnableWindow(TRUE);	//取消卸载按钮有效
		m_cModlgrigUnload.EnableWindow(FALSE);	//卸载按钮无效	
		break;
	case 1:
		m_cModlgrigLoad.EnableWindow(FALSE);	//加载按钮无效
		m_cModlgrigLcan.EnableWindow(FALSE);	//取消加载按钮无效
		m_cModlgrigUlcan.EnableWindow(FALSE);	//取消卸载按钮无效
		m_cModlgrigUnload.EnableWindow(FALSE);	//卸载按钮无效
		break;
	default:
		break;
	}
	
}

//打开数据响应函数
void MotorDlgRigid::OnOpendata(WPARAM wParam, LPARAM lParam)
{
	// TODO: Add your control notification handler code here
	//MessageBox("123");
	CTestFormApp *pApp=(CTestFormApp *)AfxGetApp();
	m_dModlgrigArm=pApp->pCTestFormDoc->torquearm;	//加载力臂长度
	m_nModlgrigNumber=pApp->pCTestFormDoc->nTotalCoderNumber;//单向加载次数
	m_dModlgrigWeight=2;	//加载2Kg
	m_dModlgrigUnweight=pApp->pCTestFormDoc->light;//卸载1Kg

	m_cModlgrigWeight.EnableWindow(TRUE);	//加载编辑框有效
	m_cModlgrigUnweight.EnableWindow(TRUE);	//卸载编辑框有效
	m_cModlgrigLoad.EnableWindow(FALSE);	//加载按钮无效
	m_cModlgrigLcan.EnableWindow(FALSE);	//取消加载按钮无效
	m_cModlgrigUlcan.EnableWindow(TRUE);	//取消卸载按钮无效
	m_cModlgrigUnload.EnableWindow(FALSE);	//卸载按钮无效
	
	UpdateData(FALSE);		//更新主控窗口中的显示

}

⌨️ 快捷键说明

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