|
|
|
@@ -1,4 +1,4 @@
|
|
|
|
|
// HSI_Motion.cpp : 定义 DLL 的初始化例程。
|
|
|
|
|
// HSI_Motion.cpp : 定义 DLL 的初始化例程。
|
|
|
|
|
//
|
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
#include "HSI.h"
|
|
|
|
@@ -18,7 +18,7 @@ using namespace std;
|
|
|
|
|
//===========================================================================
|
|
|
|
|
HSI_Motion *g_pHSI_Motion = nullptr;
|
|
|
|
|
CLogger extern *g_pLogger = nullptr;
|
|
|
|
|
HANDLE hCom;//串口句柄
|
|
|
|
|
HANDLE hCom;//串口句柄
|
|
|
|
|
|
|
|
|
|
const int WSA_MAJOR_VERSION = 2;
|
|
|
|
|
const int WSA_MINOR_VERSION = 2;
|
|
|
|
@@ -127,7 +127,7 @@ HSI_Motion::HSI_Motion()
|
|
|
|
|
bSaveSpeedFlag = false;
|
|
|
|
|
m_IsUseManualRunin = 0;
|
|
|
|
|
fourthAxisFlag = false;
|
|
|
|
|
bCircleRun = false;//圆弧插补
|
|
|
|
|
bCircleRun = false;//圆弧插补
|
|
|
|
|
m_UseAxisNum = 1;
|
|
|
|
|
jogAxisNum = 0;
|
|
|
|
|
jogDirFlag = false;
|
|
|
|
@@ -136,9 +136,9 @@ HSI_Motion::HSI_Motion()
|
|
|
|
|
set_start = 0;
|
|
|
|
|
set_end = 0;
|
|
|
|
|
m_iSpeedType = 0;
|
|
|
|
|
m_axisDirX = 0;//探针运动时X轴的运动方向
|
|
|
|
|
m_axisDirY = 0;//探针运动时Y轴的运动方向
|
|
|
|
|
m_axisDirZ = 0;//探针运动时Z轴的运动方向
|
|
|
|
|
m_axisDirX = 0;//探针运动时X轴的运动方向
|
|
|
|
|
m_axisDirY = 0;//探针运动时Y轴的运动方向
|
|
|
|
|
m_axisDirZ = 0;//探针运动时Z轴的运动方向
|
|
|
|
|
m_probeSeekSpeed = 0;
|
|
|
|
|
|
|
|
|
|
bUseGlueDispenser = false;
|
|
|
|
@@ -147,9 +147,9 @@ HSI_Motion::HSI_Motion()
|
|
|
|
|
m_iGlueAccSpeed = 1;
|
|
|
|
|
GlueDispenserindexNum = 0;
|
|
|
|
|
|
|
|
|
|
m_isUseAport = 0;//A串口
|
|
|
|
|
m_isUseAport = 0;//A串口
|
|
|
|
|
m_portAnum = 0;
|
|
|
|
|
m_isUseBport = 0;//B串口
|
|
|
|
|
m_isUseBport = 0;//B串口
|
|
|
|
|
m_portBnum = 0;
|
|
|
|
|
m_bEmergencyState = false;
|
|
|
|
|
SpCompleteTStart = 0;
|
|
|
|
@@ -182,7 +182,7 @@ HSI_Motion::HSI_Motion()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CTime tm = CTime::GetCurrentTime();
|
|
|
|
|
CString csTime = tm.Format("%Y-%m-%d");//显示年月日
|
|
|
|
|
CString csTime = tm.Format("%Y-%m-%d");//显示年月日
|
|
|
|
|
CString dir = L"\\Log\\" + csTime += L".SO7_EF3.Log";
|
|
|
|
|
g_pLogger = new CLogger(dir);
|
|
|
|
|
g_pLogger2 = new CLogger(L"\\Log\\EF3_SumTime.Log");
|
|
|
|
@@ -190,7 +190,7 @@ HSI_Motion::HSI_Motion()
|
|
|
|
|
{
|
|
|
|
|
for (int j = 0; j < 5; j++)
|
|
|
|
|
{
|
|
|
|
|
m_JogDriveSpeed[j][i] = 10; //表示5个档位
|
|
|
|
|
m_JogDriveSpeed[j][i] = 10; //表示5个档位
|
|
|
|
|
m_JogStartSpeed[j][i] = 10;
|
|
|
|
|
m_JogAccLine[j][i] = 5;
|
|
|
|
|
m_JogAccCurve[j][i] = 0;
|
|
|
|
@@ -293,12 +293,12 @@ bool HSI_Motion::PortInit(int iSerialComPort, int iBuadRate)
|
|
|
|
|
sprintf_s(buf, "COM%d", iSerialComPort);
|
|
|
|
|
CString comName(buf);
|
|
|
|
|
hCom = CreateFile(comName,
|
|
|
|
|
GENERIC_READ | GENERIC_WRITE, //允许读和写
|
|
|
|
|
0, //独占方式,串口必须为0
|
|
|
|
|
GENERIC_READ | GENERIC_WRITE, //允许读和写
|
|
|
|
|
0, //独占方式,串口必须为0
|
|
|
|
|
NULL,
|
|
|
|
|
OPEN_EXISTING, //打开而不是创建,串口必须为打开
|
|
|
|
|
0, //同步方式,同步执行时,函数直到操作完成后才返回
|
|
|
|
|
NULL);//串口必须为NULL
|
|
|
|
|
OPEN_EXISTING, //打开而不是创建,串口必须为打开
|
|
|
|
|
0, //同步方式,同步执行时,函数直到操作完成后才返回
|
|
|
|
|
NULL);//串口必须为NULL
|
|
|
|
|
if (hCom != (HANDLE)-1)
|
|
|
|
|
{
|
|
|
|
|
PurgeComm(hCom, PURGE_TXCLEAR | PURGE_RXCLEAR);
|
|
|
|
@@ -315,7 +315,7 @@ bool HSI_Motion::PortInit(int iSerialComPort, int iBuadRate)
|
|
|
|
|
return false;//Setting Error!!!!
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//设置读写超时时间
|
|
|
|
|
//设置读写超时时间
|
|
|
|
|
COMMTIMEOUTS to;
|
|
|
|
|
memset(&to, 0, sizeof(to));
|
|
|
|
|
to.ReadIntervalTimeout = 100;
|
|
|
|
@@ -371,7 +371,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
|
|
|
|
sEvenProp.EventType = HSI_EVENT_ERROR;
|
|
|
|
|
sEvenProp.EventID = HSI_EVENT_MOTION;
|
|
|
|
|
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "EF3控制器打开失败,串口");
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "EF3控制器打开失败,串口");
|
|
|
|
|
EventCallback(sEvenProp);
|
|
|
|
|
return HSI_STATUS_FAILED;
|
|
|
|
|
}
|
|
|
|
@@ -418,7 +418,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[Startup] DriverAlarmStatus HSI_STATUS_FAILED\n");
|
|
|
|
|
//return HSI_STATUS_FAILED;
|
|
|
|
|
}
|
|
|
|
|
//无效软限位
|
|
|
|
|
//无效软限位
|
|
|
|
|
m_cSendData[0] = CT_MOTOR;
|
|
|
|
|
m_cSendData[1] = CT_MOTOR_SET;
|
|
|
|
|
m_cSendData[2] = AXIS_XYZU;
|
|
|
|
@@ -431,12 +431,12 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
|
|
|
|
m_cSendData[9] = 0;
|
|
|
|
|
m_cSendData[10] = 0;
|
|
|
|
|
m_cSendData[11] = 0;
|
|
|
|
|
m_WriteByte = Send_Command(0, (const char*)m_cSendData, m_SendDataLength);//初始化防止第一次无效
|
|
|
|
|
m_WriteByte = Send_Command(0, (const char*)m_cSendData, m_SendDataLength);//初始化防止第一次无效
|
|
|
|
|
Sleep(5);
|
|
|
|
|
m_WriteByte = Send_Command(0, (const char*)m_cSendData, m_SendDataLength);
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[Startup] Limit no Enable\n");
|
|
|
|
|
|
|
|
|
|
//设置方向4个轴的方向,按位
|
|
|
|
|
//设置方向4个轴的方向,按位
|
|
|
|
|
m_cSendData[0] = CT_MOTOR;
|
|
|
|
|
m_cSendData[1] = CT_MOTOR_SET;
|
|
|
|
|
m_cSendData[2] = AXIS_X;
|
|
|
|
@@ -448,28 +448,28 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
|
|
|
|
Sleep(10);
|
|
|
|
|
m_cSendData[0] = CT_MOTOR;
|
|
|
|
|
m_cSendData[1] = CT_MDATA_INIT;
|
|
|
|
|
m_cSendData[2] = m_motorType & 0xff; //电机类型(步进电机或伺服电机)
|
|
|
|
|
m_cSendData[3] = m_IsUseExternalTrigger; //是否启用外触发功能
|
|
|
|
|
m_cSendData[4] = m_IsUseSixRingEightArea; //是否启用六环八区灯功能
|
|
|
|
|
m_cSendData[2] = m_motorType & 0xff; //电机类型(步进电机或伺服电机)
|
|
|
|
|
m_cSendData[3] = m_IsUseExternalTrigger; //是否启用外触发功能
|
|
|
|
|
m_cSendData[4] = m_IsUseSixRingEightArea; //是否启用六环八区灯功能
|
|
|
|
|
m_cSendData[5] = m_IsHardLimit;
|
|
|
|
|
m_cSendData[6] = m_IsEnableAxis;
|
|
|
|
|
m_cSendData[7] = m_IsProbe; //是否启用探针
|
|
|
|
|
m_cSendData[8] = m_EF3LightType; //5V高频灯光配置
|
|
|
|
|
m_cSendData[9] = m_IsUseRocker; //是否启用摇杆
|
|
|
|
|
m_cSendData[10] = m_IsHavePattern; //光栅
|
|
|
|
|
m_cSendData[11] = m_AxisHomeDirection; //轴回家方向
|
|
|
|
|
m_cSendData[12] = m_IsCollectPos; //是否从串口打印位置
|
|
|
|
|
m_cSendData[16] = m_IsLightDebug; //是否不回家也能调试灯光
|
|
|
|
|
m_cSendData[7] = m_IsProbe; //是否启用探针
|
|
|
|
|
m_cSendData[8] = m_EF3LightType; //5V高频灯光配置
|
|
|
|
|
m_cSendData[9] = m_IsUseRocker; //是否启用摇杆
|
|
|
|
|
m_cSendData[10] = m_IsHavePattern; //光栅
|
|
|
|
|
m_cSendData[11] = m_AxisHomeDirection; //轴回家方向
|
|
|
|
|
m_cSendData[12] = m_IsCollectPos; //是否从串口打印位置
|
|
|
|
|
m_cSendData[16] = m_IsLightDebug; //是否不回家也能调试灯光
|
|
|
|
|
|
|
|
|
|
if (m_IsStartInput == 1 && m_IsUseRocker == 2)
|
|
|
|
|
{
|
|
|
|
|
m_cSendData[14] = m_StartInputPort >> 8 & 0xff; //外部启动端口号 H
|
|
|
|
|
m_cSendData[15] = m_StartInputPort & 0xff; //外部启动端口号 L
|
|
|
|
|
m_cSendData[14] = m_StartInputPort >> 8 & 0xff; //外部启动端口号 H
|
|
|
|
|
m_cSendData[15] = m_StartInputPort & 0xff; //外部启动端口号 L
|
|
|
|
|
}
|
|
|
|
|
m_WriteByte = Send_Command(0, (const char*)m_cSendData, m_SendDataLength);
|
|
|
|
|
Sleep(10);
|
|
|
|
|
|
|
|
|
|
////步进电机补偿值设定
|
|
|
|
|
////步进电机补偿值设定
|
|
|
|
|
//if (m_motorType == 0)
|
|
|
|
|
//{
|
|
|
|
|
// m_cSendData[0] = CT_MOTOR;
|
|
|
|
@@ -485,7 +485,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
|
|
|
|
// g_pLogger->SendAndFlushWithTime(L"[Startup] Set Encoder Dir\n");
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
//多光源板
|
|
|
|
|
//多光源板
|
|
|
|
|
if (m_bISUseMoreLights > 0)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < m_bISUseMoreLights; i++)
|
|
|
|
@@ -505,7 +505,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
|
|
|
|
sEvenProp.EventType = HSI_EVENT_ERROR;
|
|
|
|
|
sEvenProp.EventID = HSI_EVENT_MOTION;
|
|
|
|
|
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "光源板打开网口失败");
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "光源板打开网口失败");
|
|
|
|
|
EventCallback(sEvenProp);
|
|
|
|
|
return HSI_STATUS_FAILED;
|
|
|
|
|
}
|
|
|
|
@@ -529,7 +529,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//摇杆速度设置
|
|
|
|
|
//摇杆速度设置
|
|
|
|
|
if (m_IsUseRocker == 1)
|
|
|
|
|
{
|
|
|
|
|
m_cSendData[0] = CT_MOTOR;
|
|
|
|
@@ -557,7 +557,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
|
|
|
|
Sleep(5);
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[Startup] Set Rocker Success\n");
|
|
|
|
|
}
|
|
|
|
|
//摇杆2下载档位
|
|
|
|
|
//摇杆2下载档位
|
|
|
|
|
if (m_IsUseRocker == 2)
|
|
|
|
|
{
|
|
|
|
|
SetAllGears();
|
|
|
|
@@ -604,7 +604,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
|
|
|
|
return rStatus;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//获取EF3固件版本
|
|
|
|
|
//获取EF3固件版本
|
|
|
|
|
HSI_STATUS HSI_Motion::GetFirmwareVersion(byte *version)
|
|
|
|
|
{
|
|
|
|
|
m_Thread_StateData = HSI_THREAD_PAUSED;
|
|
|
|
@@ -663,7 +663,7 @@ HSI_STATUS HSI_Motion::GetFirmwareVersion(byte *version)
|
|
|
|
|
return HSI_STATUS_NORMAL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//回家
|
|
|
|
|
//回家
|
|
|
|
|
//===========================================================================
|
|
|
|
|
HSI_STATUS HSI_Motion::HomeMachine(bool bHomed)
|
|
|
|
|
{
|
|
|
|
@@ -680,7 +680,7 @@ HSI_STATUS HSI_Motion::HomeMachine(bool bHomed)
|
|
|
|
|
if (g_pHSI_Motion)
|
|
|
|
|
{
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[HomeMachine] In\n");
|
|
|
|
|
//判断是否需要回家
|
|
|
|
|
//判断是否需要回家
|
|
|
|
|
bool home(false);
|
|
|
|
|
IsHomed(home);
|
|
|
|
|
if (home == true)
|
|
|
|
@@ -700,7 +700,7 @@ HSI_STATUS HSI_Motion::HomeMachine(bool bHomed)
|
|
|
|
|
}
|
|
|
|
|
if (m_bEmergencyState)
|
|
|
|
|
{
|
|
|
|
|
AfxMessageBox(_T("急停或安全门或安全光幕触发!"));
|
|
|
|
|
AfxMessageBox(_T("急停或安全门或安全光幕触发!"));
|
|
|
|
|
return HSI_STATUS_FAILED;
|
|
|
|
|
}
|
|
|
|
|
CurrentHomeMachineState = E_EF3_HOME_ING;
|
|
|
|
@@ -842,7 +842,7 @@ HSI_STATUS HSI_Motion::HomeFindIndex()
|
|
|
|
|
if (m_Home_Machine_Axis[i] == 1)
|
|
|
|
|
{
|
|
|
|
|
AxisTypes = IndexConvertAxis(i);
|
|
|
|
|
//无效软限位
|
|
|
|
|
//无效软限位
|
|
|
|
|
m_cSendData[0] = CT_MOTOR;
|
|
|
|
|
m_cSendData[1] = CT_MOTOR_SET;
|
|
|
|
|
m_cSendData[2] = AxisTypes;
|
|
|
|
@@ -974,7 +974,7 @@ HSI_STATUS HSI_Motion::HomeFindIndex()
|
|
|
|
|
}
|
|
|
|
|
if (m_bEmergencyState)
|
|
|
|
|
{
|
|
|
|
|
AfxMessageBox(_T("急停或安全门或安全光幕触发!"));
|
|
|
|
|
AfxMessageBox(_T("急停或安全门或安全光幕触发!"));
|
|
|
|
|
return HSI_STATUS_FAILED;
|
|
|
|
|
}
|
|
|
|
|
if (Count > 25000)
|
|
|
|
@@ -984,7 +984,7 @@ HSI_STATUS HSI_Motion::HomeFindIndex()
|
|
|
|
|
sEvenProp.EventType = HSI_EVENT_ERROR;
|
|
|
|
|
sEvenProp.EventID = HSI_EVENT_MOTION;
|
|
|
|
|
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "回家超时");
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "回家超时");
|
|
|
|
|
EventCallback(sEvenProp);
|
|
|
|
|
return HSI_STATUS_FAILED;
|
|
|
|
|
}
|
|
|
|
@@ -995,22 +995,22 @@ HSI_STATUS HSI_Motion::HomeFindIndex()
|
|
|
|
|
bool bHomed = true;
|
|
|
|
|
if ((m_SO7_Serial.m_RecvData[38] & 0x01) == 0 && m_Home_Machine_Axis[1] == 1)
|
|
|
|
|
{
|
|
|
|
|
strcat_s(MessageHome, 30, "1、");
|
|
|
|
|
strcat_s(MessageHome, 30, "1、");
|
|
|
|
|
bHomed = false;
|
|
|
|
|
}
|
|
|
|
|
if ((m_SO7_Serial.m_RecvData[38] & 0x02) == 0 && m_Home_Machine_Axis[2] == 1)
|
|
|
|
|
{
|
|
|
|
|
strcat_s(MessageHome, 30, "2、");
|
|
|
|
|
strcat_s(MessageHome, 30, "2、");
|
|
|
|
|
bHomed = false;
|
|
|
|
|
}
|
|
|
|
|
if ((m_SO7_Serial.m_RecvData[38] & 0x04) == 0 && m_Home_Machine_Axis[3] == 1)
|
|
|
|
|
{
|
|
|
|
|
strcat_s(MessageHome, 30, "3、");
|
|
|
|
|
strcat_s(MessageHome, 30, "3、");
|
|
|
|
|
bHomed = false;
|
|
|
|
|
}
|
|
|
|
|
if ((m_SO7_Serial.m_RecvData[38] & 0x08) == 0 && m_Home_Machine_Axis[4] == 1)
|
|
|
|
|
{
|
|
|
|
|
strcat_s(MessageHome, 30, "4、");
|
|
|
|
|
strcat_s(MessageHome, 30, "4、");
|
|
|
|
|
bHomed = false;
|
|
|
|
|
}
|
|
|
|
|
if (!bHomed)
|
|
|
|
@@ -1019,7 +1019,7 @@ HSI_STATUS HSI_Motion::HomeFindIndex()
|
|
|
|
|
sEvenProp.EventType = HSI_EVENT_ERROR;
|
|
|
|
|
sEvenProp.EventID = HSI_EVENT_MOTION;
|
|
|
|
|
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
|
|
|
|
strcat_s(MessageHome, 100, "轴回家失败!");
|
|
|
|
|
strcat_s(MessageHome, 100, "轴回家失败!");
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, MessageHome);
|
|
|
|
|
EventCallback(sEvenProp);
|
|
|
|
|
return HSI_STATUS_FAILED;
|
|
|
|
@@ -1069,11 +1069,11 @@ HSI_STATUS HSI_Motion::IsHomed(bool &bHomed)
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[IsHomed] In\n");
|
|
|
|
|
short isHomed[5] = { 1, 1, 1, 1, 1 };
|
|
|
|
|
//int Count = 0;
|
|
|
|
|
//if (bHomed == true)//定位是增大判断精度
|
|
|
|
|
//if (bHomed == true)//定位是增大判断精度
|
|
|
|
|
//{
|
|
|
|
|
// Count = 1000;
|
|
|
|
|
//}
|
|
|
|
|
//所有轴都不需要回家
|
|
|
|
|
//所有轴都不需要回家
|
|
|
|
|
if (m_Home_Machine_Axis[1] == 0 && m_Home_Machine_Axis[2] == 0 && m_Home_Machine_Axis[3] == 0 && m_Home_Machine_Axis[4] == 0)
|
|
|
|
|
{
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[IsHomed] No Axis Go Home E_GTS_HOME_FINISHED\n");
|
|
|
|
@@ -1082,7 +1082,7 @@ HSI_STATUS HSI_Motion::IsHomed(bool &bHomed)
|
|
|
|
|
return HSI_STATUS_NORMAL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//判断是否需要回家
|
|
|
|
|
//判断是否需要回家
|
|
|
|
|
int Delay = 0;
|
|
|
|
|
while (m_SO7_Serial.m_RecvData[0] != 2)
|
|
|
|
|
{
|
|
|
|
@@ -1176,7 +1176,7 @@ HSI_STATUS HSI_Motion::ZeroPos(bool bZeroPos)
|
|
|
|
|
return rStatus;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//JOG模式
|
|
|
|
|
//JOG模式
|
|
|
|
|
//===========================================================================
|
|
|
|
|
HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
|
|
|
|
|
{
|
|
|
|
@@ -1221,7 +1221,7 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//无效软限位
|
|
|
|
|
//无效软限位
|
|
|
|
|
m_cSendData[0] = CT_MOTOR;
|
|
|
|
|
m_cSendData[1] = CT_MOTOR_SET;
|
|
|
|
|
m_cSendData[2] = AxisTypes;
|
|
|
|
@@ -1254,7 +1254,7 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
|
|
|
|
|
{
|
|
|
|
|
if (AxisTypes == AXIS_X && m_motorType & 0x01)
|
|
|
|
|
{
|
|
|
|
|
if (!bJOGDir)//负方向
|
|
|
|
|
if (!bJOGDir)//负方向
|
|
|
|
|
{
|
|
|
|
|
RemainPul = (int)(now_pos[1] / m_Resolution[1]) - (int)(m_N_Work_Limit[1] / m_Resolution[1]);
|
|
|
|
|
limitSDPul = (DriveSpeed - StartSpeed) * 13;
|
|
|
|
@@ -1285,7 +1285,7 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
|
|
|
|
|
}
|
|
|
|
|
else if (AxisTypes == AXIS_Y && m_motorType & 0x02)
|
|
|
|
|
{
|
|
|
|
|
if (!bJOGDir)//负方向
|
|
|
|
|
if (!bJOGDir)//负方向
|
|
|
|
|
{
|
|
|
|
|
RemainPul = (int)(now_pos[2] / m_Resolution[2]) - (int)(m_N_Work_Limit[2] / m_Resolution[2]);
|
|
|
|
|
limitSDPul = (DriveSpeed - StartSpeed) * 13;
|
|
|
|
@@ -1316,7 +1316,7 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
|
|
|
|
|
}
|
|
|
|
|
if (AxisTypes == AXIS_Z && m_motorType & 0x04)
|
|
|
|
|
{
|
|
|
|
|
if (!bJOGDir)//负方向
|
|
|
|
|
if (!bJOGDir)//负方向
|
|
|
|
|
{
|
|
|
|
|
RemainPul = (int)(now_pos[3] / m_Resolution[3]) - (int)(m_N_Work_Limit[3] / m_Resolution[3]);
|
|
|
|
|
limitSDPul = (DriveSpeed - StartSpeed) * 13;
|
|
|
|
@@ -1347,7 +1347,7 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
|
|
|
|
|
}
|
|
|
|
|
if (AxisTypes == AXIS_U && m_motorType & 0x08)
|
|
|
|
|
{
|
|
|
|
|
if (!bJOGDir)//负方向
|
|
|
|
|
if (!bJOGDir)//负方向
|
|
|
|
|
{
|
|
|
|
|
RemainPul = (int)(now_pos[4] / m_Resolution[4]) - (int)(m_N_Work_Limit[4] / m_Resolution[4]);
|
|
|
|
|
limitSDPul = (DriveSpeed - StartSpeed) * 13;
|
|
|
|
@@ -1426,7 +1426,7 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
|
|
|
|
|
m_cSendData[0] = CT_MOTOR;
|
|
|
|
|
if (AxisNumber == 1 || AxisNumber == 2)
|
|
|
|
|
{
|
|
|
|
|
if (!bJOGDir)//方向
|
|
|
|
|
if (!bJOGDir)//方向
|
|
|
|
|
{
|
|
|
|
|
m_cSendData[1] = CT_START_JOG_NEG;
|
|
|
|
|
}
|
|
|
|
@@ -1437,7 +1437,7 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (bJOGDir)//方向
|
|
|
|
|
if (bJOGDir)//方向
|
|
|
|
|
{
|
|
|
|
|
m_cSendData[1] = CT_START_JOG_POS;
|
|
|
|
|
}
|
|
|
|
@@ -1455,7 +1455,7 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
|
|
|
|
|
}
|
|
|
|
|
return rStatus;
|
|
|
|
|
}
|
|
|
|
|
//JOG模式
|
|
|
|
|
//JOG模式
|
|
|
|
|
//===========================================================================
|
|
|
|
|
HSI_STATUS HSI_Motion::JoyStick(UINT AxisTypes, long Speed)
|
|
|
|
|
{
|
|
|
|
@@ -1500,7 +1500,7 @@ HSI_STATUS HSI_Motion::JoyStick(UINT AxisTypes, long Speed)
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//无效软限位
|
|
|
|
|
//无效软限位
|
|
|
|
|
m_cSendData[0] = CT_MOTOR;
|
|
|
|
|
m_cSendData[1] = CT_MOTOR_SET;
|
|
|
|
|
m_cSendData[2] = AxisTypes;
|
|
|
|
@@ -1537,7 +1537,7 @@ HSI_STATUS HSI_Motion::JoyStick(UINT AxisTypes, long Speed)
|
|
|
|
|
{
|
|
|
|
|
if (AxisTypes == AXIS_X && m_motorType & 0x01)
|
|
|
|
|
{
|
|
|
|
|
if (!bJOGDir)//负方向
|
|
|
|
|
if (!bJOGDir)//负方向
|
|
|
|
|
{
|
|
|
|
|
RemainPul = (int)(now_pos[1] / m_Resolution[1]) - (int)(m_N_Work_Limit[1] / m_Resolution[1]);
|
|
|
|
|
limitSDPul = (DriveSpeed - StartSpeed) * 13;
|
|
|
|
@@ -1568,7 +1568,7 @@ HSI_STATUS HSI_Motion::JoyStick(UINT AxisTypes, long Speed)
|
|
|
|
|
}
|
|
|
|
|
else if (AxisTypes == AXIS_Y && m_motorType & 0x02)
|
|
|
|
|
{
|
|
|
|
|
if (!bJOGDir)//负方向
|
|
|
|
|
if (!bJOGDir)//负方向
|
|
|
|
|
{
|
|
|
|
|
RemainPul = (int)(now_pos[2] / m_Resolution[2]) - (int)(m_N_Work_Limit[2] / m_Resolution[2]);
|
|
|
|
|
limitSDPul = (DriveSpeed - StartSpeed) * 13;
|
|
|
|
@@ -1599,7 +1599,7 @@ HSI_STATUS HSI_Motion::JoyStick(UINT AxisTypes, long Speed)
|
|
|
|
|
}
|
|
|
|
|
if (AxisTypes == AXIS_Z && m_motorType & 0x04)
|
|
|
|
|
{
|
|
|
|
|
if (!bJOGDir)//负方向
|
|
|
|
|
if (!bJOGDir)//负方向
|
|
|
|
|
{
|
|
|
|
|
RemainPul = (int)(now_pos[3] / m_Resolution[3]) - (int)(m_N_Work_Limit[3] / m_Resolution[3]);
|
|
|
|
|
limitSDPul = (DriveSpeed - StartSpeed) * 13;
|
|
|
|
@@ -1630,7 +1630,7 @@ HSI_STATUS HSI_Motion::JoyStick(UINT AxisTypes, long Speed)
|
|
|
|
|
}
|
|
|
|
|
if (AxisTypes == AXIS_U && m_motorType & 0x08)
|
|
|
|
|
{
|
|
|
|
|
if (!bJOGDir)//负方向
|
|
|
|
|
if (!bJOGDir)//负方向
|
|
|
|
|
{
|
|
|
|
|
RemainPul = (int)(now_pos[4] / m_Resolution[4]) - (int)(m_N_Work_Limit[4] / m_Resolution[4]);
|
|
|
|
|
limitSDPul = (DriveSpeed - StartSpeed) * 13;
|
|
|
|
@@ -1709,7 +1709,7 @@ HSI_STATUS HSI_Motion::JoyStick(UINT AxisTypes, long Speed)
|
|
|
|
|
m_cSendData[0] = CT_MOTOR;
|
|
|
|
|
if (AxisNumber == 1 || AxisNumber == 2)
|
|
|
|
|
{
|
|
|
|
|
if (!bJOGDir)//方向
|
|
|
|
|
if (!bJOGDir)//方向
|
|
|
|
|
{
|
|
|
|
|
m_cSendData[1] = CT_START_JOG_NEG;
|
|
|
|
|
}
|
|
|
|
@@ -1720,7 +1720,7 @@ HSI_STATUS HSI_Motion::JoyStick(UINT AxisTypes, long Speed)
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (bJOGDir)//方向
|
|
|
|
|
if (bJOGDir)//方向
|
|
|
|
|
{
|
|
|
|
|
m_cSendData[1] = CT_START_JOG_POS;
|
|
|
|
|
}
|
|
|
|
@@ -1849,7 +1849,7 @@ int HSI_Motion::P2P(short AxisNumber, long Pos, double Speed, double Acc)
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//运动控制部分
|
|
|
|
|
//运动控制部分
|
|
|
|
|
//===========================================================================
|
|
|
|
|
HSI_STATUS HSI_Motion::GetPositionEncPrfMulti(UINT AxisTypes, double *EncPos, double *PrfPos, int Count)
|
|
|
|
|
{
|
|
|
|
@@ -1919,7 +1919,7 @@ HSI_STATUS HSI_Motion::GetPositionXyz(UINT AxisTypes, double &PositionX, double
|
|
|
|
|
{
|
|
|
|
|
auto rStatus = HSI_STATUS_NORMAL;
|
|
|
|
|
UNREFERENCED_PARAMETER(AxisTypes);
|
|
|
|
|
//读取3个轴的位置
|
|
|
|
|
//读取3个轴的位置
|
|
|
|
|
CString tempStr;
|
|
|
|
|
if (g_pHSI_Motion)
|
|
|
|
|
{
|
|
|
|
@@ -1980,7 +1980,7 @@ HSI_STATUS HSI_Motion::GetPositionXyz(UINT AxisTypes, double &PositionX, double
|
|
|
|
|
HSI_STATUS HSI_Motion::GetEncoderXyz(long *lEncoderVal)
|
|
|
|
|
{
|
|
|
|
|
auto rStatus = HSI_STATUS_NORMAL;
|
|
|
|
|
//读取3个轴的编码器值
|
|
|
|
|
//读取3个轴的编码器值
|
|
|
|
|
if (g_pHSI_Motion)
|
|
|
|
|
{
|
|
|
|
|
if (m_SO7_Serial.m_RecvData[0] == 2)
|
|
|
|
@@ -2112,19 +2112,19 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double
|
|
|
|
|
Pos_t[4] = NowPos[4] = (int)(m_EncPos[4] / m_Resolution[4]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (m_motorType & 0x01) //步进电机
|
|
|
|
|
if (m_motorType & 0x01) //步进电机
|
|
|
|
|
Pos[1] = (int)(PositionX / m_Resolution[1]) - NowPos[1];
|
|
|
|
|
else
|
|
|
|
|
Pos[1] = (int)(PositionX / m_Resolution[1]) - Pos_t[1];
|
|
|
|
|
if (m_motorType & 0x02) //步进电机
|
|
|
|
|
if (m_motorType & 0x02) //步进电机
|
|
|
|
|
Pos[2] = (int)(PositionX / m_Resolution[2]) - NowPos[2];
|
|
|
|
|
else
|
|
|
|
|
Pos[2] = (int)(PositionY / m_Resolution[2]) - Pos_t[2];
|
|
|
|
|
if (m_motorType & 0x04) //步进电机
|
|
|
|
|
if (m_motorType & 0x04) //步进电机
|
|
|
|
|
Pos[3] = (int)(PositionX / m_Resolution[3]) - NowPos[3];
|
|
|
|
|
else
|
|
|
|
|
Pos[3] = (int)(PositionZ / m_Resolution[3]) - Pos_t[3];
|
|
|
|
|
if (m_motorType & 0x08) //步进电机
|
|
|
|
|
if (m_motorType & 0x08) //步进电机
|
|
|
|
|
Pos[4] = (int)(PositionX / m_Resolution[4]) - NowPos[4];
|
|
|
|
|
else
|
|
|
|
|
Pos[4] = (int)(m_PositionA / m_Resolution[4]) - Pos_t[4];
|
|
|
|
@@ -2454,7 +2454,7 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Sleep(10);
|
|
|
|
|
//启动插补和定位功能
|
|
|
|
|
//启动插补和定位功能
|
|
|
|
|
/* if (m_motorType == 1)
|
|
|
|
|
{
|
|
|
|
|
send_pos_data[0] = CT_MOTOR;
|
|
|
|
@@ -2617,7 +2617,7 @@ HSI_STATUS HSI_Motion::SetCircleInterpolate(double PositionX, double PositionY
|
|
|
|
|
return rStatus;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//探针接口
|
|
|
|
|
//探针接口
|
|
|
|
|
//===========================================================================
|
|
|
|
|
void HSI_Motion::ProbeRetractManDist(int RetractManDist)
|
|
|
|
|
{
|
|
|
|
@@ -2750,7 +2750,7 @@ HSI_STATUS HSI_Motion::JogProbe(UINT AxisTypes, double Speed)
|
|
|
|
|
return rStatus;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//读取配置
|
|
|
|
|
//读取配置
|
|
|
|
|
//===========================================================================
|
|
|
|
|
HSI_STATUS HSI_Motion::Load_EF3_Motion_Inifile(CString GoogolIniFile)
|
|
|
|
|
{
|
|
|
|
@@ -2762,7 +2762,7 @@ HSI_STATUS HSI_Motion::Load_EF3_Motion_Inifile(CString GoogolIniFile)
|
|
|
|
|
CString temp = L"";
|
|
|
|
|
CString strGear[5] = { L"GEAR0_", L"GEAR1_", L"GEAR2_", L"GEAR3_", L"GEAR4_" };
|
|
|
|
|
CString axisNum[5] = { L"0", L"1", L"2", L"3", L"4" };
|
|
|
|
|
//判断Log目录是否存在,不存在就创建
|
|
|
|
|
//判断Log目录是否存在,不存在就创建
|
|
|
|
|
if (CreateDirectory(m_AppPath + L"\\Log", NULL))
|
|
|
|
|
{
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[Load_EF3_Motion_Inifile] Create Log Directory\n");
|
|
|
|
@@ -2775,7 +2775,7 @@ HSI_STATUS HSI_Motion::Load_EF3_Motion_Inifile(CString GoogolIniFile)
|
|
|
|
|
sEvenProp.EventType = HSI_EVENT_ERROR;
|
|
|
|
|
sEvenProp.EventID = HSI_EVENT_MOTION;
|
|
|
|
|
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "EF3_Motion.ini文件不存在!");
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "EF3_Motion.ini文件不存在!");
|
|
|
|
|
EventCallback(sEvenProp);
|
|
|
|
|
return HSI_STATUS_FAILED;
|
|
|
|
|
}
|
|
|
|
@@ -2836,7 +2836,7 @@ HSI_STATUS HSI_Motion::Load_EF3_Motion_Inifile(CString GoogolIniFile)
|
|
|
|
|
m_setPositionPrecision = GetPrivateProfileInt(L"SETPOSITION", L"SETPPSITION_PRECISION", 1, csAppPath);
|
|
|
|
|
m_setPositionNum = GetPrivateProfileInt(L"SETPOSITION", L"SETPOSITION_NUMBER", 1, csAppPath);
|
|
|
|
|
|
|
|
|
|
//两块四路光源板
|
|
|
|
|
//两块四路光源板
|
|
|
|
|
m_isUseAport = GetPrivateProfileInt(L"COMPORT", L"IS_COM_PORT_A", 0, csAppPath);
|
|
|
|
|
m_portAnum = GetPrivateProfileInt(L"COMPORT", L"COM_PORT_A", 0, csAppPath);
|
|
|
|
|
m_isUseBport = GetPrivateProfileInt(L"COMPORT", L"IS_COM_PORT_B", 0, csAppPath);
|
|
|
|
@@ -2909,7 +2909,7 @@ HSI_STATUS HSI_Motion::Load_EF3_Config_Inifile(CString GoogolIniFile)
|
|
|
|
|
sEvenProp.EventType = HSI_EVENT_ERROR;
|
|
|
|
|
sEvenProp.EventID = HSI_EVENT_MOTION;
|
|
|
|
|
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "EF3_Config.ini文件不存在!");
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "EF3_Config.ini文件不存在!");
|
|
|
|
|
EventCallback(sEvenProp);
|
|
|
|
|
return HSI_STATUS_FAILED;
|
|
|
|
|
}
|
|
|
|
@@ -2977,7 +2977,7 @@ HSI_STATUS HSI_Motion::Load_EF3_Config_Inifile(CString GoogolIniFile)
|
|
|
|
|
return rStatus;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//读取/设置光栅尺精度
|
|
|
|
|
//读取/设置光栅尺精度
|
|
|
|
|
//===========================================================================
|
|
|
|
|
HSI_STATUS HSI_Motion::GetScaleResolution(double &_ScaleX, double &_ScaleY, double &_ScaleZ)
|
|
|
|
|
{
|
|
|
|
@@ -3003,7 +3003,7 @@ HSI_STATUS HSI_Motion::SetScaleResolution(double _ScaleX, double _ScaleY, double
|
|
|
|
|
return rStatus;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//回调定位完成
|
|
|
|
|
//回调定位完成
|
|
|
|
|
//===========================================================================
|
|
|
|
|
void HSI_Motion::SendMsgMotionFinished()
|
|
|
|
|
{
|
|
|
|
@@ -3014,7 +3014,7 @@ void HSI_Motion::SendMsgMotionFinished()
|
|
|
|
|
EventCallback(sEvenProp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//回调探针运行
|
|
|
|
|
//回调探针运行
|
|
|
|
|
//===========================================================================
|
|
|
|
|
void HSI_Motion::SendMsgProbeFinished()
|
|
|
|
|
{
|
|
|
|
@@ -3095,7 +3095,7 @@ void HSI_Motion::UpdateMotionState()
|
|
|
|
|
// double ProPulse[5] = { 0.0 };
|
|
|
|
|
if (interpolationflag&&m_motorType)
|
|
|
|
|
{
|
|
|
|
|
while (Count < m_SetPotion_Count[1])//到位次数判断
|
|
|
|
|
while (Count < m_SetPotion_Count[1])//到位次数判断
|
|
|
|
|
{
|
|
|
|
|
Sleep(2);
|
|
|
|
|
GetPositionXyz(HSI_MOTION_AXIS_ALL, prfpos[1], prfpos[2], prfpos[3], prfpos[0]);
|
|
|
|
@@ -3122,7 +3122,7 @@ void HSI_Motion::UpdateMotionState()
|
|
|
|
|
Count++;
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[UpdateMotionState] m_SetPotion_Count = %d\n", Count);
|
|
|
|
|
}
|
|
|
|
|
//if (Count == m_SetPotion_Count[1]) //超时退出
|
|
|
|
|
//if (Count == m_SetPotion_Count[1]) //超时退出
|
|
|
|
|
//{
|
|
|
|
|
// if (g_IsClose == false)
|
|
|
|
|
// {
|
|
|
|
@@ -3131,7 +3131,7 @@ void HSI_Motion::UpdateMotionState()
|
|
|
|
|
// sEvenProp.EventType = HSI_EVENT_ERROR;
|
|
|
|
|
// sEvenProp.EventID = HSI_EVENT_MOTION;
|
|
|
|
|
// sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
|
|
|
|
// strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Nowait_HSI定位超时!");
|
|
|
|
|
// strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Nowait_HSI定位超时!");
|
|
|
|
|
// EventCallback(sEvenProp);
|
|
|
|
|
// }
|
|
|
|
|
// else
|
|
|
|
@@ -3164,7 +3164,7 @@ void HSI_Motion::UpdateMotionState()
|
|
|
|
|
sEvenProp.EventType = HSI_EVENT_ERROR;
|
|
|
|
|
sEvenProp.EventID = HSI_EVENT_MOTION;
|
|
|
|
|
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Nowait_EF3定位超时!");
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Nowait_EF3定位超时!");
|
|
|
|
|
EventCallback(sEvenProp);
|
|
|
|
|
}
|
|
|
|
|
switch (CurrentMotionState)
|
|
|
|
@@ -3207,7 +3207,7 @@ void HSI_Motion::UpdateMotionStateIO()
|
|
|
|
|
UINT recvData = 0;
|
|
|
|
|
while (m_Thread_StateIO == HSI_THREAD_RUNNING)
|
|
|
|
|
{
|
|
|
|
|
//1个脚踏开关
|
|
|
|
|
//1个脚踏开关
|
|
|
|
|
Sleep(3);
|
|
|
|
|
GetDIO(HSI_MOTION_INPUT_CH1, m_InputStatus);
|
|
|
|
|
if (m_IsStartInput == 1)
|
|
|
|
@@ -3371,7 +3371,7 @@ void HSI_Motion::DoEvents()
|
|
|
|
|
sEvenProp.EventType = HSI_EVENT_ERROR;
|
|
|
|
|
sEvenProp.EventID = HSI_EVENT_MOTION;
|
|
|
|
|
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "DoEvents_异常");
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "DoEvents_异常");
|
|
|
|
|
EventCallback(sEvenProp);
|
|
|
|
|
}
|
|
|
|
|
if (g_IsClose)
|
|
|
|
@@ -3445,12 +3445,12 @@ HSI_STATUS HSI_Motion::GetDIO(UINT IOChannel, UINT& _Status)
|
|
|
|
|
{
|
|
|
|
|
_Status = m_SO7_Serial.m_RecvData[40];
|
|
|
|
|
}
|
|
|
|
|
if (IOChannel == HSI_MOTION_INPUT_CH1) //获取通用输入
|
|
|
|
|
if (IOChannel == HSI_MOTION_INPUT_CH1) //获取通用输入
|
|
|
|
|
{
|
|
|
|
|
_Status = m_SO7_Serial.m_RecvData[34];
|
|
|
|
|
_Status = (m_SO7_Serial.m_RecvData[35] | (_Status << 8)) & 0xffff;
|
|
|
|
|
}
|
|
|
|
|
if (IOChannel == HSI_MOTION_OUTPUT_CH1) //获取通用输出
|
|
|
|
|
if (IOChannel == HSI_MOTION_OUTPUT_CH1) //获取通用输出
|
|
|
|
|
{
|
|
|
|
|
_Status = m_SO7_Serial.m_RecvData[36];
|
|
|
|
|
_Status = (m_SO7_Serial.m_RecvData[37] | (_Status << 8)) & 0xffff;
|
|
|
|
@@ -3549,7 +3549,7 @@ HSI_STATUS HSI_Motion::GetAxisStatus(int* _Status)
|
|
|
|
|
}
|
|
|
|
|
//===========================================================================
|
|
|
|
|
|
|
|
|
|
//暂停和关闭
|
|
|
|
|
//暂停和关闭
|
|
|
|
|
HSI_STATUS HSI_Motion::AbortMotion()
|
|
|
|
|
{
|
|
|
|
|
auto rStatus = HSI_STATUS_NORMAL;
|
|
|
|
@@ -3653,7 +3653,7 @@ HSI_STATUS HSI_Motion::Shutdown()
|
|
|
|
|
}
|
|
|
|
|
//===========================================================================
|
|
|
|
|
|
|
|
|
|
//触发灯光
|
|
|
|
|
//触发灯光
|
|
|
|
|
HSI_STATUS HSI_Motion::SetTriggerLight(int triggleNum, int delayLighting, int delayLightBefor, int triggleMode, double* Intensities)
|
|
|
|
|
{
|
|
|
|
|
auto rStatus = HSI_STATUS_NORMAL;
|
|
|
|
@@ -3715,7 +3715,7 @@ HSI_STATUS HSI_Motion::SetTriggerLight(int triggleNum, int delayLighting, int de
|
|
|
|
|
return rStatus;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//硬件触发拍照
|
|
|
|
|
//硬件触发拍照
|
|
|
|
|
//===========================================================================
|
|
|
|
|
HSI_STATUS HSI_Motion::DCCPPStartPoint(double *startPoint)
|
|
|
|
|
{
|
|
|
|
@@ -3736,7 +3736,7 @@ HSI_STATUS HSI_Motion::DCCScanSetData(UINT AxisTypes, HSI_SCAN_MOTION_TYPE eType
|
|
|
|
|
auto rStatus = HSI_STATUS_NORMAL;
|
|
|
|
|
if (g_pHSI_Motion)
|
|
|
|
|
{
|
|
|
|
|
//触发的位置为相对位置,用法一般是移动到起点位置,再开始设置触发位置(相对位置),最终设置终点位置
|
|
|
|
|
//触发的位置为相对位置,用法一般是移动到起点位置,再开始设置触发位置(相对位置),最终设置终点位置
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[DCCScanSetData] In\n");
|
|
|
|
|
int axisNum;
|
|
|
|
|
unsigned char m_SendDCCData[64] = { 0 };
|
|
|
|
@@ -4272,7 +4272,7 @@ HSI_STATUS HSI_Motion::DCCForLightPlate()
|
|
|
|
|
return rStatus;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//转盘
|
|
|
|
|
//转盘
|
|
|
|
|
//===========================================================================
|
|
|
|
|
HSI_STATUS HSI_Motion::StartPlcJob(int* CamerasDis, int* BinsDis, int SubArea, int filterTime1, int filterTime2, int pluseSumDis)
|
|
|
|
|
{
|
|
|
|
@@ -4287,7 +4287,7 @@ HSI_STATUS HSI_Motion::StartPlcJob(int* CamerasDis, int* BinsDis, int SubArea, i
|
|
|
|
|
sEvenProp.EventType = HSI_EVENT_ERROR;
|
|
|
|
|
sEvenProp.EventID = HSI_EVENT_MOTION;
|
|
|
|
|
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "开始前请确认当前位置大于零!");
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "开始前请确认当前位置大于零!");
|
|
|
|
|
EventCallback(sEvenProp);
|
|
|
|
|
return HSI_STATUS_FAILED;
|
|
|
|
|
}
|
|
|
|
@@ -4387,7 +4387,7 @@ HSI_STATUS HSI_Motion::GetTriggleCount(int *nCount, int& nArea)
|
|
|
|
|
return rStatus;
|
|
|
|
|
}
|
|
|
|
|
//===========================================================================
|
|
|
|
|
//点胶
|
|
|
|
|
//点胶
|
|
|
|
|
HSI_STATUS HSI_Motion::GluePPSpnts(int* ppsDir, double* gluePPSPos, int* delayLightBefore, int* lightTime, double* lightData, int num)
|
|
|
|
|
{
|
|
|
|
|
auto rStatus = HSI_STATUS_NORMAL;
|
|
|
|
@@ -4395,20 +4395,20 @@ HSI_STATUS HSI_Motion::GluePPSpnts(int* ppsDir, double* gluePPSPos, int* delayLi
|
|
|
|
|
{
|
|
|
|
|
unsigned char send_gluePPS_data[64] = { 0 };
|
|
|
|
|
send_gluePPS_data[0] = CT_GLUEDISPENSER;
|
|
|
|
|
send_gluePPS_data[1] = 0x01; //擦除指令
|
|
|
|
|
send_gluePPS_data[1] = 0x01; //擦除指令
|
|
|
|
|
m_WriteByte = Send_Command(0, (const char*)send_gluePPS_data, m_SendDataLength);
|
|
|
|
|
Sleep(200);
|
|
|
|
|
int posIndex = 0;
|
|
|
|
|
int loadFeet[4];
|
|
|
|
|
int j = 0;
|
|
|
|
|
int c = 0; //触发计数
|
|
|
|
|
int c = 0; //触发计数
|
|
|
|
|
int dirType = 0;
|
|
|
|
|
int saveDir = 0;
|
|
|
|
|
int duanNum = 0;
|
|
|
|
|
double triggerPnt[4];
|
|
|
|
|
double savePPSPnt[4];
|
|
|
|
|
GlueDispenserindexNum = 0;
|
|
|
|
|
#pragma region 拍照点
|
|
|
|
|
#pragma region 拍照点
|
|
|
|
|
for (size_t i = 0; i < num; i++)
|
|
|
|
|
{
|
|
|
|
|
if (i == 0)
|
|
|
|
@@ -5274,7 +5274,7 @@ HSI_STATUS HSI_Motion::GetPntsDistance(double& pDistance, int& spTimeCount)
|
|
|
|
|
return rStatus;
|
|
|
|
|
}
|
|
|
|
|
//===========================================================================
|
|
|
|
|
//运动控制参数读取及设置
|
|
|
|
|
//运动控制参数读取及设置
|
|
|
|
|
//===========================================================================
|
|
|
|
|
int HSI_Motion::SpeedPercent(int AxisNum, double &Speed, int &DirveSpeed, int &StartSpeed, int &AccLine, int &DecLine, int &AccCurve, int &DecCurve)
|
|
|
|
|
{
|
|
|
|
@@ -5338,7 +5338,7 @@ int HSI_Motion::SpeedPercent(int AxisNum, double &Speed, int &DirveSpeed, int &S
|
|
|
|
|
return (int)Speed;
|
|
|
|
|
}
|
|
|
|
|
//===========================================================================
|
|
|
|
|
//JoyStick运动控制参数读取及设置
|
|
|
|
|
//JoyStick运动控制参数读取及设置
|
|
|
|
|
//===========================================================================
|
|
|
|
|
bool HSI_Motion::SpeedPercentJoyStick(int AxisNum, long &Speed, int &DirveSpeed, int &StartSpeed, int &AccLine, int &DecLine, int &AccCurve, int &DecCurve)
|
|
|
|
|
{
|
|
|
|
@@ -5505,7 +5505,7 @@ double HSI_Motion::LimitOver(UINT AxisTypes, double &LimitPos)
|
|
|
|
|
{
|
|
|
|
|
switch (AxisNumber)
|
|
|
|
|
{
|
|
|
|
|
case 1: //轴1
|
|
|
|
|
case 1: //轴1
|
|
|
|
|
{
|
|
|
|
|
if (LimitPos >= m_P_Work_Limit[1])
|
|
|
|
|
{
|
|
|
|
@@ -6201,7 +6201,7 @@ unsigned __stdcall HSI_Motion::m_ThreadData(LPVOID pThis)
|
|
|
|
|
}
|
|
|
|
|
//===========================================================================
|
|
|
|
|
|
|
|
|
|
//JOG运行到软限位的运动调节
|
|
|
|
|
//JOG运行到软限位的运动调节
|
|
|
|
|
//===========================================================================
|
|
|
|
|
void HSI_Motion::UpdateMotionStateJOGStop()
|
|
|
|
|
{
|
|
|
|
@@ -6311,7 +6311,7 @@ void HSI_Motion::UpdateMotionStateJOGStop()
|
|
|
|
|
case 4:
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
//第四轴未添加
|
|
|
|
|
//第四轴未添加
|
|
|
|
|
} break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
@@ -6399,7 +6399,7 @@ unsigned __stdcall HSI_Motion::m_ThreadJOGStop(LPVOID pThis)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//===========================================================================
|
|
|
|
|
//无用
|
|
|
|
|
//无用
|
|
|
|
|
HSI_STATUS HSI_Motion::IOStep(bool RunSts)
|
|
|
|
|
{
|
|
|
|
|
auto rStatus = HSI_STATUS_NORMAL;
|
|
|
|
@@ -6465,7 +6465,7 @@ BOOL HSI_Motion::Send_Command(int com, const char* _SendData, DWORD SendDataLeng
|
|
|
|
|
sEvenProp.EventType = HSI_EVENT_ERROR;
|
|
|
|
|
sEvenProp.EventID = HSI_EVENT_MOTION;
|
|
|
|
|
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "EF3控制器已断开连接");
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "EF3控制器已断开连接");
|
|
|
|
|
EventCallback(sEvenProp);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@@ -6481,7 +6481,7 @@ BOOL HSI_Motion::Send_Command(int com, const char* _SendData, DWORD SendDataLeng
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
|
#pragma region //网口通信8路 26路光源板通信
|
|
|
|
|
#pragma region //网口通信8路 26路光源板通信
|
|
|
|
|
|
|
|
|
|
#pragma warning(disable:4996)
|
|
|
|
|
TCPIP_RETURN_CODE HSI_Motion::TCPConnect(int index, char* Address, u_short port)
|
|
|
|
@@ -6505,7 +6505,7 @@ TCPIP_RETURN_CODE HSI_Motion::TCPConnect(int index, char* Address, u_short port)
|
|
|
|
|
{
|
|
|
|
|
int iMode = 1;
|
|
|
|
|
int i = 0;
|
|
|
|
|
int retVal = ioctlsocket(m_socket[index], FIONBIO, (u_long FAR*)&iMode);//非阻塞连接
|
|
|
|
|
int retVal = ioctlsocket(m_socket[index], FIONBIO, (u_long FAR*)&iMode);//非阻塞连接
|
|
|
|
|
if (retVal == SOCKET_ERROR)
|
|
|
|
|
{
|
|
|
|
|
closesocket(m_socket[index]);
|
|
|
|
@@ -6545,7 +6545,7 @@ TCPIP_RETURN_CODE HSI_Motion::TCPConnect(int index, char* Address, u_short port)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
iMode = 0;
|
|
|
|
|
retVal = ioctlsocket(m_socket[index], FIONBIO, (u_long FAR*)&iMode);//设置阻塞
|
|
|
|
|
retVal = ioctlsocket(m_socket[index], FIONBIO, (u_long FAR*)&iMode);//设置阻塞
|
|
|
|
|
if (retVal == SOCKET_ERROR)
|
|
|
|
|
{
|
|
|
|
|
closesocket(m_socket[index]);
|
|
|
|
@@ -6680,7 +6680,7 @@ TCPIP_RETURN_CODE HSI_Motion::TCPSend()
|
|
|
|
|
sEvenProp.EventType = HSI_EVENT_ERROR;
|
|
|
|
|
sEvenProp.EventID = HSI_EVENT_MOTION;
|
|
|
|
|
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "光源板已断开连接");
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "光源板已断开连接");
|
|
|
|
|
EventCallback(sEvenProp);
|
|
|
|
|
m_ThreadTCP_State = TCPIP_THREAD_EXIT;
|
|
|
|
|
closesocket(m_socket[m_selectedIndex]);
|
|
|
|
@@ -6723,7 +6723,7 @@ TCPIP_RETURN_CODE HSI_Motion::TCPSend()
|
|
|
|
|
sEvenProp.EventType = HSI_EVENT_ERROR;
|
|
|
|
|
sEvenProp.EventID = HSI_EVENT_MOTION;
|
|
|
|
|
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "光源板已断开连接");
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "光源板已断开连接");
|
|
|
|
|
EventCallback(sEvenProp);
|
|
|
|
|
m_ThreadTCP_State = TCPIP_THREAD_EXIT;
|
|
|
|
|
closesocket(m_socket[m_selectedIndex]);
|
|
|
|
@@ -6845,7 +6845,7 @@ HSI_STATUS HSI_Motion::SetAllGears()
|
|
|
|
|
unsigned char send_glue_data[64] = { 0 };
|
|
|
|
|
send_glue_data[0] = 0x01;
|
|
|
|
|
send_glue_data[1] = 0x01;
|
|
|
|
|
send_glue_data[2] = 0x01 << (i - 1); //轴号
|
|
|
|
|
send_glue_data[2] = 0x01 << (i - 1); //轴号
|
|
|
|
|
send_glue_data[3] = 0x08;
|
|
|
|
|
|
|
|
|
|
for (size_t j = 0; j < 5; j++)
|
|
|
|
|