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.
TwoLaserHead-PushJig/LaiPuLaser/PlatformXY.h

112 lines
5.3 KiB
C

#pragma once
#include "Motor.h"
#include "EnumDirection.h"
#include "GlobalDefine.h"
#include "Module.h"
#include "Subject.h"
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>񾵺ͼ<F1BEB5BA><CDBC><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2>ֶ<EFBFBD><D6B6><EFBFBD>ƽ̨
/*<2A><><EFBFBD><EFBFBD>ӳ<EFBFBD>ƽ̨<C6BD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ̨ԭ<CCA8><D4AD><EFBFBD><EFBFBD>
ƽ̨<EFBFBD>ƶ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵m_Coord ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ̨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޹<EFBFBD>*/
/*
ƽ̨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD>׼<EFBFBD>ĵѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Y <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>
*/
//xy ƽ̨
class CPlatformXY : public CModule,public CSubject
{
public:
CPlatformXY(CMotor &MotorX,CMotor &MotorY);
~CPlatformXY(void);
virtual MODULE GetModuleType(){return _PLATFORM_XY_PROP;};
virtual CMFCPropertyGridProperty *CreatGridProperty();
virtual void WriteWorkFileExt(vector<CLab> &LabVec);
virtual void ReadWorkFile(CLabVecRang &LabVecRang);
virtual void Draw(CDC* pDC);
virtual void ExportPar(ofstream *pFile);
virtual bool Move(bool bWork,Dbxy MovePt,Dbxy TargetPt,bool bSaveCoord = true);//<2F>ƶ<EFBFBD><C6B6><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(bSaveCoord <20><>ʾ<EFBFBD>Ƿ<EFBFBD>Ҫ<EFBFBD><D2AA>¼<EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
public:
void SetCurPosOrigin();//<2F><><EFBFBD>õ<EFBFBD>ǰλ<C7B0><CEBB>Ϊƽ̨<C6BD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>
Dbxy GetCoord();//<2F><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ֵ(ƽ̨<C6BD><CCA8>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>XY <20>нǶ<D0BD>,<2C><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD>)
Dbxy GetProductPoint(){return m_ProductPoint;};
bool MoveDistance(double dis,DIRECTION dir,bool bSaveCoord = true);//<2F>ƶ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>(bSaveCoord <20><>ʾ<EFBFBD>Ƿ<EFBFBD>Ҫ<EFBFBD><D2AA>¼<EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
bool MovePulseCnt(int Cnt,DIRECTION dir);
int GetMoveDelay(){return m_MoveDelay;};
bool IsAtProductPoint();
void SetMoveOrder(int n){m_MoveOrder = n;};
void AdjustPlatformSpeed();
double GetWorkSpeed(){return m_WorkSpeed;};
void SetWorkSpeed(double s){m_WorkSpeed = s;}
double GetMoveSpeed(){return m_MoveSpeed;};
void SetMoveSpeed(double s){m_MoveSpeed = s;}
Dbxy GetMotorXYOnePulseDis();
bool IsMoveNeedDeviceIni(){return m_MoveNeedDeviceIni;};
void MoveToPt(Dbxy MovePt,Dbxy TargetPt);
void ManualMovePlatForm(bool bMoveByDis,double MoveDis,DIRECTION MoveDir);
void SetCurPosAsProductPt();
void MoveToWorkPt();
void MoveToOriginPt();
void IniPlat(bool bConfirm = true);
Dbxy GetManualMoveDis(){return m_ManualMoveDis;};
void ResetManualMoveDis();
bool IsUseManualMoveDis(){return m_bUseManualMoveDis;};
void SetbLockManualMoveDis(bool b){m_bLockManualMoveDis = b;};
bool IsbBresenhamAlgorithm(){return m_bBresenhamAlgorithm;};
bool GetbUseMoveRange(){return m_bUseMoveRange;};
void SetbUseMoveRange(bool b){m_bUseMoveRange = b;};
void SetCoord(Dbxy pt);
private:
void CalPulseCntAndSaveCoord(Dbxy MovePt,Dbxy TargetPt,double &PulseCntX,double &PulseCntY,bool bSaveCoord);
bool MoveBresenhamAlgorithm(bool bWork,CMotor &MotorX,double PulseCntX,CMotor &MotorY,double PulseCntY);
void SetMoveDir(Dbxy MovePt,Dbxy TargetPt);
void SetMoveDir(DIRECTION dir);
void SaveCoord(int PulseCntX,int PulseCntY);
DbRect GetRect();
Dbxy TheoryCoor2RealCoord(Dbxy pt);
void OnPlatformMoveStart();
void OnPlatformMoveEnd();
void SaveManualMoveDis(double MoveDis,DIRECTION MoveDir);
Dbxy GetTargetCoord(Dbxy MovePt,Dbxy TargetPt);
void CheckCoordRange(Dbxy Coord);
private:
CMotor &m_MotorX;//X <20><>
CMotor &m_MotorY;//Y <20><>
Dbxy m_Coord;//ƽ̨<C6BD><CCA8>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>λ<EFBFBD>Ǻ<EFBFBD><C7BA><EFBFBD>)
Dbxy m_ProductPoint;//ȡ<>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>
bool m_bBresenhamAlgorithm;//<2F>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><E3B7A8><EFBFBD>ƶ<EFBFBD>
bool m_bUsed;//<2F>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>ƽ̨
bool m_MoveNeedDeviceIni;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><EFBFBD><E8B1B8>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6>ƶ<EFBFBD>
double m_MaxMoveDis;//һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>mm
double m_UserMaxMoveDis;//<2F><><EFBFBD><EFBFBD>Աһ<D4B1><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>mm
bool m_bUseMoveRange;//<2F>Ƿ<EFBFBD>ʹ<EFBFBD>÷<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>
double m_MaxDisL;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>
double m_MaxDisR;//<2F>ұ<EFBFBD><D2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>
double m_MaxDisU;//<2F>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>
double m_MaxDisD;//<2F>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>
int m_MoveDelay;//ƽ̨<C6BD>ƶ<EFBFBD><C6B6><EFBFBD>ʱus
int m_MoveOrder;//<2F>ƶ<EFBFBD>˳<EFBFBD><CBB3> 0:<3A><><EFBFBD><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE><EFBFBD><><C4AC>) 1:X <20><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD> 2:Y <20><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD> (<28><>ҪΪ<D2AA>˱<EFBFBD><CBB1><EFBFBD><EFBFBD>е<EFBFBD><D0B5>豸ײ<E8B1B8><D7B2>ƽ̨)
bool m_bSpeedCtrl;//<2F>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>ƽ̨<C6BD>˶<EFBFBD><CBB6>ٶȿ<D9B6><C8BF><EFBFBD>(mm/s)
double m_WorkSpeed;//<2F>ӹ<EFBFBD><D3B9>ٶ<EFBFBD>(mm/s)
double m_MoveSpeed;//<2F><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>(mm/s)
double m_XY_Angle;//XY <20><><EFBFBD>ļн<C4BC>(360 <20>Ƚ<EFBFBD>)
bool m_bMoveToRealCoord;//<2F>Ƿ<EFBFBD><C7B7>ƶ<EFBFBD><C6B6><EFBFBD>ʵ<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><><D3A6>ƽ̨<C6BD>а<EFBFBD>װ<EFBFBD>Ƕȵ<C7B6><C8B5><EFBFBD><EFBFBD><EFBFBD>
bool m_bUseManualMoveDis;//<2F>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>ֵ)
bool m_bLockManualMoveDis;//<2F><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>΢<EFBFBD><CEA2>ֵ
Dbxy m_ManualMoveDis;//<2F><>¼<EFBFBD><C2BC>ǰ<EFBFBD>ֶ<EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD>
double m_MaxManualMoveDis;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6>ƶ<EFBFBD><C6B6><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ֮<CEA7><D6AE>)
bool m_InitMotorX;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>ʼ<EFBFBD><CABC>X <20><>
bool m_InitMotorY;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>ʼ<EFBFBD><CABC>Y <20><>
};
extern CPlatformXY *gPlatformXY;