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.
114 lines
5.7 KiB
C++
114 lines
5.7 KiB
C++
#pragma once
|
|
#include "PciCh365Mgr.h"
|
|
#include "Module.h"
|
|
#include "Observer.h"
|
|
#include "EnumPropertieType.h"
|
|
#include "Subject.h"
|
|
|
|
|
|
#define MOTOR_X _T("X") //电机X
|
|
#define MOTOR_X2 _T("X2") //电机X2
|
|
#define MOTOR_Y _T("Y") //电机Y
|
|
#define MOTOR_Z _T("Z") //电机Z
|
|
|
|
//电机马达类
|
|
class CMotor
|
|
:public CModule,public CObserver,public CSubject
|
|
{
|
|
public:
|
|
CMotor(CString Name);
|
|
virtual ~CMotor(void);
|
|
virtual void Ini();
|
|
virtual MODULE GetModuleType(){return _MOTOR_PROP;};
|
|
virtual void ExportPar(ofstream *pFile);
|
|
virtual CMFCPropertyGridProperty *CreatGridProperty();
|
|
virtual void Update();//收到属性变化的处理
|
|
public:
|
|
void SetPciPortType(CString DirPortType,CString PulsePortType,CString LimitPortType_F,CString LimitPortType_N);
|
|
void SetDirPort(SPciPort Port){m_DirPort = Port;};
|
|
void SetPulsePort(SPciPort Port){m_PulsePort = Port;};
|
|
bool MoveOnePluse(unsigned int Delay = 0);
|
|
void SetDir(bool b);//设置方向(b 为true 表示正向)
|
|
double GetOnePulseDis(){return m_OnePulseDis;};
|
|
bool FindOrigin(bool bSavePulseCnt = false);
|
|
CString Name(){return m_Name;};
|
|
bool IsLimitOn();
|
|
bool MoveToOriginOffset(double AdjustVal = 0);
|
|
bool SendSerialPulses(double TotalCnt,double &PulseCnt,unsigned int Delay);
|
|
unsigned int GetDelay(bool bWork);
|
|
void MoveByPluse(double PulseCnt,bool bWork);
|
|
double GetCoord(){return m_Coord;};
|
|
double GetCoord2();
|
|
void SetCoord(double Coord){m_Coord = Coord;};
|
|
void MoveToCoord(double Coord);
|
|
void MoveDis(double dis);
|
|
static CMotor *GetMotor(CString Name);
|
|
void SetMoveDelay(unsigned int n){m_MoveDelay = n;};
|
|
void SetWorkDelay(unsigned int n){m_WorkDelay = n;};
|
|
double GetOriginOffsetDis(){return m_OriginOffsetDis;};
|
|
void SetOriginOffsetDis(double n){m_OriginOffsetDis = n;};
|
|
void NeedCheckFiber(){m_bCheckFiber = true;}
|
|
void SetAsixIdx(int idx){m_AsixIdx = idx;};
|
|
int GetAsixIdx(){return m_AsixIdx;};
|
|
bool IsbReverseDir(){return m_bReverseDir;};
|
|
bool IsbReverseMoveFirst(){return m_bReverseMoveFirst;};
|
|
double GetReverseMoveDis(){return m_bReverseMoveDis;};
|
|
bool GetFindOriginDir(){return m_FindOriginDir;};
|
|
bool IsbRevActCoordDir(){return m_bRevActCoordDir;};
|
|
private:
|
|
void MoveByPluseAccelerate(double PulseCnt,bool bWork);
|
|
void MoveByPluseNoAccelerate(double PulseCnt,bool bWork);
|
|
double MoveDeviateLimit(unsigned int Delay);
|
|
void SetCurLimitPortByDir(bool bForward);
|
|
void OnMotorLimit();
|
|
private:
|
|
static CMotor *gMotorX;//X 轴电机
|
|
static CMotor *gMotorX2;//X 轴电机
|
|
static CMotor *gMotorY;//Y 轴电机
|
|
static CMotor *gMotorZ;//Z 轴电机
|
|
|
|
CString m_Name;//马达的名字
|
|
CString m_DirPortType;//方向
|
|
CString m_PulsePortType;//脉冲
|
|
CString m_LimitPortType_F;//正限位
|
|
CString m_LimitPortType_N;//负限位
|
|
|
|
int m_AsixIdx;//在运动控制卡中的编号
|
|
//pci 卡端口参数--------------------------------------------------------
|
|
SPciPort m_DirPort;//方向端口
|
|
SPciPort m_PulsePort;//脉冲端口
|
|
SPciPort m_LimitPort_F;//正限位端口
|
|
SPciPort m_LimitPort_N;//负限位端口
|
|
SPciPort m_OriginPort;//原点端口
|
|
SPciPort m_CurLimitPort;//当前需要检查的限位端口
|
|
//UPK CO2 用的对射光纤
|
|
bool m_bCheckFiber;//时候检测光纤
|
|
SPciPort m_FiberPort1;//光纤端口1
|
|
SPciPort m_FiberPort2;//光纤端口2
|
|
//需要保存的参数-----------------------------------------------------
|
|
double m_OnePulseDis;//一个脉冲的理论移动距离(mm)
|
|
//找原点参数-----------------------------------------------------
|
|
bool m_FindOriginDir;//找原点的方向(true 为向正,false 为向负)
|
|
double m_OriginOffsetDis;//原点的反方向移动距离(mm)
|
|
double m_MaxOriginOffsetDis;//原点的反方向最大移动距离(mm) -- 主要是保护硬件
|
|
double m_MaxPulseCnt;//找原点时最大脉冲,目的是为了防止硬件故障造成死循环
|
|
int m_FindOriginDelay;//找到原点后的等待延时(ms) 避免伺服电机的纠正过程
|
|
unsigned int m_ReverseMoveDelay;//找到光电开关后反方向移动的延时us (直到关电开关为OFF )
|
|
|
|
bool m_bReverseMoveFirst;//找原点之前是否先反向移动一段距离
|
|
double m_bReverseMoveDis;//找原点之前先反向移动的距离mm
|
|
//速度参数--------------------------------------------------------------
|
|
unsigned int m_MoveDelay;//空移延时us
|
|
unsigned int m_WorkDelay;//正常工作时脉冲延时us
|
|
unsigned int m_OriginPulseDelay;//初始化找原点脉冲延时us
|
|
bool m_bNeedCheckLimit;//电机在运行时刻是否检查限位开关
|
|
//加减速控制-----------------------------------------------------------
|
|
bool m_bAccelerateCtrl;//是否加减速控制
|
|
unsigned int m_StartDelay;//初始速度延时us
|
|
unsigned int m_PerChangeDelay;//每次改变的延时us
|
|
//坐标管理-----------------------------------------------------------
|
|
double m_Coord;//电机单轴的坐标值(mm)
|
|
bool m_bReverseDir;//是否反向
|
|
|
|
bool m_bRevActCoordDir;//光栅尺反向
|
|
}; |