// MachineInterfaceDll.cpp : 定义 DLL 应用程序的导出函数。 // #include "stdafx.h" #include #include #include #include #include #include #include "..\..\..\SevenOcean\DLL.h" #include "..\..\..\SevenOcean\EF8000_Interface.h" #include "..\..\..\SevenOcean\SO7_Proto.h" #include "MachineInterfaceDll.h" CEF8000_Interface* m_pEF8000_Interface=NULL; CSO7_Proto* m_pSO7_Proto=NULL; bool g_bOfflineOnly(false); EMACHINE_AXIS ActiveAxis=MACHINE_AXIS_NONE; SSI_STATUS_MOTION LoadMotionParameter(); //================================================================== extern "C" EXP_IMP SSI_STATUS_MOTION Machine_Startup(bool bOfflineOnly,EHOME_MACHINE_MODE cHomeMachineMode) { SSI_STATUS_MOTION rStatus=SSI_STATUS_MOTION_NORMAL; g_bOfflineOnly=bOfflineOnly; if (!g_bOfflineOnly) { if (!m_pSO7_Proto) { m_pSO7_Proto=new CSO7_Proto(); } rStatus=m_pSO7_Proto->Init_SO7Usb(); if (rStatus==SSI_STATUS_MOTION_NORMAL) { m_pSO7_Proto->_start_machine(); if (rStatus==SSI_STATUS_MOTION_NORMAL) { rStatus=m_pSO7_Proto->Load_So7_Config_Inifile(1); rStatus=LoadMotionParameter(); if (rStatus==SSI_STATUS_MOTION_NORMAL) { m_pSO7_Proto->so7_motion_init_firmware_para(); m_pSO7_Proto->so7_motion_set_all_speed_para(); m_pSO7_Proto->so7_motion_set_all_so7_config(); switch (cHomeMachineMode) { case HOME_R: { m_pSO7_Proto->so7_motion_Dcc_Home_R(); break; } case HOME_XYZ: case HOME_X: case HOME_Y: case HOME_Z: case HOME_XY: case HOME_XZ: case HOME_YZ: { m_pSO7_Proto->so7_motion_Dcc_HomeXYZ(static_cast(cHomeMachineMode)); break; } default: { break; } } } } } } return rStatus; } //================================================================== extern "C" EXP_IMP SSI_STATUS_MOTION Machine_Shutdown() { if (m_pEF8000_Interface) { delete m_pEF8000_Interface; m_pEF8000_Interface=nullptr; } if (m_pSO7_Proto) { m_pSO7_Proto->_send_cmd_SO7_CMD_STOP_MOVE_XYZ(); Sleep(10); m_pSO7_Proto->so7_light_set_light_off(); if(m_pSO7_Proto->g_machine.IsSupportReadInterrputMsg) { m_pSO7_Proto->_send_cmd_SO7_CMD_SET_GET_INTERRUPT_MSG_METHOD(E_GET_INTERRUPT_MSG_INTERRUPT); } m_pSO7_Proto->_shutdown_machine(); m_pSO7_Proto->Exit_SO7Usb(); delete m_pSO7_Proto; m_pSO7_Proto=nullptr; } return SSI_STATUS_MOTION_NORMAL; } /**************************Motion**********************************/ EXP_IMP SSI_STATUS_MOTION Motion_DCCHomeXYZ(EHOME_MACHINE_MODE cHomeMachineMode) { if (!g_bOfflineOnly) { if (m_pSO7_Proto) { return m_pSO7_Proto->so7_motion_Dcc_HomeXYZ(static_cast(cHomeMachineMode)); } else { return SSI_STATUS_MACHINE_UNINITIALIZED; } } else { return SSI_STATUS_MOTION_NORMAL; } } EXP_IMP SSI_STATUS_MOTION Motion_IsHomedXYZ(bool &bHomed) { if (!g_bOfflineOnly) { if (m_pSO7_Proto) { bHomed=m_pSO7_Proto->so7_motion_is_homed(); return SSI_STATUS_MOTION_NORMAL; } else { return SSI_STATUS_MACHINE_UNINITIALIZED; } } else { return SSI_STATUS_MOTION_NORMAL; } } EXP_IMP SSI_STATUS_MOTION Motion_GetPositionXYZ(double &PositionX, double &PositionY, double &PositionZ) { if (!g_bOfflineOnly) { if (m_pSO7_Proto) { return m_pSO7_Proto->so7_motion_get_position_xyz(PositionX,PositionY,PositionZ); } else { return SSI_STATUS_MACHINE_UNINITIALIZED; } } else { return SSI_STATUS_MOTION_NORMAL; } } EXP_IMP SSI_STATUS_MOTION Motion_SetPositionXYZ(double PositionX, double PositionY, double PositionZ,bool bWait) { if (!g_bOfflineOnly) { if (m_pSO7_Proto) { return m_pSO7_Proto->so7_motion_set_position_xyz(PositionX,PositionY,PositionZ,bWait); } else { return SSI_STATUS_MACHINE_UNINITIALIZED; } } else { return SSI_STATUS_MOTION_NORMAL; } } EXP_IMP SSI_STATUS_MOTION Motion_IsFinishedXYZ(bool &bFinished) { if (!g_bOfflineOnly) { if (m_pSO7_Proto) { return m_pSO7_Proto->so7_Motion_XYZ_IsMotionFinished(bFinished); } else { return SSI_STATUS_MACHINE_UNINITIALIZED; } } else { return SSI_STATUS_MOTION_NORMAL; } } EXP_IMP SSI_STATUS_MOTION Motion_SetSpeedXYZ(EMACHINE_AXIS cAxis,char cSpeedGear,char Acce,char cHoldSpeed,char cStartSpeed,char cRefreshCycle,double dBufferDis) { if (!g_bOfflineOnly) { if (m_pSO7_Proto) { return m_pSO7_Proto->so7_motion_set_speed_xyz(cAxis,cSpeedGear,Acce,cRefreshCycle,cStartSpeed,cHoldSpeed,dBufferDis); } else { return SSI_STATUS_MACHINE_UNINITIALIZED; } } else { return SSI_STATUS_MOTION_NORMAL; } } //SpeedGear:1,2,3,4(Faster) EXP_IMP SSI_STATUS_MOTION Motion_Jog(EMACHINE_AXIS cAxis,char cSpeedGear) { if (!g_bOfflineOnly) { if (m_pSO7_Proto) { ActiveAxis=cAxis; return m_pSO7_Proto->so7_motion_jog(cAxis,cSpeedGear); } else { return SSI_STATUS_MACHINE_UNINITIALIZED; } } else { return SSI_STATUS_MOTION_NORMAL; } } EXP_IMP SSI_STATUS_MOTION Motion_Stop() { if (!g_bOfflineOnly) { if (m_pSO7_Proto) { if (ActiveAxis==MACHINE_AXIS_ZOOM) { return m_pSO7_Proto->_send_cmd_SO7_CMD_STOP_V(); } else { return m_pSO7_Proto->_send_cmd_SO7_CMD_STOP_MOVE_XYZ(); } } else { return SSI_STATUS_MACHINE_UNINITIALIZED; } } else { return SSI_STATUS_MOTION_NORMAL; } } /**************************Rotary Table****************************/ //================================================================== extern "C" EXP_IMP SSI_STATUS_MOTION Motion_GetPositionR(double& dPos) { if (!g_bOfflineOnly) { if (m_pSO7_Proto) { return m_pSO7_Proto->so7_motion_get_position_R(dPos); } else { return SSI_STATUS_MACHINE_UNINITIALIZED; } } else { return SSI_STATUS_MOTION_NORMAL; } } //================================================================== extern "C" EXP_IMP SSI_STATUS_MOTION Motion_SetPositionR(double dAbsolutePos,bool bWait) { if (!g_bOfflineOnly) { if (m_pSO7_Proto) { return m_pSO7_Proto->so7_motion_set_position_R(dAbsolutePos,bWait); } else { return SSI_STATUS_MACHINE_UNINITIALIZED; } } else { return SSI_STATUS_MOTION_NORMAL; } } //================================================================== extern "C" EXP_IMP SSI_STATUS_MOTION Motion_DCCHomeR() { if (!g_bOfflineOnly) { if (m_pSO7_Proto) { return m_pSO7_Proto->so7_motion_Dcc_Home_R(); } else { return SSI_STATUS_MACHINE_UNINITIALIZED; } } else { return SSI_STATUS_MOTION_NORMAL; } } //================================================================== extern "C" EXP_IMP SSI_STATUS_MOTION Motion_IsHomedR(bool &bHomed) { if (!g_bOfflineOnly) { if (m_pSO7_Proto) { return m_pSO7_Proto->so7_Motion_R_IsHomed(bHomed); } else { return SSI_STATUS_MACHINE_UNINITIALIZED; } } else { return SSI_STATUS_MOTION_NORMAL; } } //================================================================== extern "C" EXP_IMP SSI_STATUS_MOTION Motion_IsFinishedR(bool &bFinished) { if (!g_bOfflineOnly) { if (m_pSO7_Proto) { return m_pSO7_Proto->so7_Motion_R_IsMotionFInished(bFinished); } else { return SSI_STATUS_MACHINE_UNINITIALIZED; } } else { return SSI_STATUS_MOTION_NORMAL; } } /*******************************************************************/ EXP_IMP SSI_STATUS_MOTION Illumination_SetLampState(double dTopLightPercent,double dBottomLightPercent,double dCoaxialLightPercent,double dReservedLightPercent,double dRingLightPercent,char cOuterRingLightSwitch,char cInnerRingLightSwitch) { if (!g_bOfflineOnly) { if (m_pSO7_Proto) { return m_pSO7_Proto->so7_light_set_lamp_state(dTopLightPercent,dBottomLightPercent,dCoaxialLightPercent,dReservedLightPercent,dRingLightPercent,cOuterRingLightSwitch,cInnerRingLightSwitch); } else { return SSI_STATUS_MACHINE_UNINITIALIZED; } } else { return SSI_STATUS_MOTION_NORMAL; } } //==============================IO================================================ EXP_IMP SSI_STATUS_MOTION Machine_GetDIO(EIO_PORT Channel,BYTE& bDISts) { if (!g_bOfflineOnly) { if (m_pSO7_Proto) { return m_pSO7_Proto->so7_GetDIO(static_cast(Channel),bDISts); } else { return SSI_STATUS_MACHINE_UNINITIALIZED; } } else { return SSI_STATUS_MOTION_NORMAL; } } EXP_IMP SSI_STATUS_MOTION Machine_SetDO(EIO_PORT Channel,BYTE bDOSts) { if (!g_bOfflineOnly) { if (m_pSO7_Proto) { return m_pSO7_Proto->so7_SetDO(static_cast(Channel),bDOSts); } else { return SSI_STATUS_MACHINE_UNINITIALIZED; } } else { return SSI_STATUS_MOTION_NORMAL; } } //==============================CMD================================================ EXP_IMP SSI_STATUS_MOTION SEND_SYS_COMMAND(char Cmd,char SubCmd,char Type,char Data) { if (!g_bOfflineOnly) { if (m_pSO7_Proto) { return m_pSO7_Proto->_send_cmd_SO7_CMD_COMMON_COMMAND_DATA(Cmd,SubCmd,Type,Data); } else { return SSI_STATUS_MACHINE_UNINITIALIZED; } } else { return SSI_STATUS_MOTION_NORMAL; } } //================================================================== SSI_STATUS_MOTION LoadMotionParameter() { BOOL rStatus(FALSE); if (!m_pEF8000_Interface) { m_pEF8000_Interface=new CEF8000_Interface(); } rStatus=m_pEF8000_Interface->OpenMotorDat(); if (rStatus) { for(int j=0;j<5;j++) { m_pSO7_Proto->g_machine.s_machine_config.x_axis._speed_base[j]=m_pEF8000_Interface->Set_Speed[j][0]; m_pSO7_Proto->g_machine.s_machine_config.x_axis._speed_max[j]=m_pEF8000_Interface->Set_Speed[j][1]; m_pSO7_Proto->g_machine.s_machine_config.x_axis._speed_start[j]=m_pEF8000_Interface->Set_Speed[j][2]; m_pSO7_Proto->g_machine.s_machine_config.x_axis._speed_fresh[j]=m_pEF8000_Interface->Set_Speed[j][3]; m_pSO7_Proto->g_machine.s_machine_config.x_axis._speed_slow_dis[j]=m_pEF8000_Interface->slow_dis[j]; } for(int j=0;j<5;j++) { m_pSO7_Proto->g_machine.s_machine_config.y_axis._speed_base[j]=m_pEF8000_Interface->Set_Speed[j+5][0]; m_pSO7_Proto->g_machine.s_machine_config.y_axis._speed_max[j]=m_pEF8000_Interface->Set_Speed[j+5][1]; m_pSO7_Proto->g_machine.s_machine_config.y_axis._speed_start[j]=m_pEF8000_Interface->Set_Speed[j+5][2]; m_pSO7_Proto->g_machine.s_machine_config.y_axis._speed_fresh[j]=m_pEF8000_Interface->Set_Speed[j+5][3]; m_pSO7_Proto->g_machine.s_machine_config.y_axis._speed_slow_dis[j]=m_pEF8000_Interface->slow_dis[j+5]; } for(int j=0;j<5;j++) { m_pSO7_Proto->g_machine.s_machine_config.z_axis._speed_base[j]=m_pEF8000_Interface->Set_Speed[j+10][0]; m_pSO7_Proto->g_machine.s_machine_config.z_axis._speed_max[j]=m_pEF8000_Interface->Set_Speed[j+10][1]; m_pSO7_Proto->g_machine.s_machine_config.z_axis._speed_start[j]=m_pEF8000_Interface->Set_Speed[j+10][2]; m_pSO7_Proto->g_machine.s_machine_config.z_axis._speed_fresh[j]=m_pEF8000_Interface->Set_Speed[j+10][3]; m_pSO7_Proto->g_machine.s_machine_config.z_axis._speed_slow_dis[j]=m_pEF8000_Interface->slow_dis[j+10]; } m_pSO7_Proto->g_machine.s_machine_config.x_axis._motor_precision=m_pEF8000_Interface->g_precision[0]; m_pSO7_Proto->g_machine.s_machine_config.y_axis._motor_precision=m_pEF8000_Interface->g_precision[1]; m_pSO7_Proto->g_machine.s_machine_config.z_axis._motor_precision= m_pEF8000_Interface->g_precision[2]; m_pSO7_Proto->g_machine.s_machine_config.x_axis._motor_wheelbase=m_pEF8000_Interface->Image_Info.m_Motor_Dx; m_pSO7_Proto->g_machine.s_machine_config.y_axis._motor_wheelbase=m_pEF8000_Interface->Image_Info.m_Motor_Dy; m_pSO7_Proto->g_machine.s_machine_config.z_axis._motor_wheelbase=m_pEF8000_Interface->Image_Info.m_Motor_Dz; m_pSO7_Proto->g_machine._motor_pulse_num= m_pEF8000_Interface->Image_Info.m_Motor_Plus_Num; } if (rStatus) { return SSI_STATUS_MOTION_NORMAL; } else { return SSI_STATUS_MOTOR_DAT_FILE_NOT_FOUND; } }