新增 dll 通过串口获取 EF3固件版本号

This commit is contained in:
zhengxuan.zhang
2022-10-12 16:13:53 +08:00
parent 82115577c2
commit abc78bfa0b
18 changed files with 792 additions and 703 deletions
+1 -1
View File
@@ -21,7 +21,7 @@
#endif
const int HSI_APIVersionMajor = 0;
const int HSI_APIVersionMinor = 1;
const int HSI_APIVersionMinor = 0;
const int HSI_MaxStringLength = 255; // Maximum string length (buffer size - 1)
///////////////////////////////////////////////////////////////////////////////
+138 -82
View File
@@ -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)
+6
View File
@@ -355,6 +355,7 @@ public:
int m_SixEightSubArea[8]; //六环八区分区功能
int m_IsUseTwentySixLight; //是否启用26路灯光 0为不启用 1位启用 默认为0
int m_IsUseEF3; //是否启用EF3
int m_IsUseACS; //是否用ACS运动控制
int m_DeviceType; //设备类型,0为通用设备,1为三激光, 2为大视野,3为转盘设备 默认为0
int m_UseAxisNum; //转盘设备使用轴号
int m_IbinCount; //记录获取到的分bin数
@@ -444,6 +445,7 @@ public:
double m_PrfPos[5];
double m_PosForAllAxis[5]; //记录4轴位置
bool m_bConnected;
bool m_bACSConnected;// ACS是否连接成功
int m_SendDataLength;
unsigned char m_cSendData[64];
unsigned char m_direct_pos;
@@ -550,4 +552,8 @@ private:
};
extern HSI_Motion* g_pHSI_Motion;
extern void ErrorsHandler(const char* ErrorMessage, BOOL fCloseComm); //ACS 错误打印
#endif
@@ -175,6 +175,7 @@ DWORD CPSerial::Open()
// Setup the port according to the stored parameters
if (ProgramPort(m_Port, m_Baud, m_Parity, m_Bits, m_StopBits, m_HandShake))
{
TRACE(_T("CmmIO> Port OPEN %s\n", m_Port), Ok);
// Setup the timeouts
CommTimeOut.ReadIntervalTimeout = 25;
CommTimeOut.ReadTotalTimeoutMultiplier = 1;
Binary file not shown.
+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.12 / 9:29 "
#define HSI_FILE_CSDESCRIPTION _T("2022.10.12 / 9:29 ")
#define HSI_FILE_DESCRIPTION "2022.10.12 / 13:49 "
#define HSI_FILE_CSDESCRIPTION _T("2022.10.12 / 13:49 ")