增加JOG运动 函数
This commit is contained in:
@@ -439,6 +439,17 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
m_bACSConnected = true;
|
||||
g_pLogger->SendAndFlushWithTime(
|
||||
L"[ACS Motion] Communication with the controller established success\n");
|
||||
|
||||
//获取ACS 控制器版本号
|
||||
char Firmware[256];
|
||||
int Received;
|
||||
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] ACS Controller Version: %s \n",Firmware);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -768,7 +779,12 @@ HSI_STATUS HSI_Motion::GetFirmwareVersion(byte* version)
|
||||
return HSI_STATUS_NORMAL;
|
||||
}
|
||||
|
||||
//================================回家=======================================
|
||||
//===========================================================================
|
||||
/**
|
||||
* \brief 回家
|
||||
* \param bHomed
|
||||
* \return
|
||||
*/
|
||||
HSI_STATUS HSI_Motion::HomeMachineOld(bool bHomed)
|
||||
{
|
||||
auto rStatus = HSI_STATUS_NORMAL;
|
||||
@@ -1451,11 +1467,11 @@ HSI_STATUS HSI_Motion::ZeroPos(bool bZeroPos)
|
||||
//===========================================================================
|
||||
/**
|
||||
* \brief JOG模式
|
||||
* \param AxisTypes
|
||||
* \param Speed
|
||||
* \param AxisTypes 单轴
|
||||
* \param Speed 速度,Speed > 0 正移动
|
||||
* \return
|
||||
*/
|
||||
HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
|
||||
HSI_STATUS HSI_Motion::JogOld(UINT AxisTypes, double Speed)
|
||||
{
|
||||
auto rStatus = HSI_STATUS_NORMAL;
|
||||
if (g_pHSI_Motion)
|
||||
@@ -1743,6 +1759,62 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
|
||||
return rStatus;
|
||||
}
|
||||
|
||||
HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
|
||||
{
|
||||
auto rStatus = HSI_STATUS_NORMAL;
|
||||
if (g_pHSI_Motion)
|
||||
{
|
||||
if (m_DeviceType != 3)
|
||||
{
|
||||
m_Thread_StateJOGStop = HSI_THREAD_RUNNING;
|
||||
SetEvent(m_hTriggerEventJOGStop);
|
||||
}
|
||||
|
||||
bool bJOGDir = Speed > 0 ? true : false; //运动方向
|
||||
byte AxisNumber = static_cast<byte>(AxisConvertIndex(AxisTypes));
|
||||
jogAxisNum = AxisNumber;
|
||||
jogDirFlag = bJOGDir;
|
||||
m_Thread_State = HSI_THREAD_PAUSED;
|
||||
if (CurrentHomeMachineState == E_EF3_HOME_FINISHED)
|
||||
{
|
||||
//软限位
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
//无效软限位
|
||||
}
|
||||
if (m_Home_Machine_Axis[AxisNumber] == 0)
|
||||
{
|
||||
return rStatus;
|
||||
}
|
||||
|
||||
|
||||
//设置 JOG运动参数 加减速 JOG_SPEED_ACC_DEC
|
||||
|
||||
// 是否启用急停
|
||||
//if ((StartSpeed < 250) && (DriveSpeed < 6))
|
||||
//{
|
||||
// m_IsUseJerk = 1;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// m_IsUseJerk = 0;
|
||||
//}
|
||||
|
||||
//开始JOG运动
|
||||
int acsDirection = bJOGDir ? ACSC_POSITIVE_DIRECTION : ACSC_NEGATIVE_DIRECTION;
|
||||
if (!acsc_Jog(handleACS, 0, AxisTypes, acsDirection, nullptr))
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[Jog] [%d] 轴 [%s] 方向移动失败",AxisTypes,bJOGDir?"正":"负");
|
||||
}
|
||||
|
||||
jogMoving = true;
|
||||
g_pLogger->SendAndFlushWithTime(L"[Jog] Out,bJOGDir = %d\n", bJOGDir);
|
||||
}
|
||||
return rStatus;
|
||||
}
|
||||
|
||||
//JOG模式
|
||||
//===========================================================================
|
||||
HSI_STATUS HSI_Motion::JoyStick(UINT AxisTypes, long Speed)
|
||||
@@ -2039,6 +2111,10 @@ HSI_STATUS HSI_Motion::JoyStick(UINT AxisTypes, long Speed)
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
/**
|
||||
* \brief
|
||||
* \return
|
||||
*/
|
||||
HSI_STATUS HSI_Motion::StopJog()
|
||||
{
|
||||
WaitForSingleObject(g_Lock_JogAndTrigger, INFINITE);
|
||||
@@ -2085,6 +2161,52 @@ HSI_STATUS HSI_Motion::StopJog()
|
||||
return rStatus;
|
||||
}
|
||||
|
||||
HSI_STATUS HSI_Motion::StopJogOld()
|
||||
{
|
||||
WaitForSingleObject(g_Lock_JogAndTrigger, INFINITE);
|
||||
auto rStatus = HSI_STATUS_NORMAL;
|
||||
if (g_pHSI_Motion)
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[StopJog] In\n");
|
||||
t_end = GetTickCount();
|
||||
g_pLogger->SendAndFlushWithTime(L"[StopJog] t_start = %d, t_end = %d\n", t_start, t_end);
|
||||
jogMoving = false;
|
||||
if (t_end - t_start < 100)
|
||||
{
|
||||
DWORD t_use = 100 - (t_end - t_start);
|
||||
g_pLogger->SendAndFlushWithTime(L"[StopJog] PushButtonTime = %d\n", t_use);
|
||||
Sleep(t_use);
|
||||
}
|
||||
unsigned char m_SendJogData[64] = { 0 };
|
||||
if (m_IsUseJerk == 0)
|
||||
{
|
||||
m_SendJogData[0] = CT_MOTOR;
|
||||
m_SendJogData[1] = CT_STOP;
|
||||
m_SendJogData[2] = AXIS_XYZU;
|
||||
m_StopJogMode[1] == 0 ? m_SendJogData[3] = 0X4A : m_SendJogData[3] = 0X49;
|
||||
m_StopJogMode[2] == 0 ? m_SendJogData[3] = 0X4A : m_SendJogData[3] = 0X49;
|
||||
m_StopJogMode[3] == 0 ? m_SendJogData[3] = 0X4A : m_SendJogData[3] = 0X49;
|
||||
m_StopJogMode[4] == 0 ? m_SendJogData[3] = 0X4A : m_SendJogData[3] = 0X49;
|
||||
m_WriteByte = Send_Command(0, (const char*)m_SendJogData, m_SendDataLength);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_SendJogData[0] = CT_MOTOR;
|
||||
m_SendJogData[1] = CT_STOP;
|
||||
m_SendJogData[2] = AXIS_XYZU;
|
||||
m_StopJogMode[1] == 0 ? m_SendJogData[3] = 0X4A : m_SendJogData[3] = 0X49;
|
||||
m_StopJogMode[2] == 0 ? m_SendJogData[3] = 0X4A : m_SendJogData[3] = 0X49;
|
||||
m_StopJogMode[3] == 0 ? m_SendJogData[3] = 0X4A : m_SendJogData[3] = 0X49;
|
||||
m_StopJogMode[4] == 0 ? m_SendJogData[3] = 0X4A : m_SendJogData[3] = 0X49;
|
||||
m_WriteByte = Send_Command(0, (const char*)m_SendJogData, m_SendDataLength);
|
||||
}
|
||||
m_Thread_StateJOGStop = HSI_THREAD_PAUSED;
|
||||
g_pLogger->SendAndFlushWithTime(L"[StopJog] Out\n");
|
||||
ReleaseMutex(g_Lock_JogAndTrigger);
|
||||
}
|
||||
return rStatus;
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
HSI_STATUS HSI_Motion::StopJogEx(UINT AxisTypes)
|
||||
{
|
||||
@@ -2232,7 +2354,7 @@ HSI_STATUS HSI_Motion::GetPositionEncPrfMulti(UINT AxisTypes, double* EncPos, do
|
||||
* \param PositionX
|
||||
* \param PositionY
|
||||
* \param PositionZ
|
||||
* \param Time
|
||||
* \param Time 耗时
|
||||
* \return
|
||||
*/
|
||||
HSI_STATUS HSI_Motion::GetPositionXyzOld(UINT AxisTypes, double& PositionX, double& PositionY, double& PositionZ,
|
||||
@@ -2312,71 +2434,56 @@ HSI_STATUS HSI_Motion::GetPositionXyz(UINT AxisTypes, double& PositionX, double&
|
||||
double& Time)
|
||||
{
|
||||
auto rStatus = HSI_STATUS_NORMAL;
|
||||
//UNREFERENCED_PARAMETER(AxisTypes)的意思就是告诉编译器,
|
||||
// AxisTypes参数我使用过了,别报警告了,仅此而已。
|
||||
UNREFERENCED_PARAMETER(AxisTypes);
|
||||
//读取3个轴的位置
|
||||
CString tempStr;
|
||||
bool bGetPosition = true;
|
||||
|
||||
if (g_pHSI_Motion)
|
||||
{
|
||||
if (m_SO7_Serial.m_RecvData[0] == 2)
|
||||
if (!acsc_GetFPosition(handleACS, ACSC_AXIS_0, &PositionX, nullptr))
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] get PositionX failed\n");
|
||||
bGetPosition = false;
|
||||
return HSI_ACS_ERROR;
|
||||
}
|
||||
if (!acsc_GetFPosition(handleACS, ACSC_AXIS_1, &PositionY, nullptr))
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] get PositionY failed\n");
|
||||
bGetPosition = false;
|
||||
return HSI_ACS_ERROR;
|
||||
}
|
||||
if (!acsc_GetFPosition(handleACS, ACSC_AXIS_2, &PositionZ, nullptr))
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] get PositionZ failed\n");
|
||||
bGetPosition = false;
|
||||
return HSI_ACS_ERROR;
|
||||
}
|
||||
|
||||
if (bGetPosition) //读取成功
|
||||
{
|
||||
if (m_DeviceType != 1)
|
||||
{
|
||||
if (m_IsHavePattern & 0x01)
|
||||
PositionX = (m_SO7_Serial.m_RecvData[1] << 24 | m_SO7_Serial.m_RecvData[2] << 16 | m_SO7_Serial.
|
||||
m_RecvData[3] << 8 | m_SO7_Serial.m_RecvData[4]) * m_Resolution[1];
|
||||
else
|
||||
PositionX = (m_SO7_Serial.m_RecvData[17] << 24 | m_SO7_Serial.m_RecvData[18] << 16 | m_SO7_Serial.
|
||||
m_RecvData[19] << 8 | m_SO7_Serial.m_RecvData[20]) * m_Resolution[1];
|
||||
if (m_IsHavePattern & 0x02)
|
||||
PositionY = (m_SO7_Serial.m_RecvData[5] << 24 | m_SO7_Serial.m_RecvData[6] << 16 | m_SO7_Serial.
|
||||
m_RecvData[7] << 8 | m_SO7_Serial.m_RecvData[8]) * m_Resolution[2];
|
||||
else
|
||||
PositionY = (m_SO7_Serial.m_RecvData[21] << 24 | m_SO7_Serial.m_RecvData[22] << 16 | m_SO7_Serial.
|
||||
m_RecvData[23] << 8 | m_SO7_Serial.m_RecvData[24]) * m_Resolution[2];
|
||||
if (m_IsHavePattern & 0x04)
|
||||
PositionZ = (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]) * m_Resolution[3];
|
||||
else
|
||||
PositionZ = (m_SO7_Serial.m_RecvData[25] << 24 | m_SO7_Serial.m_RecvData[26] << 16 | m_SO7_Serial.
|
||||
m_RecvData[27] << 8 | m_SO7_Serial.m_RecvData[28]) * m_Resolution[3];
|
||||
if (m_IsHavePattern & 0x08)
|
||||
m_PosForAllAxis[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]) * m_Resolution[4];
|
||||
else
|
||||
m_PosForAllAxis[4] = (m_SO7_Serial.m_RecvData[29] << 24 | m_SO7_Serial.m_RecvData[30] << 16 |
|
||||
m_SO7_Serial.m_RecvData[31] << 8 | m_SO7_Serial.m_RecvData[32]) * m_Resolution[4];
|
||||
}
|
||||
else
|
||||
{
|
||||
PositionX = (m_SO7_Serial.m_RecvData[1] << 24 | m_SO7_Serial.m_RecvData[2] << 16 | m_SO7_Serial.
|
||||
m_RecvData[3] << 8 | m_SO7_Serial.m_RecvData[4]) * m_Resolution[1];
|
||||
PositionY = (m_SO7_Serial.m_RecvData[21] << 24 | m_SO7_Serial.m_RecvData[22] << 16 | m_SO7_Serial.
|
||||
m_RecvData[23] << 8 | m_SO7_Serial.m_RecvData[24]) * m_Resolution[2];
|
||||
PositionZ = (m_SO7_Serial.m_RecvData[25] << 24 | m_SO7_Serial.m_RecvData[26] << 16 | m_SO7_Serial.
|
||||
m_RecvData[27] << 8 | m_SO7_Serial.m_RecvData[28]) * m_Resolution[3];
|
||||
}
|
||||
m_EncPos[1] = PositionX;
|
||||
m_EncPos[2] = PositionY;
|
||||
m_EncPos[3] = PositionZ;
|
||||
m_EncPos[4] = m_PosForAllAxis[4];
|
||||
m_EncPos[4] = m_PosForAllAxis[4];// m_PosForAllAxis 记录4轴位置
|
||||
m_PosForAllAxis[1] = PositionX;
|
||||
m_PosForAllAxis[2] = PositionY;
|
||||
m_PosForAllAxis[3] = PositionZ;
|
||||
}
|
||||
else
|
||||
else //读取将之前的值进行返回
|
||||
{
|
||||
PositionX = m_EncPos[1];
|
||||
PositionY = m_EncPos[2];
|
||||
PositionZ = m_EncPos[3];
|
||||
m_PosForAllAxis[1] = m_EncPos[1];
|
||||
m_PosForAllAxis[1] = m_EncPos[1]; // m_PosForAllAxis 记录4轴位置
|
||||
m_PosForAllAxis[2] = m_EncPos[2];
|
||||
m_PosForAllAxis[3] = m_EncPos[3];
|
||||
m_PosForAllAxis[4] = m_EncPos[4];
|
||||
g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] failed\n");
|
||||
}
|
||||
//LARGE_INTEGER tima;
|
||||
//QueryPerformanceCounter(&tima);
|
||||
//Time = static_cast<double>(tima.QuadPart);
|
||||
|
||||
Time = set_end - set_start;
|
||||
}
|
||||
return rStatus;
|
||||
@@ -6995,10 +7102,11 @@ unsigned __stdcall HSI_Motion::m_ThreadData(LPVOID pThis)
|
||||
}
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
||||
//JOG运行到软限位的运动调节
|
||||
//===========================================================================
|
||||
/**
|
||||
* \brief JOG运行到软限位的运动调节
|
||||
*/
|
||||
void HSI_Motion::UpdateMotionStateJOGStop()
|
||||
{
|
||||
unsigned char send_JogLimt_data[64] = {0};
|
||||
|
||||
@@ -164,8 +164,8 @@ public:
|
||||
* \param bHomed
|
||||
* \return
|
||||
*/
|
||||
HSI_STATUS HomeMachineOld(bool bHomed);
|
||||
HSI_STATUS HomeMachine(bool bHomed);
|
||||
HSI_STATUS HomeMachineOld(bool bHomed);
|
||||
|
||||
HSI_STATUS HomeJog(short AxisNumber, short Dir, bool Wait = false);
|
||||
HSI_STATUS HomeFindIndex();
|
||||
@@ -176,8 +176,8 @@ public:
|
||||
* \param bHomed 是否回家标志位
|
||||
* \return
|
||||
*/
|
||||
HSI_STATUS IsHomedOld(bool& bHomed);
|
||||
HSI_STATUS IsHomed(bool& bHomed);
|
||||
HSI_STATUS IsHomedOld(bool& bHomed);
|
||||
|
||||
HSI_STATUS GetSpeedXyz(int AxisNum, double& Speed);
|
||||
HSI_STATUS SetSpeedXyz(double Speed);
|
||||
@@ -193,10 +193,22 @@ public:
|
||||
|
||||
HSI_STATUS GetDeadBand(double& DeadbandX, double& DeadbandY, double& DeadbandZ, double& DeadbandR);
|
||||
HSI_STATUS GetRefreshDeadBand(double& Deadband);
|
||||
|
||||
/**
|
||||
* \brief
|
||||
* \param AxisTypes
|
||||
* \param Speed
|
||||
* \return
|
||||
*/
|
||||
HSI_STATUS Jog(UINT AxisTypes, double Speed);
|
||||
HSI_STATUS JogOld(UINT AxisTypes, double Speed);
|
||||
|
||||
HSI_STATUS JoyStick(UINT AxisTypes, long Speed);
|
||||
/**
|
||||
* \brief
|
||||
* \return
|
||||
*/
|
||||
HSI_STATUS StopJog();
|
||||
HSI_STATUS StopJogOld();
|
||||
HSI_STATUS StopJogEx(UINT AxisTypes);
|
||||
|
||||
HSI_STATUS GetPositionEncPrfMulti(UINT AxisTypes, double* EncPos, double* PrfPos, int Count);
|
||||
@@ -209,8 +221,9 @@ public:
|
||||
* \param Time
|
||||
* \return
|
||||
*/
|
||||
HSI_STATUS GetPositionXyzOld(UINT AxisTypes, double& PositionX, double& PositionY, double& PositionZ, double& Time);
|
||||
HSI_STATUS GetPositionXyz(UINT AxisTypes, double& PositionX, double& PositionY, double& PositionZ, double& Time);
|
||||
HSI_STATUS GetPositionXyzOld(UINT AxisTypes, double& PositionX, double& PositionY, double& PositionZ, double& Time);
|
||||
|
||||
HSI_STATUS GetPositionXyzaProbe(UINT AxisTypes, double& PositionX, double& PositionY, double& PositionZ,
|
||||
double& PositionA);
|
||||
HSI_STATUS GetEncoderXyz(long* lEncoderVal);
|
||||
@@ -235,10 +248,10 @@ public:
|
||||
* \param dFlyRadius
|
||||
* \return
|
||||
*/
|
||||
HSI_STATUS SetPositionXyzOld(UINT AxisTypes, double PositionX, double PositionY, double PositionZ,
|
||||
HSI_MOTION_MOVE_TYPE eType, double dFlyRadius);
|
||||
HSI_STATUS SetPositionXyz(UINT AxisTypes, double PositionX, double PositionY, double PositionZ,
|
||||
HSI_MOTION_MOVE_TYPE eType, double dFlyRadius);
|
||||
HSI_STATUS SetPositionXyzOld(UINT AxisTypes, double PositionX, double PositionY, double PositionZ,
|
||||
HSI_MOTION_MOVE_TYPE eType, double dFlyRadius);
|
||||
|
||||
HSI_STATUS SetPositionXyza(UINT AxisTypes, double PositionX, double PositionY, double PositionZ, double PositionA,
|
||||
HSI_MOTION_MOVE_TYPE eType, double dFlyRadius);
|
||||
@@ -254,7 +267,12 @@ public:
|
||||
HSI_STATUS SetDIO(UINT IOChannel, UINT _Status);
|
||||
HSI_STATUS GetAxisStatus(int* _Status);
|
||||
HSI_STATUS GetAppPath(CString& Path);
|
||||
/**
|
||||
* \brief
|
||||
* \return
|
||||
*/
|
||||
HSI_STATUS Shutdown() override;
|
||||
HSI_STATUS ShutdownOld() override;
|
||||
|
||||
HSI_STATUS IsSupportedEx(UINT AxisTypes, UINT& Types);
|
||||
HSI_STATUS StartupEx(UINT AxisTypes, bool bHome);
|
||||
@@ -453,7 +471,7 @@ public:
|
||||
bool bCircleRun; //圆弧插补
|
||||
int iCircleRunPnt[5]; //圆弧插补时的圆心位置
|
||||
int jogAxisNum; //jog运动的轴号
|
||||
int jogspeed;
|
||||
int jogspeed;//jog Ô˶¯µÄËÙ¶È
|
||||
bool jogMoving;
|
||||
bool jogDirFlag;
|
||||
bool m_bEmergencyState;
|
||||
|
||||
@@ -12,5 +12,5 @@
|
||||
#define HSI_VERSION_REVNUM
|
||||
#define HSI_VERSION_BUILD_DATE _T(__DATE__ )
|
||||
#define HSI_VERSION_BUILD_TIME _T(__TIME__ )
|
||||
#define HSI_FILE_DESCRIPTION "2022.10.13 / 15:29 "
|
||||
#define HSI_FILE_CSDESCRIPTION _T("2022.10.13 / 15:29 ")
|
||||
#define HSI_FILE_DESCRIPTION "2022.10.13 / 17:21 "
|
||||
#define HSI_FILE_CSDESCRIPTION _T("2022.10.13 / 17:21 ")
|
||||
|
||||
Reference in New Issue
Block a user