488 lines
13 KiB
C++
488 lines
13 KiB
C++
// MachineInterfaceDll.cpp : 定义 DLL 应用程序的导出函数。
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include <BaseTsd.h>
|
|
#include <WinBase.h>
|
|
#include <WinDef.h>
|
|
#include <atltypes.h>
|
|
#include <tchar.h>
|
|
#include <atlstr.h>
|
|
#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<char>(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<char>(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<int>(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<int>(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;
|
|
}
|
|
}
|