#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_pLogger; 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 }; 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); HSI_STATUS SetSpeedXyz(double Speed); HSI_STATUS GetFocusSpeed(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 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 HSI_Motion::GetMotorParam(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); /** * \brief 设置单轴运动速度 * \param AxisTypes * \param Speed * \return */ 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); /** * \brief 下发触发间距 * \param AxisTypes 轴 * \param eType 等间距或者等时间 * \param lTrigNumber 触发数量 * \param dTrigDis 间距 * \return */ 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); /** * \brief 开始扫描 * \return */ HSI_STATUS DCCScanStart(); HSI_STATUS DCCScanStartOld(); /** * \brief 停止扫描 * \return */ HSI_STATUS DCCScanStop(); HSI_STATUS DCCScanStopOld(); 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); 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[5]; int m_SetPotion_DriveSpeed[5]; 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]; int 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_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; CPSerial m_SO7_Serial; DWORD m_WriteByte; 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); 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