#pragma once #include "module.h" #include "advmotdrv.h" #include "General.h" #include "AdvMotApi.h" //速度的类型 enum ESpeedType { _SpeedType_Org=0,//原点速度 _SpeedType_Move,//空移速度 _SpeedType_Work,//工作速度 }; //组运动速度参数 class PCI1245_SpeedParam { public: PCI1245_SpeedParam(void) { m_Acc = 50; m_Dec = 50; m_VelLow = 20; m_VelHigh = 50; }; public: double m_Acc;//加速度 double m_Dec;//减速度 double m_VelLow;//最低速度(mm/s) double m_VelHigh;//运行速度(mm/s) }; class CPci1245IOPort { public: CPci1245IOPort(void) { m_AsixNum = -1;//轴编号 m_PortNum = -1;//端口号 m_bRev = false;//是否反向 }; public: int m_AsixNum;//轴编号 int m_PortNum;//端口号 bool m_bRev;//是否反向 }; class CMotor; //研华PCI1245 PCI 运动控制卡 class MotionCard_PCI1245 :public CModule { public: MotionCard_PCI1245(void); ~MotionCard_PCI1245(void); virtual MODULE GetModuleType(){return _MOTION_CARD_PCI1245L;}; virtual CMFCPropertyGridProperty *CreatGridProperty(); virtual void Ini(); virtual void OnExitApp(); virtual void ExportPar(ofstream *pFile); bool IsbUsed(){return m_bUsed;}; Dbxy MovePlatformXY(Dbxy Coord); Dbxy GetPlatformXYCoord(); bool FindOriginByLimit(CMotor &Motor); bool FindOrigin(CMotor &Motor); bool MoveToOriginOffset(CMotor &Motor); void SetCoord(Dbxy coord); bool MoveMotor(CMotor &Motor,double &Coord); double GetMotorCoord(CMotor &Motor); bool CheckFucCanUsed(); bool IsbArcCut(){return m_bArcCut;}; bool IsbInited(){return m_bInited;}; void SetPlatformSpeed(bool bWorkSpeed); void SetCurGpIdx(int idx); int GetCurGpIdx(){return m_CurGpIdx;}; void ResetAllAsixErr(); void ResetAllAsixErrExt(); void CheckAsixState(); bool IsbMotorXMoveStop(){return m_bMotorXMoveStop;}; bool IsbMotorX2MoveStop(){return m_bMotorX2MoveStop;}; bool IsbMotorYMoveStop(){return m_bMotorYMoveStop;}; bool IsbMotorZMoveStop(){return m_bMotorZMoveStop;}; void SetMotorSpeed(CMotor &Motor,ESpeedType SpeedType); void SetSvOn(bool bOn); void ResetAllAsixCoord(); double GetMotorActCoord(CMotor &Motor); bool CheckMotorActCoord(CMotor &Motor); bool CheckUnloadState(); private: int ReadIOState(CPci1245IOPort IOPort); bool InitCard(); bool OpenCard(); bool AddAsixToGroup(HAND &GpHand,UINT index); PCI1245_SpeedParam MM2PulseParam(PCI1245_SpeedParam &SpeedParam,double OnePulseDis); void SetPlatformSpeedExt(PCI1245_SpeedParam GpParam) ; Dbxy MM2PulseCoord(Dbxy Coord); void WaitPlatfromStop(); void LoadConfigFile(); PCI1245_SpeedParam GetMotorSpeed(CMotor &Motor,ESpeedType SpeedType); bool CheckAsixStateExt(HAND AxisHandle); bool FindOriginExt(CMotor &Motor); CMFCPropertyGridProperty* CreatSpeedGridProperty(PCI1245_SpeedParam &SpeedParam,CString SpeedName,CString ValName); private: bool m_bUsed;//是否使用 bool m_bInited;//是否被正常初始化 bool m_bArcCut;//圆弧插补 bool m_bGroupAisxRev;//插补轴调换 bool m_bAutoCloseSevon;//关闭程序时自动关闭sevon int m_MotorXAsixIdx;//X轴对应的轴编号 int m_MotorX2AsixIdx;//X2 轴对应的轴编号 int m_MotorYAsixIdx;//Y轴对应的轴编号 int m_MotorZAsixIdx;//Z轴对应的轴编号 bool m_bMotorXMoveStop;//轴是否运动停止 bool m_bMotorX2MoveStop;// bool m_bMotorYMoveStop;// bool m_bMotorZMoveStop;// bool m_XYFindOriginByLimit;//XY轴通过找极限来找原点(汕尾信利6台机) int m_CheckDelay;//等待电机运动时检测延时ms PCI1245_SpeedParam m_OrgSpeedMotorZ;//Z轴原点速度 PCI1245_SpeedParam m_MoveSpeedMotorZ;//Z轴移动速度 PCI1245_SpeedParam m_OrgSpeedMotorXY;//X轴原点速度 PCI1245_SpeedParam m_MoveSpeedMotorX;//X轴空移速度 PCI1245_SpeedParam m_WorkSpeedMotorX;//X轴工作速度 PCI1245_SpeedParam m_MoveSpeedMotorY;//X轴空移速度 PCI1245_SpeedParam m_WorkSpeedMotorY;//X轴工作速度 CPci1245IOPort m_InPortUnload;//下料机保护信号 bool m_bCheckActCoord;//是否检测实际光栅尺的坐标 double m_MaxActCoordErr;//允许最大光栅尺误差脉冲个数 HAND m_Devhand;//设备句柄 HAND m_Axishand[32];//轴的句柄数组 DEVLIST m_avaDevs[MAX_DEVICES]; double m_End[32]; int m_CurGpIdx;//当前使用的组编号 HAND m_GpHand;//组的句柄 ULONG m_ulAxisCount;//轴的数量 BOOL m_bServoOn; DWORD m_dwDevNum;//设备编号 BOOL m_bInit; USHORT AxisArray[32]; USHORT AxCount; UINT m_EndNum; }; extern MotionCard_PCI1245 *gMotionCard_PCI1245;