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

📄 motordlgprv.cpp

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

#include "stdafx.h"
#include "TestForm.h"
#include "MotorDlgPrv.h"

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


MotorDlgPrv::MotorDlgPrv(CWnd* pParent /*=NULL*/)
	: CDialog(MotorDlgPrv::IDD, pParent)
{
	//{{AFX_DATA_INIT(MotorDlgPrv)
	m_dModlgprvSpeed = 100.0;
	m_nModlgprvPoint = 60;
	//}}AFX_DATA_INIT
	m_bSelfchekflag =FALSE;//设备自检未完成
}


void MotorDlgPrv::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(MotorDlgPrv)
	DDX_Control(pDX, IDC_COMODLGPRV_DIRECT, m_cModlgprvDirect);
	DDX_Text(pDX, IDC_EDMODLGPRV_SPEED, m_dModlgprvSpeed);
	DDX_Text(pDX, IDC_EDMODLGPRV_POINT, m_nModlgprvPoint);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(MotorDlgPrv, CDialog)
	//{{AFX_MSG_MAP(MotorDlgPrv)
	ON_BN_CLICKED(IDC_BUMODLGPRV_INIT, OnBumodlgprvInit)
	ON_BN_CLICKED(IDC_BUMODLGPRV_START, OnBumodlgprvStart)
	ON_BN_CLICKED(IDC_BUMODLGPRV_STOP, OnBumodlgprvStop)
	ON_BN_CLICKED(IDC_BUMODLGPRV_FINISH, OnBumodlgprvFinish)
	//手动添加,编码器完成一次数据读取的消息响应函数
	ON_MESSAGE(WM_CODERDAQ_ONE,OnCoderDaqOne)
	ON_MESSAGE(WM_OPENDATA,OnOpendata)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// MotorDlgPrv message handlers

//////////////////////////////////////////////
BOOL MotorDlgPrv::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_cModlgprvDirect.SetCurSel(0);
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

//设备自检
void MotorDlgPrv::OnBumodlgprvInit() 
{
	// TODO: Add your control notification handler code here
	motorprvDlg.initBoard();
	m_bSelfchekflag =TRUE;//设备自检完成
	
}

//开始试验
void MotorDlgPrv::OnBumodlgprvStart() 
{
	// TODO: Add your control notification handler code here
	//读取控制面板参数
	UpdateData(TRUE);
	if (m_bSelfchekflag)
	{	
		CTestFormApp *pApp=(CTestFormApp *)AfxGetApp();

		motorprvDlg.m_bMotorVmove = FALSE;//电机运动类型为点位运动
		motorprvDlg.m_dMotorSpeed = m_dModlgprvSpeed;//电机运动速度
		motorprvDlg.m_dMotorTangle = 360/m_nModlgprvPoint;//电机每次运动的角度
		motorprvDlg.m_nMotorDirectTem=m_cModlgprvDirect.GetCurSel();//电机运动方向
		//motorprvDlg.MotorRun();

	//发送消息给画图窗口
	pApp->pCTestFormView->prvDrawDlg.PostMessage(WM_MOTDLGPRVSTART_HIT,m_nModlgprvPoint,1);

	//发送消息给编码器控制窗口	
	pApp->pPeDialogBase->coderDlg.PostMessage(WM_MOTDLGPRVSTART_HIT,m_nModlgprvPoint,1);
	//MessageBox("3");
	}
	else
	MessageBox("请先进行设备自检和编码器的串口设置操作!");	
}

//停止试验
void MotorDlgPrv::OnBumodlgprvStop() 
{
	// TODO: Add your control notification handler code here
		motorprvDlg.MotorStop();
	
}

//完成试验
void MotorDlgPrv::OnBumodlgprvFinish() 
{
	// TODO: Add your control notification handler code here
	motorprvDlg.MotorStop();
	
}

//编码器完成一次采集
void MotorDlgPrv::OnCoderDaqOne(WPARAM wParam, LPARAM lParam)
{
		motorprvDlg.m_bMotorVmove = FALSE;//电机运动类型为点位运动
		motorprvDlg.m_dMotorSpeed = m_dModlgprvSpeed;//电机运动速度
		motorprvDlg.m_dMotorTangle = 360/m_nModlgprvPoint;//电机每次运动的角度
		motorprvDlg.m_nMotorDirectTem=m_cModlgprvDirect.GetCurSel();//电机运动方向
		motorprvDlg.MotorRun();
}


//打开数据响应函数
void MotorDlgPrv::OnOpendata(WPARAM wParam, LPARAM lParam)
{
	// TODO: Add your control notification handler code here
	//MessageBox("123");
	CTestFormApp *pApp=(CTestFormApp *)AfxGetApp();
	m_dModlgprvSpeed=pApp->pCTestFormDoc->motorRate;	//获得转速
	int direct=pApp->pCTestFormDoc->motorDirect;		//获得转向
	if(direct==-1)
		m_cModlgprvDirect.SetCurSel(1);		//初始化为反转
	else
		m_cModlgprvDirect.SetCurSel(0);		//初始化为正转
	m_nModlgprvPoint=(int)(pApp->pCTestFormDoc->nTotalCoderNumber);//测试点数
	UpdateData(FALSE);		//更新主控窗口中的显示

	//OnBumodlgpowInit();
	//OnBumodlgpowStart(); 
}

⌨️ 快捷键说明

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