修复Metus Jog运动错误

This commit is contained in:
zhengxuan.zhang
2022-10-21 18:58:58 +08:00
parent 9a5ca2a7d1
commit 320f16e6fb
6 changed files with 35 additions and 368 deletions
+1 -1
View File
@@ -323,7 +323,7 @@ enum HSI_MOTION_TYPE
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 = 0x0000,// This is the default "Sensor level" Y Axis - use on single Y 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
+1 -1
View File
@@ -107,7 +107,7 @@
</Link>
<PostBuildEvent>
<Command>copy "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)HSI_SEVENOCEAN_EF1_CsTest\bin\Debug\HSI.dll"
copy "$(TargetDir)$(ProjectName).dll" "C:\Hexagon\Metus2021\HSI.dll"
copy "$(TargetDir)$(ProjectName).dll" "C:\Hexagon\Metus2021\HSI_Sevenocean_EF3.dll"
copy "$(TargetDir)$(ProjectName).dll" "E:\HexagonProjects\2022-05-直线电机平台\EF3-Interfac\PcDmis\Base\Interfac\Msi\Hsi\Tools\UsbUtility\HSI_Sevenocean_EF1_WPFTest\bin\x64\Debug\HSI.dll"</Command>
</PostBuildEvent>
<PreBuildEvent>
+30 -20
View File
@@ -428,6 +428,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
{
//直线电机平台,采用串口通信,8个数据位,1个停止位,无奇偶校验,波特率256000
m_SO7_Serial.SetPort(m_EF3COMPort, 256000, 0, 8, 1, 0); //打开串口
#ifndef OFFLINE
if (!m_SO7_Serial.Open()) //如果串口打开失败
{
g_pLogger->SendAndFlushWithTime(L"[Startup] m_SO7_Serial.Open is false,connected failed\n");
@@ -439,6 +440,9 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
EventCallback(sEvenProp);
return HSI_STATUS_FAILED;
}
#endif // OFFLINE
m_SO7_Serial.SetTimeouts(1000, 1000);
m_bConnected = true;
g_pLogger->SendAndFlushWithTime(L"[Startup] Serial: [COM%d] is open success\n", m_EF3COMPort);
@@ -458,7 +462,10 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] In\n");
g_pLogger->SendAndFlushWithTime(
L"[ACS Motion] Wait for opening of communication with the controller... \n");
#ifdef OFFLINE //如果定义离线模式
handleACS = acsc_OpenCommSimulator();
#else
// 10.0.0.100 - default IP address of the controller
handleACS = acsc_OpenCommEthernet("10.0.0.100", ACSC_SOCKET_DGRAM_PORT);
// for the connection to the controller via local network or Internet
@@ -477,7 +484,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
EventCallback(sEvenProp);
return HSI_STATUS_FAILED;
}
#endif
//使能电机
int Axes[] = { ACSC_AXIS_0, ACSC_AXIS_1, ACSC_AXIS_4, -1 };
if(!acsc_EnableM(handleACS, Axes,NULL))
@@ -1000,7 +1007,7 @@ HSI_STATUS HSI_Motion::HomeMachineOld(bool bHomed)
{
if (CurrentHomeMachineState == E_EF3_HOME_FINISHED)
{
byte AxisNumber = static_cast<byte>(AxisConvertIndex(AxisTypes));
byte AxisNumber = static_cast<byte>(AxisConvertIndex(AxisTypes)); //HomeMachineOld
m_cSendData[0] = CT_MOTOR;
m_cSendData[1] = CT_MOTOR_SET;
m_cSendData[2] = AxisTypes;
@@ -1563,7 +1570,7 @@ HSI_STATUS HSI_Motion::JogOld(UINT AxisTypes, double Speed)
int DecCurve(1);
int JogSpeed(1);
bool bJOGDir = Speed > 0 ? true : false;
byte AxisNumber = static_cast<byte>(AxisConvertIndex(AxisTypes));
byte AxisNumber = static_cast<byte>(AxisConvertIndex(AxisTypes));//JogOld
jogAxisNum = AxisNumber;
jogDirFlag = bJOGDir;
m_Thread_State = HSI_THREAD_PAUSED;
@@ -1836,6 +1843,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:[%d]\n", AxisTypes, Speed);
if (g_pHSI_Motion)
{
if (m_DeviceType != 3) //非转盘设备
@@ -1845,7 +1853,7 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
}
bool bJOGDir = Speed > 0 ? true : false; //运动方向
byte AxisNumber = static_cast<byte>(AxisConvertIndex(AxisTypes));
byte AxisNumber = static_cast<byte>(AxisConvertIndex(AxisTypes));//Jog
jogAxisNum = AxisNumber;
jogDirFlag = bJOGDir;
m_Thread_State = HSI_THREAD_PAUSED;
@@ -1860,10 +1868,10 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
}
//是否回过家
if (m_Home_Machine_Axis[AxisNumber] == 0)
{
return rStatus;
}
//if (m_Home_Machine_Axis[AxisNumber] == 0)
//{
// return rStatus;
//}
// 是否启用急停
//if ((StartSpeed < 250) && (DriveSpeed < 6))
@@ -1880,14 +1888,15 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
//开始JOG运动
int acsDirection = bJOGDir ? ACSC_POSITIVE_DIRECTION : ACSC_NEGATIVE_DIRECTION; //正方向,或 负方向
if (!acsc_Jog(handleACS, 0, AxisTypes, acsDirection, nullptr))
if (!acsc_Jog(handleACS, 0, jogAxisNum, acsDirection, nullptr))
{
g_pLogger->SendAndFlushWithTime(L"[Jog] [%d] Öá [%s] ·½ÏòÒÆ¶¯Ê§°Ü", AxisTypes, bJOGDir ? "Õý" : "¸º");
printf("[Jog] [%d] [%s] 方向移动失败", AxisTypes, bJOGDir? "" : "");
g_pLogger->SendAndFlushWithTime(L"[Jog] aixs:[%d] JOGDir:[%s] Jog move failed\n", AxisTypes, bJOGDir ? "P" : "N");
ErrorsHandler();
}
jogMoving = true;
g_pLogger->SendAndFlushWithTime(L"[Jog] Out, bJOGDir = %s\n", bJOGDir ? "positive":"negative");
g_pLogger->SendAndFlushWithTime(L"[Jog] Out, bJOGDir = %s\n", bJOGDir? "positive":"negative");
}
return rStatus;
}
@@ -1912,7 +1921,7 @@ HSI_STATUS HSI_Motion::JoyStick(UINT AxisTypes, long Speed)
int DecCurve(1);
int JogSpeed(1);
bool bJOGDir = Speed > 0 ? true : false;
byte AxisNumber = static_cast<byte>(AxisConvertIndex(AxisTypes));
byte AxisNumber = static_cast<byte>(AxisConvertIndex(AxisTypes));//JoyStick
jogAxisNum = AxisNumber;
jogDirFlag = bJOGDir;
m_Thread_State = HSI_THREAD_PAUSED;
@@ -2246,7 +2255,7 @@ HSI_STATUS HSI_Motion::StopJog()
{
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);
//g_pLogger->SendAndFlushWithTime(L"[StopJog] t_start = %d, t_end = %d\n", t_start, t_end);
jogMoving = false;
if (t_end - t_start < 100)
{
@@ -2297,6 +2306,7 @@ HSI_STATUS HSI_Motion::StopJog()
return rStatus;
}
//===========================================================================
HSI_STATUS HSI_Motion::StopJogEx(UINT AxisTypes)
{
@@ -6883,19 +6893,19 @@ short HSI_Motion::AxisConvertIndex(UINT AxisTypes)
}
case HSI_MOTION_AXIS_Y:
{
AxisNumber = 0x02;
AxisNumber = 0x00;
break;
}
case HSI_MOTION_AXIS_Z:
{
AxisNumber = 0x03;
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,
+1 -1
View File
@@ -84,7 +84,7 @@ void CLogger::SendAndFlushWithTime(LPCTSTR format, ...)
va_start(list, format);
length = vswprintf_s(m_Str2, 5000, format, list);
CTime _cTime = CTime::GetCurrentTime();
CString csTime = _cTime.Format("[%Y%m/%d %H:%M:%S");
CString csTime = _cTime.Format("[%Y/%m/%d %H:%M:%S");
struct _timeb timebuffer;
_ftime64_s(&timebuffer);
if (m_File)
+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.20 / 12:06 "
#define HSI_FILE_CSDESCRIPTION _T("2022.10.20 / 12:06 ")
#define HSI_FILE_DESCRIPTION "2022.10.21 / 18:06 "
#define HSI_FILE_CSDESCRIPTION _T("2022.10.21 / 18:06 ")
@@ -1,343 +0,0 @@
[JOG_SPEED]
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_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_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_STOP_MODE_1=0
JOG_STOP_MODE_2=0
JOG_STOP_MODE_3=0
JOG_STOP_MODE_4=0
JOG_STOP_MODE_5=0
JOG_STOP_MODE_6=0
JOG_STOP_MODE_7=0
JOG_STOP_MODE_8=0
JOG_STOP_MODE=0
JOG_SPEED_GEAR0_1=200.0
JOG_ACC_GEAR0_1=2.0
JOG_DEC_GEAR0_1=2.0
JOG_SPEED_GEAR0_2=200.0
JOG_ACC_GEAR0_2=2.0
JOG_DEC_GEAR0_2=2.0
JOG_SPEED_GEAR0_3=150.0
JOG_ACC_GEAR0_3=2.0
JOG_DEC_GEAR0_3=2.0
JOG_SPEED_GEAR0_4=200.0
JOG_ACC_GEAR0_4=2.0
JOG_DEC_GEAR0_4=2.0
JOG_SPEED_GEAR1_1=100.0
JOG_ACC_GEAR1_1=2.0
JOG_DEC_GEAR1_1=2.0
JOG_SPEED_GEAR1_2=100.0
JOG_ACC_GEAR1_2=2.0
JOG_DEC_GEAR1_2=2.0
JOG_SPEED_GEAR1_3=80.0
JOG_ACC_GEAR1_3=2.0
JOG_DEC_GEAR1_3=2.0
JOG_SPEED_GEAR1_4=100.0
JOG_ACC_GEAR1_4=2.0
JOG_DEC_GEAR1_4=2.0
JOG_SPEED_GEAR2_1=50.0
JOG_ACC_GEAR2_1=2.0
JOG_DEC_GEAR2_1=2.0
JOG_SPEED_GEAR2_2=50.0
JOG_ACC_GEAR2_2=2.0
JOG_DEC_GEAR2_2=2.0
JOG_SPEED_GEAR2_3=50.0
JOG_ACC_GEAR2_3=2.0
JOG_DEC_GEAR2_3=2.0
JOG_SPEED_GEAR2_4=50.0
JOG_ACC_GEAR2_4=2.0
JOG_DEC_GEAR2_4=2.0
JOG_SPEED_GEAR3_1=10.0
JOG_ACC_GEAR3_1=1.0
JOG_DEC_GEAR3_1=1.0
JOG_SPEED_GEAR3_2=10.0
JOG_ACC_GEAR3_2=1.0
JOG_DEC_GEAR3_2=1.0
JOG_SPEED_GEAR3_3=10.0
JOG_ACC_GEAR3_3=1.0
JOG_DEC_GEAR3_3=1.0
JOG_SPEED_GEAR3_4=10.0
JOG_ACC_GEAR3_4=1.0
JOG_DEC_GEAR3_4=1.0
JOG_SPEED_GEAR4_1=1.0
JOG_ACC_GEAR4_1=1.0
JOG_DEC_GEAR4_1=1.0
JOG_SPEED_GEAR4_2=1.0
JOG_ACC_GEAR4_2=1.0
JOG_DEC_GEAR4_2=1.0
JOG_SPEED_GEAR4_3=1.0
JOG_ACC_GEAR4_3=1.0
JOG_DEC_GEAR4_3=1.0
JOG_SPEED_GEAR4_4=1.0
JOG_ACC_GEAR4_4=1.0
JOG_DEC_GEAR4_4=1.0
;0:都使用(正常情况) 1:只使用灯,而不使用控制器;默认0
[USE_LIGHT]
ONLY_USE_LIGHT=0
[RESOLUTION]
;光栅尺的分辨率(mm)
SCALE_RESOLUTION_1=0.0004
SCALE_RESOLUTION_2=0.0004
SCALE_RESOLUTION_3=0.0004
SCALE_RESOLUTION_4=0.0004
SCALE_RESOLUTION_5=0.0004
SCALE_RESOLUTION_6=0.0004
SCALE_RESOLUTION_7=0.0004
SCALE_RESOLUTION_8=0.0004
[LIMIT]
;负限位(mm),必须是负数
;NEG_WORKING_LIMIT_1=-260.0
;NEG_WORKING_LIMIT_2=-40.0
;NEG_WORKING_LIMIT_3=-40.0
NEG_WORKING_LIMIT_1=-1.0
NEG_WORKING_LIMIT_2=-1.0
NEG_WORKING_LIMIT_3=-1.0
NEG_WORKING_LIMIT_4=-40.0
NEG_WORKING_LIMIT_5=-40.0
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
POS_WORKING_LIMIT_1=500.0
POS_WORKING_LIMIT_2=500.0
POS_WORKING_LIMIT_3=250.0
POS_WORKING_LIMIT_4=200.0
POS_WORKING_LIMIT_5=200.0
POS_WORKING_LIMIT_6=200.0
POS_WORKING_LIMIT_7=200.0
POS_WORKING_LIMIT_8=200.0
[HOME]
;选择需要回家的轴号,改为1
HOME_MACHINE_AXIS_1=1
HOME_MACHINE_AXIS_2=1
HOME_MACHINE_AXIS_3=1
HOME_MACHINE_AXIS_4=0
HOME_MACHINE_AXIS_5=0
HOME_MACHINE_AXIS_6=0
HOME_MACHINE_AXIS_7=0
HOME_MACHINE_AXIS_8=0
;是否启动实际位置判断是否回家,默认0,1启用,0关闭
IS_HOME_ENC_POS=0
;是否启动规划位置判断是否回家,默认1,1启用,0关闭
IS_HOME_PRF_POS=1
;关闭电源时记住当前的位置,用于判断是否需要回家
HOME_POS_AXIS_1=0
HOME_POS_AXIS_2=0
HOME_POS_AXIS_3=0
HOME_POS_AXIS_4=0
HOME_POS_AXIS_5=0
HOME_POS_AXIS_6=0
HOME_POS_AXIS_7=0
HOME_POS_AXIS_8=0
;回家第一段速度(pulse/ms)
HOME_HIGH_SPEED_1=200.0
HOME_HIGH_SPEED_2=200.0
HOME_HIGH_SPEED_3=200.0
HOME_HIGH_SPEED_4=200.0
HOME_HIGH_SPEED_5=200.0
HOME_HIGH_SPEED_6=200.0
HOME_HIGH_SPEED_7=200.0
HOME_HIGH_SPEED_8=200.0
;回家第一段加速度(pulse/ms^2)
HOME_HIGH_ACC_1=2.0
HOME_HIGH_ACC_2=2.0
HOME_HIGH_ACC_3=2.0
HOME_HIGH_ACC_4=2.0
HOME_HIGH_ACC_5=2.0
HOME_HIGH_ACC_6=2.0
HOME_HIGH_ACC_7=2.0
HOME_HIGH_ACC_8=2.0
;回家第二段速度(pulse/ms)
HOME_LOW_SPEED_1=180.0
HOME_LOW_SPEED_2=180.0
HOME_LOW_SPEED_3=180.0
HOME_LOW_SPEED_4=180.0
HOME_LOW_SPEED_5=180.0
HOME_LOW_SPEED_6=180.0
HOME_LOW_SPEED_7=180.0
HOME_LOW_SPEED_8=180.0
;回家第二段加速度(pulse/ms^2)
HOME_LOW_ACC_1=2.0
HOME_LOW_ACC_2=2.0
HOME_LOW_ACC_3=2.0
HOME_LOW_ACC_4=2.0
HOME_LOW_ACC_5=2.0
HOME_LOW_ACC_6=2.0
HOME_LOW_ACC_7=2.0
HOME_LOW_ACC_8=2.0
;回家延时时间(ms)
HOME_TIME_1=1000
HOME_TIME_2=1000
HOME_TIME_3=1000
HOME_TIME_4=1000
HOME_TIME_5=1000
HOME_TIME_6=1000
HOME_TIME_7=1000
HOME_TIME_8=1000
[PID]
;PID比例调节,应从0.01递增开始调试
PID_KP_1=1.20
PID_KP_2=1.20
PID_KP_3=1.20
PID_KP_4=1.20
PID_KP_5=1.20
PID_KP_6=1.20
PID_KP_7=1.20
PID_KP_8=1.20
[PRECISION]
;超时时间(0.1ms)
PRECISION_TIME_1=20000
PRECISION_TIME_2=20000
PRECISION_TIME_3=20000
PRECISION_TIME_4=20000
PRECISION_TIME_5=20000
PRECISION_TIME_6=20000
PRECISION_TIME_7=20000
PRECISION_TIME_8=20000
;回家误差脉冲个数
PRECISION_COUNT_1=8
PRECISION_COUNT_2=8
PRECISION_COUNT_3=8
PRECISION_COUNT_4=8
PRECISION_COUNT_5=8
PRECISION_COUNT_6=8
PRECISION_COUNT_7=8
PRECISION_COUNT_8=8
[SET_POSITION_SPEED]
;XYZ定位的合成速度(pulse/ms)
SET_POTION_SPEED_1=500.0
SET_POTION_SPEED_2=500.0
SET_POTION_SPEED_3=500.0
SET_POTION_SPEED_4=500.0
SET_POTION_SPEED_5=500.0
SET_POTION_SPEED_6=500.0
SET_POTION_SPEED_7=500.0
SET_POTION_SPEED_8=500.0
;XYZ定位的合成加速度(pulse/ms^2)
SET_POTION_ACC_1=2.5
SET_POTION_ACC_2=2.5
SET_POTION_ACC_3=2.5
SET_POTION_ACC_4=2.5
SET_POTION_ACC_5=2.5
SET_POTION_ACC_6=2.5
SET_POTION_ACC_7=2.5
SET_POTION_ACC_8=2.5
;XYZ定位的终点速度(pulse/ms)
SET_POTION_DEC_1=1.0
SET_POTION_DEC_2=1.0
SET_POTION_DEC_3=1.0
SET_POTION_DEC_4=1.0
SET_POTION_DEC_5=1.0
SET_POTION_DEC_6=1.0
SET_POTION_DEC_7=1.0
SET_POTION_DEC_8=1.0
;XYZ定到位判断次数
SET_POSITION_COUNT_1=240
SET_POSITION_COUNT_2=240
SET_POSITION_COUNT_3=240
SET_POSITION_COUNT_4=240
SET_POSITION_COUNT_5=240
SET_POSITION_COUNT_6=240
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);
COM_PORT_CPP_WPF=0
;使用stm32时,是否使用USB通讯,使用该功能时,COM_PORT_CPP_WPF必须等于0
IS_STM32_USB=0
;是否打开第一个串,1为打开,0为关闭,默认0
IS_COM_PORT_A=0
COM_PORT_A=2
COM_PORT_A_LED_1=1
COM_PORT_A_LED_2=1
COM_PORT_A_LED_3=1
COM_PORT_A_LED_4=1
;是否打开第二个串,1为打开,0为关闭,默认0
IS_COM_PORT_B=0
COM_PORT_B=6
COM_PORT_B_LED_1=1
COM_PORT_B_LED_2=1
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为是否打开记录功能
LOG_IS_OPEN_0=1
LOG_IS_OPEN_1=1
LOG_IS_OPEN_2=1
LOG_IS_OPEN_3=1
LOG_IS_OPEN_4=0
LOG_IS_OPEN_5=0
LOG_IS_OPEN_6=0
LOG_IS_OPEN_7=0
LOG_IS_OPEN_8=0
;是否启用统计定位函数的时间日志,1:启用,默认0关闭
LOG2_IS_OPEN=0
;定位几次后,计算这几次总共用时mm,默认4次
LOG_SUM_COUNT=0