231 lines
5.4 KiB
C++
231 lines
5.4 KiB
C++
#include "stdafx.h"
|
|
#include "SevenOcean\CMMIO_SERIAL.h"
|
|
#include "HSI.h"
|
|
#include "HSI_Motion.h"
|
|
#include "HSI_Function.h"
|
|
#include "math.h"
|
|
|
|
HSI_Function *g_pHSI_Function = nullptr;
|
|
|
|
HSI_Function::HSI_Function()
|
|
{
|
|
for (size_t i = 0; i < 4; i++)
|
|
{
|
|
startPos[i] = 0;
|
|
endPos[i] = 0;
|
|
}
|
|
travelSpeed = 0;
|
|
seekSpeed = 0;
|
|
retractDis = 0;
|
|
retractManDis = 0;
|
|
probeRunStatus = E_EF3_PROBE_DONE;
|
|
}
|
|
HSI_Function::~HSI_Function()
|
|
{
|
|
|
|
}
|
|
|
|
HSI_STATUS HSI_Function::HSI_TP_Enable(bool bProbeEnable)
|
|
{
|
|
HSI_STATUS Status = HSI_STATUS_NORMAL;
|
|
|
|
return Status;
|
|
}
|
|
|
|
HSI_STATUS HSI_Function::HSI_TP_Startup()
|
|
{
|
|
HSI_STATUS Status = HSI_STATUS_NORMAL;
|
|
return Status;
|
|
}
|
|
|
|
HSI_STATUS HSI_Function::HSI_TP_GetActiveProbe(int & /*nProbe*/)
|
|
{
|
|
HSI_STATUS Status = HSI_STATUS_NORMAL;
|
|
|
|
return Status;
|
|
}
|
|
|
|
HSI_STATUS HSI_Function::HSI_TP_SetActiveProbe(int nProbe)
|
|
{
|
|
HSI_STATUS Status = HSI_STATUS_NORMAL;
|
|
|
|
|
|
return Status;
|
|
}
|
|
|
|
HSI_STATUS HSI_Function::HSI_TP_SetManualTouchData(double dRetract)
|
|
{
|
|
HSI_STATUS Status = HSI_STATUS_NORMAL;
|
|
if (g_pHSI_Motion)
|
|
{
|
|
retractManDis = dRetract;
|
|
|
|
// Metronics only accepts 1 retract distance for all axes and this is in encoder counts
|
|
// Basing this value on the X axis resolution but this could be better
|
|
int RetractManDist = (int)(fabs(retractManDis / g_pHSI_Motion->m_Resolution[1]));
|
|
g_pHSI_Motion->ProbeRetractManDist(RetractManDist);
|
|
}
|
|
return Status;
|
|
}
|
|
|
|
HSI_STATUS HSI_Function::HSI_TP_SetTipOffset(double /*OffsetX*/, double /*OffsetY*/, double /*OffsetZ*/)
|
|
{
|
|
HSI_STATUS Status = HSI_STATUS_NOT_SUPPORTED;
|
|
|
|
return Status;
|
|
}
|
|
|
|
HSI_STATUS HSI_Function::HSI_TP_GetTipOffset(double & /*OffsetX*/, double & /*OffsetY*/, double & /*OffsetZ*/)
|
|
{
|
|
HSI_STATUS Status = HSI_STATUS_NOT_SUPPORTED;
|
|
|
|
return Status;
|
|
}
|
|
|
|
HSI_STATUS HSI_Function::HSI_TP_SetupMeasurePoint(double dBeginX, double dBeginY, double dBeginZ, double dEndX, double dEndY, double dEndZ, double dTraveSpeed, double dTouchSpeed, double dRetrackDis)
|
|
{
|
|
HSI_STATUS Status = HSI_STATUS_NORMAL;
|
|
if (g_pHSI_Motion)
|
|
{
|
|
// Probe seek start position
|
|
startPos[0] = dBeginX;
|
|
startPos[1] = dBeginY;
|
|
startPos[2] = dBeginZ;
|
|
|
|
// Probe seek end position
|
|
endPos[0] = dEndX;
|
|
endPos[1] = dEndY;
|
|
endPos[2] = dEndZ;
|
|
|
|
// Probe travel speed
|
|
travelSpeed = dTraveSpeed;
|
|
|
|
// Probe seek speed
|
|
seekSpeed = dTouchSpeed;
|
|
|
|
// Retract distance
|
|
retractDis = dRetrackDis;
|
|
}
|
|
else
|
|
Status = HSI_STATUS_NOT_SUPPORTED;
|
|
return Status;
|
|
}
|
|
|
|
HSI_STATUS HSI_Function::HSI_TP_DoMeasure(bool /*bWait*/)
|
|
{
|
|
HSI_STATUS Status = HSI_STATUS_NORMAL;
|
|
if (g_pHSI_Motion && (probeRunStatus == E_EF3_PROBE_DONE))
|
|
{
|
|
probeRunStatus == E_EF3_PROBE_RUNNING;
|
|
double nowSpeed = 0.0;
|
|
g_pHSI_Motion->GetSpeedXyz(HSI_MOTION_AXIS_X,nowSpeed);
|
|
if (1== g_pHSI_Motion->m_iSpeedType)
|
|
{
|
|
g_pHSI_Motion->SetSpeedXyz(travelSpeed);
|
|
}
|
|
else
|
|
{
|
|
g_pHSI_Motion->SetSpeedXyz(travelSpeed/(g_pHSI_Motion->m_Resolution[1]*50));
|
|
}
|
|
|
|
Status = g_pHSI_Motion->SetPositionXyz(HSI_MOTION_AXIS_X | HSI_MOTION_AXIS_Y | HSI_MOTION_AXIS_Z,
|
|
startPos[0], startPos[1], startPos[2], HSI_MOTION_MOVE_WAIT, 0.0);
|
|
if (Status == HSI_STATUS_NORMAL)
|
|
{
|
|
if (1 == g_pHSI_Motion->m_iSpeedType)
|
|
{
|
|
g_pHSI_Motion->SetSpeedXyz(seekSpeed);
|
|
}
|
|
else
|
|
{
|
|
g_pHSI_Motion->SetSpeedXyz(seekSpeed / (g_pHSI_Motion->m_Resolution[1] * 50));
|
|
}
|
|
|
|
if (endPos[0] - startPos[0] > g_pHSI_Motion->m_Resolution[1] * 3)
|
|
{
|
|
g_pHSI_Motion->m_axisDirX = 1;
|
|
}
|
|
else if (endPos[0] - startPos[0] < g_pHSI_Motion->m_Resolution[1] * (-3))
|
|
{
|
|
g_pHSI_Motion->m_axisDirX = 2;
|
|
}
|
|
else
|
|
g_pHSI_Motion->m_axisDirX = 0;
|
|
|
|
if (endPos[1] - startPos[1] > g_pHSI_Motion->m_Resolution[2] * 3)
|
|
{
|
|
g_pHSI_Motion->m_axisDirY = 1;
|
|
}
|
|
else if (endPos[1] - startPos[1] < g_pHSI_Motion->m_Resolution[2] * (-3))
|
|
{
|
|
g_pHSI_Motion->m_axisDirY = 2;
|
|
}
|
|
else
|
|
g_pHSI_Motion->m_axisDirY = 0;
|
|
|
|
if (endPos[2] - startPos[2] > g_pHSI_Motion->m_Resolution[3] * 3)
|
|
{
|
|
g_pHSI_Motion->m_axisDirZ = 1;
|
|
}
|
|
else if (endPos[2] - startPos[2] < g_pHSI_Motion->m_Resolution[3] * (-3))
|
|
{
|
|
g_pHSI_Motion->m_axisDirZ = 2;
|
|
}
|
|
else
|
|
g_pHSI_Motion->m_axisDirZ = 0;
|
|
|
|
// Set the retract distance
|
|
g_pHSI_Motion->m_ProbeReturnPos = retractDis;
|
|
g_pHSI_Motion->m_probeSeekSpeed = seekSpeed / (g_pHSI_Motion->m_Resolution[1] * 50);
|
|
|
|
//g_pHSI_Motion->m_ProbeHitExpected = true;
|
|
Status = g_pHSI_Motion->JogProbe(HSI_MOTION_AXIS_X, 0.1);
|
|
//g_pHSI_Motion->m_ProbeHitExpected = false;
|
|
}
|
|
|
|
|
|
// Reset to the manual retract distance
|
|
int RetractManDist = (int)(fabs(retractManDis / g_pHSI_Motion->m_Resolution[1]));
|
|
|
|
//g_pHSI_Motion->ProbeRetractManDist(RetractManDist);
|
|
|
|
g_pHSI_Motion->SetSpeedXyz(nowSpeed);
|
|
|
|
probeRunStatus == E_EF3_PROBE_DONE;
|
|
}
|
|
else
|
|
{
|
|
Status = HSI_STATUS_NOT_SUPPORTED;
|
|
}
|
|
return Status;
|
|
}
|
|
|
|
HSI_STATUS HSI_Function::HSI_TP_IsMeasuring(bool & /*bMeasuring*/)
|
|
{
|
|
HSI_STATUS Status = HSI_STATUS_NOT_SUPPORTED;
|
|
|
|
return Status;
|
|
}
|
|
|
|
//锁存位置和碰撞后的位置
|
|
HSI_STATUS HSI_Function::HSI_TP_GetMeasureData(double &dBeginX, double &dBeginY, double &dBeginZ, double &dEndX, double &dEndY, double &dEndZ)
|
|
{
|
|
HSI_STATUS Status = HSI_STATUS_NORMAL;
|
|
if (g_pHSI_Motion)
|
|
{
|
|
dBeginX = g_pHSI_Motion->m_LockPos[1];
|
|
dBeginY = g_pHSI_Motion->m_LockPos[2];
|
|
dBeginZ = g_pHSI_Motion->m_LockPos[3];
|
|
dEndX = g_pHSI_Motion->m_ijk[0];
|
|
dEndY = g_pHSI_Motion->m_ijk[1];
|
|
dEndZ = g_pHSI_Motion->m_ijk[2];
|
|
}
|
|
return Status;
|
|
}
|
|
|
|
HSI_STATUS HSI_Function::HSI_TP_Shutdown()
|
|
{
|
|
HSI_STATUS Status = HSI_STATUS_NORMAL;
|
|
|
|
return Status;
|
|
} |