获取运动参数和配置运动,档位调试

This commit is contained in:
zhengxuan.zhang
2022-11-01 20:20:14 +08:00
parent 32aaf13611
commit b7fef58da8
8 changed files with 335 additions and 100 deletions
+268 -47
View File
@@ -92,7 +92,7 @@ void ErrorsHandler()
{
ErrorStr[Received] = '\0';
printf("Motion Error: %d [%s]\n", ErrorCode, ErrorStr);
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] Motion Error %s\n",ErrorStr);
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] Motion Error %d%S\n", ErrorCode,ErrorStr);
}
}
else
@@ -460,8 +460,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
{
//尝试打开ACS控制器
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] In\n");
g_pLogger->SendAndFlushWithTime(
L"[ACS Motion] Wait for opening of communication with the controller... \n");
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] Wait for opening of communication with the controller... \n");
#ifdef OFFLINE //如果定义离线模式
handleACS = acsc_OpenCommSimulator();
@@ -501,7 +500,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
//获取ACS 控制器版本号, 待测试,2.70
/*char Firmware[256];
char Firmware[256];
int Received;
if (!acsc_GetFirmwareVersion(handleACS, Firmware, 255, &Received, nullptr))
{
@@ -509,13 +508,17 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
ErrorsHandler();
}
Firmware[Received-1] = '\0';
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] ACS Controller Version: %s\n", Firmware);*/
//printf("%s", Firmware);
//https://www.cnblogs.com/MichaelOwen/articles/2128771.html
//g_pLogger->SendAndFlushWithTime(L"%s%s\n", _T("[ACS Motion] ACS Controller Version: "), L"你好");
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] ACS Controller Version: %S\n", Firmware);
//获取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)),
/* printf("SPiiPlus C Library version is %d.%d.%d.%d\n", HIBYTE(HIWORD(Ver)), LOBYTE(HIWORD(Ver)),
HIBYTE(LOWORD(Ver)),
LOBYTE(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)));
@@ -1843,7 +1846,7 @@ HSI_STATUS HSI_Motion::JogOld(UINT AxisTypes, double Speed)
HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
{
auto rStatus = HSI_STATUS_NORMAL;
g_pLogger->SendAndFlushWithTime(L"[Jog] aixs: [%d] speed:[%lf]\n", AxisTypes, Speed);
g_pLogger->SendAndFlushWithTime(L"[Jog] aixs: [%d] SpeedGear: [%lf]\n", AxisTypes, Speed);
if (g_pHSI_Motion)
{
if (m_DeviceType != 3) //非转盘设备
@@ -1851,7 +1854,13 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
m_Thread_StateJOGStop = HSI_THREAD_RUNNING;
SetEvent(m_hTriggerEventJOGStop);
}
int DriveSpeed(1);
int StartSpeed(1);
int AccLine(1);
int DecLine(1);
int AccCurve(1);
int DecCurve(1);
int JogSpeed(1);
bool bJOGDir = Speed > 0 ? true : false; //运动方向
byte AxisNumber = static_cast<byte>(AxisConvertIndex(AxisTypes));//Jog
jogAxisNum = AxisNumber;
@@ -1861,42 +1870,176 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
if (CurrentHomeMachineState == E_EF3_HOME_FINISHED)
{
//软限位
g_pLogger->SendAndFlushWithTime(
L"[Jog] Limit Enable, m_P_Work_Limit[AxisNumber] = %f,m_N_Work_Limit[AxisNumber] = %f\n",
m_P_Work_Limit[AxisNumber], m_N_Work_Limit[AxisNumber]);
}
else
{
//无效软限位
g_pLogger->SendAndFlushWithTime(L"[Jog] Limit No Enable\n");
}
//是否回过家
//if (m_Home_Machine_Axis[AxisNumber] == 0)
//{
// return rStatus;
//}
// 是否启用急停
//if ((StartSpeed < 250) && (DriveSpeed < 6))
//{
// m_IsUseJerk = 1;
//}
//else
//{
// m_IsUseJerk = 0;
//}
//是否回过家判断
if (m_Home_Machine_Axis[AxisNumber] == 0)
{
return rStatus;
}
//设置 JOG运动参数 加减速 JOG_SPEED_ACC_DEC
double now_pos[5] = { 0 };
double Prf_pos[5] = { 0 };
double limitpos[4] = { 0 };
int RemainPul = 0;
int limitSDPul = 0;
double time;
/*GetPositionXyz(1, now_pos[0], now_pos[1], now_pos[2], time);*/
GetPositionEncPrfMulti(1, now_pos, Prf_pos, 1);
JogSpeed = abs(SpeedPercent(AxisNumber, Speed, DriveSpeed, StartSpeed, AccLine, DecLine, AccCurve, DecCurve));
g_pLogger->SendAndFlushWithTime(L"[Jog] StartSpeed: [%d], DriveSpeed: [%d], AccCurve: [%d], AccLine: [%d], DecCurve: [%d], DecLine: [%d]\n", StartSpeed, DriveSpeed, AccCurve, AccLine, DecCurve, DecLine);
if (m_DeviceType != 3)
{
if (AxisTypes == AXIS_X /*&& m_motorType & 0x01*/)
{
if (!bJOGDir) //负方向
{
RemainPul = static_cast<int>(now_pos[1] / m_Resolution[1]) - static_cast<int>(m_N_Work_Limit[1] /
m_Resolution[1]);
limitSDPul = (DriveSpeed - StartSpeed) * 13;
if ((RemainPul < limitSDPul * 2) && (RemainPul > 0))
{
float SpeedRatio = limitSDPul * 2 / RemainPul;
DriveSpeed = DriveSpeed / SpeedRatio;
if (DriveSpeed < StartSpeed)
{
DriveSpeed = StartSpeed;
}
}
}
else
{
RemainPul = static_cast<int>(m_P_Work_Limit[1] / m_Resolution[1]) - static_cast<int>(now_pos[1] /
m_Resolution[1]);
limitSDPul = (DriveSpeed - StartSpeed) * 13;
if ((RemainPul < limitSDPul * 2) && (RemainPul > 0))
{
float SpeedRatio = limitSDPul * 2 / RemainPul;
DriveSpeed = DriveSpeed / SpeedRatio;
if (DriveSpeed < StartSpeed)
{
DriveSpeed = StartSpeed;
}
}
}
}
else if (AxisTypes == AXIS_Y /*&& m_motorType & 0x02*/)
{
if (!bJOGDir) //负方向
{
RemainPul = static_cast<int>(now_pos[2] / m_Resolution[2]) - static_cast<int>(m_N_Work_Limit[2] /
m_Resolution[2]);
limitSDPul = (DriveSpeed - StartSpeed) * 13;
if ((RemainPul < limitSDPul * 2) && (RemainPul > 0))
{
float SpeedRatio = 1 + limitSDPul * 2 / RemainPul;
DriveSpeed = DriveSpeed / SpeedRatio;
if (DriveSpeed < StartSpeed)
{
DriveSpeed = StartSpeed;
}
}
}
else
{
RemainPul = static_cast<int>(m_P_Work_Limit[2] / m_Resolution[2]) - static_cast<int>(now_pos[2] /
m_Resolution[2]);
limitSDPul = (DriveSpeed - StartSpeed) * 13;
if ((RemainPul < limitSDPul * 2) && (RemainPul > 0))
{
float SpeedRatio = limitSDPul * 2 / RemainPul;
DriveSpeed = DriveSpeed / SpeedRatio;
if (DriveSpeed < StartSpeed)
{
DriveSpeed = StartSpeed;
}
}
}
}
if (AxisTypes == AXIS_Z /*&& m_motorType & 0x04*/)
{
if (!bJOGDir) //负方向
{
RemainPul = static_cast<int>(now_pos[3] / m_Resolution[3]) - static_cast<int>(m_N_Work_Limit[3] /
m_Resolution[3]);
limitSDPul = (DriveSpeed - StartSpeed) * 13;
if ((RemainPul < limitSDPul * 2) && (RemainPul > 0))
{
float SpeedRatio = limitSDPul * 2 / RemainPul;
DriveSpeed = DriveSpeed / SpeedRatio;
if (DriveSpeed < StartSpeed)
{
DriveSpeed = StartSpeed;
}
}
}
else
{
RemainPul = static_cast<int>(m_P_Work_Limit[3] / m_Resolution[3]) - static_cast<int>(now_pos[3] /
m_Resolution[3]);
limitSDPul = (DriveSpeed - StartSpeed) * 13;
if ((RemainPul < limitSDPul * 2) && (RemainPul > 0))
{
float SpeedRatio = limitSDPul * 2 / RemainPul;
DriveSpeed = DriveSpeed / SpeedRatio;
if (DriveSpeed < StartSpeed)
{
DriveSpeed = StartSpeed;
}
}
}
}
}
//速度限制
g_pLogger->SendAndFlushWithTime(L"[Jog] StartSpeed: [%d], DriveSpeed: [%d], AccCurve: [%d], AccLine: [%d], DecCurve: [%d], DecLine: [%d]\n", StartSpeed, DriveSpeed, AccCurve, AccLine, DecCurve, DecLine);
// 急停判断
if ((StartSpeed < 250) && (DriveSpeed < 6))
{
m_IsUseJerk = 1;
}
else
{
m_IsUseJerk = 0;
}
//打印当前轴的速度
double motionParam[5] = { 0 };
GetMotorParam(jogAxisNum, motionParam);
g_pLogger->SendAndFlushWithTime(
L"[Jog] Axis= %d, Velocity = %.2f, Acceleration= %.2f, Deceleration= %.2f, KillDeceleration= %.2f, Jerk= %.2f\n",
jogAxisNum, motionParam[0], motionParam[1], motionParam[2], motionParam[3], motionParam[4]);
//开始JOG运动
int acsDirection = bJOGDir ? ACSC_POSITIVE_DIRECTION : ACSC_NEGATIVE_DIRECTION; //正方向,或 负方向
if (!acsc_Jog(handleACS, 0, jogAxisNum, acsDirection, nullptr))
if (!bJOGDir)
{
StartSpeed = StartSpeed * (-1); // Negative direction : Using - (minus) velocity
}
//int acsDirection = bJOGDir ? ACSC_POSITIVE_DIRECTION : ACSC_NEGATIVE_DIRECTION; //正方向,或 负方向
if (!acsc_Jog(handleACS, 0, jogAxisNum, StartSpeed, nullptr))
{
printf("[Jog] 轴[%d] [%s] 方向移动失败", AxisTypes, bJOGDir? "" : "");
g_pLogger->SendAndFlushWithTime(L"[Jog] aixs:[%d] JOGDir:[%s] Jog move failed\n", AxisTypes, bJOGDir ? "P" : "N");
g_pLogger->SendAndFlushWithTime(L"[Jog] failed, Aixs:[%d] JOGDir:[%S]\n", AxisTypes, bJOGDir ? "Positive" : "Negative");
ErrorsHandler();
}
jogMoving = true;
g_pLogger->SendAndFlushWithTime(L"[Jog] Out, bJOGDir = %s\n", bJOGDir? "positive":"negative");
g_pLogger->SendAndFlushWithTime(L"[Jog] Out, StartSpeed = %d\n", StartSpeed);
}
return rStatus;
}
@@ -2375,14 +2518,14 @@ int HSI_Motion::P2P(short AxisNumber, long Pos, double Speed, double Acc)
//===========================================================================
//运动控制部分
//===========================================================================
HSI_STATUS HSI_Motion::GetPositionEncPrfMulti(UINT AxisTypes, double* EncPos, double* PrfPos, int Count)
HSI_STATUS HSI_Motion::GetPositionEncPrfMultiOld(UINT AxisTypes, double* EncPos, double* PrfPos, int Count)
{
auto rStatus = HSI_STATUS_NORMAL;
UNREFERENCED_PARAMETER(AxisTypes);
CString tempStr;
if (g_pHSI_Motion)
{
//g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] In\n");
g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] In\n");
if (m_SO7_Serial.m_RecvData[0] == 2)
{
EncPos[1] = (m_SO7_Serial.m_RecvData[1] << 24 | m_SO7_Serial.m_RecvData[2] << 16 | m_SO7_Serial.m_RecvData[
@@ -2442,11 +2585,81 @@ HSI_STATUS HSI_Motion::GetPositionEncPrfMulti(UINT AxisTypes, double* EncPos, do
PrfPos[4] = m_PrfPos[4];
g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] failed\n");
}
//g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] Out\n");
g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] Out\n");
}
return rStatus;
}
HSI_STATUS HSI_Motion::GetPositionEncPrfMulti(UINT AxisTypes, double* EncPos, double* PrfPos, int Count)
{
auto rStatus = HSI_STATUS_NORMAL;
UNREFERENCED_PARAMETER(AxisTypes);
CString tempStr;
if (g_pHSI_Motion)
{
g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] In\n");
if (m_SO7_Serial.m_RecvData[0] == 2)
{
EncPos[1] = (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];
EncPos[2] = (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];
EncPos[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]) * m_Resolution[3];
EncPos[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];
PrfPos[1] = (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];
PrfPos[2] = (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];
PrfPos[3] = (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];
PrfPos[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];
if (m_IsHavePattern & 0x01)
m_EncPos[1] = EncPos[1];
else
m_EncPos[1] = PrfPos[1];
if (m_IsHavePattern & 0x02)
m_EncPos[2] = EncPos[2];
else
m_EncPos[2] = PrfPos[2];
if (m_IsHavePattern & 0x04)
m_EncPos[3] = EncPos[3];
else
m_EncPos[3] = PrfPos[3];
if (m_IsHavePattern & 0x08)
m_EncPos[4] = EncPos[4];
else
m_EncPos[4] = PrfPos[4];
m_PrfPos[1] = PrfPos[1];
m_PrfPos[2] = PrfPos[2];
m_PrfPos[3] = PrfPos[3];
m_PrfPos[4] = PrfPos[4];
//begin_position[1] = EncPos[1] / m_Resolution[1];
//begin_position[2] = EncPos[2] / m_Resolution[1];
//begin_position[3] = EncPos[3] / m_Resolution[1];
//begin_position[4] = EncPos[4] / m_Resolution[1];
}
else
{
EncPos[1] = m_EncPos[1];
EncPos[2] = m_EncPos[2];
EncPos[2] = m_EncPos[3];
EncPos[4] = m_EncPos[4];
PrfPos[1] = m_PrfPos[1];
PrfPos[2] = m_PrfPos[2];
PrfPos[2] = m_PrfPos[3];
PrfPos[4] = m_PrfPos[4];
g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] failed\n");
}
g_pLogger->SendAndFlushWithTime(L"[GetPositionEncPrfMulti] Out\n");
}
return rStatus;
}
//===========================================================================
/**
* \brief
@@ -3283,11 +3496,12 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double P
PositionY, PositionZ);*/
//打印轴当前运动参数
double* motionParam[5] = {0};
GetMotorParam(ACSC_AXIS_0, motionParam);
byte AxisNumber = static_cast<byte>(AxisConvertIndex(AxisTypes));//轴号换算
double motionParam[5] = {0};
GetMotorParam(AxisNumber, motionParam);
g_pLogger->SendAndFlushWithTime(
L"[SetPositionXyz] axis= %d, GetVelocity = %d,GetAcceleration= %d,GetDeceleration= %d, GetKillDeceleration= %d, GetJerk= %d\n",
AXIS_X, motionParam[0], motionParam[1], motionParam[2], motionParam[3], motionParam[4]);
L"[SetPositionXyz] Axis= %.2f, Velocity = %.2f, Acceleration= %.2f, Deceleration= %.2f, KillDeceleration= %.2f, Jerk= %.2f\n",
jogAxisNum, motionParam[0], motionParam[1], motionParam[2], motionParam[3], motionParam[4]);
//设置轴运动速度,TO-DO
@@ -3377,42 +3591,46 @@ int HSI_Motion::CaculateStepMotorACC(int pos, int maxacc, int minacc)
//void func2(uchar* s); //利用指针返回数组
//uchar* func1(); //利用指针函数返回数组
//void func0(uchar*& r); //利用引用返回数组
HSI_STATUS HSI_Motion::GetMotorParam(int AXIS, double* motionParam[5])
HSI_STATUS HSI_Motion::GetMotorParam(int AXIS, double motionParam[5])
{
auto rStatus = HSI_STATUS_NORMAL;
if (handleACS != ACSC_INVALID)
{
g_pLogger->SendAndFlushWithTime(L"[GetMotorParam] In\n");
//依次是 速度、加速度、减速、杀死速度、抖动
if (!acsc_GetVelocity(handleACS, AXIS, motionParam[0], nullptr))
if (!acsc_GetVelocity(handleACS, AXIS, motionParam+0, nullptr))
{
g_pLogger->SendAndFlushWithTime(L"[GetMotorParam] acsc_GetVelocity error\n");
rStatus = HSI_ACS_ERROR;
ErrorsHandler();
}
if (!acsc_GetAcceleration(handleACS, AXIS, motionParam[1], nullptr))
if (!acsc_GetAcceleration(handleACS, AXIS, motionParam+1, nullptr))
{
g_pLogger->SendAndFlushWithTime(L"[GetMotorParam] acsc_GetAcceleration error\n");
rStatus = HSI_ACS_ERROR;
ErrorsHandler();
}
if (!acsc_GetDeceleration(handleACS, AXIS, motionParam[2], nullptr))
if (!acsc_GetDeceleration(handleACS, AXIS, motionParam+2, nullptr))
{
g_pLogger->SendAndFlushWithTime(L"[GetMotorParam] acsc_GetDeceleration error\n");
rStatus = HSI_ACS_ERROR;
ErrorsHandler();
}
if (!acsc_GetKillDeceleration(handleACS, AXIS, motionParam[3], nullptr))
if (!acsc_GetKillDeceleration(handleACS, AXIS, motionParam+3, nullptr))
{
g_pLogger->SendAndFlushWithTime(L"[GetMotorParam] acsc_GetKillDeceleration error\n");
rStatus = HSI_ACS_ERROR;
ErrorsHandler();
}
if (!acsc_GetJerk(handleACS, AXIS, motionParam[4], nullptr))
if (!acsc_GetJerk(handleACS, AXIS, motionParam+4, nullptr))
{
g_pLogger->SendAndFlushWithTime(L"[GetMotorParam] acsc_GetJerk error\n");
rStatus = HSI_ACS_ERROR;
ErrorsHandler();
}
g_pLogger->SendAndFlushWithTime(L"[GetMotorParam] Out\n");
}
return rStatus;
@@ -6967,14 +7185,14 @@ short HSI_Motion::AxisConvertIndex(UINT AxisTypes)
AxisNumber = 0x04;
break;
}
//case HSI_MOTION_AXIS_R:
// {
// AxisNumber = 0x04;
// break;
// }
case HSI_MOTION_AXIS_R:
{
AxisNumber = 0x04;
break;
}
default:
{
g_pLogger->SendAndFlushWithTime(L"AxisConvertIndex failed,AxisTypes = %d,AxisNumber = %d\n", AxisTypes,
g_pLogger->SendAndFlushWithTime(L"[AxisConvertIndex] failed, AxisTypes = %d,AxisNumber = %d\n", AxisTypes,
AxisNumber);
break;
}
@@ -7074,6 +7292,7 @@ HSI_STATUS HSI_Motion::GetPositionEx(UINT AxisTypes, double& Position, double& T
double position[4] = {0.0};
short AxisNumber = AxisConvertIndex(AxisTypes);
Position = m_PosForAllAxis[AxisNumber];
g_pLogger->SendAndFlushWithTime(L"[GetPositionEx] Position: %d\n", Position);
}
return rStatus;
}
@@ -7329,6 +7548,7 @@ HSI_STATUS HSI_Motion::GetAccelerationEx(UINT AxisTypes, double& Accel)
Accel = m_SetPotion_StartSpeed[AxisNumber] * (m_Resolution[AxisNumber] * 500);
}
}
g_pLogger->SendAndFlushWithTime(L"[GetAccelerationEx] Accel = %d\n", Accel);
return rStatus;
}
@@ -7352,6 +7572,7 @@ HSI_STATUS HSI_Motion::SetAccelerationEx(UINT AxisTypes, double Accel)
m_SetPotion_StartSpeed[AxisNumber] = static_cast<int>(Accel / (m_Resolution[AxisNumber] * 500));
}
}
g_pLogger->SendAndFlushWithTime(L"[SetAccelerationEx] Accel = %d\n", m_SetPotion_StartSpeed[AxisNumber]);
return rStatus;
}
+10 -1
View File
@@ -205,7 +205,16 @@ public:
HSI_STATUS StopJog();
HSI_STATUS StopJogOld();
HSI_STATUS StopJogEx(UINT AxisTypes);
/**
* \brief
* \param AxisTypes
* \param EncPos
* \param PrfPos
* \param Count
* \return
*/
HSI_STATUS GetPositionEncPrfMulti(UINT AxisTypes, double* EncPos, double* PrfPos, int Count);
HSI_STATUS GetPositionEncPrfMultiOld(UINT AxisTypes, double* EncPos, double* PrfPos, int Count);
/**
* \brief 获取轴当前位置
* \param AxisTypes 轴号
@@ -229,7 +238,7 @@ public:
* \param motionParam
* \return
*/
HSI_STATUS HSI_Motion::GetMotorParam(int AXIS, double* motionParam[5]);
HSI_STATUS HSI_Motion::GetMotorParam(int AXIS, double motionParam[5]);
/**
* \brief 运行到指定位置
+1
View File
@@ -65,6 +65,7 @@ void CLogger::SendAndFlush(LPCTSTR format, ...)
LeaveCriticalSection(&m_lockLogger);
}
//https://www.educative.io/answers/what-is-vswprintfs-in-c
void CLogger::SendAndFlushWithTime(LPCTSTR format, ...)
{
EnterCriticalSection(&m_lockLogger);
+4
View File
@@ -27,6 +27,10 @@ class CLogger
public:
CLogger(CString m_Name)
{
//设置中文环境
//setlocale(LC_ALL, "Chinese-simplified");
setlocale(LC_ALL, "en_US.UTF-8");
IsEnabledLog = false;
m_File = nullptr;
CString Path = _T(""); // Speed optimization - noticed slow in GlowCode
+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.11.01 / 12:05 "
#define HSI_FILE_CSDESCRIPTION _T("2022.11.01 / 12:05 ")
#define HSI_FILE_DESCRIPTION "2022.11.01 / 20:15 "
#define HSI_FILE_CSDESCRIPTION _T("2022.11.01 / 20:15 ")
+6 -6
View File
@@ -430,12 +430,12 @@ namespace HSI_SEVENOCEAN_EF1_CsTest.HSI
public enum HSI_MOTION_AXIS_TYPE
{
//HSI_MOTION_AXIS_X = 0x0001, // This is the default "Sensor level" X Axis - use on single X axis machines
//HSI_MOTION_AXIS_Y = 0x0002, // This is the default "Sensor level" Y Axis - use on single Y axis machines
//HSI_MOTION_AXIS_Z = 0x0004, // This is the default "Sensor level" Z Axis - use on single Z axis machines
HSI_MOTION_AXIS_X = 0x0001, //对应ACS 0轴 X
HSI_MOTION_AXIS_Y = 0x0000, //对应ACS 1轴 Y
HSI_MOTION_AXIS_Z = 0x0004, //对应ACS 4轴 Z
//HSI_MOTION_AXIS_X = 0x0001, //对应ACS 0轴 X
//HSI_MOTION_AXIS_Y = 0x0000, //对应ACS 1轴 Y
//HSI_MOTION_AXIS_Z = 0x0004, //对应ACS 4轴 Z
HSI_MOTION_AXIS_X = 0x0001, // This is the default "Sensor level" X Axis - use on single X axis machines
HSI_MOTION_AXIS_Y = 0x0002, // This is the default "Sensor level" Y Axis - use on single Y axis machines
HSI_MOTION_AXIS_Z = 0x0004, // This is the default "Sensor level" Z Axis - use on single Z axis machines
HSI_MOTION_AXIS_R = 0x0008, // This is the default "Sensor level" R Axis - use on single R axis machines
HSI_MOTION_AXIS_X1 = 0x0010, // This is the 1st X Axis - use on multiple axis machines when specific axis needed
HSI_MOTION_AXIS_Y1 = 0x0020, // This is the 1st Y Axis - use on multiple axis machines when specific axis needed
@@ -1,26 +1,26 @@
[JOG_SPEED]
JOG速度(pulse/ms)
JOG速度(pulse/ms)
JOG_SPEED_0=200.0
JOG_SPEED_1=150.0
JOG_SPEED_2=50
JOG_SPEED_3=10
JOG_SPEED_4=1
;JOG加速度(pulse/ms^2)
;JOG加速度(pulse/ms^2)
JOG_ACC_0=2.0
JOG_ACC_1=2.0
JOG_ACC_2=2.0
JOG_ACC_3=1.0
JOG_ACC_4=1.0
;JOG减速度(pulse/ms^2)
;JOG减速度(pulse/ms^2)
JOG_DEC_0=2.0
JOG_DEC_1=2.0
JOG_DEC_2=2.0
JOG_DEC_3=1.0
JOG_DEC_4=1.0
;JOG模式采用急停还是平滑停止,0是平滑停止1为急停,默认0
;JOG模式采用急停还是平滑停止,0是平滑停止1为急停,默认0
JOG_STOP_MODE_1=0
JOG_STOP_MODE_2=0
JOG_STOP_MODE_3=0
@@ -91,12 +91,12 @@ JOG_SPEED_GEAR4_4=1.0
JOG_ACC_GEAR4_4=1.0
JOG_DEC_GEAR4_4=1.0
;0:都使用(正常情况) 1:只使用灯,而不使用控制器;默认0
;0:都使用(正常情况) 1:只使用灯,而不使用控制器;默认0
[USE_LIGHT]
ONLY_USE_LIGHT=0
[RESOLUTION]
;光栅尺的分辨率(mm)
;光栅尺的分辨率(mm)
SCALE_RESOLUTION_1=0.0004
SCALE_RESOLUTION_2=0.0004
SCALE_RESOLUTION_3=0.0004
@@ -107,7 +107,7 @@ SCALE_RESOLUTION_7=0.0004
SCALE_RESOLUTION_8=0.0004
[LIMIT]
;负限位(mm),必须是负数
;负限位(mm),必须是负数
NEG_WORKING_LIMIT_1=-260.0
NEG_WORKING_LIMIT_2=-40.0
NEG_WORKING_LIMIT_3=-40.0
@@ -117,10 +117,10 @@ NEG_WORKING_LIMIT_6=-40.0
NEG_WORKING_LIMIT_7=-40.0
NEG_WORKING_LIMIT_8=-40.0
;正限位(mm),必须是正数
POS_WORKING_LIMIT_1=40.0
POS_WORKING_LIMIT_2=160.0
POS_WORKING_LIMIT_3=160.0
;正限位(mm),必须是正数
POS_WORKING_LIMIT_1=10.0
POS_WORKING_LIMIT_2=200.0
POS_WORKING_LIMIT_3=200.0
POS_WORKING_LIMIT_4=200.0
POS_WORKING_LIMIT_5=200.0
POS_WORKING_LIMIT_6=200.0
@@ -128,7 +128,7 @@ POS_WORKING_LIMIT_7=200.0
POS_WORKING_LIMIT_8=200.0
[HOME]
;选择需要回家的轴号,改为1
;选择需要回家的轴号,改为1
HOME_MACHINE_AXIS_1=1
HOME_MACHINE_AXIS_2=1
HOME_MACHINE_AXIS_3=1
@@ -138,12 +138,12 @@ HOME_MACHINE_AXIS_6=0
HOME_MACHINE_AXIS_7=0
HOME_MACHINE_AXIS_8=0
;是否启动实际位置判断是否回家,默认0,1启用,0关闭
;是否启动实际位置判断是否回家,默认0,1启用,0关闭
IS_HOME_ENC_POS=0
;是否启动规划位置判断是否回家,默认1,1启用,0关闭
;是否启动规划位置判断是否回家,默认1,1启用,0关闭
IS_HOME_PRF_POS=1
;关闭电源时记住当前的位置,用于判断是否需要回家
;关闭电源时记住当前的位置,用于判断是否需要回家
HOME_POS_AXIS_1=0
HOME_POS_AXIS_2=0
HOME_POS_AXIS_3=0
@@ -153,7 +153,7 @@ HOME_POS_AXIS_6=0
HOME_POS_AXIS_7=0
HOME_POS_AXIS_8=0
;回家第一段速度(pulse/ms)
;回家第一段速度(pulse/ms)
HOME_HIGH_SPEED_1=200.0
HOME_HIGH_SPEED_2=200.0
HOME_HIGH_SPEED_3=200.0
@@ -163,7 +163,7 @@ HOME_HIGH_SPEED_6=200.0
HOME_HIGH_SPEED_7=200.0
HOME_HIGH_SPEED_8=200.0
;回家第一段加速度(pulse/ms^2)
;回家第一段加速度(pulse/ms^2)
HOME_HIGH_ACC_1=2.0
HOME_HIGH_ACC_2=2.0
HOME_HIGH_ACC_3=2.0
@@ -173,7 +173,7 @@ HOME_HIGH_ACC_6=2.0
HOME_HIGH_ACC_7=2.0
HOME_HIGH_ACC_8=2.0
;回家第二段速度(pulse/ms)
;回家第二段速度(pulse/ms)
HOME_LOW_SPEED_1=180.0
HOME_LOW_SPEED_2=180.0
HOME_LOW_SPEED_3=180.0
@@ -183,7 +183,7 @@ HOME_LOW_SPEED_6=180.0
HOME_LOW_SPEED_7=180.0
HOME_LOW_SPEED_8=180.0
;回家第二段加速度(pulse/ms^2)
;回家第二段加速度(pulse/ms^2)
HOME_LOW_ACC_1=2.0
HOME_LOW_ACC_2=2.0
HOME_LOW_ACC_3=2.0
@@ -193,7 +193,7 @@ HOME_LOW_ACC_6=2.0
HOME_LOW_ACC_7=2.0
HOME_LOW_ACC_8=2.0
;回家延时时间(ms)
;回家延时时间(ms)
HOME_TIME_1=1000
HOME_TIME_2=1000
HOME_TIME_3=1000
@@ -204,7 +204,7 @@ HOME_TIME_7=1000
HOME_TIME_8=1000
[PID]
;PID比例调节,应从0.01递增开始调试
;PID比例调节,应从0.01递增开始调试
PID_KP_1=1.20
PID_KP_2=1.20
PID_KP_3=1.20
@@ -215,7 +215,7 @@ PID_KP_7=1.20
PID_KP_8=1.20
[PRECISION]
;超时时间(0.1ms)
;超时时间(0.1ms)
PRECISION_TIME_1=20000
PRECISION_TIME_2=20000
PRECISION_TIME_3=20000
@@ -225,7 +225,7 @@ PRECISION_TIME_6=20000
PRECISION_TIME_7=20000
PRECISION_TIME_8=20000
;回家误差脉冲个数
;回家误差脉冲个数
PRECISION_COUNT_1=8
PRECISION_COUNT_2=8
PRECISION_COUNT_3=8
@@ -236,7 +236,7 @@ PRECISION_COUNT_7=8
PRECISION_COUNT_8=8
[SET_POSITION_SPEED]
;XYZ定位的合成速度(pulse/ms)
;XYZ定位的合成速度(pulse/ms)
SET_POTION_SPEED_1=500.0
SET_POTION_SPEED_2=500.0
SET_POTION_SPEED_3=500.0
@@ -246,7 +246,7 @@ SET_POTION_SPEED_6=500.0
SET_POTION_SPEED_7=500.0
SET_POTION_SPEED_8=500.0
;XYZ定位的合成加速度(pulse/ms^2)
;XYZ定位的合成加速度(pulse/ms^2)
SET_POTION_ACC_1=2.5
SET_POTION_ACC_2=2.5
SET_POTION_ACC_3=2.5
@@ -256,7 +256,7 @@ SET_POTION_ACC_6=2.5
SET_POTION_ACC_7=2.5
SET_POTION_ACC_8=2.5
;XYZ定位的终点速度(pulse/ms)
;XYZ定位的终点速度(pulse/ms)
SET_POTION_DEC_1=1.0
SET_POTION_DEC_2=1.0
SET_POTION_DEC_3=1.0
@@ -266,7 +266,7 @@ SET_POTION_DEC_6=1.0
SET_POTION_DEC_7=1.0
SET_POTION_DEC_8=1.0
;XYZ定到位判断次数
;XYZ定到位判断次数
SET_POSITION_COUNT_1=240
SET_POSITION_COUNT_2=240
SET_POSITION_COUNT_3=240
@@ -277,20 +277,20 @@ SET_POSITION_COUNT_7=240
SET_POSITION_COUNT_8=240
[COMPORT]
;灯光控制器类型选择
;0:启用c++调用灯光,不使用STM32 USB控制时,需要把下面的IS_STM32_USB改为0
;1:wpf直接调用;
;2:DP光源控制器;
;3:旧的6环8区为3(环形可调);
;4:新的6环8区为4(扇区可调);
;5:STM32控制器,IP地址在exe目录下的CameraNum.ini中修改
;61:OPT光源控制器网络模式(111ms),IP地址在exe目录下的CameraNum.ini中修改,串口模式62(44ms);
;灯光控制器类型选择
;0:启用c++调用灯光,不使用STM32 USB控制时,需要把下面的IS_STM32_USB改为0
;1:wpf直接调用;
;2:DP光源控制器;
;3:旧的6环8区为3(环形可调);
;4:新的6环8区为4(扇区可调);
;5:STM32控制器,IP地址在exe目录下的CameraNum.ini中修改
;61:OPT光源控制器网络模式(111ms),IP地址在exe目录下的CameraNum.ini中修改,串口模式62(44ms);
COM_PORT_CPP_WPF=0
;使用stm32时,是否使用USB通讯,使用该功能时,COM_PORT_CPP_WPF必须等于0
;使用stm32时,是否使用USB通讯,使用该功能时,COM_PORT_CPP_WPF必须等于0
IS_STM32_USB=0
;是否打开第一个串,1为打开,0为关闭,默认0
;是否打开第一个串,1为打开,0为关闭,默认0
IS_COM_PORT_A=0
COM_PORT_A=2
COM_PORT_A_LED_1=1
@@ -298,7 +298,7 @@ COM_PORT_A_LED_2=1
COM_PORT_A_LED_3=1
COM_PORT_A_LED_4=1
;是否打开第二个串,1为打开,0为关闭,默认0
;是否打开第二个串,1为打开,0为关闭,默认0
IS_COM_PORT_B=0
COM_PORT_B=6
COM_PORT_B_LED_1=1
@@ -307,17 +307,17 @@ COM_PORT_B_LED_3=1
COM_PORT_B_LED_4=1
[TRRIGER]
;线性点触发的脉冲宽度
;线性点触发的脉冲宽度
LINEAR_PULSE_WIDTH=500
;等间距触发的脉冲宽度
;等间距触发的脉冲宽度
INTERVAL_PULSE_WIDTH=500
;手动触发
;手动触发
HOLD_TIME=150
[LOG]
;是否打开记录,默认0为关闭,1位打开,;LOG_IS_OPEN_0为是否打开记录功能
;是否打开记录,默认0为关闭,1位打开,;LOG_IS_OPEN_0为是否打开记录功能
LOG_IS_OPEN_0=1
LOG_IS_OPEN_1=1
LOG_IS_OPEN_2=1
@@ -327,9 +327,9 @@ LOG_IS_OPEN_5=0
LOG_IS_OPEN_6=0
LOG_IS_OPEN_7=0
LOG_IS_OPEN_8=0
;是否启用统计定位函数的时间日志,1:启用,默认0关闭
;是否启用统计定位函数的时间日志,1:启用,默认0关闭
LOG2_IS_OPEN=0
;定位几次后,计算这几次总共用时mm,默认4次
;定位几次后,计算这几次总共用时mm,默认4次
LOG_SUM_COUNT=0