📄 +
字号:
//Operation.cpp:implementation file
#include "stdafx.h"
#include "TEST.h"
#include "Operation.h"
#include "motocom.h"
#include "PMovj.h"
#include "Message.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//COperation dialog
COperation::COperation(CWnd *pParent /*=NULL*/): CDialog(COperation::IDD,
pParent)
{
//{{AFX_DATA_INIT(COperation)
m_nSpeed = 0.0;
m_nStepPulse = 0.0;
m_nCodeOpt = - 1;
m_bSmooth = FALSE;
m_nPulseS1 = 0.0;
m_nPulseB1 = 0.0;
m_nPulseS = 0.0;
m_nPulseB = 0.0;
m_nPulseL = 0.0;
m_nPulseR = 0.0;
m_nPulseT = 0.0;
m_nPulseU = 0.0;
m_nPulseL1 = 0.0;
m_nPulseR1 = 0.0;
m_nPulseT1 = 0.0;
m_nPulseU1 = 0.0;
m_nSelPulse = - 1;
//}}AFX_DATA_INIT
}
void COperation::DoDataExchange(CDataExchange *pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(COperation)
DDX_Control(pDX, IDC_StepPulse, m_nStepCtrl);
DDX_Control(pDX, IDC_BUTTON_U2, m_nButtonU2);
DDX_Control(pDX, IDC_BUTTON_U1, m_nButtonU1);
DDX_Control(pDX, IDC_BUTTON_T2, m_nButtonT2);
DDX_Control(pDX, IDC_BUTTON_T1, m_nButtonT1);
DDX_Control(pDX, IDC_BUTTON_S2, m_nButtonS2);
DDX_Control(pDX, IDC_BUTTON_S1, m_nButtonS1);
DDX_Control(pDX, IDC_BUTTON_R2, m_nButtonR2);
DDX_Control(pDX, IDC_BUTTON_R1, m_nButtonR1);
DDX_Control(pDX, IDC_BUTTON_L2, m_nButtonL2);
DDX_Control(pDX, IDC_BUTTON_L1, m_nButtonL1);
DDX_Control(pDX, IDC_BUTTON_B2, m_nButtonB2);
DDX_Control(pDX, IDC_BUTTON_B1, m_nButtonB1);
DDX_Control(pDX, IDC_CodeOptClear, m_nCodeOptClear);
DDX_Control(pDX, IDCANCEL, m_nCancel);
DDX_Control(pDX, IDC_SETPOS, m_nSetPos);
DDX_Control(pDX, IDC_CodeOpt, m_nCodeOptCtrl);
DDX_Text(pDX, IDC_SPEED, m_nSpeed);
DDX_Text(pDX, IDC_StepPulse, m_nStepPulse);
DDX_Text(pDX, IDC_CodeOpt, m_nCodeOpt);
DDX_Text(pDX, IDC_PulseS1, m_nPulseS1);
DDX_Text(pDX, IDC_PulseB1, m_nPulseB1);
DDX_Text(pDX, IDC_nPulseS, m_nPulseS);
DDX_Text(pDX, IDC_nPulseB, m_nPulseB);
DDX_Text(pDX, IDC_nPulseL, m_nPulseL);
DDX_Text(pDX, IDC_nPulseR, m_nPulseR);
DDX_Text(pDX, IDC_nPulseT, m_nPulseT);
DDX_Text(pDX, IDC_nPulseU, m_nPulseU);
DDX_Text(pDX, IDC_PulseL1, m_nPulseL1);
DDX_Text(pDX, IDC_PulseR1, m_nPulseR1);
DDX_Text(pDX, IDC_PulseT1, m_nPulseT1);
DDX_Text(pDX, IDC_PulseU1, m_nPulseU1);
DDX_Radio(pDX, IDC_nSelPulse, m_nSelPulse);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(COperation, CDialog)
//{{AFX_MSG_MAP(COperation)
ON_BN_CLICKED(IDC_BUTTON_S1, OnButtonS1)ON_BN_CLICKED(IDC_BUTTON_S2, OnButtonS2)
ON_BN_CLICKED(IDC_BUTTON_B1, OnButtonB1)ON_BN_CLICKED(IDC_BUTTON_B2,
OnButtonB2)ON_BN_CLICKED(IDC_BUTTON_L1, OnButtonL1)ON_BN_CLICKED
(IDC_BUTTON_L2, OnButtonL2)ON_BN_CLICKED(IDC_BUTTON_R1, OnButtonR1)
ON_BN_CLICKED(IDC_BUTTON_R2, OnButtonR2)ON_BN_CLICKED(IDC_BUTTON_T1,
OnButtonT1)ON_BN_CLICKED(IDC_BUTTON_T2, OnButtonT2)ON_BN_CLICKED
(IDC_BUTTON_U1, OnButtonU1)ON_BN_CLICKED(IDC_BUTTON_U2, OnButtonU2)
ON_BN_CLICKED(IDC_CodeOptClear, OnCodeOptClear)ON_BN_CLICKED(IDC_SETPOS,
OnSetpos)ON_BN_CLICKED(IDC_nSelAngle, OnSelAngle)ON_BN_CLICKED(IDC_nSelPulse,
OnSelPulse)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//COperation message handlers
BOOL COperation::OperateS(double pulse)
{
UpdateData(TRUE);
p[0] = pulse; //给S轴赋予,其他轴归0;
p[1] = 0;
p[2] = 0;
p[3] = 0;
p[4] = 0;
p[5] = 0;
p[6] = 0;
p[7] = 0;
p[8] = 0;
p[9] = 0;
p[10] = 0;
p[11] = 0;
ToolNo = 0;
Velocity = m_nSpeed;
rc = BscPMovj(dlg.Handle, Velocity, ToolNo, p);
return TRUE;
}
double COperation::OnButtonS1() //S轴正向运行
{
//TODO:Add your control notification handler code here
UpdateData(TRUE);
OnSelect();
if ((refs *(*PULSES + m_nStepPulse)) <= 264460)
//判断是否超出运动极限
{
dlg.OnOpenCom();
OperateS(refs *(*PULSES + m_nStepPulse));
if (rc == 0)
{
OnSetposS1(); //显示进度条
*PULSES = (*PULSES + m_nStepPulse); //显示脉冲数
m_nCodeOptCtrl.Clear();
m_nCodeOpt = rc;
UpdateData(FALSE);
}
else
{
OnSetposS1();
*PULSES = (*PULSES + m_nStepPulse);
m_nCodeOptCtrl.Clear();
m_nCodeOpt = rc;
UpdateData(FALSE);
AfxMessageBox("S1 failed!");
}
dlg.CloseCom(); //释放通信句柄;
}
else
//超出极限,要求重新输入;
{
AfxMessageBox("所输入的值已超过允许范围,请重新输入!");
}
return *PULSES;
}
double COperation::OnButtonS2() //S轴反向运行;
{
//TODO:Add your control notification handler code here
UpdateData(TRUE);
OnSelect();
if ((refs *(*PULSES - m_nStepPulse)) >= - 264460)
//判断是否超出运动极限;
{
dlg.OnOpenCom();
OperateS(refs *(*PULSES - m_nStepPulse));
if (rc == 0)
{
OnSetposS2();
*PULSES = (*PULSES - m_nStepPulse);
m_nCodeOptCtrl.Clear();
m_nCodeOpt = rc;
UpdateData(FALSE);
}
else
{
OnSetposS2();
*PULSES = (*PULSES - m_nStepPulse);
m_nCodeOptCtrl.Clear();
m_nCodeOpt = rc;
UpdateData(FALSE);
AfxMessageBox("S2 failed!");
}
dlg.CloseCom();
}
else
{
AfxMessageBox("所输入的值已超过允许范围,请重新输入!");
}
return *PULSES;
}
void COperation::OnCancel()
{
//TODO:Add extra cleanup here
CDialog::OnCancel();
}
void COperation::OnCodeOptClear()
{
//TODO:Add your control notification handler code here
m_nCodeOpt = - 1;
UpdateData(FALSE);
}
BOOL COperation::OnInitDialog() //单步操作(Coperation)类的初始化
{
CDialog::OnInitDialog();
//TODO:Add extra initialization here
GetDlgItem(IDC_STATIC_PULSE)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_ANGLE)->ShowWindow(SW_HIDE);
refs = 1;
refl = 1;
refu = 1;
refr = 1;
refb = 1;
reft = 1;
PULSES = &m_nPulseS;
PULSEB = &m_nPulseB;
PULSER = &m_nPulseR;
PULSEU = &m_nPulseU;
PULSET = &m_nPulseT;
PULSEL = &m_nPulseL;
m_uiRangeFrom = 0;
m_uiRangeToS = 264460; //15557个脉冲等于10度S轴
m_uiRangeToL = 208320; //13444个脉冲等于10度L轴
m_uiRangeToU = 255400; //13444个脉冲等于10度U轴
m_uiRangeToR = 159980; //8888个脉冲等于10度R轴
m_uiRangeToB = 181800; //8080个脉冲等于10度B轴
m_uiRangeToT = 149500; //4155个脉冲等于10度T轴
CWnd *pWnd = GetDlgItem(IDC_PROG_S1);
CRect rcs1;
pWnd->GetWindowRect(&rcs1);
ScreenToClient(rcs1);
m_Progress1.Create(WS_BORDER | WS_VISIBLE | WS_CHILD | PBS_SMOOTH, rcs1, this,
IDC_PROGR ESS1);
m_Progress1.SetRange(0, 20000);
return TRUE; //return TRUE unless you set the focus to a control
//EXCEPTION:OCX Property Pages should return FALSE
}
void COperation::OnSetpos()
{
//TODO:Add your control notification handler code here
dlg.OnOpenCom(); //回到初始位置;
OperateS(0);
m_Progress1.SetPos(0);
m_Progressb1.SetPos(0);
m_Progressl1.SetPos(0);
m_Progressr1.SetPos(0);
m_Progressu1.SetPos(0);
m_Progresst1.SetPos(0);
m_nPulseS1 = 0;
m_nPulseB1 = 0;
m_nPulseR1 = 0;
m_nPulseU1 = 0;
m_nPulseT1 = 0;
m_nPulseL1 = 0;
*PULSES = 0;
*PULSEL = 0;
*PULSEU = 0; //指针回零;
*PULSER = 0;
*PULSEB = 0;
*PULSET = 0;
dlg.CloseCom();
UpdateData(FALSE);
}
void COperation::OnSetposS1()
{
if ((*PULSES + m_nStepPulse) >= 0)
//判断脉冲,显示彩色进度条;
{
m_uiPos = (int)(20000 *refs *(*PULSES + m_nStepPulse) / 264460);
}
else
{
m_uiPos = - (int)(20000 *refs *(*PULSES + m_nStepPulse) / 264460);
}
m_Progress1.SetPos(m_uiPos);
m_nPulseS1 = (refs *(*PULSES + m_nStepPulse));
UpdateData(FALSE);
}
void COperation::OnSetposS2()
{
if ((*PULSES - m_nStepPulse) >= 0)
{
m_uiPos = (int)(20000 *refs *(*PULSES - m_nStepPulse) / 264460);
}
else
{
m_uiPos = - (int)(20000 *refs *(*PULSES - m_nStepPulse) / 264460);
}
m_Progress1.SetPos(m_uiPos);
m_nPulseS1 = (refs *(*PULSES - m_nStepPulse));
UpdateData(FALSE);
}
void COperation::OnSelect() //选择脉冲或角度模式
{
switch (m_nSelPulse)
{
case 1:
OnSelPulse();
case 2:
OnSelAngle();
default:
break;
} //switch
}
void COperation::OnSelAngle() //初始化角度模式
{
//TODO:Add your control notification handler code here
GetDlgItem(IDC_STATIC_PULSE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_ANGLE)->ShowWindow(SW_SHOW);
refs = 1555;
refl = 1344;
refu = 1344;
refr = 888;
refb = 808;
reft = 415;
}
void COperation::OnSelPulse() //初始化脉冲模式
{
//TODO:Add your control notification handler code here
GetDlgItem(IDC_STATIC_PULSE)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_ANGLE)->ShowWindow(SW_HIDE);
refs = 1;
refl = 1;
refu = 1;
refr = 1;
refb = 1;
reft = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -