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.

146 lines
5.3 KiB
C++

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