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++

#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;
}