You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.6 KiB
C++
91 lines
2.6 KiB
C++
#include "StdAfx.h"
|
|
#include "WorkCmdMovePlatformXY.h"
|
|
#include "ExceptionMsg.h"
|
|
#include "DeviceState.h"
|
|
|
|
CWorkCmdMovePlatformXY::CWorkCmdMovePlatformXY()
|
|
{
|
|
m_bMoveByDir = false;//是否通过方向来移动平台
|
|
m_bMoveByPulse = false;//是否通过方向脉冲个数来移动平台
|
|
m_MoveDis = 0;//移动距离
|
|
m_Work = false;//是否在工作(false 表示空移),主要是电机速度不一样
|
|
m_MoveOrder = 0;
|
|
m_bCheckIniState = false;//是否检查初始化状态
|
|
}
|
|
CWorkCmdMovePlatformXY::~CWorkCmdMovePlatformXY(void)
|
|
{
|
|
}
|
|
//将平台移动到指定点
|
|
bool CWorkCmdMovePlatformXY::Excute()
|
|
{
|
|
if(gLogMgr->IsDebuging())//调试状态
|
|
{
|
|
Sleep(gLogMgr->GetDebugCmdDelay());
|
|
}
|
|
|
|
CPlatformXY &PlatformXY = *gPlatformXY;
|
|
if(m_bMoveByDir)//按距离移动
|
|
{
|
|
PlatformXY.MoveDistance(m_MoveDis,m_MoveDir);
|
|
}
|
|
else if(m_bMoveByPulse)//按脉冲移动
|
|
{
|
|
PlatformXY.MovePulseCnt(m_PulseCnt,m_MoveDir);
|
|
}
|
|
else//点到点移动
|
|
{
|
|
if(m_bCheckIniState)
|
|
{
|
|
CDeviceState &DeviceState = CDeviceState::GetInstance();
|
|
if(!DeviceState.IsDeviceIni())
|
|
{
|
|
CString str = _T("异常,平台未初始化!");
|
|
CExceptionMsg Msg;
|
|
Msg.SetMsg(str);
|
|
throw Msg;
|
|
}
|
|
}
|
|
PlatformXY.SetMoveOrder(m_MoveOrder);
|
|
PlatformXY.Move(m_Work,m_MovePt,m_TargetPt);
|
|
}
|
|
SetAfterDelay(PlatformXY.GetMoveDelay());
|
|
return true;
|
|
}
|
|
void CWorkCmdMovePlatformXY::WirteLog()
|
|
{
|
|
if(m_bMoveByDir)
|
|
{
|
|
gLogMgr->WriteDebugLog(_T("[WorkCmd][平台移动] "),_T("距离mm"),m_MoveDis);
|
|
}
|
|
else if(m_bMoveByPulse)
|
|
{
|
|
gLogMgr->WriteDebugLog(_T("[WorkCmd][平台移动] "),_T("脉冲个数"),m_PulseCnt);
|
|
}
|
|
else
|
|
{
|
|
gLogMgr->WriteDebugLog(_T("[WorkCmd][MovePlatformXY] "),_T("MovePt.x"),_T("MovePt.y"),m_MovePt.x,m_MovePt.y);
|
|
gLogMgr->WriteDebugLog(_T("[WorkCmd][MovePlatformXY] "),_T("m_TargetPt.x"),_T("m_TargetPt.y"),m_TargetPt.x,m_TargetPt.y);
|
|
}
|
|
}
|
|
/*MovePt 是数据在平台上映射的实际坐标,
|
|
TargetPt 是将MovePt 移动到TargetPt 的位置
|
|
*/
|
|
void CWorkCmdMovePlatformXY::MoveToTargetPt(Dbxy MovePt,Dbxy TargetPt)
|
|
{
|
|
m_MovePt = MovePt;
|
|
m_TargetPt = TargetPt;
|
|
}
|
|
//如果设置了移动距离和方向,则按照这种方式来移动
|
|
void CWorkCmdMovePlatformXY::MoveByDis(double MoveDis,DIRECTION MoveDir)
|
|
{
|
|
m_bMoveByDir = true;
|
|
m_MoveDis = MoveDis;
|
|
m_MoveDir = MoveDir;
|
|
}
|
|
//脉冲移动
|
|
void CWorkCmdMovePlatformXY::MoveByPulseCnt(int PulseCnt,DIRECTION MoveDir)
|
|
{
|
|
m_bMoveByPulse = true;
|
|
m_PulseCnt = PulseCnt;
|
|
m_MoveDir = MoveDir;
|
|
} |