744 lines
23 KiB
C++
744 lines
23 KiB
C++
#ifndef HSI_MOTION_INCLUDED_
|
|
#define HSI_MOTION_INCLUDED_
|
|
#pragma once
|
|
|
|
#include "logger.h"
|
|
#include "SevenOcean/CMMIO_SERIAL.H"
|
|
|
|
#define TCPIP_THREAD_RUNNING 0
|
|
#define TCPIP_THREAD_PAUSED 1
|
|
#define TCPIP_THREAD_EXIT -1
|
|
|
|
#define TCPIP_MAX_DAT_SIZE 1024
|
|
#define THREAD_PAUSED 1
|
|
#define THREAD_EXIT -1
|
|
#define MAX_BUFF_SIZE 0x200
|
|
const double SCALE_UNITS = 1000.0;
|
|
|
|
static CLogger* g_pLogger2;
|
|
static bool g_IsClose; //用于DoEvents()的退出,而不异常
|
|
|
|
enum E_SO7_MOTION_TYPE
|
|
{
|
|
E_SO7_MOTION_NONE,
|
|
E_SO7_MOTION_JOG,
|
|
E_SO7_MOTION_MOVETO,
|
|
E_SO7_MOTION
|
|
};
|
|
|
|
enum E_EF3_HOME_STATUS
|
|
{
|
|
E_EF3_HOME_NONE,//0表示从未回过回原点
|
|
E_EF3_HOME_ING,//1表示正在回原点
|
|
E_EF3_HOME_FINISHED,//2表示已经回过原点
|
|
};
|
|
|
|
enum FUN_CMD //第一级指令
|
|
{
|
|
CT_MOTOR = 0x01,//MOTOR
|
|
CT_LIGHT,//LIGHT
|
|
CT_PORT,//PORT
|
|
CT_ORDER,//ORDER
|
|
CT_SOFTSTOP,//STOP
|
|
CT_GLUEDISPENSER,//点胶
|
|
CT_TURNTABLE,
|
|
};
|
|
|
|
enum MOTOR_CMD //第二级指令
|
|
{
|
|
CT_MOTOR_SET = 0x01,
|
|
CT_START_JOG_POS,//
|
|
CT_START_JOG_NEG,
|
|
CT_START_POSITION,//_POS,
|
|
CT_STOP,
|
|
CT_GOHOME,
|
|
CT_TRIGGER_DATA,
|
|
CT_SIX_LIGHT,
|
|
CT_MDATA_INIT,
|
|
CT_MDATA_COM,
|
|
CT_POSFLAG_CLEAR,
|
|
CT_START_LATCH,
|
|
CT_ROCKER,
|
|
CT_CIRCLERUN_POSITION,
|
|
CT_GLUEDISPENSER_SET,
|
|
CT_GLUEDISPENSER_CLEAR,
|
|
CT_GLUEDISPENSER_START,
|
|
CT_GLUEDISPENSER_STOP,//转盘时启用
|
|
CT_RTSET,
|
|
CT_BINSDATA,
|
|
CT_RTSTOP,//
|
|
CT_MOTOR_UPDATE, // up date all the aixs
|
|
};
|
|
|
|
enum MOTOR_START_POSOTION //
|
|
{
|
|
INTERPOLATION = 0x61,
|
|
//插补
|
|
GANGED = 0x41,
|
|
//独立
|
|
CIRCLER = 0x64,
|
|
CIRCLEL = 0x65,
|
|
};
|
|
|
|
enum MOTOR_AXISCHOOES_CMD //第三级指令
|
|
{
|
|
AXIS_X = 0x01,
|
|
AXIS_Y = 0x00,
|
|
AXIS_Z = 0x04,
|
|
AXIS_U = 0x08,
|
|
AXIS_XY = 0x03,
|
|
AXIS_XZ = 0x05,
|
|
AXIS_XU = 0x09,
|
|
AXIS_YZ = 0x06,
|
|
AXIS_YU = 0x0a,
|
|
AXIS_ZU = 0x0c,
|
|
AXIS_XYZ = 0x07,
|
|
AXIS_XYU = 0x0b,
|
|
AXIS_XZU = 0x0d,
|
|
AXIS_YZU = 0x0e,
|
|
AXIS_XYZU = 0x0f,
|
|
};
|
|
|
|
enum MOTOR_SET_KIND //第四级指令
|
|
{
|
|
JOG_SPEED_ACC_DEC,
|
|
POSITION_SPEED_ACC_DEC_POS,
|
|
HOME_LIMIT_SPEED_ACC_DEC,
|
|
HOME_ORG_SPEED_ACC_DEC,
|
|
SOFT_LIMIT_POS_NEG,
|
|
POS_CLEAR,
|
|
HOME_CLEAR,
|
|
ENC_POS_DIR,
|
|
};
|
|
|
|
enum CMD_ORDER
|
|
{
|
|
IOSTATE,
|
|
MOTORPOSITION,
|
|
MOTORSTATE
|
|
};
|
|
|
|
enum E_SO7_MOTION_READ_TYPE
|
|
{
|
|
E_DATA_TYPE_NONE,
|
|
E_DATA_TYPE_GET_POS,
|
|
E_DATA_TYPE_IO,
|
|
};
|
|
|
|
using TCPIP_RETURN_CODE = enum
|
|
{
|
|
TCPIP_CONNECT_OK = 0,
|
|
TCPIP_INIT_WINSOCK_ERROR,
|
|
TCPIP_INVAILD_SOCKET,
|
|
TCPIP_INVAILD_IP_ADDRESS,
|
|
TCPIP_INVAILD_PORT_NUMBER,
|
|
TCPIP_CONNECT_SERVER_FAILED,
|
|
TCPIP_SEND_REVC_ASYNC,
|
|
TCPIP_TIMEOUT,
|
|
TCPIP_WSAEWOULDBLOCK = 10035,
|
|
TCPIP_CONNECT_STATUS_UNKNOWN
|
|
};
|
|
|
|
struct Point3D {
|
|
double x;
|
|
double y;
|
|
double z;
|
|
};
|
|
|
|
// 定义运动模式枚举类型
|
|
enum MotionMode
|
|
{
|
|
JogMode,
|
|
PTPMode,
|
|
};
|
|
|
|
|
|
|
|
class HSI_Motion : public HSI
|
|
{
|
|
public:
|
|
HSI_Motion();
|
|
~HSI_Motion() override;
|
|
HSI_STATUS IsSupported(UINT& Types) override;
|
|
HSI_STATUS Startup(HWND _hWnd, bool _bOfflineOnly) override;
|
|
/**
|
|
* \brief 获取EF3固件版本
|
|
* \param version
|
|
* \return
|
|
*/
|
|
HSI_STATUS GetFirmwareVersion(byte* version);
|
|
/**
|
|
* \brief 判断机台是否回家,如果没有,则执行回家动作
|
|
* \param bHomed
|
|
* \return
|
|
*/
|
|
HSI_STATUS HomeMachine(bool bHomed);
|
|
HSI_STATUS HomeMachineOld(bool bHomed);
|
|
HSI_STATUS HomeJog(short AxisNumber, short Dir, bool Wait = false);
|
|
HSI_STATUS HomeFindIndex();
|
|
HSI_STATUS ZeroPos(bool bZeroPos);
|
|
|
|
/**
|
|
* \brief 判断机台是否回家,仅获取是否回家的状态
|
|
* \param bHomed 是否回家标志位
|
|
* \return
|
|
*/
|
|
HSI_STATUS IsHomed(bool& bHomed);
|
|
HSI_STATUS IsHomedOld(bool& bHomed);
|
|
/**
|
|
* \brief 获取单轴运动速度
|
|
* \param AxisNum
|
|
* \param Speed
|
|
* \return
|
|
*/
|
|
HSI_STATUS GetSpeedXyz(int AxisNum, double& Speed);
|
|
HSI_STATUS GetSpeedXyzOld(int AxisNum, double& Speed);
|
|
|
|
void SwitchMode(MotionMode newMode);
|
|
/**
|
|
* \brief 设置单轴运动速度
|
|
* \param AxisNum
|
|
* \param Speed
|
|
* \return
|
|
*/
|
|
HSI_STATUS SetSpeedXyz(double Speed);
|
|
// 获取变焦速度
|
|
HSI_STATUS GetFocusSpeedOld(double& Speed);
|
|
HSI_STATUS GetFocusSpeed(double& Speed);
|
|
// 设置变焦速度
|
|
HSI_STATUS SetFocusSpeedOld(double Speed);
|
|
HSI_STATUS SetFocusSpeed(double Speed);
|
|
|
|
HSI_STATUS GetAccelerationXyz(double& AccelX, double& AccelY, double& AccelZ);
|
|
HSI_STATUS SetAccelerationXyz(double AccelX, double AccelY, double AccelZ);
|
|
HSI_STATUS GetSpeedR(double& Speed);
|
|
HSI_STATUS SetSpeedR(double Speed);
|
|
HSI_STATUS GetScaleResolution(double& _ScaleX, double& _ScaleY, double& _ScaleZ);
|
|
HSI_STATUS SetScaleResolution(double _ScaleX, double _ScaleY, double _ScaleZ);
|
|
HSI_STATUS GetDeadBand(double& DeadbandX, double& DeadbandY, double& DeadbandZ, double& DeadbandR);
|
|
HSI_STATUS GetRefreshDeadBand(double& Deadband);
|
|
/**
|
|
* \brief Jog运动,挡位只有在JOG才有,CNC运行的速度是合成速度
|
|
* \param AxisTypes
|
|
* \param Speed
|
|
* \return
|
|
*/
|
|
HSI_STATUS Jog(UINT AxisTypes, double Speed);
|
|
HSI_STATUS JogOld(UINT AxisTypes, double Speed);
|
|
HSI_STATUS JoyStick(UINT AxisTypes, long Speed);
|
|
/**
|
|
* \brief
|
|
* \return
|
|
*/
|
|
HSI_STATUS StopJog();
|
|
HSI_STATUS StopJogOld();
|
|
HSI_STATUS StopJogEx(UINT AxisTypes);
|
|
/**
|
|
* \brief
|
|
* \param AxisTypes
|
|
* \param EncPos
|
|
* \param PrfPos
|
|
* \param Count
|
|
* \return
|
|
*/
|
|
HSI_STATUS GetPositionEncPrfMulti(UINT AxisTypes, double* EncPos, double* PrfPos, int Count);
|
|
HSI_STATUS GetPositionEncPrfMultiOld(UINT AxisTypes, double* EncPos, double* PrfPos, int Count);
|
|
/**
|
|
* \brief 获取轴当前位置
|
|
* \param AxisTypes 轴号
|
|
* \param PositionX X坐标
|
|
* \param PositionY Y坐标
|
|
* \param PositionZ Z坐标
|
|
* \param Time
|
|
* \return
|
|
*/
|
|
HSI_STATUS GetPositionXyz(UINT AxisTypes, double& PositionX, double& PositionY, double& PositionZ, double& Time);
|
|
HSI_STATUS GetPositionXyzOld(UINT AxisTypes, double& PositionX, double& PositionY, double& PositionZ, double& Time);
|
|
HSI_STATUS GetPositionXyzaProbe(UINT AxisTypes, double& PositionX, double& PositionY, double& PositionZ,
|
|
double& PositionA);
|
|
HSI_STATUS GetEncoderXyz(long* lEncoderVal);//获取编码器位置
|
|
HSI_STATUS GetEncoderXyzOld(long* lEncoderVal);
|
|
HSI_STATUS JogProbe(UINT AxisTypes, double Speed);
|
|
void ProbeRetractManDist(int RetractManDist);
|
|
int CaculateStepMotorACC(int pos, int maxacc, int minacc);
|
|
/**
|
|
* \brief 求各轴运动配置参数
|
|
* \param AXIS
|
|
* \param motionParam
|
|
* \return
|
|
*/
|
|
HSI_STATUS GetSingleAxisParam(int AXIS, double motionParam[5]); //获取单轴运动参数
|
|
HSI_STATUS SetSingleAxisParam(int AXIS, double motionParam[5]); //设置单轴运动参数
|
|
/**
|
|
* \brief 运行到指定位置
|
|
* \param AxisTypes 轴号
|
|
* \param PositionX X坐标
|
|
* \param PositionY Y坐标
|
|
* \param PositionZ Z坐标
|
|
* \param eType 运动模式,
|
|
* \param dFlyRadius
|
|
* \return
|
|
*/
|
|
HSI_STATUS SetPositionXyz(UINT AxisTypes, double PositionX, double PositionY, double PositionZ,
|
|
HSI_MOTION_MOVE_TYPE eType, double dFlyRadius);
|
|
HSI_STATUS SetPositionXyzOld(UINT AxisTypes, double PositionX, double PositionY, double PositionZ,
|
|
HSI_MOTION_MOVE_TYPE eType, double dFlyRadius);
|
|
HSI_STATUS SetPositionXyza(UINT AxisTypes, double PositionX, double PositionY, double PositionZ, double PositionA,
|
|
HSI_MOTION_MOVE_TYPE eType, double dFlyRadius);
|
|
HSI_STATUS SetPositionXyzCache(UINT AxisTypes, HSI_MOTION_MOVE_TYPE eType, int DataCount, Point* CacheData);
|
|
HSI_STATUS GetPositionXyzCache(unsigned char* CacheData, int& DataCount);
|
|
HSI_STATUS GetPositionR(UINT AxisTypes, double& PositionR, double& Time);
|
|
HSI_STATUS SetPositionR(UINT AxisTypes, double PositionR, HSI_MOTION_AXIS_R_MOVE_TYPE DirectionType, bool bWait);
|
|
HSI_STATUS SetCircleInterpolate(double PositionX, double PositionY, double PositionZ); //圆弧插补
|
|
HSI_STATUS Load_EF3_Motion_Inifile(CString GoogolIniFile);
|
|
HSI_STATUS Load_EF3_Config_Inifile(CString GoogolIniFile);
|
|
/**
|
|
* \brief
|
|
* \return
|
|
*/
|
|
HSI_STATUS AbortMotion();
|
|
HSI_STATUS AbortMotionOld();
|
|
/**
|
|
* \brief
|
|
* \param IOChannel
|
|
* \param _Status
|
|
* \return
|
|
*/
|
|
HSI_STATUS GetDIO(UINT IOChannel, UINT& _Status);
|
|
HSI_STATUS GetDIOOld(UINT IOChannel, UINT& _Status);
|
|
/**
|
|
* \brief
|
|
* \param IOChannel
|
|
* \param _Status
|
|
* \return
|
|
*/
|
|
HSI_STATUS SetDIO(UINT IOChannel, UINT _Status);
|
|
HSI_STATUS SetDIOOld(UINT IOChannel, UINT _Status);
|
|
HSI_STATUS GetAxisStatus(int* _Status);
|
|
HSI_STATUS GetAppPath(CString& Path);
|
|
/**
|
|
* \brief
|
|
* \return
|
|
*/
|
|
HSI_STATUS Shutdown() override;
|
|
HSI_STATUS IsSupportedEx(UINT AxisTypes, UINT& Types);
|
|
HSI_STATUS StartupEx(UINT AxisTypes, bool bHome);
|
|
HSI_STATUS GetScaleResolutionEx(UINT AxisTypes, double& Scale);
|
|
HSI_STATUS SetScaleResolutionEx(UINT AxisTypes, double Scale);
|
|
HSI_STATUS GetPositionEx(UINT AxisTypes, double& Position, double& Time);
|
|
HSI_STATUS SetPositionStep(UINT AxisTypes, double Position, HSI_MOTION_MOVE_TYPE eType, double dSpeedGear);
|
|
HSI_STATUS SetPositionEx(UINT AxisTypes, double Position, HSI_MOTION_MOVE_TYPE eType, double dSpeedGear);
|
|
HSI_STATUS GetSpeedEx(UINT AxisTypes, double& Speed);
|
|
|
|
HSI_STATUS SetSpeedEx(UINT AxisTypes, double Speed);//设置单轴运动速度
|
|
HSI_STATUS SetSpeedExOld(UINT AxisTypes, double Speed);
|
|
HSI_STATUS GetAccelerationEx(UINT AxisTypes, double& Accel);
|
|
HSI_STATUS SetAccelerationEx(UINT AxisTypes, double Accel);
|
|
HSI_STATUS SetTriggerLight(int triggleNum, int delayLighting, int delayLightBefor, int triggleMode,
|
|
double* Intensities);
|
|
HSI_STATUS DCCPPStartPoint(double* startPoint);
|
|
|
|
HSI_STATUS DCCScanSetData(UINT AxisTypes, HSI_SCAN_MOTION_TYPE eType, UINT lTrigNumber, double* dTrigDis);// 下发触发间距,轴、等间距或者等时间、触发数量、间距
|
|
HSI_STATUS DCCScanSetDataOld(UINT AxisTypes, HSI_SCAN_MOTION_TYPE eType, UINT lTrigNumber, double* dTrigDis);
|
|
|
|
HSI_STATUS DCCScanStart(); //开始扫描
|
|
HSI_STATUS DCCScanStartOld();
|
|
|
|
HSI_STATUS DCCScanStop(); //停止扫描
|
|
HSI_STATUS DCCScanStopOld();
|
|
|
|
HSI_STATUS DCCScanSetDataWithPoints(UINT AxisTypes, double speed, Point3D* points, UINT numPoints); // 直线电机平台新增,三轴轨迹规划
|
|
HSI_STATUS DCCForLightPlate();
|
|
HSI_STATUS IOStep(bool RunSts);
|
|
|
|
HSI_STATUS IOprogram(byte* SendData, int length);
|
|
HSI_STATUS FindOriginTest(bool state);
|
|
|
|
HSI_STATUS StartPlcJob(int* CamerasDis, int* BinsDis, int SubArea, int filterTime1, int filterTime2,
|
|
int pluseSumDis);
|
|
HSI_STATUS SendBinResult(int* BinResult);
|
|
HSI_STATUS GetTriggleCount(int* nCount, int& nArea);
|
|
HSI_STATUS GluePPSpnts(int* ppsDir, double* gluePPSPos, int* delayLightBefore, int* lightTime, double* lightData,
|
|
int num);
|
|
HSI_STATUS GlueDispenser(int* index, int* cirdirection, double* gluePos, int num);
|
|
HSI_STATUS GlueDispenserStart(double xOffset, double yOffset, double qOffset);
|
|
HSI_STATUS GetPntsDistance(double& ptpDistance, int& spTimeCount);
|
|
|
|
HSI_STATUS SetMotionDirectionFlag(int CurrentDirection); //特殊需求:向ACS层写入运动方向标志位,用于触发相机拍照
|
|
// 获取当前运动方向标志位
|
|
HSI_STATUS GetMotionDirectionFlag(int& CurrentDirection); //特殊需求:向ACS层读取运动方向标志位,用于触发相机拍照
|
|
|
|
//
|
|
|
|
|
|
public:
|
|
static int m_Thread_State;
|
|
static HANDLE m_Thread_Id;
|
|
static HANDLE m_Thread_Mutex;
|
|
static HANDLE m_hTriggerEvent;
|
|
//用于IO发消息的线程
|
|
static int m_Thread_StateIO;
|
|
static HANDLE m_Thread_IdIO;
|
|
static HANDLE m_Thread_MutexIO;
|
|
static HANDLE m_hTriggerEventIO;
|
|
|
|
//读取EF3的数据状态
|
|
static int m_Thread_StateData;
|
|
static HANDLE m_Thread_IdData;
|
|
static HANDLE m_Thread_MutexData;
|
|
static HANDLE m_hTriggerEventData;
|
|
|
|
//读取EF3的探针状态
|
|
static int m_Thread_StateProbe;
|
|
static HANDLE m_Thread_IdProbe;
|
|
static HANDLE m_Thread_MutexProbe;
|
|
static HANDLE m_hTriggerEventProbe;
|
|
|
|
//点胶运行状态
|
|
static int bRunGlueDispenser;
|
|
|
|
//读取EF3的JOG stop 的状态
|
|
static int m_Thread_StateJOGStop;
|
|
static HANDLE m_Thread_IdJOGStop;
|
|
static HANDLE m_Thread_MutexJOGStop;
|
|
static HANDLE m_hTriggerEventJOGStop;
|
|
|
|
static HANDLE g_RW_Data_Mutex;
|
|
static HANDLE g_WR_ToMove_Mutex;
|
|
static HANDLE g_Lock_JogAndTrigger;
|
|
|
|
double m_Resolution[5]; //从1开始,0不用
|
|
double m_N_Work_Limit[5]; //负限位
|
|
double m_P_Work_Limit[5]; //正限位
|
|
|
|
int m_Home_AddJogGears[5];
|
|
int m_Home_DecJogGears[5];
|
|
int m_Home_Time[5];
|
|
int m_SetPotion_Count[5];
|
|
|
|
//定位参数
|
|
int m_SetPotion_StartSpeed[9];
|
|
int m_SetPotion_DriveSpeed[9];
|
|
int m_SetPotion_Line[5];
|
|
int m_SetPotion_Buffer[5];
|
|
int m_SetPotion_AccCurve[5];
|
|
int m_SetPotion_DecCurve[5];
|
|
int m_SpeedAdjustPeriod[5];
|
|
int m_SpeedMax[5];
|
|
int m_stepPosition_L_speed[10];
|
|
int m_stepPosition_H_speed[10];
|
|
int m_stepPosition_Load[10];
|
|
int m_stepPosition_acc[10];
|
|
double m_PositionA; //第四轴的地位位置
|
|
|
|
//jog 参数
|
|
int m_JogDriveSpeed[5][5]; //5:轴号,从1开始;5:档位
|
|
int m_JogStartSpeed[5][5];
|
|
int m_JogAccLine[5][5];
|
|
int m_JogDecLine[5][5];
|
|
int m_JogAccCurve[5][5];
|
|
int m_JogDecCurve[5][5];
|
|
double m_Jog_Auto_Focus; //变焦使用的速度
|
|
int m_LogIsOpen[5]; //是否打开记录,0为打开,非0为关闭
|
|
|
|
unsigned int m_precisionCount[5]; //回家误差脉冲个数
|
|
unsigned int m_precisionTime[5]; //超时时间(0.1ms)
|
|
int m_StopJogMode[5]; //JOG模式采用急停还是平滑停止
|
|
double m_PosThread[5]; //SetpositionXyz的目标位置
|
|
int m_PosNow[5]; //调用SetpositionXyz时,读取当前位置
|
|
|
|
double targetpos_n[5];
|
|
double targetpos_l[5];
|
|
|
|
short m_AxisThread;
|
|
int m_IsExMotion; //0是xyz用的,1是单轴用的,2都不用
|
|
int m_Home_Machine_Axis[10]; //用于启动时需要回原点的轴号选择
|
|
int m_Home_Pos_Axis[5]; //记住关闭电源时的位置,用于判断是否还需要回原点
|
|
int m_IsHomeEncPos; //是否启动实际位置判断是否回家,默认0,1启用,0关闭
|
|
int m_IsHomePrfPos; //是否启动规划位置判断是否回家,默认1,1启用,0关闭
|
|
|
|
int m_IsIOFuntion; //是否启动IO功能,1为打开,0为关闭
|
|
int m_IsStartInput; //是否启用脚踏开关功能,1为启用,0为关闭,默认0
|
|
UINT m_StartInputPort; //外部输入按钮启动程序
|
|
UINT m_InputStatus;
|
|
UINT m_ForStatus;
|
|
int m_Set_XYZA_Reserve; //XYZA轴方向
|
|
int m_motorType; //电机类型 1为伺服电机 0为步进电机
|
|
int m_setPositionDelay; //设置定位超时
|
|
int m_setPositionPrecision; //设置定位精度
|
|
int m_setPositionNum;
|
|
CString m_AppPath;//MST软件运行标志,trueMST软件已经启动,falseMST软件停止
|
|
bool m_MSTRunFlag;
|
|
int m_IsUse_HSICompensation; //是否启用HSI进行定位补偿 0为不启用 1为启用 默认为0
|
|
int m_Compensation_Pluse; //补偿脉冲数
|
|
int m_IsHardLimit; //设备轴硬限位设置 为0表示所有轴都为软限位 1为X轴为硬限位 2为Y轴 3为XY轴 4为Z轴 7为XYZ轴 默认为7
|
|
int m_IsEnableAxis; //设备启用轴设置 为0表示所有轴不启用 1为X轴启用 2为Y轴启用 3为XY轴启用 4为Z轴启用 7为XYZ轴启用 默认为7
|
|
int m_IsUseExternalTrigger; //是否启用外触发功能 0为不启用 1为启用 默认为1
|
|
int m_IsUseSixRingEightArea; //是否启用六环八区灯功能 0为不启用 1为启用 2为二环八区灯 默认为0
|
|
int m_SixEightSubArea[8]; //六环八区分区功能
|
|
int m_IsUseTwentySixLight; //是否启用26路灯光 0为不启用 1位启用 默认为0
|
|
int m_IsUseEF3; //是否启用EF3
|
|
int m_IsUseACS; //是否用ACS运动控制
|
|
int m_IsUseSimulator; //是否启用模拟器
|
|
char m_ACS_IPAddresses[50]; // 定义字符串,存储ACS IP地址
|
|
|
|
int m_isSynchronized ; //是否启用同步 0为不启用 1为启用 默认为0
|
|
int m_IsHomeEveryTime; //是否每次都回原点 0为不启用 1为启用 默认为0
|
|
int m_DeviceType; //设备类型,0为通用设备,1为三激光, 2为大视野,3为转盘设备 默认为0
|
|
int m_UseAxisNum; //转盘设备使用轴号
|
|
int m_IbinCount; //记录获取到的分bin数
|
|
bool m_IsUsePPS;
|
|
int m_iJoyStick; //摇杆类型:0:无 1:老式摇杆
|
|
int m_bISUseMoreLights; //更多灯光
|
|
int m_EF3LightType;
|
|
int m_LightType;
|
|
int m_IsUseFourthSpeed;
|
|
CString m_IsOpenTCPIP[4]; //可提供的tcp通信的ip
|
|
bool m_tcpCntFlag[4];
|
|
int m_selectedIndex;
|
|
bool m_Led8MotionFlag[4]; //是否为8路光源板
|
|
int m_IsHavePattern; //是否有光栅
|
|
int m_AxisHomeDirection; //轴回家时的方向
|
|
int m_IsUseJerk; //是否启用急停 0为不启用 1为启用
|
|
DWORD t_start; //获取jog运行的开始时间
|
|
DWORD t_end; //获取jog运行的结束时间
|
|
DWORD set_start; //获取定位运行开始时间
|
|
DWORD set_end; //获取定位运行结束时间
|
|
//是否启用探针捕获功能,1启用,默认0关闭
|
|
int m_IsProbe;//探针触发时,锁存的轴号,默认3表示锁存XYZ共3轴,4表示XYZA共4轴
|
|
int m_ProbeAllAxis;
|
|
long m_ProbeCapturePos[5]; //锁存各轴的位置
|
|
double m_ProbeReturnPos; //探针触发时,调试时返回的距离mm,点击启动按钮时不起作用,默认10.0mm
|
|
int m_ProbeReturnSpeed; //探针触发后,轴的回退速度
|
|
int m_isOKGlint; //是否开启ok/ng 闪烁
|
|
int m_ETIPort; //外部触发拍照输入端口号
|
|
int m_axisStatus; //运动各轴的状态
|
|
int m_axisAlarmStatus; //轴报警状态
|
|
int m_EF3COMPort; //EF3板com口,默认为2
|
|
int m_ForSoft; //针对使用软件 0为MST 1为Metus
|
|
int m_IsUseManualRunin; //是否开启手动插补(只针对步进电机)
|
|
int m_axisLatchFrequency; //轴锁存频率
|
|
int m_IsUseRocker; //是否启用摇杆 0为不启用 1为启用旧摇杆,2为新摇杆, 默认为0
|
|
int m_IsCollectPos; //是否通过串口打印位置,与摇杆2互斥
|
|
int m_IsCloseRocker;
|
|
int m_IsLightDebug; //是否不回家也能调试灯光 0为不启用 1为启用 默认为0
|
|
int m_rockerHStartSpeed[4]; //摇杆XYZ轴高初始速度
|
|
int m_rockerHDriveSpeed[4]; //摇杆XYZ轴高驱动速度
|
|
int m_rockerLStartSpeed[4]; //摇杆XYZ轴低初始速度
|
|
int m_rockerLDriveSpeed[4]; //摇杆XYZ轴低驱动速度
|
|
int m_rockerASpeed[4]; //XYZ轴加减速1
|
|
int m_rockerDSpeed[4]; //XYZ轴加减速2
|
|
int m_SaveAxisNum; //保存轴号
|
|
int m_SaveAxisSpeed; //保存速度
|
|
bool bSaveSpeedFlag;
|
|
bool fourthAxisFlag;
|
|
bool bCircleRun; //圆弧插补
|
|
int iCircleRunPnt[5]; //圆弧插补时的圆心位置
|
|
int jogAxisNum; //jog运动的轴号
|
|
int jogspeed; //jog 运动的速度
|
|
bool jogMoving;
|
|
bool jogDirFlag;
|
|
bool m_bEmergencyState;
|
|
bool bUseGlueDispenser; //是否开启点胶
|
|
int m_iGlueStartSpeed;
|
|
int m_iGlueDriveSpeed;
|
|
int m_iGlueAccSpeed;
|
|
int GlueDispenserindexNum; //点胶段数
|
|
int GluerunCount;
|
|
|
|
int m_iSpeedType;
|
|
int m_axisDirX; //探针运动时X轴的运动方向
|
|
int m_axisDirY; //探针运动时Y轴的运动方向
|
|
int m_axisDirZ; //探针运动时Z轴的运动方向
|
|
int m_probeSeekSpeed;
|
|
|
|
int m_isUseAport; //A串口
|
|
int m_portAnum;
|
|
int m_isUseBport; //B串口
|
|
int m_portBnum;
|
|
|
|
int SpCompleteTStart;
|
|
int SpCompleteTEnd;
|
|
int SpTimeCount;
|
|
bool SetPotionRunEnd;
|
|
double PntToPntDistance; //欧氏距离
|
|
|
|
double m_LockPos[5];
|
|
double m_ijk[5];
|
|
int m_AxisHex[5];
|
|
bool setLightFlag;
|
|
|
|
double m_EncPos[5];
|
|
double m_PrfPos[5];
|
|
double m_PosForAllAxis[5]; //记录4轴位置
|
|
bool m_bConnected;
|
|
bool m_bACSConnected; // ACS是否连接成功
|
|
int m_SendDataLength;
|
|
unsigned char m_cSendData[64];
|
|
unsigned char m_direct_pos;
|
|
unsigned char axis_start;
|
|
|
|
// ACS轴号定义
|
|
static const int MAX_AXES = 10; // 定义轴的最大数量
|
|
|
|
// ACS轴号
|
|
int ACSAxisDefault[MAX_AXES] =
|
|
{
|
|
ACSC_AXIS_0, // 默认值
|
|
ACSC_AXIS_1, // 默认值
|
|
ACSC_AXIS_2, // 默认值
|
|
ACSC_AXIS_3, // 默认值
|
|
ACSC_AXIS_4, // 默认值
|
|
ACSC_AXIS_5, // 默认值
|
|
ACSC_AXIS_6, // 默认值
|
|
ACSC_AXIS_7, // 默认值
|
|
ACSC_AXIS_8, // 默认值
|
|
ACSC_AXIS_9, // 默认值
|
|
};
|
|
|
|
int ACSAxisNumbers[3];
|
|
|
|
CPSerial m_SO7_Serial;
|
|
DWORD m_WriteByte;
|
|
|
|
|
|
int IS_DEBUG; //是否启用调试模式
|
|
// 变量来存储当前的运动模式
|
|
MotionMode m_CurrentMode;
|
|
|
|
BOOL Send_Command(int com, const char* _SendData, DWORD _SendDataLength);
|
|
BOOL Send_Command(int com, const char* _SendData, DWORD SendDataLength, int expectType);// 带期望返回值的发送命令
|
|
BOOL Receive_Data();
|
|
bool PortInit(int iSerialComPort, int iBuadRate);
|
|
char m_RecvData[MAX_RECIEVE_BUFFER_SIZE];
|
|
DWORD m_RecvDataSize;
|
|
E_EF3_HOME_STATUS CurrentHomeMachineState;
|
|
|
|
//刷新探针状态
|
|
static unsigned __stdcall m_ThreadProbe(LPVOID pThis);
|
|
void CreateThreadProbe();
|
|
void CloseThreadProbe();
|
|
void UpdateMotionStateProbe();
|
|
|
|
//刷新位置状态
|
|
static unsigned __stdcall m_Thread(LPVOID pThis);
|
|
void CreateThread();
|
|
void CloseThread();
|
|
void UpdateMotionState();
|
|
void UpdateMotionStateOld();
|
|
void UpdateMotionStateEx();
|
|
void GluedispenserDone();
|
|
|
|
//IO发消息使用
|
|
static unsigned __stdcall m_ThreadIO(LPVOID pThis);
|
|
void CreateThreadIO();
|
|
void CloseThreadIO();
|
|
void UpdateMotionStateIO();
|
|
|
|
//读取EF3的数据状态
|
|
static unsigned __stdcall m_ThreadData(LPVOID pThis);
|
|
void CreateThreadData();
|
|
void CloseThreadData();
|
|
void UpdateMotionStateData();
|
|
|
|
//读取EF3的JOG位置 以便停止JOG运动
|
|
static unsigned __stdcall m_ThreadJOGStop(LPVOID pThis);
|
|
void CreateThreadJOGStop();
|
|
void CloseThreadJOGStop();
|
|
void UpdateMotionStateJOGStop();
|
|
|
|
void SendMsgMotionFinished();
|
|
void SendMsgProbeFinished();
|
|
VOID EventCallback(sHSIEventProperties& sEventProp);
|
|
/**
|
|
* \brief 界面挡位获取速度
|
|
* \param AxisNum
|
|
* \param Speed
|
|
* \param DriveSpeed
|
|
* \param StartSpeed
|
|
* \param AccLine
|
|
* \param DecLine
|
|
* \param AccCurve
|
|
* \param DecCurve
|
|
* \return
|
|
*/
|
|
int SpeedPercent(int AxisNum, double& Speed, int& DriveSpeed, int& StartSpeed, int& AccLine, int& DecLine,
|
|
int& AccCurve, int& DecCurve);
|
|
/**
|
|
* \brief 摇杆切换的运动速度, 与上面那个互锁,动了界面的 摇杆就会失能;
|
|
* \param AxisNum
|
|
* \param Speed
|
|
* \param DriveSpeed
|
|
* \param StartSpeed
|
|
* \param AccLine
|
|
* \param DecLine
|
|
* \param AccCurve
|
|
* \param DecCurve
|
|
* \return
|
|
*/
|
|
bool SpeedPercentJoyStick(int AxisNum, long& Speed, int& DriveSpeed, int& StartSpeed, int& AccLine, int& DecLine,
|
|
int& AccCurve, int& DecCurve);
|
|
void HomeJogGearsChoice(int AxisType, int JogGears, int& DriveSpeed, int& StartSpeed, int& AccLine, int& DecLine,
|
|
int& AccCurve, int& DecCurve);
|
|
/**
|
|
* \brief
|
|
* \param AxisTypes
|
|
* \return
|
|
*/
|
|
short AxisConvertIndex(UINT AxisTypes);
|
|
short IndexConvertAxis(int Index);
|
|
void SetSingleAxisMotionParams(UINT AxisTypes, double SetMotionParam[5]);//单轴运动参数设置
|
|
double LimitOver(UINT AxisTypes, double& LimitPos);//限位判断
|
|
int P2P(short AxisNumber, long Pos, double Speed, double Acc);
|
|
void DoEvents();
|
|
HSI_STATUS DriverAlarmStatus();
|
|
HSI_STATUS FirstHome();
|
|
HSI_STATUS SpecialMotorHome(short AxisNum);
|
|
HSI_STATUS SpecialMotorMove(short AxisNum, double Position);
|
|
|
|
void ErrorsHandler();
|
|
private:
|
|
UINT ActiveAxis;
|
|
int iaxisNum;
|
|
int iScanMotionType;
|
|
int iTriggleNum;
|
|
int iMotionDirection;
|
|
int begin_position[5]; //外触发到初始点需要发送的脉冲数
|
|
HINSTANCE m_Hinst;
|
|
E_SO7_MOTION_TYPE CurrentMotionState; //当前运动状态
|
|
E_SO7_MOTION_READ_TYPE CurrentReadDataType;
|
|
|
|
//网口通信添加
|
|
private:
|
|
TCPIP_RETURN_CODE TCPConnect(int index, char* Address, u_short port);
|
|
void DisConnect();
|
|
static unsigned __stdcall m_ThreadSendTCP(LPVOID pThis);
|
|
static HANDLE m_ThreadTCP_Id;
|
|
static int m_ThreadTCP_State;
|
|
TCPIP_RETURN_CODE TCPSend();
|
|
unsigned char tReciveData[TCPIP_MAX_DAT_SIZE];
|
|
bool first;
|
|
unsigned char IOdata[64];
|
|
unsigned char Orderdata[64];
|
|
unsigned char IOCheck[64];
|
|
unsigned char TempData[64];
|
|
int OrderSend;
|
|
int IOSend;
|
|
private:
|
|
void Create_Thread();
|
|
void Exit_Thread();
|
|
int Init_Winsock();
|
|
public:
|
|
unsigned char lightdata[64];
|
|
int LightSend;
|
|
public:
|
|
HSI_STATUS CollectPos(bool isEnable, MOTOR_AXISCHOOES_CMD axis, short cycle); //位置采集打开/关闭
|
|
private:
|
|
HSI_STATUS SetAllGears(); //下发所有档位数据
|
|
};
|
|
|
|
extern HSI_Motion* g_pHSI_Motion;
|
|
//extern void ErrorsHandler(const char* ErrorMessage, BOOL fCloseComm); //ACS 错误打印
|
|
|
|
#endif
|