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

📄 motomandlg.cpp

📁 vc++ aaaaa
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// MotomanDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Motoman.h"
#include "MotomanDlg.h"
#include <direct.h>
#include "motocom.h"

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

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMotomanDlg dialog

// 全局变量
 short  nCid;					//通讯句柄
 double spd;					//运动速度
 double SetPulse[6];			//设置各轴位置脉冲
 double GetPulse[6];
 double GetPos[6];				//获取位置姿态
 unsigned short Form,*rconf= new unsigned short;	//机器人形式
 int pulse;						//每次进给脉冲数
 double k;

CMotomanDlg::CMotomanDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMotomanDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMotomanDlg)
	m_sAxis = 0.0;
	m_bAxis = 0.0;
	m_lAxis = 0.0;
	m_rAxis = 0.0;
	m_tAxis = 0.0;
	m_uAxis = 0.0;
	m_xEnd = 0.0;
	m_yEnd = 0.0;
	m_zEnd = 0.0;
	m_rxEnd = 0.0;
	m_ryEnd = 0.0;
	m_rzEnd = 0.0;
	m_speed = 0.0;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMotomanDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMotomanDlg)
	DDX_Control(pDX, IDC_REMOTE, m_remote);
	DDX_Control(pDX, IDC_POWER, m_power);
	DDX_Control(pDX, IDC_PLAY, m_play);
	DDX_Control(pDX, IDC_FORMAT, m_formatST);
	DDX_Text(pDX, IDC_S, m_sAxis);
	DDX_Text(pDX, IDC_B, m_bAxis);
	DDX_Text(pDX, IDC_L, m_lAxis);
	DDX_Text(pDX, IDC_R, m_rAxis);
	DDX_Text(pDX, IDC_T, m_tAxis);
	DDX_Text(pDX, IDC_U, m_uAxis);
	DDX_Text(pDX, IDC_X, m_xEnd);
	DDX_Text(pDX, IDC_Y, m_yEnd);
	DDX_Text(pDX, IDC_Z, m_zEnd);
	DDX_Text(pDX, IDC_RX, m_rxEnd);
	DDX_Text(pDX, IDC_RY, m_ryEnd);
	DDX_Text(pDX, IDC_RZ, m_rzEnd);
	DDX_Text(pDX, IDC_SPEED, m_speed);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMotomanDlg, CDialog)
	//{{AFX_MSG_MAP(CMotomanDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_FORMAT, OnFormat)
	ON_BN_CLICKED(IDC_SERVOON, OnServoon)
	ON_BN_CLICKED(IDC_SERVOOFF, OnServooff)
	ON_BN_CLICKED(IDC_CANCELERROR, OnCancelerror)
	ON_BN_CLICKED(IDC_ZERO, OnZero)
	ON_BN_CLICKED(IDC_STOP, OnStop)
	ON_BN_CLICKED(IDC_START, OnStart)
	ON_BN_CLICKED(IDC_HIGHSPD, OnHighspd)
	ON_BN_CLICKED(IDC_MIDSPD, OnMidspd)
	ON_BN_CLICKED(IDC_LOWSPD, OnLowspd)
	ON_BN_CLICKED(IDC_UP, OnUp)
	ON_BN_CLICKED(IDC_DOWN, OnDown)
	ON_BN_CLICKED(IDC_LEFT, OnLeft)
	ON_BN_CLICKED(IDC_RIGHT, OnRight)
	ON_BN_CLICKED(IDC_FORWORD, OnForword)
	ON_BN_CLICKED(IDC_BACKWORD, OnBackword)
	ON_BN_CLICKED(IDC_XTURN, OnXturn)
	ON_BN_CLICKED(IDC_XRETURN, OnXreturn)
	ON_BN_CLICKED(IDC_YTURN, OnYturn)
	ON_BN_CLICKED(IDC_YRETURN, OnYreturn)
	ON_BN_CLICKED(IDC_ZTURN, OnZturn)
	ON_BN_CLICKED(IDC_ZRETURN, OnZreturn)
	ON_BN_CLICKED(IDC_SPULSE, OnSpulse)
	ON_BN_CLICKED(IDC_SREPULSE, OnSrepulse)
	ON_BN_CLICKED(IDC_LPULSE, OnLpulse)
	ON_BN_CLICKED(IDC_LREPULSE, OnLrepulse)
	ON_BN_CLICKED(IDC_UPULSE, OnUpulse)
	ON_BN_CLICKED(IDC_UREPULSE, OnUrepulse)
	ON_BN_CLICKED(IDC_RPULSE, OnRpulse)
	ON_BN_CLICKED(IDC_RREPULSE, OnRrepulse)
	ON_BN_CLICKED(IDC_BPULSE, OnBpulse)
	ON_BN_CLICKED(IDC_BREPULSE, OnBrepulse)
	ON_BN_CLICKED(IDC_TPULSE, OnTpulse)
	ON_BN_CLICKED(IDC_TREPULSE, OnTrepulse)
	ON_BN_CLICKED(IDC_MOVEP, OnMovep)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMotomanDlg message handlers

