|
|
@@ -11,6 +11,7 @@
|
|
|
|
#include <iomanip>
|
|
|
|
#include <iomanip>
|
|
|
|
#include <conio.h>
|
|
|
|
#include <conio.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
#include <iostream>
|
|
|
|
#include "windows.h"
|
|
|
|
#include "windows.h"
|
|
|
|
#include "ACS/ACSC.h" //引入ACS运动控制卡头文件
|
|
|
|
#include "ACS/ACSC.h" //引入ACS运动控制卡头文件
|
|
|
|
using namespace std;
|
|
|
|
using namespace std;
|
|
|
@@ -65,6 +66,7 @@ SOCKET m_socket[4] = {0};
|
|
|
|
//===========================================================================
|
|
|
|
//===========================================================================
|
|
|
|
//运动类构造函数,涉及 运动控制参数、插补、回家、摇杆、日志等配置信息的加载
|
|
|
|
//运动类构造函数,涉及 运动控制参数、插补、回家、摇杆、日志等配置信息的加载
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void ErrorsHandler(const char* ErrorMessage, BOOL fCloseComm)
|
|
|
|
void ErrorsHandler(const char* ErrorMessage, BOOL fCloseComm)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
printf(ErrorMessage);
|
|
|
|
printf(ErrorMessage);
|
|
|
@@ -73,6 +75,32 @@ void ErrorsHandler(const char* ErrorMessage, BOOL fCloseComm)
|
|
|
|
_getch();
|
|
|
|
_getch();
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void ErrorsHandler()
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (handleACS != ACSC_INVALID)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
char ErrorStr[256];
|
|
|
|
|
|
|
|
int ErrorCode = 0;
|
|
|
|
|
|
|
|
int Received = 0;
|
|
|
|
|
|
|
|
ErrorCode = GetLastError();
|
|
|
|
|
|
|
|
if (acsc_GetErrorString(handleACS, // communication handle
|
|
|
|
|
|
|
|
ErrorCode, // error code
|
|
|
|
|
|
|
|
ErrorStr, // buffer for the error explanation
|
|
|
|
|
|
|
|
255, // available buffer length
|
|
|
|
|
|
|
|
&Received // number of actually received bytes
|
|
|
|
|
|
|
|
))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
ErrorStr[Received] = '\0';
|
|
|
|
|
|
|
|
printf("function returned error: %d (%s)\n", ErrorCode, ErrorStr);
|
|
|
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] motion failed {%s}\n", ErrorStr);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] ACS Communication handle is invalid\n");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HSI_Motion::HSI_Motion()
|
|
|
|
HSI_Motion::HSI_Motion()
|
|
|
|
{
|
|
|
|
{
|
|
|
@@ -258,7 +286,7 @@ HSI_Motion::HSI_Motion()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
GetAppPath(m_AppPath);
|
|
|
|
GetAppPath(m_AppPath);
|
|
|
|
m_LogIsOpen[0] = GetPrivateProfileInt(L"LOG", L"LOG_IS_OPEN_0", 0, m_AppPath + _T("\\Config\\EF3_Motion.ini"));
|
|
|
|
m_LogIsOpen[0] = GetPrivateProfileInt(L"LOG", L"LOG_IS_OPEN_0", 0, m_AppPath + _T("\\Config\\EF3_Motion.ini"));
|
|
|
|
g_pLogger->IsEnabledLog = m_LogIsOpen[0] == 1 ? true : false;//是否启用日志
|
|
|
|
g_pLogger->IsEnabledLog = m_LogIsOpen[0] == 1 ? true : false; //是否启用日志
|
|
|
|
|
|
|
|
|
|
|
|
m_Set_XYZA_Reserve = 0; //XYZA轴方向
|
|
|
|
m_Set_XYZA_Reserve = 0; //XYZA轴方向
|
|
|
|
m_motorType = 0; //电机类型 1为伺服电机 0为步进电机
|
|
|
|
m_motorType = 0; //电机类型 1为伺服电机 0为步进电机
|
|
|
@@ -380,8 +408,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
|
|
|
return HSI_STATUS_NORMAL;
|
|
|
|
return HSI_STATUS_NORMAL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[Startup] In\n");
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[Startup] In\n");
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[Startup] HMQ HSI.dll version = %s, date = %s\n", HSI_VERSION_CSTRING,
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[Startup] HMQ HSI.dll version = %s, date = %s\n", HSI_VERSION_CSTRING, HSI_FILE_CSDESCRIPTION); //输出HSI.dll 版本号
|
|
|
|
HSI_FILE_CSDESCRIPTION); //输出HSI.dll 版本号
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GoogolMotionConfigFile = m_AppPath + _T("\\Config\\EF3_Config.ini");
|
|
|
|
GoogolMotionConfigFile = m_AppPath + _T("\\Config\\EF3_Config.ini");
|
|
|
|
Load_EF3_Config_Inifile(GoogolMotionConfigFile); //加载 EF3_Config.ini 配置项
|
|
|
|
Load_EF3_Config_Inifile(GoogolMotionConfigFile); //加载 EF3_Config.ini 配置项
|
|
|
@@ -431,8 +458,9 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
|
|
|
|
|
|
|
|
|
|
|
if (handleACS == ACSC_INVALID) //打开失败
|
|
|
|
if (handleACS == ACSC_INVALID) //打开失败
|
|
|
|
{
|
|
|
|
{
|
|
|
|
ErrorsHandler("error while opening communication.\n", FALSE);
|
|
|
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] error while opening communication.\n");
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] error while opening communication.\n");
|
|
|
|
|
|
|
|
ErrorsHandler();
|
|
|
|
|
|
|
|
|
|
|
|
sEvenProp.Init();
|
|
|
|
sEvenProp.Init();
|
|
|
|
sEvenProp.EventType = HSI_EVENT_ERROR;
|
|
|
|
sEvenProp.EventType = HSI_EVENT_ERROR;
|
|
|
|
sEvenProp.EventID = HSI_EVENT_MOTION;
|
|
|
|
sEvenProp.EventID = HSI_EVENT_MOTION;
|
|
|
@@ -442,17 +470,23 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
|
|
|
return HSI_STATUS_FAILED;
|
|
|
|
return HSI_STATUS_FAILED;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
m_bACSConnected = true;
|
|
|
|
m_bACSConnected = true;
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] ACS Established Success\n");
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] ACS Established Success!\n");
|
|
|
|
|
|
|
|
|
|
|
|
//获取ACS 控制器版本号
|
|
|
|
//获取ACS 控制器版本号, 待测试,2.70
|
|
|
|
char Firmware[256];
|
|
|
|
char Firmware[256];
|
|
|
|
int Received;
|
|
|
|
int Received;
|
|
|
|
if (!acsc_GetFirmwareVersion(handleACS, Firmware, 255, &Received, nullptr))
|
|
|
|
if (!acsc_GetFirmwareVersion(handleACS, Firmware, 255, &Received, nullptr))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] GET ACS Controller Version failed\n");
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] GET ACS Controller Version failed!\n");
|
|
|
|
|
|
|
|
ErrorsHandler();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] ACS Controller Version: %s\n",
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] ACS Controller Version: %s\n", Firmware);
|
|
|
|
convertToString(Firmware, Received));
|
|
|
|
|
|
|
|
//获取SPiiPlus C Library version
|
|
|
|
|
|
|
|
unsigned int Ver = acsc_GetLibraryVersion();
|
|
|
|
|
|
|
|
printf("SPiiPlus C Library version is %d.%d.%d.%d\n", HIBYTE(HIWORD(Ver)), LOBYTE(HIWORD(Ver)), HIBYTE(LOWORD(Ver)),
|
|
|
|
|
|
|
|
LOBYTE(LOWORD(Ver)));
|
|
|
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] SPiiPlus C Library version is %d.%d.%d.%d\n", HIBYTE(HIWORD(Ver)), LOBYTE(HIWORD(Ver)), HIBYTE(LOWORD(Ver)),LOBYTE(LOWORD(Ver)));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
@@ -671,10 +705,10 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[Startup] Set Gears Success\n");
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[Startup] Set Gears Success\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//CreateThread(); //刷新位置状态线程
|
|
|
|
CreateThread(); //刷新位置状态线程
|
|
|
|
//SetEvent(m_hTriggerEvent);
|
|
|
|
SetEvent(m_hTriggerEvent);
|
|
|
|
//m_Thread_State = HSI_THREAD_PAUSED;
|
|
|
|
m_Thread_State = HSI_THREAD_PAUSED;
|
|
|
|
//g_pLogger->SendAndFlushWithTime(L"[Startup] SetpositionXyz Enable\n");
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[Startup] SetpositionXyz Enable\n");
|
|
|
|
|
|
|
|
|
|
|
|
//CreateThreadData(); //读取EF3数据状态线程
|
|
|
|
//CreateThreadData(); //读取EF3数据状态线程
|
|
|
|
//SetEvent(m_hTriggerEventData);
|
|
|
|
//SetEvent(m_hTriggerEventData);
|
|
|
@@ -862,11 +896,13 @@ HSI_STATUS HSI_Motion::HomeMachineOld(bool bHomed)
|
|
|
|
//GetHomePos[3] = (m_SO7_Serial.m_RecvData[9] << 24 | m_SO7_Serial.m_RecvData[10] << 16 | m_SO7_Serial.m_RecvData[11] << 8 | m_SO7_Serial.m_RecvData[12]);
|
|
|
|
//GetHomePos[3] = (m_SO7_Serial.m_RecvData[9] << 24 | m_SO7_Serial.m_RecvData[10] << 16 | m_SO7_Serial.m_RecvData[11] << 8 | m_SO7_Serial.m_RecvData[12]);
|
|
|
|
//GetHomePos[4] = (m_SO7_Serial.m_RecvData[13] << 24 | m_SO7_Serial.m_RecvData[14] << 16 | m_SO7_Serial.m_RecvData[15] << 8 | m_SO7_Serial.m_RecvData[16]);
|
|
|
|
//GetHomePos[4] = (m_SO7_Serial.m_RecvData[13] << 24 | m_SO7_Serial.m_RecvData[14] << 16 | m_SO7_Serial.m_RecvData[15] << 8 | m_SO7_Serial.m_RecvData[16]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//取消限位,设置初始速度,加减速等参数
|
|
|
|
//取消限位,设置初始速度,加减速等参数
|
|
|
|
if (HSI_STATUS_NORMAL != HomeFindIndex())
|
|
|
|
if (HSI_STATUS_NORMAL != HomeFindIndex())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return HSI_STATUS_FAILED;
|
|
|
|
return HSI_STATUS_FAILED;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int SavePos[5] = {0};
|
|
|
|
int SavePos[5] = {0};
|
|
|
|
if (m_SO7_Serial.m_RecvData[0] == 2)
|
|
|
|
if (m_SO7_Serial.m_RecvData[0] == 2)
|
|
|
|
{
|
|
|
|
{
|
|
|
@@ -1012,7 +1048,8 @@ HSI_STATUS HSI_Motion::HomeMachine(bool bHomed)
|
|
|
|
//回家后,启用正负限位
|
|
|
|
//回家后,启用正负限位
|
|
|
|
if (!acsc_RunBuffer(handleACS, ACSC_BUFFER_6, nullptr, ACSC_SYNCHRONOUS))
|
|
|
|
if (!acsc_RunBuffer(handleACS, ACSC_BUFFER_6, nullptr, ACSC_SYNCHRONOUS))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[HomeMachine] ACS Run Buffer 0 error\n");
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[HomeMachine] ACS Run Buffer %d error\n", ACSC_BUFFER_6);
|
|
|
|
|
|
|
|
ErrorsHandler();
|
|
|
|
return HSI_STATUS_FAILED;
|
|
|
|
return HSI_STATUS_FAILED;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@@ -1370,7 +1407,7 @@ HSI_STATUS HSI_Motion::IsHomed(bool& bHomed)
|
|
|
|
if (g_pHSI_Motion && handleACS != ACSC_INVALID)
|
|
|
|
if (g_pHSI_Motion && handleACS != ACSC_INVALID)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[IsHomed] In\n");
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[IsHomed] In\n");
|
|
|
|
int isHomed[5] = {1, 1, 1, 1, 1};
|
|
|
|
int isHomed[5] = {0, 1, 1, 1, 1}; //暂定只有一个回家标志位,即全部回家完成,没有按单个轴回家来看
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//所有轴都不需要回家
|
|
|
|
//所有轴都不需要回家
|
|
|
@@ -1389,17 +1426,18 @@ HSI_STATUS HSI_Motion::IsHomed(bool& bHomed)
|
|
|
|
nullptr))
|
|
|
|
nullptr))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[IsHomed] ACS Read ISHOMED Flag Error\n");
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[IsHomed] ACS Read ISHOMED Flag Error\n");
|
|
|
|
|
|
|
|
ErrorsHandler();
|
|
|
|
|
|
|
|
|
|
|
|
CurrentHomeMachineState = E_EF3_HOME_NONE;
|
|
|
|
CurrentHomeMachineState = E_EF3_HOME_NONE;
|
|
|
|
rStatus = HSI_STATUS_FAILED;
|
|
|
|
rStatus = HSI_STATUS_FAILED;
|
|
|
|
bHomed = false;
|
|
|
|
bHomed = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[IsHomed] ACS Read YAW_HOME_DONE X:%d Y1:%d Y2:%d Z:%d\n", isHomed[0],
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[IsHomed] ACS Read YAW_HOME_DONE X:[%d] Y1:[%d] Y2:[%d] Z:[%d]\n", isHomed[0],
|
|
|
|
isHomed[1],
|
|
|
|
isHomed[1], isHomed[2], isHomed[3]);
|
|
|
|
isHomed[2], isHomed[3]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//如果各个轴标志位 已经回过家
|
|
|
|
//如果各个轴标志位 已经回过家
|
|
|
|
if (isHomed[1] == 1 && isHomed[2] == 1 && isHomed[3] == 1 && isHomed[4] == 1)
|
|
|
|
if (isHomed[0] == 1 && isHomed[1] == 1 && isHomed[2] == 1 && isHomed[3] == 1)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[IsHomed] E_GTS_HOME_FINISHED\n");
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[IsHomed] E_GTS_HOME_FINISHED\n");
|
|
|
|
CurrentHomeMachineState = E_EF3_HOME_FINISHED;
|
|
|
|
CurrentHomeMachineState = E_EF3_HOME_FINISHED;
|
|
|
@@ -2446,23 +2484,26 @@ HSI_STATUS HSI_Motion::GetPositionXyz(UINT AxisTypes, double& PositionX, double&
|
|
|
|
CString tempStr;
|
|
|
|
CString tempStr;
|
|
|
|
bool bGetPosition = true;
|
|
|
|
bool bGetPosition = true;
|
|
|
|
|
|
|
|
|
|
|
|
if (g_pHSI_Motion)
|
|
|
|
if (g_pHSI_Motion &&(handleACS!=ACSC_INVALID)) //句柄有效
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (!acsc_GetFPosition(handleACS, ACSC_AXIS_0, &PositionX, nullptr))
|
|
|
|
if (!acsc_GetFPosition(handleACS, ACSC_AXIS_0, &PositionX, nullptr))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] get PositionX failed\n");
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] get PositionX failed\n");
|
|
|
|
|
|
|
|
ErrorsHandler();
|
|
|
|
bGetPosition = false;
|
|
|
|
bGetPosition = false;
|
|
|
|
return HSI_ACS_ERROR;
|
|
|
|
return HSI_ACS_ERROR;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!acsc_GetFPosition(handleACS, ACSC_AXIS_1, &PositionY, nullptr))
|
|
|
|
if (!acsc_GetFPosition(handleACS, ACSC_AXIS_1, &PositionY, nullptr))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] get PositionY failed\n");
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] get PositionY failed\n");
|
|
|
|
|
|
|
|
ErrorsHandler();
|
|
|
|
bGetPosition = false;
|
|
|
|
bGetPosition = false;
|
|
|
|
return HSI_ACS_ERROR;
|
|
|
|
return HSI_ACS_ERROR;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!acsc_GetFPosition(handleACS, ACSC_AXIS_2, &PositionZ, nullptr))
|
|
|
|
if (!acsc_GetFPosition(handleACS, ACSC_AXIS_2, &PositionZ, nullptr))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] get PositionZ failed\n");
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] get PositionZ failed\n");
|
|
|
|
|
|
|
|
ErrorsHandler();
|
|
|
|
bGetPosition = false;
|
|
|
|
bGetPosition = false;
|
|
|
|
return HSI_ACS_ERROR;
|
|
|
|
return HSI_ACS_ERROR;
|
|
|
|
}
|
|
|
|
}
|
|
|
@@ -2476,6 +2517,8 @@ HSI_STATUS HSI_Motion::GetPositionXyz(UINT AxisTypes, double& PositionX, double&
|
|
|
|
m_PosForAllAxis[1] = PositionX;
|
|
|
|
m_PosForAllAxis[1] = PositionX;
|
|
|
|
m_PosForAllAxis[2] = PositionY;
|
|
|
|
m_PosForAllAxis[2] = PositionY;
|
|
|
|
m_PosForAllAxis[3] = PositionZ;
|
|
|
|
m_PosForAllAxis[3] = PositionZ;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] GetPosition Success, Pos[1] = %.4f,Pos[2] = %.4f,Pos[3] = %.4f,Pos[4] = %.4f\n", PositionX, PositionY, PositionZ, m_PosForAllAxis[4]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else //读取将之前的值进行返回
|
|
|
|
else //读取将之前的值进行返回
|
|
|
|
{
|
|
|
|
{
|
|
|
@@ -2486,7 +2529,8 @@ HSI_STATUS HSI_Motion::GetPositionXyz(UINT AxisTypes, double& PositionX, double&
|
|
|
|
m_PosForAllAxis[2] = m_EncPos[2];
|
|
|
|
m_PosForAllAxis[2] = m_EncPos[2];
|
|
|
|
m_PosForAllAxis[3] = m_EncPos[3];
|
|
|
|
m_PosForAllAxis[3] = m_EncPos[3];
|
|
|
|
m_PosForAllAxis[4] = m_EncPos[4];
|
|
|
|
m_PosForAllAxis[4] = m_EncPos[4];
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] failed\n");
|
|
|
|
|
|
|
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] GetPosition failed, return position record before, Pos[1] = %.4f,Pos[2] = %.4f,Pos[3] = %.4f,Pos[4] = %.4f\n", m_EncPos[1], m_EncPos[2], m_EncPos[3], m_PosForAllAxis[4]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Time = set_end - set_start;
|
|
|
|
Time = set_end - set_start;
|
|
|
@@ -3145,8 +3189,7 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double P
|
|
|
|
if (g_pHSI_Motion)
|
|
|
|
if (g_pHSI_Motion)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] In\n");
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] In\n");
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] Pos[1] = %.4f,Pos[2] = %.4f,Pos[3] = %.4f\n", PositionX,
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] Pos[1] = %.4f,Pos[2] = %.4f,Pos[3] = %.4f\n", PositionX,PositionY, PositionZ);
|
|
|
|
PositionY, PositionZ);
|
|
|
|
|
|
|
|
unsigned char send_pos_data[64] = {0};
|
|
|
|
unsigned char send_pos_data[64] = {0};
|
|
|
|
axis_start = 0;
|
|
|
|
axis_start = 0;
|
|
|
|
unsigned char direct_pos = 0;
|
|
|
|
unsigned char direct_pos = 0;
|
|
|
@@ -3160,7 +3203,8 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double P
|
|
|
|
LimitOver(HSI_MOTION_AXIS_Z, PositionZ);
|
|
|
|
LimitOver(HSI_MOTION_AXIS_Z, PositionZ);
|
|
|
|
LimitOver(HSI_MOTION_AXIS_R, m_PositionA);
|
|
|
|
LimitOver(HSI_MOTION_AXIS_R, m_PositionA);
|
|
|
|
|
|
|
|
|
|
|
|
m_PosThread[1] = PositionX; //SetpositionXyz的目标位置
|
|
|
|
//SetpositionXyz的目标位置
|
|
|
|
|
|
|
|
m_PosThread[1] = PositionX;
|
|
|
|
m_PosThread[2] = PositionY;
|
|
|
|
m_PosThread[2] = PositionY;
|
|
|
|
m_PosThread[3] = PositionZ;
|
|
|
|
m_PosThread[3] = PositionZ;
|
|
|
|
m_PosThread[4] = m_PositionA;
|
|
|
|
m_PosThread[4] = m_PositionA;
|
|
|
@@ -3185,13 +3229,16 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double P
|
|
|
|
|
|
|
|
|
|
|
|
//设置轴运动速度,TO-DO
|
|
|
|
//设置轴运动速度,TO-DO
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//开始运动到指定位置
|
|
|
|
//开始运动到指定位置
|
|
|
|
int Axes[] = {ACSC_AXIS_0, ACSC_AXIS_1, ACSC_AXIS_2}; //需要运动的轴
|
|
|
|
int Axes[] = {ACSC_AXIS_0, ACSC_AXIS_1,-1}; //需要运动的轴
|
|
|
|
double Points[] = {PositionX, PositionY, PositionZ}; //目标位置点
|
|
|
|
double Points[] = {PositionX, PositionY,-1}; //目标位置点
|
|
|
|
if (!acsc_ToPointM(handleACS, 0, Axes, Points, nullptr))
|
|
|
|
if (!acsc_ToPointM(handleACS, 0, Axes, Points, nullptr))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] ACS Multi Motion Error");
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] ACS Multi Motion Error\n");
|
|
|
|
|
|
|
|
ErrorsHandler();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//启动插补和定位功能
|
|
|
|
//启动插补和定位功能
|
|
|
@@ -3791,6 +3838,9 @@ void HSI_Motion::SendMsgProbeFinished()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//===========================================================================
|
|
|
|
//===========================================================================
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* \brief 刷新运动状态,运动命令发出后,通过EF3板判断是否运动停止,读脉冲数进行到位轴判断(是否超时),欧式距离判断(是否超时),发送运动完成。
|
|
|
|
|
|
|
|
*/
|
|
|
|
void HSI_Motion::UpdateMotionState()
|
|
|
|
void HSI_Motion::UpdateMotionState()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (g_pHSI_Motion && m_IsExMotion == 0)
|
|
|
|
if (g_pHSI_Motion && m_IsExMotion == 0)
|
|
|
@@ -3802,50 +3852,53 @@ void HSI_Motion::UpdateMotionState()
|
|
|
|
bool interpolationflag = false;
|
|
|
|
bool interpolationflag = false;
|
|
|
|
bool timeoutflag = false;
|
|
|
|
bool timeoutflag = false;
|
|
|
|
int timeStart = GetTickCount();
|
|
|
|
int timeStart = GetTickCount();
|
|
|
|
// bool singleaxisflag_x = false;
|
|
|
|
|
|
|
|
// bool singleaxisflag_y = false;
|
|
|
|
//do
|
|
|
|
// bool singleaxisflag_z = false;
|
|
|
|
//{
|
|
|
|
// bool singleaxisflag_a = false;
|
|
|
|
// if (g_IsClose)
|
|
|
|
do
|
|
|
|
// {
|
|
|
|
{
|
|
|
|
// g_IsClose = false;
|
|
|
|
if (g_IsClose)
|
|
|
|
// break;
|
|
|
|
{
|
|
|
|
// }
|
|
|
|
g_IsClose = false;
|
|
|
|
// //
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
// printf("wait for motion end\n");
|
|
|
|
if (m_SO7_Serial.m_RecvData[0] == 2)
|
|
|
|
// acsc_WaitMotionEnd(handleACS, ACSC_AXIS_0, INFINITE);
|
|
|
|
{
|
|
|
|
// printf("motion end\n");
|
|
|
|
if ((m_SO7_Serial.m_RecvData[39] & 0x10))
|
|
|
|
|
|
|
|
{
|
|
|
|
// if (m_SO7_Serial.m_RecvData[0] == 2)
|
|
|
|
m_SO7_Serial.m_RecvData[39] = 0;
|
|
|
|
// {
|
|
|
|
SpCompleteTStart = GetTickCount();
|
|
|
|
// if ((m_SO7_Serial.m_RecvData[39] & 0x10))
|
|
|
|
interpolationflag = true;
|
|
|
|
// {
|
|
|
|
break;
|
|
|
|
// m_SO7_Serial.m_RecvData[39] = 0;
|
|
|
|
}
|
|
|
|
// SpCompleteTStart = GetTickCount();
|
|
|
|
//else if ((m_SO7_Serial.m_RecvData[39] == 0x07))//axis_start
|
|
|
|
// interpolationflag = true;
|
|
|
|
if ((m_SO7_Serial.m_RecvData[39] == axis_start)/* &&(m_motorType == 0)*/)
|
|
|
|
// break;
|
|
|
|
{
|
|
|
|
// }
|
|
|
|
m_SO7_Serial.m_RecvData[39] = 0;
|
|
|
|
// //else if ((m_SO7_Serial.m_RecvData[39] == 0x07))//axis_start
|
|
|
|
SpCompleteTStart = GetTickCount();
|
|
|
|
// if ((m_SO7_Serial.m_RecvData[39] == axis_start)/* &&(m_motorType == 0)*/)
|
|
|
|
interpolationflag = true;
|
|
|
|
// {
|
|
|
|
break;
|
|
|
|
// m_SO7_Serial.m_RecvData[39] = 0;
|
|
|
|
}
|
|
|
|
// SpCompleteTStart = GetTickCount();
|
|
|
|
if (m_SO7_Serial.m_RecvData[39] & 0x20)
|
|
|
|
// interpolationflag = true;
|
|
|
|
{
|
|
|
|
// break;
|
|
|
|
m_SO7_Serial.m_RecvData[39] = 0;
|
|
|
|
// }
|
|
|
|
timeoutflag = true;
|
|
|
|
// if (m_SO7_Serial.m_RecvData[39] & 0x20)
|
|
|
|
break;
|
|
|
|
// {
|
|
|
|
}
|
|
|
|
// m_SO7_Serial.m_RecvData[39] = 0;
|
|
|
|
}
|
|
|
|
// timeoutflag = true;
|
|
|
|
Sleep(1);
|
|
|
|
// break;
|
|
|
|
int timeEnd = GetTickCount();
|
|
|
|
// }
|
|
|
|
if (timeStart - timeEnd > 10 * 1000)
|
|
|
|
// }
|
|
|
|
{
|
|
|
|
// Sleep(1);
|
|
|
|
timeoutflag = true;
|
|
|
|
// int timeEnd = GetTickCount();
|
|
|
|
break;
|
|
|
|
// if (timeStart - timeEnd > 10 * 1000)
|
|
|
|
}
|
|
|
|
// {
|
|
|
|
}
|
|
|
|
// timeoutflag = true;
|
|
|
|
while (true);
|
|
|
|
// break;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
//while (true);
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[UpdateMotionState] Nowait Run End\n");
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[UpdateMotionState] Nowait Run End\n");
|
|
|
|
unsigned int tempPrecision[5] = {
|
|
|
|
unsigned int tempPrecision[5] = {
|
|
|
|
0, m_precisionCount[1], m_precisionCount[2], m_precisionCount[3], m_precisionCount[4]
|
|
|
|
0, m_precisionCount[1], m_precisionCount[2], m_precisionCount[3], m_precisionCount[4]
|
|
|
@@ -3952,7 +4005,7 @@ void HSI_Motion::UpdateMotionState()
|
|
|
|
m_Thread_State = HSI_THREAD_PAUSED;
|
|
|
|
m_Thread_State = HSI_THREAD_PAUSED;
|
|
|
|
CurrentMotionState = E_SO7_MOTION_NONE;
|
|
|
|
CurrentMotionState = E_SO7_MOTION_NONE;
|
|
|
|
m_IsExMotion = 2;
|
|
|
|
m_IsExMotion = 2;
|
|
|
|
SendMsgMotionFinished();
|
|
|
|
SendMsgMotionFinished();//定位完成
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
default:
|
|
|
@@ -3966,6 +4019,180 @@ void HSI_Motion::UpdateMotionState()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void HSI_Motion::UpdateMotionStateOld()
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (g_pHSI_Motion && m_IsExMotion == 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[UpdateMotionState] In\n");
|
|
|
|
|
|
|
|
while (m_Thread_State == HSI_THREAD_RUNNING)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
g_IsClose = false;
|
|
|
|
|
|
|
|
bool interpolationflag = false;
|
|
|
|
|
|
|
|
bool timeoutflag = false;
|
|
|
|
|
|
|
|
int timeStart = GetTickCount();
|
|
|
|
|
|
|
|
// bool singleaxisflag_x = false;
|
|
|
|
|
|
|
|
// bool singleaxisflag_y = false;
|
|
|
|
|
|
|
|
// bool singleaxisflag_z = false;
|
|
|
|
|
|
|
|
// bool singleaxisflag_a = false;
|
|
|
|
|
|
|
|
do
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (g_IsClose)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
g_IsClose = false;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (m_SO7_Serial.m_RecvData[0] == 2)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if ((m_SO7_Serial.m_RecvData[39] & 0x10))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
m_SO7_Serial.m_RecvData[39] = 0;
|
|
|
|
|
|
|
|
SpCompleteTStart = GetTickCount();
|
|
|
|
|
|
|
|
interpolationflag = true;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//else if ((m_SO7_Serial.m_RecvData[39] == 0x07))//axis_start
|
|
|
|
|
|
|
|
if ((m_SO7_Serial.m_RecvData[39] == axis_start)/* &&(m_motorType == 0)*/)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
m_SO7_Serial.m_RecvData[39] = 0;
|
|
|
|
|
|
|
|
SpCompleteTStart = GetTickCount();
|
|
|
|
|
|
|
|
interpolationflag = true;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (m_SO7_Serial.m_RecvData[39] & 0x20)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
m_SO7_Serial.m_RecvData[39] = 0;
|
|
|
|
|
|
|
|
timeoutflag = true;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
Sleep(1);
|
|
|
|
|
|
|
|
int timeEnd = GetTickCount();
|
|
|
|
|
|
|
|
if (timeStart - timeEnd > 10 * 1000)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
timeoutflag = true;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} while (true);
|
|
|
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[UpdateMotionState] Nowait Run End\n");
|
|
|
|
|
|
|
|
unsigned int tempPrecision[5] = {
|
|
|
|
|
|
|
|
0, m_precisionCount[1], m_precisionCount[2], m_precisionCount[3], m_precisionCount[4]
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
tempPrecision[1] = m_Home_Machine_Axis[1] == 0 ? 10000000 : m_precisionCount[1]; //用于启动时需要回原点的轴号选择,读取回家误差脉冲数
|
|
|
|
|
|
|
|
tempPrecision[2] = m_Home_Machine_Axis[2] == 0 ? 10000000 : m_precisionCount[2];
|
|
|
|
|
|
|
|
tempPrecision[3] = m_Home_Machine_Axis[3] == 0 ? 10000000 : m_precisionCount[3];
|
|
|
|
|
|
|
|
tempPrecision[4] = m_Home_Machine_Axis[4] == 0 ? 10000000 : m_precisionCount[4];
|
|
|
|
|
|
|
|
int i = 0, j = 0;
|
|
|
|
|
|
|
|
unsigned long Count = 0;
|
|
|
|
|
|
|
|
double prfpos[5] = { 0 };
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//GetPositionEncPrfMulti(1, m_EncPos, m_PrfPos, 4);
|
|
|
|
|
|
|
|
//double EncPos[5] = { 0.0 };
|
|
|
|
|
|
|
|
// double ProPulse[5] = { 0.0 };
|
|
|
|
|
|
|
|
if (interpolationflag && m_motorType)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
while (Count < m_SetPotion_Count[1]) //到位次数判断
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Sleep(2);
|
|
|
|
|
|
|
|
GetPositionXyz(HSI_MOTION_AXIS_ALL, prfpos[1], prfpos[2], prfpos[3], prfpos[0]);
|
|
|
|
|
|
|
|
//目标位置 和当前位置 小于回家误差脉冲数
|
|
|
|
|
|
|
|
if ((fabs(m_PosThread[1] - prfpos[1]) <= tempPrecision[1] * m_Resolution[1]) && (
|
|
|
|
|
|
|
|
fabs(m_PosThread[2] - prfpos[2]) <= tempPrecision[2] * m_Resolution[2]) && (
|
|
|
|
|
|
|
|
fabs(m_PosThread[3] - prfpos[3]) <= tempPrecision[3] * m_Resolution[3]) && (fabs(
|
|
|
|
|
|
|
|
m_PosThread[4] - m_PosForAllAxis[4]) <= tempPrecision[4] * m_Resolution[4]))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
i++;
|
|
|
|
|
|
|
|
if (m_SetPotion_Count[1] > m_setPositionNum)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
j = m_setPositionNum;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
j = m_SetPotion_Count[1];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (i == j)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
set_end = GetTickCount();
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
Count++;
|
|
|
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[UpdateMotionState] m_SetPotion_Count = %d\n", Count); //打印到位轴数量
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//if (Count == m_SetPotion_Count[1]) //超时退出
|
|
|
|
|
|
|
|
//{
|
|
|
|
|
|
|
|
// if (g_IsClose == false)
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// g_pLogger->SendAndFlushWithTime(L"[UpdateMotionState] Nowait Timeout\n");
|
|
|
|
|
|
|
|
// sEvenProp.Init();
|
|
|
|
|
|
|
|
// sEvenProp.EventType = HSI_EVENT_ERROR;
|
|
|
|
|
|
|
|
// sEvenProp.EventID = HSI_EVENT_MOTION;
|
|
|
|
|
|
|
|
// sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
|
|
|
|
|
|
|
// strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Nowait_HSI定位超时!");
|
|
|
|
|
|
|
|
// EventCallback(sEvenProp);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// else
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// g_pLogger->SendAndFlushWithTime(L"[UpdateMotionState] Nowait Timeout Is AbortMotion\n");
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (interpolationflag)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
SpCompleteTEnd = GetTickCount();
|
|
|
|
|
|
|
|
SpTimeCount = SpCompleteTEnd - SpCompleteTStart;
|
|
|
|
|
|
|
|
double dis = pow(m_PrfPos[1] - m_EncPos[1], 2.0) + pow(m_PrfPos[2] - m_EncPos[2], 2.0) + pow(
|
|
|
|
|
|
|
|
m_PrfPos[3] - m_EncPos[3], 2.0);
|
|
|
|
|
|
|
|
if (dis > 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
PntToPntDistance = sqrt(dis); //欧氏距离
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
PntToPntDistance = 0.0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
SetPotionRunEnd = true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(
|
|
|
|
|
|
|
|
L"[UpdateMotionState] m_PosThread[1] = %.4f,m_PosThread[2] = %.4f,m_PosThread[3] = %.4f\n",
|
|
|
|
|
|
|
|
m_PosThread[1], m_PosThread[2], m_PosThread[3]);
|
|
|
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[UpdateMotionState] Pos[1] = %.4f,Pos[2] = %.4f,Pos[3] = %.4f\n",
|
|
|
|
|
|
|
|
prfpos[1], prfpos[2], prfpos[3]);
|
|
|
|
|
|
|
|
if (timeoutflag) //定位超时
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[UpdateMotionState] Nowait Timeout\n");
|
|
|
|
|
|
|
|
sEvenProp.Init();
|
|
|
|
|
|
|
|
sEvenProp.EventType = HSI_EVENT_ERROR;
|
|
|
|
|
|
|
|
sEvenProp.EventID = HSI_EVENT_MOTION;
|
|
|
|
|
|
|
|
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
|
|
|
|
|
|
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Nowait_EF3定位超时!");
|
|
|
|
|
|
|
|
EventCallback(sEvenProp);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (CurrentMotionState)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
case E_SO7_MOTION_MOVETO:
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(
|
|
|
|
|
|
|
|
L"[UpdateMotionState] Nowait CurrentMotionState E_SO7_MOTION_MOVETO\n");
|
|
|
|
|
|
|
|
m_Thread_State = HSI_THREAD_PAUSED;
|
|
|
|
|
|
|
|
CurrentMotionState = E_SO7_MOTION_NONE;
|
|
|
|
|
|
|
|
m_IsExMotion = 2;
|
|
|
|
|
|
|
|
SendMsgMotionFinished();
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[UpdateMotionState] Nowait CurrentMotionState default\n");
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
g_pLogger->SendAndFlushWithTime(L"[UpdateMotionState] Out\n");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//===========================================================================
|
|
|
|
//===========================================================================
|
|
|
|
void HSI_Motion::UpdateMotionStateEx()
|
|
|
|
void HSI_Motion::UpdateMotionStateEx()
|
|
|
|
{
|
|
|
|
{
|
|
|
|