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