BOOL CMotomanDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here

	m_formatST.SetActiveBgColor(RGB(255,0,0));
	m_formatST.SetActiveFgColor(RGB(255,255,0));
	m_formatST.SetInactiveBgColor(RGB(0,255,0));
	m_formatST.SetInactiveFgColor(RGB(0,0,255));
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CMotomanDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CMotomanDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CMotomanDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CMotomanDlg::OnFormat() 
{
	// TODO: Add your control notification handler code here
	//获取通讯句柄,串口

	nCid = BscOpen("E:\Motoman",1);

	//设置串口:COM1,9600bps,奇校验,8数据位,1停止位

	BscSetCom(nCid,1,9600,1,8,0);
	//连接

	BscConnect(nCid);
	BscSelectMode(nCid,2);


	//判断是够为远程模式,如果是的话将图片变绿:
	if (BscIsRemoteMode(nCid)==1)
	{
      m_remote.SetIcon(AfxGetApp()->LoadIcon(IDI_GREEN));
	}

//判断伺服电源是否打开,如果是的话将图片变绿:
	if (BscIsServo(nCid)==1)
	{
      m_power.SetIcon(AfxGetApp()->LoadIcon(IDI_GREEN));
	}

//判断是否为再现模式,如果是的话将图片变绿:
	if (BscIsTeachMode(nCid)==1)
	{
      m_play.SetIcon(AfxGetApp()->LoadIcon(IDI_GREEN));
	}
	//默认运动速度为低速
	m_speed=10.000;
	UpdateData(FALSE);
	//默认进给脉冲为短距离脉冲
    UpdateData(FALSE);
	//获取机器人各轴脉冲
	BscIsLoc(nCid,1,rconf,GetPulse);
	m_sAxis=GetPulse[0];
	m_lAxis=GetPulse[1];
	m_uAxis=GetPulse[2];
	m_rAxis=GetPulse[3];
	m_bAxis=GetPulse[4];
	m_tAxis=GetPulse[5];	
    
	//获取机器人末端位姿
    BscIsLoc(nCid,0,rconf,GetPos);
	m_xEnd=GetPos[0];
	m_yEnd=GetPos[1];
	m_zEnd=GetPos[2];  	
	m_rxEnd=GetPos[3];
	m_ryEnd=GetPos[4];
	m_rzEnd=GetPos[5];

	//显示各轴脉冲和位姿
    UpdateData(FALSE);

	m_formatST.ShowWindow(SW_HIDE);
}

void CMotomanDlg::OnServoon() 
{
	// TODO: Add your control notification handler code here

	BscServoOn(nCid);	
	if(BscIsServo(nCid)==1)
	{
       m_power.SetIcon(AfxGetApp()->LoadIcon(IDI_GREEN));
	}
}

void CMotomanDlg::OnServooff() 
{
	// TODO: Add your control notification handler code here

	BscServoOff(nCid);
	if(BscIsServo(nCid)==0)
	{
       m_power.SetIcon(AfxGetApp()->LoadIcon(IDI_RED));
	}
}

void CMotomanDlg::OnCancelerror() 
{
	// TODO: Add your control notification handler code here
	BscReset(nCid);
}

void CMotomanDlg::OnZero() 
{
	// TODO: Add your control notification handler code here
	SetPulse[0]=0;   
	SetPulse[1]=0;     
	SetPulse[2]=0;   
    SetPulse[3]=0;     
    SetPulse[4]=0;     
    SetPulse[5]=0; 
    BscPMovj(nCid,5,0,SetPulse);
	//判断机器人运动是否停止		  	  	 
    do
	 { 
	    k=m_lAxis;
        Sleep (1);  
		BscIsLoc(nCid,1,rconf,GetPulse);	  
        m_lAxis=GetPulse[1];        
	 }
	 while(k!=m_sAxis);
	//获取机器人各轴脉冲
	
    BscIsLoc(nCid,1,rconf,GetPulse);
	//显示各轴脉冲
	m_sAxis=GetPulse[0];
	m_lAxis=GetPulse[1];
	m_uAxis=GetPulse[2];
	m_rAxis=GetPulse[3];
	m_bAxis=GetPulse[4];
	m_tAxis=GetPulse[5];
	//显示末端位置
	BscIsLoc(nCid,0,rconf,GetPos);
	m_xEnd=GetPos[0];
	m_yEnd=GetPos[1];
	m_zEnd=GetPos[2];  	
	m_rxEnd=GetPos[3];
	m_ryEnd=GetPos[4];
	m_rzEnd=GetPos[5];
	UpdateData(FALSE);
}

void CMotomanDlg::OnStop() 
{
	// TODO: Add your control notification handler code here
	BscHoldOn(nCid);
	BscIsLoc(nCid,1,rconf,GetPulse);
	//显示各轴脉冲
    m_sAxis=GetPulse[0];
	m_lAxis=GetPulse[1];
	m_uAxis=GetPulse[2];
	m_rAxis=GetPulse[3];
	m_bAxis=GetPulse[4];
	m_tAxis=GetPulse[5];

	//获取机器人末端位姿
	BscIsLoc(nCid,0,rconf,GetPos);
	m_xEnd=GetPos[0];
	m_yEnd=GetPos[1];
	m_zEnd=GetPos[2];  	
	m_rxEnd=GetPos[3];
	m_ryEnd=GetPos[4];
	m_rzEnd=GetPos[5];
	UpdateData(FALSE);
}

void CMotomanDlg::OnStart() 
{
	// TODO: Add your control notification handler code here
	BscHoldOff(nCid);
}

void CMotomanDlg::OnHighspd() 
{
	// TODO: Add your control notification handler code here
	m_speed=50.000;
	UpdateData(FALSE);
}

void CMotomanDlg::OnMidspd() 
{
	// TODO: Add your control notification handler code here
	m_speed=30.000;
	UpdateData(FALSE);
}

void CMotomanDlg::OnLowspd() 
{
	// TODO: Add your control notification handler code here
	m_speed=10.000;
	UpdateData(FALSE);
}

void CMotomanDlg::Delay()
{
	double k0,k1,k2,k3,k4,k5;

	//判断轴运动是否停止	
      do

⌨️ 快捷键说明

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