新增 dll 通过串口获取 EF3固件版本号
This commit is contained in:
@@ -64,6 +64,15 @@ SOCKET m_socket[4] = {0};
|
||||
//===========================================================================
|
||||
//运动类构造函数,涉及 运动控制参数、插补、回家、摇杆、日志等配置信息的加载
|
||||
|
||||
void ErrorsHandler(const char* ErrorMessage, BOOL fCloseComm)
|
||||
{
|
||||
printf(ErrorMessage);
|
||||
printf("press any key to exit.\n");
|
||||
if (fCloseComm) acsc_CloseComm(handleACS);
|
||||
_getch();
|
||||
};
|
||||
|
||||
|
||||
HSI_Motion::HSI_Motion()
|
||||
{
|
||||
TRACE0("HSI_Motion Constructor!\n");
|
||||
@@ -97,6 +106,7 @@ HSI_Motion::HSI_Motion()
|
||||
m_IsUseSixRingEightArea = 0; //是否启用六环八区灯功能 0为不启用 1为启用 2为二环八区灯 默认为0
|
||||
m_IsUseTwentySixLight = 0; //是否启用26路灯光 0为不启用 1位启用 默认为0
|
||||
m_IsUseEF3 = 0; //是否启用EF3
|
||||
m_IsUseACS = 0; //是否启用ACS
|
||||
m_IsUseRocker = 0; //是否启用摇杆 0为不启用 1为启用旧摇杆,2为新摇杆, 默认为0
|
||||
m_IsCloseRocker = 0;
|
||||
m_DeviceType = 0; //设备类型,0为通用设备,1为三激光, 2为大视野,3为转盘设备 默认为0
|
||||
@@ -264,6 +274,7 @@ HSI_Motion::HSI_Motion()
|
||||
m_cSendData[4] = 4;
|
||||
m_cSendData[6] = 4;
|
||||
m_bConnected = false;
|
||||
m_bACSConnected = false; //初始化,默认打开失败
|
||||
|
||||
first = true;
|
||||
LightSend = 0;
|
||||
@@ -370,6 +381,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
Load_EF3_Config_Inifile(GoogolMotionConfigFile); //加载 EF3_Config.ini 配置项
|
||||
GoogolMotionConfigFile = m_AppPath + _T("\\Config\\EF3_Motion.ini");
|
||||
Load_EF3_Motion_Inifile(GoogolMotionConfigFile); // 加载 EF3_Motion.ini 配置项
|
||||
|
||||
if (m_IsUseEF3 == 1) //如果使用 EF3
|
||||
{
|
||||
if (!m_bConnected)
|
||||
@@ -389,12 +401,50 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
}
|
||||
m_SO7_Serial.SetTimeouts(1000, 1000);
|
||||
m_bConnected = true;
|
||||
g_pLogger->SendAndFlushWithTime(L"[Startup] Serial is open success\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[Startup] Serial is opened\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (m_IsUseACS == 1) //如果启用ACS
|
||||
{
|
||||
if (!m_bACSConnected)
|
||||
{
|
||||
//尝试打开ACS控制器
|
||||
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] In\n");
|
||||
g_pLogger->SendAndFlushWithTime(
|
||||
L"[ACS Motion] Wait for opening of communication with the controller... \n");
|
||||
|
||||
// 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
|
||||
// hComm = acsc_OpenCommEthernet("10.0.0.100", ACSC_SOCKET_STREAM_PORT);
|
||||
|
||||
if (handleACS == ACSC_INVALID) //打开失败
|
||||
{
|
||||
ErrorsHandler("error while opening communication.\n", FALSE);
|
||||
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] error while opening communication.\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, "ACS控制器打开失败");
|
||||
EventCallback(sEvenProp);
|
||||
return HSI_STATUS_FAILED;
|
||||
}
|
||||
m_bACSConnected = true;
|
||||
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] Communication with the controller established success\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
g_pLogger->SendAndFlushWithTime(L"[ACS Motion] Communication with the controller is already established successfully!\n");
|
||||
}
|
||||
}
|
||||
|
||||
// 04 05 0F 4A 04 00 04 00 00 00 00 00 00 00 00 00
|
||||
//
|
||||
//01 01 0F 04 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
@@ -420,17 +470,17 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
//01 06 07 53 01 0F 00 00 F4 01 00 00 F4 01 00 00
|
||||
|
||||
//AbortMotion();
|
||||
m_cSendData[0] = CT_ORDER;
|
||||
m_cSendData[1] = CT_STOP;
|
||||
m_cSendData[2] = AXIS_XYZU;
|
||||
m_StopJogMode[1] == 0 ? m_cSendData[3] = 0X4A : m_cSendData[3] = 0X05;
|
||||
m_StopJogMode[2] == 0 ? m_cSendData[3] = 0X4A : m_cSendData[3] = 0X05;
|
||||
m_StopJogMode[3] == 0 ? m_cSendData[3] = 0X4A : m_cSendData[3] = 0X05;
|
||||
m_StopJogMode[4] == 0 ? m_cSendData[3] = 0X4A : m_cSendData[3] = 0X05;
|
||||
m_WriteByte = Send_Command(0, (const char*)m_cSendData, m_SendDataLength);
|
||||
Sleep(5);
|
||||
//m_cSendData[0] = CT_ORDER;//停止运动
|
||||
//m_cSendData[1] = CT_STOP;
|
||||
//m_cSendData[2] = AXIS_XYZU;
|
||||
//m_StopJogMode[1] == 0 ? m_cSendData[3] = 0X4A : m_cSendData[3] = 0X05;
|
||||
//m_StopJogMode[2] == 0 ? m_cSendData[3] = 0X4A : m_cSendData[3] = 0X05;
|
||||
//m_StopJogMode[3] == 0 ? m_cSendData[3] = 0X4A : m_cSendData[3] = 0X05;
|
||||
//m_StopJogMode[4] == 0 ? m_cSendData[3] = 0X4A : m_cSendData[3] = 0X05;
|
||||
//m_WriteByte = Send_Command(0, (const char*)m_cSendData, m_SendDataLength);
|
||||
//Sleep(5);
|
||||
|
||||
if (m_DeviceType == 3)
|
||||
if (m_DeviceType == 3) //转盘设备,当前未使用
|
||||
{
|
||||
m_cSendData[0] = CT_TURNTABLE;
|
||||
m_cSendData[1] = CT_RTSTOP;
|
||||
@@ -439,7 +489,8 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
m_Thread_StateData = HSI_THREAD_RUNNING;
|
||||
SetEvent(m_hTriggerEventData);
|
||||
}
|
||||
if (bUseGlueDispenser)
|
||||
|
||||
if (bUseGlueDispenser) //点胶,当前未使用
|
||||
{
|
||||
bUseGlueDispenser = false;
|
||||
m_cSendData[0] = CT_MOTOR;
|
||||
@@ -455,56 +506,57 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
g_pLogger->SendAndFlushWithTime(L"[Startup] DriverAlarmStatus HSI_STATUS_FAILED\n");
|
||||
//return HSI_STATUS_FAILED;
|
||||
}
|
||||
//无效软限位
|
||||
m_cSendData[0] = CT_MOTOR;
|
||||
m_cSendData[1] = CT_MOTOR_SET;
|
||||
m_cSendData[2] = AXIS_XYZU;
|
||||
m_cSendData[3] = SOFT_LIMIT_POS_NEG;
|
||||
m_cSendData[4] = 0;
|
||||
m_cSendData[5] = 0;
|
||||
m_cSendData[6] = 0;
|
||||
m_cSendData[7] = 0;
|
||||
m_cSendData[8] = 0;
|
||||
m_cSendData[9] = 0;
|
||||
m_cSendData[10] = 0;
|
||||
m_cSendData[11] = 0;
|
||||
m_WriteByte = Send_Command(0, (const char*)m_cSendData, m_SendDataLength); //初始化防止第一次无效
|
||||
Sleep(5);
|
||||
m_WriteByte = Send_Command(0, (const char*)m_cSendData, m_SendDataLength);
|
||||
g_pLogger->SendAndFlushWithTime(L"[Startup] Limit no Enable\n");
|
||||
|
||||
//无效软限位,当前未使用
|
||||
//m_cSendData[0] = CT_MOTOR;
|
||||
//m_cSendData[1] = CT_MOTOR_SET;
|
||||
//m_cSendData[2] = AXIS_XYZU;
|
||||
//m_cSendData[3] = SOFT_LIMIT_POS_NEG;
|
||||
//m_cSendData[4] = 0;
|
||||
//m_cSendData[5] = 0;
|
||||
//m_cSendData[6] = 0;
|
||||
//m_cSendData[7] = 0;
|
||||
//m_cSendData[8] = 0;
|
||||
//m_cSendData[9] = 0;
|
||||
//m_cSendData[10] = 0;
|
||||
//m_cSendData[11] = 0;
|
||||
//m_WriteByte = Send_Command(0, (const char*)m_cSendData, m_SendDataLength); //初始化防止第一次无效
|
||||
//Sleep(5);
|
||||
//m_WriteByte = Send_Command(0, (const char*)m_cSendData, m_SendDataLength);
|
||||
//g_pLogger->SendAndFlushWithTime(L"[Startup] Limit no Enable\n");
|
||||
|
||||
//设置方向4个轴的方向,按位
|
||||
m_cSendData[0] = CT_MOTOR;
|
||||
m_cSendData[1] = CT_MOTOR_SET;
|
||||
m_cSendData[2] = AXIS_X;
|
||||
m_cSendData[3] = ENC_POS_DIR;
|
||||
m_cSendData[4] = m_Set_XYZA_Reserve;
|
||||
m_cSendData[5] = m_setPositionDelay;
|
||||
m_cSendData[6] = m_setPositionPrecision;
|
||||
m_WriteByte = Send_Command(0, (const char*)m_cSendData, m_SendDataLength);
|
||||
Sleep(10);
|
||||
m_cSendData[0] = CT_MOTOR;
|
||||
m_cSendData[1] = CT_MDATA_INIT;
|
||||
m_cSendData[2] = m_motorType & 0xff; //电机类型(步进电机或伺服电机)
|
||||
m_cSendData[3] = m_IsUseExternalTrigger; //是否启用外触发功能
|
||||
m_cSendData[4] = m_IsUseSixRingEightArea; //是否启用六环八区灯功能
|
||||
m_cSendData[5] = m_IsHardLimit;
|
||||
m_cSendData[6] = m_IsEnableAxis;
|
||||
m_cSendData[7] = m_IsProbe; //是否启用探针
|
||||
m_cSendData[8] = m_EF3LightType; //5V高频灯光配置
|
||||
m_cSendData[9] = m_IsUseRocker; //是否启用摇杆
|
||||
m_cSendData[10] = m_IsHavePattern; //光栅
|
||||
m_cSendData[11] = m_AxisHomeDirection; //轴回家方向
|
||||
m_cSendData[12] = m_IsCollectPos; //是否从串口打印位置
|
||||
m_cSendData[16] = m_IsLightDebug; //是否不回家也能调试灯光
|
||||
//m_cSendData[0] = CT_MOTOR;
|
||||
//m_cSendData[1] = CT_MOTOR_SET;
|
||||
//m_cSendData[2] = AXIS_X;
|
||||
//m_cSendData[3] = ENC_POS_DIR;
|
||||
//m_cSendData[4] = m_Set_XYZA_Reserve;
|
||||
//m_cSendData[5] = m_setPositionDelay;
|
||||
//m_cSendData[6] = m_setPositionPrecision;
|
||||
//m_WriteByte = Send_Command(0, (const char*)m_cSendData, m_SendDataLength);
|
||||
//Sleep(10);
|
||||
//m_cSendData[0] = CT_MOTOR;
|
||||
//m_cSendData[1] = CT_MDATA_INIT;
|
||||
//m_cSendData[2] = m_motorType & 0xff; //电机类型(步进电机或伺服电机)
|
||||
//m_cSendData[3] = m_IsUseExternalTrigger; //是否启用外触发功能
|
||||
//m_cSendData[4] = m_IsUseSixRingEightArea; //是否启用六环八区灯功能
|
||||
//m_cSendData[5] = m_IsHardLimit;
|
||||
//m_cSendData[6] = m_IsEnableAxis;
|
||||
//m_cSendData[7] = m_IsProbe; //是否启用探针
|
||||
//m_cSendData[8] = m_EF3LightType; //5V高频灯光配置
|
||||
//m_cSendData[9] = m_IsUseRocker; //是否启用摇杆
|
||||
//m_cSendData[10] = m_IsHavePattern; //光栅
|
||||
//m_cSendData[11] = m_AxisHomeDirection; //轴回家方向
|
||||
//m_cSendData[12] = m_IsCollectPos; //是否从串口打印位置
|
||||
//m_cSendData[16] = m_IsLightDebug; //是否不回家也能调试灯光
|
||||
|
||||
if (m_IsStartInput == 1 && m_IsUseRocker == 2)
|
||||
{
|
||||
m_cSendData[14] = m_StartInputPort >> 8 & 0xff; //外部启动端口号 H
|
||||
m_cSendData[15] = m_StartInputPort & 0xff; //外部启动端口号 L
|
||||
}
|
||||
m_WriteByte = Send_Command(0, (const char*)m_cSendData, m_SendDataLength);
|
||||
Sleep(10);
|
||||
//if (m_IsStartInput == 1 && m_IsUseRocker == 2) //新摇杆,并启动脚踏功能
|
||||
//{
|
||||
// m_cSendData[14] = m_StartInputPort >> 8 & 0xff; //外部启动端口号 H
|
||||
// m_cSendData[15] = m_StartInputPort & 0xff; //外部启动端口号 L
|
||||
//}
|
||||
//m_WriteByte = Send_Command(0, (const char*)m_cSendData, m_SendDataLength);
|
||||
//Sleep(10);
|
||||
|
||||
////步进电机补偿值设定
|
||||
//if (m_motorType == 0)
|
||||
@@ -603,23 +655,24 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
g_pLogger->SendAndFlushWithTime(L"[Startup] Set Gears Success\n");
|
||||
}
|
||||
|
||||
CreateThread(); //刷新位置状态
|
||||
SetEvent(m_hTriggerEvent);
|
||||
m_Thread_State = HSI_THREAD_PAUSED;
|
||||
g_pLogger->SendAndFlushWithTime(L"[Startup] SetpositionXyz Enable\n");
|
||||
//CreateThread(); //刷新位置状态线程
|
||||
//SetEvent(m_hTriggerEvent);
|
||||
//m_Thread_State = HSI_THREAD_PAUSED;
|
||||
//g_pLogger->SendAndFlushWithTime(L"[Startup] SetpositionXyz Enable\n");
|
||||
|
||||
CreateThreadData(); //读取EF3的数据状态
|
||||
SetEvent(m_hTriggerEventData);
|
||||
m_Thread_StateData = HSI_THREAD_RUNNING;
|
||||
g_pLogger->SendAndFlushWithTime(L"[Startup] Read EF3 Status Run\n");
|
||||
//CreateThreadData(); //读取EF3数据状态线程
|
||||
//SetEvent(m_hTriggerEventData);
|
||||
//m_Thread_StateData = HSI_THREAD_RUNNING;
|
||||
//g_pLogger->SendAndFlushWithTime(L"[Startup] Read EF3 Status Run\n");
|
||||
|
||||
if (m_DeviceType != 3)
|
||||
{
|
||||
CreateThreadJOGStop(); ////JOG运行到软限位的运动调节
|
||||
SetEvent(m_hTriggerEventJOGStop);
|
||||
m_Thread_StateJOGStop = HSI_THREAD_PAUSED;
|
||||
}
|
||||
if (m_IsIOFuntion == 1) //是否启用IO功能,通过配置文件启用
|
||||
//if (m_DeviceType != 3)
|
||||
//{
|
||||
// CreateThreadJOGStop(); ////JOG运行到软限位的运动调节线程
|
||||
// SetEvent(m_hTriggerEventJOGStop);
|
||||
// m_Thread_StateJOGStop = HSI_THREAD_PAUSED;
|
||||
//}
|
||||
|
||||
if (m_IsIOFuntion == 1) //是否启用IO功能线程,通过配置文件启用
|
||||
{
|
||||
m_Thread_StateIO = HSI_THREAD_RUNNING;
|
||||
CreateThreadIO(); //IO发消息使用
|
||||
@@ -627,6 +680,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
||||
g_pLogger->SendAndFlushWithTime(L"[Startup] m_IsIOFuntion Enable\n");
|
||||
SetDIO(HSI_MOTION_OUTPUT_CH1, 0xfffff);
|
||||
}
|
||||
|
||||
if (m_IsProbe == 1) //是否启用探针捕获功能,通过配置文件启用
|
||||
{
|
||||
CreateThreadProbe(); //探针捕获功能
|
||||
@@ -651,17 +705,21 @@ HSI_STATUS HSI_Motion::GetFirmwareVersion(byte* version)
|
||||
Sleep(3);
|
||||
int waite_count = 0;
|
||||
unsigned char senddata[64] = {0};
|
||||
senddata[0] = 0x04;
|
||||
senddata[1] = 0x03;
|
||||
//senddata[0] = 0x04;
|
||||
//senddata[1] = 0x03;
|
||||
|
||||
senddata[0] = 0x01;
|
||||
senddata[1] = 0x08;
|
||||
m_SO7_Serial.m_RecvData[0] = 0;
|
||||
m_WriteByte = Send_Command(0, (const char*)senddata, m_SendDataLength);
|
||||
m_WriteByte = Send_Command(0, (const char*)senddata, sizeof(senddata));
|
||||
Sleep(30);
|
||||
m_SO7_Serial.m_RecvData[0] = 0;
|
||||
m_WriteByte = Send_Command(0, (const char*)senddata, m_SendDataLength);
|
||||
m_WriteByte = Send_Command(0, (const char*)senddata, sizeof(senddata));
|
||||
Sleep(30);
|
||||
m_SO7_Serial.m_RecvData[0] = 0;
|
||||
m_WriteByte = Send_Command(0, (const char*)senddata, m_SendDataLength);
|
||||
m_WriteByte = Send_Command(0, (const char*)senddata, sizeof(senddata));
|
||||
Sleep(30);
|
||||
|
||||
while ((m_SO7_Serial.m_RecvData[0] != 3) && (m_SO7_Serial.m_RecvData[0] != 2))
|
||||
{
|
||||
waite_count++;
|
||||
@@ -672,7 +730,7 @@ HSI_STATUS HSI_Motion::GetFirmwareVersion(byte* version)
|
||||
if (waite_count > 100)
|
||||
{
|
||||
waite_count = 0;
|
||||
m_WriteByte = Send_Command(0, (const char*)senddata, m_SendDataLength);
|
||||
m_WriteByte = Send_Command(0, (const char*)senddata, sizeof(senddata));
|
||||
while ((m_SO7_Serial.m_RecvData[0] != 3) && (m_SO7_Serial.m_RecvData[0] != 2))
|
||||
{
|
||||
waite_count++;
|
||||
@@ -3107,7 +3165,7 @@ HSI_STATUS HSI_Motion::Load_EF3_Config_Inifile(CString GoogolIniFile)
|
||||
return HSI_STATUS_FAILED;
|
||||
}
|
||||
m_IsUseEF3 = GetPrivateProfileInt(L"EF3", L"IS_USEEF3", 0, csAppPath);
|
||||
|
||||
m_IsUseACS = GetPrivateProfileInt(L"EF3", L"IS_USEACS", 0, csAppPath);
|
||||
m_ForSoft = GetPrivateProfileInt(L"SOFTWARE", L"USE_SOFTWARE", 0, csAppPath);
|
||||
|
||||
m_IsUse_HSICompensation = GetPrivateProfileInt(L"ASIX", L"IS_USE_HSICOMPENSATION", 0, csAppPath);
|
||||
@@ -6884,7 +6942,6 @@ unsigned __stdcall HSI_Motion::m_ThreadSendTCP(LPVOID pThis)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
TCPIP_RETURN_CODE HSI_Motion::TCPSend()
|
||||
{
|
||||
if (m_tcpCntFlag[m_selectedIndex])
|
||||
@@ -7047,7 +7104,6 @@ TCPIP_RETURN_CODE HSI_Motion::TCPSend()
|
||||
return TCPIP_CONNECT_OK;
|
||||
}
|
||||
|
||||
|
||||
void HSI_Motion::Create_Thread()
|
||||
{
|
||||
if (!m_ThreadTCP_Id)
|
||||
|
||||
Reference in New Issue
Block a user