增加JOG运动 函数

This commit is contained in:
zhengxuan.zhang
2022-10-13 18:53:10 +08:00
parent d302749cdd
commit ec5f857abb
3 changed files with 185 additions and 59 deletions
+158 -50
View File
@@ -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};
+25 -7
View File
@@ -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;
+2 -2
View File
@@ -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 ")