From abc78bfa0b38d8544615c5546b072edb6ee38dc4 Mon Sep 17 00:00:00 2001 From: "zhengxuan.zhang" Date: Wed, 12 Oct 2022 16:13:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20dll=20=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E4=B8=B2=E5=8F=A3=E8=8E=B7=E5=8F=96=20EF3=E5=9B=BA=E4=BB=B6?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HSI_HexagonMI_EF3.sln | 1 - HSI_HexagonMI_EF3/HSI.h | 2 +- HSI_HexagonMI_EF3/HSI_Motion.cpp | 220 ++-- HSI_HexagonMI_EF3/HSI_Motion.h | 6 + HSI_HexagonMI_EF3/SevenOcean/CMMIO_SERIAL.CPP | 1 + .../HSI_Hexa.ECCF081D.tlog/CL.command.1.tlog | Bin 8594 -> 0 bytes .../obj/HSI_Hexa.ECCF081D.tlog/CL.read.1.tlog | Bin 401458 -> 0 bytes .../HSI_Hexa.ECCF081D.tlog/CL.write.1.tlog | Bin 5216 -> 0 bytes .../HSI_HexagonMI_EF3.write.1u.tlog | Bin 586 -> 0 bytes .../link.command.1.tlog | Bin 4974 -> 0 bytes .../HSI_Hexa.ECCF081D.tlog/link.read.1.tlog | Bin 13166 -> 0 bytes .../HSI_Hexa.ECCF081D.tlog/link.write.1.tlog | Bin 1780 -> 0 bytes HSI_HexagonMI_EF3/obj/vc141.idb | Bin 912384 -> 0 bytes HSI_HexagonMI_EF3/version.h | 4 +- HSI_SEVENOCEAN_EF1_CsTest/HSI/HSI.cs | 1015 +++++++++-------- HSI_SEVENOCEAN_EF1_CsTest/Program.cs | 246 ++-- .../bin/Debug/Config/EF3_Config.ini | Bin 7596 -> 7670 bytes .../bin/Debug/Log/2022-10-11_16 | 0 18 files changed, 792 insertions(+), 703 deletions(-) delete mode 100644 HSI_HexagonMI_EF3/obj/HSI_Hexa.ECCF081D.tlog/CL.command.1.tlog delete mode 100644 HSI_HexagonMI_EF3/obj/HSI_Hexa.ECCF081D.tlog/CL.read.1.tlog delete mode 100644 HSI_HexagonMI_EF3/obj/HSI_Hexa.ECCF081D.tlog/CL.write.1.tlog delete mode 100644 HSI_HexagonMI_EF3/obj/HSI_Hexa.ECCF081D.tlog/HSI_HexagonMI_EF3.write.1u.tlog delete mode 100644 HSI_HexagonMI_EF3/obj/HSI_Hexa.ECCF081D.tlog/link.command.1.tlog delete mode 100644 HSI_HexagonMI_EF3/obj/HSI_Hexa.ECCF081D.tlog/link.read.1.tlog delete mode 100644 HSI_HexagonMI_EF3/obj/HSI_Hexa.ECCF081D.tlog/link.write.1.tlog delete mode 100644 HSI_HexagonMI_EF3/obj/vc141.idb delete mode 100644 HSI_SEVENOCEAN_EF1_CsTest/bin/Debug/Log/2022-10-11_16 diff --git a/HSI_HexagonMI_EF3.sln b/HSI_HexagonMI_EF3.sln index 88ffb57..01077a4 100644 --- a/HSI_HexagonMI_EF3.sln +++ b/HSI_HexagonMI_EF3.sln @@ -119,7 +119,6 @@ Global {26BA6D1A-E94D-46EE-A361-2D1AFDB2338A}.Debug|Any CPU.ActiveCfg = Debug|x64 {26BA6D1A-E94D-46EE-A361-2D1AFDB2338A}.Debug|Any CPU.Build.0 = Debug|x64 {26BA6D1A-E94D-46EE-A361-2D1AFDB2338A}.Debug|x64.ActiveCfg = Debug|x64 - {26BA6D1A-E94D-46EE-A361-2D1AFDB2338A}.Debug|x64.Build.0 = Debug|x64 {26BA6D1A-E94D-46EE-A361-2D1AFDB2338A}.Debug|x86.ActiveCfg = Debug|Win32 {26BA6D1A-E94D-46EE-A361-2D1AFDB2338A}.Debug|x86.Build.0 = Debug|Win32 {26BA6D1A-E94D-46EE-A361-2D1AFDB2338A}.Release|Any CPU.ActiveCfg = Release|x64 diff --git a/HSI_HexagonMI_EF3/HSI.h b/HSI_HexagonMI_EF3/HSI.h index c20cb8f..aad3d5c 100644 --- a/HSI_HexagonMI_EF3/HSI.h +++ b/HSI_HexagonMI_EF3/HSI.h @@ -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) /////////////////////////////////////////////////////////////////////////////// diff --git a/HSI_HexagonMI_EF3/HSI_Motion.cpp b/HSI_HexagonMI_EF3/HSI_Motion.cpp index 6456909..6ca56fd 100644 --- a/HSI_HexagonMI_EF3/HSI_Motion.cpp +++ b/HSI_HexagonMI_EF3/HSI_Motion.cpp @@ -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) diff --git a/HSI_HexagonMI_EF3/HSI_Motion.h b/HSI_HexagonMI_EF3/HSI_Motion.h index ed509bf..16876ff 100644 --- a/HSI_HexagonMI_EF3/HSI_Motion.h +++ b/HSI_HexagonMI_EF3/HSI_Motion.h @@ -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 diff --git a/HSI_HexagonMI_EF3/SevenOcean/CMMIO_SERIAL.CPP b/HSI_HexagonMI_EF3/SevenOcean/CMMIO_SERIAL.CPP index 7642e67..3ce88c7 100644 --- a/HSI_HexagonMI_EF3/SevenOcean/CMMIO_SERIAL.CPP +++ b/HSI_HexagonMI_EF3/SevenOcean/CMMIO_SERIAL.CPP @@ -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; diff --git a/HSI_HexagonMI_EF3/obj/HSI_Hexa.ECCF081D.tlog/CL.command.1.tlog b/HSI_HexagonMI_EF3/obj/HSI_Hexa.ECCF081D.tlog/CL.command.1.tlog deleted file mode 100644 index f05a9d59e19b1b33ede01f13e0e2a805791fc1d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8594 zcmeI2&u-H|5XQeV67Nt&9N<8KKrgwac487Gc4W6rsiIm{+O&~EiQ+&x@oKyh2hPB6 z{U?Dy)QAgCSXtg#&(6;5&dh$^tn>Zbxf-fzpx4k-)#WLWubx6^8=j*hMYLD-oV%*0 z&;!b^A3lFNcwf6t&c8$hb<~B|RZA{chkku@g;1k8f*-F~FtRc2O}#`W!ir0eCS%yg zW{>Nk9_X2d+M{f#qDRyouZ+y4CDapIjno-WhPD}rlh$taP805HZqw4oT1HP9uc=*X ztP9$WWTH7wLuie10zct093z<^J4tH+HN$Z!``Gl+T3v8r_zfNE7+)4raW3cL)jqRb z@{f56Q=fGf+`?lfB0YM9X$+QqGMmQF%RVvoe8%D+Z|oP+f9A%yua`PJz0Ez+AW}&_ zXJgsXi&R?|z1h6Id7 zQJA3THs`)Urh?Wvb}uy2M{?sPk9Cv273TTxb2lK??Tzw$pJ+OGH_O&0^Doy728)qh zmTY7vX%@aB6O9jDJf8W`%QNx_uF3c&a(ku7igk!q7QAif1V8zpg#)cq8&K<}7#^@< z58*|$STwe1oT0kKtNZsc#k*h|@#=37VO!A5AX&)nsLqbbBAP`si)fqvGTUWDTZane zK(!8gGmpz4m&GiLSr)T)AG6l2`EnpqwgxR0SuC zT6|^s-@h5yQ>tA)r7GUM>(+j`5X$_%Ts>tkzIobRR1r&ySoS;Meg6;G-czU|%QwY> E9~dPs{Qv*} diff --git a/HSI_HexagonMI_EF3/obj/HSI_Hexa.ECCF081D.tlog/CL.read.1.tlog b/HSI_HexagonMI_EF3/obj/HSI_Hexa.ECCF081D.tlog/CL.read.1.tlog deleted file mode 100644 index 99c0c8f89de016cdcba7cd854305c4b2a1890d56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 401458 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 diff --git a/HSI_HexagonMI_EF3/obj/HSI_Hexa.ECCF081D.tlog/CL.write.1.tlog b/HSI_HexagonMI_EF3/obj/HSI_Hexa.ECCF081D.tlog/CL.write.1.tlog deleted file mode 100644 index e5b7a19e8d370fd0f34add68c7f32eecbef267c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5216 zcmeI0!A`L&}1=O^Zv;;gfaP$EPo{X>ND|zs&ek*C}l7`Te)1=uf zLw2{_fB($)u>2zCGH(t=%#|)h%lZc8Pgn3Wk6^7qm-VF#rG9GL2#4 zoO1-AjyR_^u0asG*wT z{&WVj=DW>xeplG_J=x|R&@#ima`pVR{RZLRq59Z9|Le`En_kajdmfuIQC)#{DYAb6 DtfySp diff --git a/HSI_HexagonMI_EF3/obj/HSI_Hexa.ECCF081D.tlog/HSI_HexagonMI_EF3.write.1u.tlog b/HSI_HexagonMI_EF3/obj/HSI_Hexa.ECCF081D.tlog/HSI_HexagonMI_EF3.write.1u.tlog deleted file mode 100644 index 0d1108a73f420d516dd7f5bba188de2ea3cb5f2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 586 zcmezWFOI>L!HOYKy1XI3#3hf zBVs$f@2tb7<_?Zz6_ZRDL|M5)K?BPs|ZMgOb%x7WQa$z!51v%%HYOe zOq3cuhBBaADi{i&F5_k38Wb+CU@&7a0s6oN=+`8MQegNI<6}Kw7-a(04|QLF(o6x^ F7XViba7O?D diff --git a/HSI_HexagonMI_EF3/obj/HSI_Hexa.ECCF081D.tlog/link.command.1.tlog b/HSI_HexagonMI_EF3/obj/HSI_Hexa.ECCF081D.tlog/link.command.1.tlog deleted file mode 100644 index e7281bf17f086254b8e972b993d1346186662a34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4974 zcmdUy%Wl&^6o$_liFb&y0T!errKLn-5!-DVNSvrnT33o1aY<1{TM(sPAzqDFV!;~t z{+XDF5{cRyrm`}2&SmD@&zYY;j%?f7Hnm;expk~-LrZOBd%T|mi*0Nf_?A85*RqGa zH(0-4ef_d=*?xO*^evlO-v+=2*0Y4C58nZM?eW&m8SvS)6GS@$zhmpr3@zfcDW?tG zE<SnIK-L0fU=qH-Ufr^p)f?(kK_ za+o&mBWagMaT=zC8NN@jHmNJ=eB8&sZ@cYVMmUkH+OS#v`PW9X#5w}g2 zja}`$4x2y|yS{O1bGzbqYR~MRy|fEB&w;$RcR)V^tJ$TUK>wO&4*tSX9z%P|_Z*74 zJL3$Jz)q?aW@WzFCPsf%*e`i?Z&dnPN-L)?L;PdeqRNNBl{Tn%$>jY*DQr zP_;E7t4j>QD7U2LKClc=`hFqJ3$OYKy=hP2^e1@RX!h1bC5|clG3ywJ`i$oK0jq~L z>1z$D$0loweKhZDHuv4C?@rP@f8EaNh3ZC~-!p&XFPgfu&a!8=(MQw$*kxX7FC2cv zPLZ?JZSM453$L+!6`|*$({&rWw6T&bn&5#0pz8XvLIgAc+gw=c(D}^AK#_TVLdfx< z?@t{#{XC&=eG?l;bDA{ELR^z@>$QafFB{J-n=Y2VVL>)KU}Uo+w!eX?D$Xr0UVo*s`Z zO$o*+e3*jmIx-8^aR4S+eXSbvD{ePjZ@4;O9T|9zhdbhHOz3w&zaK5{g+AziyxbT5 zMdTXPjU0c1l})`BlE0^QC0>0>SS_^f#7n_Ea*H&N-X@6xc@Z(|P>yF6D+TiWruarB z-e9aW6xh_td$6%maK=g?pIdQzoHJqWSF?E6vpI2Iype&>SKx0)UGYQ*bMje=V=Ioz zWyCoPlnI=Iewl-daV|Ghgq%X06f9RYYnpVIoUN6}ejV0zSzBv(*X8Z3VQlA?ZK7MB zUABrjIyat?ghKYZot3Wfa5S&AwrWi}r)}yUHOO-4*LB8o%WL5n@?^z3C1^9+ z!Y#jX*9^H84vS`04ToMjVQpUK-9x{mv+ZSYeeJtnMIa`63pDZhP<&ISVb)2z+ur^C zB-)-$53li@FtcXNrz7-nhxxy`u01xgiWx3!wor|{^|ggb7JZC085!eM$dPMDgf(PA zR|_BIXN{8cGUy&fq?b=g(?H~o! zf$yJRdpsO7bZK)OR_1WS_uKR!A=WFew0_BT3l-m{Y9za(%$#=jOwrK84fMi_JnoWr kZRa87_YC}g=;u!T(&PUZ&FvY!&Wn|z;?;O13Tk#g2WY6aTO-RJYi2z2 z&*Axb>@?Cqg{IJ4fhJ0oXsHZ3hd0zp7I|AOc3TZ-kMn-IUV6vD{;<2*LPjyXSTjW| z!@DiEGN`j`;g=sCoNkGHtPVPw=I$p_hcY9cfXMws`>cV_ z*h=c2(rYu$#Oo}URab7Pc>>lUG~o8`Wj}LlKssT$KJ^o!rS=h-95aR92{ra8!hzhQMh?-zCMa2)eEaAegTOyD9Zo< diff --git a/HSI_HexagonMI_EF3/obj/vc141.idb b/HSI_HexagonMI_EF3/obj/vc141.idb deleted file mode 100644 index 4ac666a81e3855853a95075ccdd96b843fc57fe7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 912384 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

d!ad*FLDc$#a$Ofh5a%wrjxZk~) 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[%jrFU_DeavN5>2o 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 ZP=@kS4pab>f!%I*3hYjS|9?{8e*n{Cz>5F? diff --git a/HSI_HexagonMI_EF3/version.h b/HSI_HexagonMI_EF3/version.h index 3138bf7..0b15520 100644 --- a/HSI_HexagonMI_EF3/version.h +++ b/HSI_HexagonMI_EF3/version.h @@ -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 ") diff --git a/HSI_SEVENOCEAN_EF1_CsTest/HSI/HSI.cs b/HSI_SEVENOCEAN_EF1_CsTest/HSI/HSI.cs index f74b6b6..e11b415 100644 --- a/HSI_SEVENOCEAN_EF1_CsTest/HSI/HSI.cs +++ b/HSI_SEVENOCEAN_EF1_CsTest/HSI/HSI.cs @@ -4,584 +4,595 @@ using System.Windows.Forms; namespace HSI_SEVENOCEAN_EF1_CsTest.HSI { - internal class Interface - { - // >>>> In Interfaces - public delegate void PEventCallback( - Def.HSI_EVENT_TYPE eventType, Def.HSI_EVENT_RESPONSE_TYPE responseType, uint eventId, string eventData, - ref uint eventCallbackId); + internal class Interface + { + // >>>> In Interfaces + //引用回调 + public delegate void PEventCallback( + Def.HSI_EVENT_TYPE eventType, Def.HSI_EVENT_RESPONSE_TYPE responseType, uint eventId, string eventData, + ref uint eventCallbackId); - public static PEventCallback HsiCallback; + public static PEventCallback HsiCallback; - [DllImport("HSI.dll", EntryPoint = "HSI_GET_INTERFACE_VERSION", CharSet = CharSet.Unicode)] - public static extern Def.HSI_STATUS GetInterfaceVersion(ref uint apiVersionMajor, ref uint apiVersionMinor); + [DllImport("HSI.dll", EntryPoint = "HSI_GET_INTERFACE_VERSION", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetInterfaceVersion(ref uint apiVersionMajor, ref uint apiVersionMinor); - [DllImport("HSI.dll", EntryPoint = "HSI_STARTUP", CharSet = CharSet.Unicode)] - public static extern Def.HSI_STATUS Startup(IntPtr hWnd, bool bOfflineOnly); + [DllImport("HSI.dll", EntryPoint = "HSI_GET_MACHINE_INFO", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetMachineInfo(ref int numMachineTypes); - [DllImport("HSI.dll", EntryPoint = "HSI_GET_INTERFACE_VERSION", CharSet = CharSet.Unicode)] - public static extern Def.HSI_STATUS GetInterfaceVersion(); + //引用返回值表示一个方法的返回值是一个引用,而不是值类型对象的副本或者引用类型的地址, + //而一个方法要实现引用返回值,需要满足两个条件: + //1、返回值不能为void,且需要使用ref关键字(或者ref readonly表示只读)修饰返回类型 + //2、方法的每一个return语句需要是一个ref引用 + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_FIREWAREVERION", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS MotionGetFirewareVerion( IntPtr firewareVerion); - [DllImport("HSI.dll", EntryPoint = "HSI_GET_MACHINE_INFO", CharSet = CharSet.Unicode)] - public static extern Def.HSI_STATUS GetMachineInfo(ref int numMachineTypes); + [DllImport("HSI.dll", EntryPoint = "HSI_STARTUP", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS Startup(IntPtr hWnd, bool bOfflineOnly); - [DllImport("HSI.dll", EntryPoint = "HSI_SET_EVENT_CALLBACK", CharSet = CharSet.Unicode)] - public static extern Def.HSI_STATUS SetEventCallback(PEventCallback pCallback); + [DllImport("HSI.dll", EntryPoint = "HSI_SET_EVENT_CALLBACK", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetEventCallback(PEventCallback pCallback); - [DllImport("HSI.dll", EntryPoint = "HSI_SHUTDOWM", CharSet = CharSet.Unicode)] - public static extern Def.HSI_STATUS Shutdown(); + [DllImport("HSI.dll", EntryPoint = "HSI_SHUTDOWM", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS Shutdown(); - // <<<< Out Interfacess - //事件回调函数 - public static void EventCallback(Def.HSI_EVENT_TYPE eventType, Def.HSI_EVENT_RESPONSE_TYPE responseType, - uint eventId, string eventData, ref uint eventCallbackId) - { - var msgBtn = MessageBoxButtons.OK; - switch (responseType) - { - case Def.HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_OK: - msgBtn = MessageBoxButtons.OK; - break; - case Def.HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_RETRY: - msgBtn = MessageBoxButtons.RetryCancel; - break; - case Def.HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_CANCEL: - msgBtn = MessageBoxButtons.OKCancel; - break; - case Def.HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_YES: - msgBtn = MessageBoxButtons.YesNo; - break; - } - switch (eventType) - { - case Def.HSI_EVENT_TYPE.HSI_EVENT_NONE: - break; - case Def.HSI_EVENT_TYPE.HSI_EVENT_ERROR: - break; - case Def.HSI_EVENT_TYPE.HSI_EVENT_FUNCTION: - var eventFunctionId = (Def.HSI_EVENT_FUNCTION_ID) eventId; - switch (eventFunctionId) - { - case Def.HSI_EVENT_FUNCTION_ID.HSI_EVENT_MOTION_DCC_HOME: - { - System.Windows.Forms.MessageBox.Show(Resources.Interface_Tips_Home_Machine, Resources.Interface_Tips, - msgBtn, MessageBoxIcon.Information); - break; - } - case Def.HSI_EVENT_FUNCTION_ID.HSI_EVENT_DEBUG_LOG: - { - System.Windows.Forms.MessageBox.Show(eventData, Resources.Interface_Tips, - msgBtn, MessageBoxIcon.Information); - break; - } - case Def.HSI_EVENT_FUNCTION_ID.HSI_EVENT_MOVE_POINT: - { - System.Windows.Forms.MessageBox.Show(Resources.Interface_Tips_Motion_Finished, Resources.Interface_Tips, - msgBtn, MessageBoxIcon.Information); - ; //Motion completed - break; - } - } - break; - } - } - } + // <<<< Out Interfacess + //事件回调函数 + public static void EventCallback(Def.HSI_EVENT_TYPE eventType, Def.HSI_EVENT_RESPONSE_TYPE responseType, + uint eventId, string eventData, ref uint eventCallbackId) + { + var msgBtn = MessageBoxButtons.OK; + switch (responseType) + { + case Def.HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_OK: + msgBtn = MessageBoxButtons.OK; + break; + case Def.HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_RETRY: + msgBtn = MessageBoxButtons.RetryCancel; + break; + case Def.HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_CANCEL: + msgBtn = MessageBoxButtons.OKCancel; + break; + case Def.HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_YES: + msgBtn = MessageBoxButtons.YesNo; + break; + } - internal class Motion - { - // >>>> In Interfaces - //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] - //public static extern Def.HSI_STATUS IsSupported(ref uint types); + switch (eventType) + { + case Def.HSI_EVENT_TYPE.HSI_EVENT_NONE: + break; + case Def.HSI_EVENT_TYPE.HSI_EVENT_ERROR: + break; + case Def.HSI_EVENT_TYPE.HSI_EVENT_FUNCTION: + var eventFunctionId = (Def.HSI_EVENT_FUNCTION_ID)eventId; + switch (eventFunctionId) + { + case Def.HSI_EVENT_FUNCTION_ID.HSI_EVENT_MOTION_DCC_HOME: + { + MessageBox.Show(Resources.Interface_Tips_Home_Machine, Resources.Interface_Tips, + msgBtn, MessageBoxIcon.Information); + break; + } + case Def.HSI_EVENT_FUNCTION_ID.HSI_EVENT_DEBUG_LOG: + { + MessageBox.Show(eventData, Resources.Interface_Tips, + msgBtn, MessageBoxIcon.Information); + break; + } + case Def.HSI_EVENT_FUNCTION_ID.HSI_EVENT_MOVE_POINT: + { + MessageBox.Show(Resources.Interface_Tips_Motion_Finished, Resources.Interface_Tips, + msgBtn, MessageBoxIcon.Information); + ; //Motion completed + break; + } + } - [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_STARTUP", CharSet = CharSet.Unicode)] - public static extern Def.HSI_STATUS Startup(bool bHome); + break; + } + } + } - [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_HOMED", CharSet = CharSet.Unicode)] - public static extern Def.HSI_STATUS IsHomed(ref bool bHomed); + internal class Motion + { + //public static bool IsActive(bool bForce = false) + //{ + // if (_bFirst || bForce) + // { + // IsSupported(ref _supported); + // _bFirst = false; + // } + // return (_supported != 0); + //} - [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_SPEED_XYZ", CharSet = CharSet.Unicode)] - public static extern Def.HSI_STATUS GetSpeedXyz(ref double speed); + private static bool _bFirst; + private static uint _supported; - [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_SPEED_XYZ", CharSet = CharSet.Unicode)] - public static extern Def.HSI_STATUS SetSpeedXyz(double speed); + // <<<< Out Interfaces + public Motion() + { + _supported = 0; + _bFirst = true; + } + // >>>> In Interfaces + //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + //public static extern Def.HSI_STATUS IsSupported(ref uint types); - //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_SPEED_R", CharSet = CharSet.Unicode)] - //public static extern Def.HSI_STATUS GetSpeedR(ref double speed); + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_STARTUP", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS Startup(bool bHome); - //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_SPEED_R", CharSet = CharSet.Unicode)] - //public static extern Def.HSI_STATUS SetSpeedR(double speed); + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_HOMED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS IsHomed(ref bool bHomed); - //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_SCALE_RESOLUTION", CharSet = CharSet.Unicode)] - //public static extern Def.HSI_STATUS GetScaleResolution( - // ref double scaleX, ref double scaleY, ref double scaleZ); + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_SPEED_XYZ", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetSpeedXyz(ref double speed); - //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_SCALE_RESOLUTION", CharSet = CharSet.Unicode)] - //public static extern Def.HSI_STATUS SetScaleResolution(double scaleX, double scaleY, double scaleZ); + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_SPEED_XYZ", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetSpeedXyz(double speed); - //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_DEADBAND", CharSet = CharSet.Unicode)] - //public static extern Def.HSI_STATUS GetDeadBand( - // ref double deadbandX, ref double deadbandY, ref double deadbandZ, ref double deadbandR); + //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_SPEED_R", CharSet = CharSet.Unicode)] + //public static extern Def.HSI_STATUS GetSpeedR(ref double speed); - //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_REFRESH_DEADBAND", CharSet = CharSet.Unicode)] - //public static extern Def.HSI_STATUS GetRefreshDeadBand(ref double deadband); + //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_SPEED_R", CharSet = CharSet.Unicode)] + //public static extern Def.HSI_STATUS SetSpeedR(double speed); - [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_JOG", CharSet = CharSet.Unicode)] - public static extern Def.HSI_STATUS Jog(uint axisTypes, double speed); + //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_SCALE_RESOLUTION", CharSet = CharSet.Unicode)] + //public static extern Def.HSI_STATUS GetScaleResolution( + // ref double scaleX, ref double scaleY, ref double scaleZ); - [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_STOP_JOG", CharSet = CharSet.Unicode)] - public static extern Def.HSI_STATUS StopJog(); + //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_SCALE_RESOLUTION", CharSet = CharSet.Unicode)] + //public static extern Def.HSI_STATUS SetScaleResolution(double scaleX, double scaleY, double scaleZ); - [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_POSITION_XYZ", CharSet = CharSet.Unicode)] - public static extern Def.HSI_STATUS GetPositionXyz( - uint axisTypes, ref double positionX, ref double positionY, ref double positionZ, ref double time); + //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_DEADBAND", CharSet = CharSet.Unicode)] + //public static extern Def.HSI_STATUS GetDeadBand( + // ref double deadbandX, ref double deadbandY, ref double deadbandZ, ref double deadbandR); - [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_POSITION_XYZ", CharSet = CharSet.Unicode)] - public static extern Def.HSI_STATUS SetPositionXyz( - uint axisTypes, double positionX, double positionY, double positionZ, Def.HSI_MOTION_MOVE_TYPE eType, - double dFlyRadius); + //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_REFRESH_DEADBAND", CharSet = CharSet.Unicode)] + //public static extern Def.HSI_STATUS GetRefreshDeadBand(ref double deadband); - //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_POSITION_R", CharSet = CharSet.Unicode)] - //public static extern Def.HSI_STATUS GetPositionR(uint axisTypes, ref double positionR, ref double time); + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_JOG", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS Jog(uint axisTypes, double speed); - //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_POSITION_R", CharSet = CharSet.Unicode)] - //public static extern Def.HSI_STATUS SetPositionR( - // uint axisTypes, double positionR, Def.HSI_MOTION_AXIS_R_MOVE_TYPE directionType, bool bWait); + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_STOP_JOG", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS StopJog(); - [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_ABORT_MOTION", CharSet = CharSet.Unicode)] - public static extern Def.HSI_STATUS AbortMotion(); + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_POSITION_XYZ", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetPositionXyz( + uint axisTypes, ref double positionX, ref double positionY, ref double positionZ, ref double time); - //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_DIO", CharSet = CharSet.Unicode)] - //public static extern Def.HSI_STATUS GetDIO(uint ioChannel, ref uint status); + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_POSITION_XYZ", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetPositionXyz( + uint axisTypes, double positionX, double positionY, double positionZ, Def.HSI_MOTION_MOVE_TYPE eType, + double dFlyRadius); - //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_DIO", CharSet = CharSet.Unicode)] - //public static extern Def.HSI_STATUS SetDIO(uint ioChannel, uint status); + //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_POSITION_R", CharSet = CharSet.Unicode)] + //public static extern Def.HSI_STATUS GetPositionR(uint axisTypes, ref double positionR, ref double time); - [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SHUTDOWN", CharSet = CharSet.Unicode)] - public static extern Def.HSI_STATUS Shutdown(); + //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_POSITION_R", CharSet = CharSet.Unicode)] + //public static extern Def.HSI_STATUS SetPositionR( + // uint axisTypes, double positionR, Def.HSI_MOTION_AXIS_R_MOVE_TYPE directionType, bool bWait); - // <<<< Out Interfaces - public Motion() - { - _supported = 0; - _bFirst = true; - } + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_ABORT_MOTION", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS AbortMotion(); - //public static bool IsActive(bool bForce = false) - //{ - // if (_bFirst || bForce) - // { - // IsSupported(ref _supported); - // _bFirst = false; - // } - // return (_supported != 0); - //} + //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_DIO", CharSet = CharSet.Unicode)] + //public static extern Def.HSI_STATUS GetDIO(uint ioChannel, ref uint status); - private static bool _bFirst; - private static uint _supported; - } + //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_DIO", CharSet = CharSet.Unicode)] + //public static extern Def.HSI_STATUS SetDIO(uint ioChannel, uint status); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SHUTDOWN", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS Shutdown(); + } //internal class Illumination - // { - // // >>>> In Interfaces - // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] - // public static extern Def.HSI_STATUS IsSupported(ref uint types); + // { + // // >>>> In Interfaces + // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + // public static extern Def.HSI_STATUS IsSupported(ref uint types); - // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] - // public static extern Def.HSI_STATUS HSI_ILLUMINATION_STARTUP(); + // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + // public static extern Def.HSI_STATUS HSI_ILLUMINATION_STARTUP(); - // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] - // public static extern Def.HSI_STATUS HSI_ILLUMINATION_GET_LAMP_COUNT(ref int nLamps); + // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + // public static extern Def.HSI_STATUS HSI_ILLUMINATION_GET_LAMP_COUNT(ref int nLamps); - // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] - // public static extern Def.HSI_STATUS HSI_ILLUMINATION_GET_LAMP_INFO(ref int lampInfo, ref int numLamps, - // int[] lampsType, - // int[] numRings, int[] numSectors, int[] color, double[] angle, ref bool bCanBeCalibrated); + // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + // public static extern Def.HSI_STATUS HSI_ILLUMINATION_GET_LAMP_INFO(ref int lampInfo, ref int numLamps, + // int[] lampsType, + // int[] numRings, int[] numSectors, int[] color, double[] angle, ref bool bCanBeCalibrated); - // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] - // public static extern Def.HSI_STATUS HSI_ILLUMINATION_GET_LAMP_STATE( - // int nLamp, bool[] bBulbStates, double[] intensities, ref int color, ref double angle); + // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + // public static extern Def.HSI_STATUS HSI_ILLUMINATION_GET_LAMP_STATE( + // int nLamp, bool[] bBulbStates, double[] intensities, ref int color, ref double angle); - // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] - // public static extern Def.HSI_STATUS HSI_ILLUMINATION_SET_LAMP_STATE( - // int nLamp, bool[] bBulbStates, double[] intensities, int color, double angle, bool bWait); + // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + // public static extern Def.HSI_STATUS HSI_ILLUMINATION_SET_LAMP_STATE( + // int nLamp, bool[] bBulbStates, double[] intensities, int color, double angle, bool bWait); - // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] - // public static extern Def.HSI_STATUS HSI_ILLUMINATION_GET_LAMP_STATE_ALL( - // int lampInfo, int numLamps, int[] lampsType, int[,] bBulbStates, double[,] intensities); + // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + // public static extern Def.HSI_STATUS HSI_ILLUMINATION_GET_LAMP_STATE_ALL( + // int lampInfo, int numLamps, int[] lampsType, int[,] bBulbStates, double[,] intensities); - // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] - // public static extern Def.HSI_STATUS HSI_ILLUMINATION_SET_LAMP_STATE_ALL( - // int lampInfo, int numLamps, int[] lampsType, int[,] bBulbStates, double[,] intensities, bool bWait); + // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + // public static extern Def.HSI_STATUS HSI_ILLUMINATION_SET_LAMP_STATE_ALL( + // int lampInfo, int numLamps, int[] lampsType, int[,] bBulbStates, double[,] intensities, bool bWait); - // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] - // public static extern Def.HSI_STATUS HSI_ILLUMINATION_SHUTDOWN(); + // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + // public static extern Def.HSI_STATUS HSI_ILLUMINATION_SHUTDOWN(); - // // <<<< Out Interfaces - // public Illumination() - // { - // _supported = 0; - // _bFirst = true; - // } + // // <<<< Out Interfaces + // public Illumination() + // { + // _supported = 0; + // _bFirst = true; + // } - // public static bool IsActive(bool bForce = false) - // { - // if (_bFirst || bForce) - // { - // IsSupported(ref _supported); - // _bFirst = false; - // } - // return (_supported != 0); - // } + // public static bool IsActive(bool bForce = false) + // { + // if (_bFirst || bForce) + // { + // IsSupported(ref _supported); + // _bFirst = false; + // } + // return (_supported != 0); + // } - // private static bool _bFirst; - // private static uint _supported; - // } + // private static bool _bFirst; + // private static uint _supported; + // } - internal class Def - { - public const int HSI_APIVersionMajor = 1; - public const int HSI_APIVersionMinor = 3; + internal class Def + { + public enum HSI_EVENT_FUNCTION_ID //EventData + { + //SendReceive + // V4.2 & V4.3 + + HSI_EVENT_DONE = 0, //N/A N/A + HSI_EVENT_TAKE_HIT = 1, //N/A N/A + HSI_EVENT_ERASE_HIT = 2, //N/AN/A + HSI_EVENT_TIME_CRITICAL = 3, //"ON", or "OFF" N/A + HSI_EVENT_ZOOM_IN = 4, //"MAX", "COARSE", or "FINE" N/A + HSI_EVENT_ZOOM_OUT = 5, //"MAX", "COARSE", or "FINE" N/A + HSI_EVENT_REFRESH_LIVE_VIEW = 6, //N/AN/A + HSI_EVENT_UPDATE_READOUTS = 7, //"AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r}"N/A + HSI_EVENT_READ_MC_POSITION = 8, //"AxisFlags""AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r}" + HSI_EVENT_MOVE_MC_POSITION = 9, //"AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r},%lf{speed},%1d{bWait}"N/A + HSI_EVENT_CONVERT_MC_TO_GLOBAL = 10, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_UPDATE_STATUS_MESSAGE = 11, //N/AN/A + HSI_EVENT_OPENFILE_DLG = 12, //N/A"FileName" + HSI_EVENT_DISPLAY_YESNO_MESSAGE = 13, //N/AN/A + HSI_EVENT_DISPLAY_OKCANCEL_MESSAGE = 14, //N/AN/A + HSI_EVENT_DISPLAY_OK_MESSAGE = 15, //N/AN/A - public const int HSI_MaxStringLength = 255; // Maximum string length (buffer size - 1) - /////////////////////////////////////////////////////////////////////////////// - // Interface API - /////////////////////////////////////////////////////////////////////////////// - public enum HSI_STATUS - { - HSI_STATUS_NOT_SUPPORTED = -1, - HSI_STATUS_NORMAL = 0, - HSI_STATUS_FAILED, - HSI_FAILED_DLL_LOAD, + // V4.3 + Only + HSI_EVENT_DEBUG_LOG = 20, //"%s" N/A + HSI_EVENT_MOVE_MC_POSITION_AND_SETTLE = 21, //"AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r},%lf{speed}" N/A + HSI_EVENT_CONVERT_GLOBAL_TO_MM = 22, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_CONVERT_ROT_TO_TABLE_POINT = 23, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_CONVERT_ROT_OUT_TABLE_POINT = 24, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_CONVERT_ROT_TO_TABLE_VECTOR = 25, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_CONVERT_ROT_OUT_TABLE_VECTOR = 26, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_ILLUMINATION_REFRESH = 27, + HSI_EVENT_ILLUMINATION_LOCK = 28, + HSI_EVENT_ILLUMINATION_STORE_SET = 29, + HSI_EVENT_ILLUMINATION_RESTORE_SET = 30, + HSI_EVENT_ILLUMINATION_DECREASE_ACTIVE = 31, // "%d" + HSI_EVENT_ILLUMINATION_INCREASE_ACTIVE = 32, // "%d" + HSI_EVENT_ILLUMINATION_DECREASE_ALL = 33, // "%d" + HSI_EVENT_ILLUMINATION_INCREASE_ALL = 34, // "%d" + HSI_EVENT_ILLUMINATION_SELECT_LAMP = 35, // "%d" + HSI_EVENT_ILLUMINATION_SET_LAMP_INTENSITY = 36, // "%d" + HSI_EVENT_ILLUMINATION_GET_LAMP_INTENSITY = 37, // "%d" + HSI_EVENT_ILLUMINATION_SET_LAMP_CALIBRATION_OVERRIDE = 38, // "%d" + HSI_EVENT_ILLUMINATION_NEXT_RING = 39, + HSI_EVENT_ILLUMINATION_PREV_RING = 40, + HSI_EVENT_ILLUMINATION_NEXT_SECTOR = 41, + HSI_EVENT_ILLUMINATION_PREV_SECTOR = 42, + HSI_EVENT_ILLUMINATION_NUM_LAMPS_INSTALLED = 43, + HSI_EVENT_ILLUMINATION_IS_LAMP_INSTALLED = 44, + HSI_EVENT_ILLUMINATION_APPLY = 45, + HSI_EVENT_ILLUMINATION_ALLOFF = 46, + HSI_EVENT_ILLUMINATION_ALLON = 47, + HSI_EVENT_ILLUMINATION_UNLOCK = 48, + HSI_EVENT_IS_PROGRAMMING_MODE = 49, //1/0 + HSI_EVENT_IS_PORTLOCK_DCC = 50, //1/0 + HSI_EVENT_IS_ROTAB_ENABLED = 51, //1/0 + HSI_EVENT_IS_TIME_CRITICAL = 52, // 1/0 + HSI_EVENT_CONVERT_MM_TO_GLOBAL = 53, + HSI_EVENT_CONVERT_GLOBAL_TO_MC = 54, + HSI_EVENT_LASER_FOCUS_ENABLE = 55, // "%d" 0 = not available, 1 = available + HSI_EVENT_MOVE_POINT = 56, //N/AN/A + HSI_EVENT_MAG_CHANGED = 57, + HSI_EVENT_ILLUMINATION_SET_LAMP_INTENSITY_IN_MACHINE_LEVELx100 = 58, - HSI_STATUS_PORTLOCK_HSI_MISMATCH, + // "%d" //PR251359-- Instructed to "Please focus on slide" but it's rather unhelpfully turned the lights off for us. + HSI_EVENT_DCC_SCAN_POINTS_AVAILABLE = 59, //"%d"= more to come, 1 = last set N/A + HSI_EVENT_ILLUMINATION_IS_ALL_OFF = 60, - HSI_STATUS_FILE_NOT_FOUND, - HSI_STATUS_HARDWARE_NOT_FOUND, - HSI_STATUS_INVALID_PARAMETERS, - HSI_STATUS_INVALID_POINTS, - HSI_STATUS_PART_NOT_DETECTED, - HSI_STATUS_MEASURE_ERROR, - HSI_STATUS_TEMPERATURE_ERROR, + //1/0//PR253777-- Sensilight does not work if the target has 'ALL OFF' for illum setting--4/16/2008 + HSI_EVENT_ILLUMINATION_DECREASE_ALL_NONZERO = 61, - HSI_STATUS_ILLUMINATION_COMM = 50, + // Sensilight command that wont change a lamp currently set to zero + HSI_EVENT_ILLUMINATION_INCREASE_ALL_NONZERO = 62, + // Sensilight command that wont change a lamp currently set to zero22 - HSI_STATUS_OPTICS_COMM = 100, - HSI_STATUS_OPTICS_HOMING, - HSI_STATUS_OPTICS_TIMEOUT, - HSI_STATUS_OPTICS_CALIBRATIONDATA, - HSI_STATUS_OPTICS_CALIBRATIONDATADEFAULT, - HSI_STATUS_OPTICS_CALFILEDATACOUNTMISMATCH, + HSI_EVENT_LP_QUALITY = 63, //"%d" 0-100% + HSI_EVENT_TP_QUALITY = 64, //"%d" 0-100% + HSI_EVENT_VP_QUALITY = 65, //"%d" 0-100% - HSI_STATUS_MOTION_COMM = 150, - HSI_STATUS_MOTION_HOMING, - HSI_STATUS_MOTION_TIMEOUT, - HSI_STATUS_MOTION_EMERGENCY_STOP, - HSI_STATUS_MOTION_EXCEED_LIMIT, - HSI_STATUS_MOTION_UNKNOWN_ERROR, - HSI_STATUS_MOTION_EXCEED_SW_LIMIT, - HSI_STATUS_MOTION_POSITION_ERROR, - HSI_STATUS_MOTION_MOVING, + HSI_EVENT_FLYMODE_MOVE_COMPLETE = 66, // A queued flymode move has completed + HSI_EVENT_PENDANT_SPEED_PERCENT = 67, // 108336 HMV : Add calls to HSI.H for Speed + HSI_EVENT_PENDANT_AXES_SELECTED = 68, // 108335 HMV : Need to add calls to the HSI.H for Stacked Rotary - HSI_STATUS_TP_UNEXPECTED_HIT = 200, - HSI_STATUS_TP_TIMEOUT = 201, - HSI_STATUS_TP_APPROACH_TIMEOUT = 202, - HSI_STATUS_TP_WRIST_ERROR, + HSI_EVENT_MOTION = 500, + HSI_EVENT_MOTION_DCC_HOME = 501, + HSI_EVENT_SHUTDOWN_ = 999 //N/AN/A + } - HSI_STATUS_FG_COMM = 250, - HSI_STATUS_FG_TIMEOUT, - HSI_STATUS_FG_DIRECTX, - HSI_STATUS_FG_COLORDEPTH, + public enum HSI_EVENT_RESPONSE_TYPE + { + HSI_EVENT_CALLBACK = 0, + HSI_EVENT_RESPONSE_OK = 1, + HSI_EVENT_RESPONSE_RETRY = 2, + HSI_EVENT_RESPONSE_CANCEL = 3, + HSI_EVENT_RESPONSE_YES = 4, + HSI_EVENT_RESPONSE_NO = 5, + HSI_EVENT_FUNCTION_OK = 6, + HSI_EVENT_FUNCTION_FAILED = 7 + } - HSI_STATUS_LP_TIMEOUT = 300, - HSI_STATUS_LP_EXCEED_LIMIT = 301, + public enum HSI_EVENT_TYPE + { + HSI_EVENT_NONE = 0, + HSI_EVENT_ERROR = 1, + HSI_EVENT_FUNCTION = 2 + } - HSI_STATUS_VP_TIMEOUT = 350, - HSI_STATUS_VP_IMAGEPROCESS_FAIL - }; + public enum HSI_ILLUMINATION_BULB_STATE + { + HSI_ILLUMINATION_BULB_STATE_TURN_ON = 0, + HSI_ILLUMINATION_BULB_STATE_TURN_OFF = 1, + HSI_ILLUMINATION_BULB_STATE_TOTAL + } - public enum HSI_MACHINE_TYPE - { - HSI_MACHINE_UNKNOWN = 0, - HSI_MACHINE_SO7 = 1, - HSI_MACHINE_TYPE_TOTAL, - }; - - public enum HSI_EVENT_TYPE - { - HSI_EVENT_NONE = 0, - HSI_EVENT_ERROR = 1, - HSI_EVENT_FUNCTION = 2 - }; - - public enum HSI_EVENT_FUNCTION_ID //EventData - { - //SendReceive - // V4.2 & V4.3 + - HSI_EVENT_DONE = 0, //N/A N/A - HSI_EVENT_TAKE_HIT = 1, //N/A N/A - HSI_EVENT_ERASE_HIT = 2, //N/AN/A - HSI_EVENT_TIME_CRITICAL = 3, //"ON", or "OFF" N/A - HSI_EVENT_ZOOM_IN = 4, //"MAX", "COARSE", or "FINE" N/A - HSI_EVENT_ZOOM_OUT = 5, //"MAX", "COARSE", or "FINE" N/A - HSI_EVENT_REFRESH_LIVE_VIEW = 6, //N/AN/A - HSI_EVENT_UPDATE_READOUTS = 7, //"AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r}"N/A - HSI_EVENT_READ_MC_POSITION = 8, //"AxisFlags""AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r}" - HSI_EVENT_MOVE_MC_POSITION = 9, //"AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r},%lf{speed},%1d{bWait}"N/A - HSI_EVENT_CONVERT_MC_TO_GLOBAL = 10, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" - HSI_EVENT_UPDATE_STATUS_MESSAGE = 11, //N/AN/A - HSI_EVENT_OPENFILE_DLG = 12, //N/A"FileName" - HSI_EVENT_DISPLAY_YESNO_MESSAGE = 13, //N/AN/A - HSI_EVENT_DISPLAY_OKCANCEL_MESSAGE = 14, //N/AN/A - HSI_EVENT_DISPLAY_OK_MESSAGE = 15, //N/AN/A - - // V4.3 + Only - HSI_EVENT_DEBUG_LOG = 20, //"%s" N/A - HSI_EVENT_MOVE_MC_POSITION_AND_SETTLE = 21, //"AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r},%lf{speed}" N/A - HSI_EVENT_CONVERT_GLOBAL_TO_MM = 22, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" - HSI_EVENT_CONVERT_ROT_TO_TABLE_POINT = 23, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" - HSI_EVENT_CONVERT_ROT_OUT_TABLE_POINT = 24, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" - HSI_EVENT_CONVERT_ROT_TO_TABLE_VECTOR = 25, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" - HSI_EVENT_CONVERT_ROT_OUT_TABLE_VECTOR = 26, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" - HSI_EVENT_ILLUMINATION_REFRESH = 27, - HSI_EVENT_ILLUMINATION_LOCK = 28, - HSI_EVENT_ILLUMINATION_STORE_SET = 29, - HSI_EVENT_ILLUMINATION_RESTORE_SET = 30, - HSI_EVENT_ILLUMINATION_DECREASE_ACTIVE = 31, // "%d" - HSI_EVENT_ILLUMINATION_INCREASE_ACTIVE = 32, // "%d" - HSI_EVENT_ILLUMINATION_DECREASE_ALL = 33, // "%d" - HSI_EVENT_ILLUMINATION_INCREASE_ALL = 34, // "%d" - HSI_EVENT_ILLUMINATION_SELECT_LAMP = 35, // "%d" - HSI_EVENT_ILLUMINATION_SET_LAMP_INTENSITY = 36, // "%d" - HSI_EVENT_ILLUMINATION_GET_LAMP_INTENSITY = 37, // "%d" - HSI_EVENT_ILLUMINATION_SET_LAMP_CALIBRATION_OVERRIDE = 38, // "%d" - HSI_EVENT_ILLUMINATION_NEXT_RING = 39, - HSI_EVENT_ILLUMINATION_PREV_RING = 40, - HSI_EVENT_ILLUMINATION_NEXT_SECTOR = 41, - HSI_EVENT_ILLUMINATION_PREV_SECTOR = 42, - HSI_EVENT_ILLUMINATION_NUM_LAMPS_INSTALLED = 43, - HSI_EVENT_ILLUMINATION_IS_LAMP_INSTALLED = 44, - HSI_EVENT_ILLUMINATION_APPLY = 45, - HSI_EVENT_ILLUMINATION_ALLOFF = 46, - HSI_EVENT_ILLUMINATION_ALLON = 47, - HSI_EVENT_ILLUMINATION_UNLOCK = 48, - HSI_EVENT_IS_PROGRAMMING_MODE = 49, //1/0 - HSI_EVENT_IS_PORTLOCK_DCC = 50, //1/0 - HSI_EVENT_IS_ROTAB_ENABLED = 51, //1/0 - HSI_EVENT_IS_TIME_CRITICAL = 52, // 1/0 - HSI_EVENT_CONVERT_MM_TO_GLOBAL = 53, - HSI_EVENT_CONVERT_GLOBAL_TO_MC = 54, - HSI_EVENT_LASER_FOCUS_ENABLE = 55, // "%d" 0 = not available, 1 = available - HSI_EVENT_MOVE_POINT = 56, //N/AN/A - HSI_EVENT_MAG_CHANGED = 57, - HSI_EVENT_ILLUMINATION_SET_LAMP_INTENSITY_IN_MACHINE_LEVELx100 = 58, - // "%d" //PR251359-- Instructed to "Please focus on slide" but it's rather unhelpfully turned the lights off for us. - HSI_EVENT_DCC_SCAN_POINTS_AVAILABLE = 59, //"%d"= more to come, 1 = last set N/A - HSI_EVENT_ILLUMINATION_IS_ALL_OFF = 60, - //1/0//PR253777-- Sensilight does not work if the target has 'ALL OFF' for illum setting--4/16/2008 - HSI_EVENT_ILLUMINATION_DECREASE_ALL_NONZERO = 61, - // Sensilight command that wont change a lamp currently set to zero - HSI_EVENT_ILLUMINATION_INCREASE_ALL_NONZERO = 62, - // Sensilight command that wont change a lamp currently set to zero22 - - HSI_EVENT_LP_QUALITY = 63, //"%d" 0-100% - HSI_EVENT_TP_QUALITY = 64, //"%d" 0-100% - HSI_EVENT_VP_QUALITY = 65, //"%d" 0-100% - - HSI_EVENT_FLYMODE_MOVE_COMPLETE = 66, // A queued flymode move has completed - HSI_EVENT_PENDANT_SPEED_PERCENT = 67, // 108336 HMV : Add calls to HSI.H for Speed - HSI_EVENT_PENDANT_AXES_SELECTED = 68, // 108335 HMV : Need to add calls to the HSI.H for Stacked Rotary - - HSI_EVENT_MOTION = 500, - HSI_EVENT_MOTION_DCC_HOME = 501, - HSI_EVENT_SHUTDOWN_ = 999 //N/AN/A - }; - - public enum HSI_NOTIFY_TYPE - { - HSI_NOTIFY_PROGRAM_EXECUTION_START = 0, - HSI_NOTIFY_PROGRAM_EXECUTION_STOP = 1, - - HSI_NOTIFY_TIME_CRITICAL_EVENT_START = 2, - HSI_NOTIFY_TIME_CRITICAL_EVENT_STOP = 3, - HSI_NOTIFY_PROGRAM_OPEN = 4, - HSI_NOTIFY_PROGRAM_CLOSE = 5, - HSI_NOTIFY_PCDMIS_SHUTDOWN = 6 - }; - - public enum HSI_EVENT_RESPONSE_TYPE - { - HSI_EVENT_CALLBACK = 0, - HSI_EVENT_RESPONSE_OK = 1, - HSI_EVENT_RESPONSE_RETRY = 2, - HSI_EVENT_RESPONSE_CANCEL = 3, - HSI_EVENT_RESPONSE_YES = 4, - HSI_EVENT_RESPONSE_NO = 5, - HSI_EVENT_FUNCTION_OK = 6, - HSI_EVENT_FUNCTION_FAILED = 7 - }; - - public struct SHsiEventProperties - { - public uint EventId; - public uint EventCallbackId; - public HSI_EVENT_TYPE EventType; - public HSI_EVENT_RESPONSE_TYPE EventResponse; - public char[] EventData; - - public void Init() - { - EventId = (uint) HSI_EVENT_FUNCTION_ID.HSI_EVENT_DONE; - EventCallbackId = 0; - EventType = HSI_EVENT_TYPE.HSI_EVENT_NONE; - EventResponse = HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_CALLBACK; - EventData = new char[HSI_MaxStringLength + 1]; - } - }; + public enum HSI_ILLUMINATION_BULB_TYPE + { + HSI_ILLUMINATION_BULB_ROUND = 1, + HSI_ILLUMINATION_BULB_SQUARE = 2, + HSI_ILLUMINATION_BULB_RING = 3, + HSI_ILLUMINATION_BULB_GRID = 4 + } - /////////////////////////////////////////////////////////////////////////////// - // Motion API - /////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////// + //Illumination API + /////////////////////////////////////////////////////////////////////////////// + public enum HSI_ILLUMINATION_INFO + { + HSI_ILLUMINATION_INFO_UNKNOWN = 0, + HSI_ILLUMINATION_INFO_HSI = 0x01, + HSI_ILLUMINATION_INFO_HSI_II = 0x02, //lvgang + HSI_ILLUMINATION_INFO_HSI_III = 0x04, //shixuyong + HSI_ILLUMINATION_INFO_TOTAL + } - public enum HSI_MOTION_TYPE - { - HSI_MOTION_SUPPORTS_DCC_CONTROL = 0x0001, - HSI_MOTION_SUPPORTS_MANUAL_CONTROL = 0x0002, - HSI_MOTION_SUPPORTS_HOMING = 0x0004, - HSI_MOTION_SUPPORTS_CIRCULAR_MOVES = 0x0008, - HSI_MOTION_SUPPORTS_CMM_WRIST = 0x0010, - HSI_MOTION_SUPPORTS_BUFFERED_MOVES = 0x0020, - HSI_MOTION_SUPPORTS_FLY_MOVES = 0x0040, - HSI_MOTION_SUPPORTS_SCAN = 0x0080, - HSI_MOTION_SUPPORTS_ALL_AXIS_MOVE = 0x0100, - HSI_MOTION_SUPPORTS_MEASPOINT_VW = 0x0200 - }; + public enum HSI_ILLUMINATION_LAMP_CONTROL_TYPE + { + HSI_ILLUMINATION_LAMP_CONTROL_NONE = 0x0000, + HSI_ILLUMINATION_LAMP_CONTROL_BY_WHOLE_LAMP = 0x0001, + HSI_ILLUMINATION_LAMP_CONTROL_BY_RINGS = 0x0002, + HSI_ILLUMINATION_LAMP_CONTROL_BY_OCTANTS = 0x0004, + HSI_ILLUMINATION_LAMP_CONTROL_BY_SEGMENTS = 0x0008, + HSI_ILLUMINATION_LAMP_CONTROL_BY_OTHER + } - 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_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 - HSI_MOTION_AXIS_Z1 = 0x0040, // This is the 1st Z Axis - use on multiple axis machines when specific axis needed - HSI_MOTION_AXIS_R1 = 0x0080, // This is the 1st R Axis - use on multiple axis machines when specific axis needed - HSI_MOTION_AXIS_X2 = 0x0100, // This is the 2nd X Axis - use on multiple axis machines when specific axis needed - HSI_MOTION_AXIS_Y2 = 0x0200, // This is the 2nd Y Axis - use on multiple axis machines when specific axis needed - HSI_MOTION_AXIS_Z2 = 0x0400, // This is the 2nd Z Axis - use on multiple axis machines when specific axis needed - HSI_MOTION_AXIS_R2 = 0x0800, // This is the 2nd R Axis - use on multiple axis machines when specific axis needed - HSI_MOTION_AXIS_X3 = 0x1000, // This is the 3rd X Axis - use on multiple axis machines when specific axis needed - HSI_MOTION_AXIS_Y3 = 0x2000, // This is the 3rd Y Axis - use on multiple axis machines when specific axis needed - HSI_MOTION_AXIS_Z3 = 0x4000, // This is the 3rd Z Axis - use on multiple axis machines when specific axis needed - HSI_MOTION_AXIS_R3 = 0x8000 // This is the 3rd R Axis - use on multiple axis machines when specific axis needed - }; + public enum HSI_ILLUMINATION_LAMP_LOCATION_TYPE + { + HSI_ILLUMINATION_LAMP_LOCATION_NONE = 0, + HSI_ILLUMINATION_LAMP_LOCATION_TOP_ON_AXIS = 1, + HSI_ILLUMINATION_LAMP_LOCATION_TOP_ANGLED = 2, + HSI_ILLUMINATION_LAMP_LOCATION_BOTTOM = 3, + HSI_ILLUMINATION_LAMP_LOCATION_MOVABLE = 4 + } - public enum HSI_MOTION_IO_TYPE - { - HSI_MOTION_INPUT1 = 0x0001, - HSI_MOTION_INPUT2, + public enum HSI_ILLUMINATION_LAMP_TYPE + { + HSI_ILLUMINATION_LAMP_NONE = 0, + HSI_ILLUMINATION_LAMP_COAXIAL = 1, + HSI_ILLUMINATION_LAMP_SURFACE = 2, + HSI_ILLUMINATION_LAMP_PROFILE = 3, + HSI_ILLUMINATION_LAMP_PROFILE_OUTER = 4 + } - HSI_MOTION_OUTPUT1 = 0x0100, - HSI_MOTION_OUTPUT2 - }; + public enum HSI_ILLUMINATION_TYPE + { + HSI_ILLUMINATION_SUPPORTS_DCC_CONTROL = 0x0001, + HSI_ILLUMINATION_SUPPORTS_MANUAL_CONTROL = 0x0002 + } - public const uint HSI_MOTION_AXIS_ALL = - (uint) - (HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_X | HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_Y | - HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_Z); + public enum HSI_MACHINE_TYPE + { + HSI_MACHINE_UNKNOWN = 0, + HSI_MACHINE_SO7 = 1, + HSI_MACHINE_TYPE_TOTAL + } - public enum HSI_MOTION_MOVE_TYPE - { - HSI_MOTION_MOVE_WAIT = 1, - HSI_MOTION_MOVE_NOWAIT = 2, - HSI_MOTION_MOVE_INTERMEDIATE_POSITION = 3, - HSI_MOTION_MOVE_FINAL_POSITION = 4, - HSI_MOTION_IN_POSITION_EVENT = 5, - HSI_MOTION_MOVE_FLYMODE = 6, - HSI_MOTION_MOVE_START_POSITION = 7, - HSI_MOTION_MOVE_START_FINAL_POSITION = 8 - }; + public enum HSI_MOTION_AXIS_R_MOVE_TYPE + { + HSI_MOTION_AXIS_R_CLOCKWISE = 1, + HSI_MOTION_AXIS_R_ANTICLOCKWISE = 2, + HSI_MOTION_AXIS_R_FASTEST = 3 + } - public enum HSI_MOTION_AXIS_R_MOVE_TYPE - { - HSI_MOTION_AXIS_R_CLOCKWISE = 1, - HSI_MOTION_AXIS_R_ANTICLOCKWISE = 2, - HSI_MOTION_AXIS_R_FASTEST = 3 - }; + 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_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 + HSI_MOTION_AXIS_Z1 = 0x0040, // This is the 1st Z Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_R1 = 0x0080, // This is the 1st R Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_X2 = 0x0100, // This is the 2nd X Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Y2 = 0x0200, // This is the 2nd Y Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Z2 = 0x0400, // This is the 2nd Z Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_R2 = 0x0800, // This is the 2nd R Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_X3 = 0x1000, // This is the 3rd X Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Y3 = 0x2000, // This is the 3rd Y Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Z3 = 0x4000, // This is the 3rd Z Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_R3 = 0x8000 // This is the 3rd R Axis - use on multiple axis machines when specific axis needed + } - public const int HSI_MAX_POSITIONS_STORED = 500; + public enum HSI_MOTION_IO_TYPE + { + HSI_MOTION_INPUT1 = 0x0001, + HSI_MOTION_INPUT2, + + HSI_MOTION_OUTPUT1 = 0x0100, + HSI_MOTION_OUTPUT2 + } + + public enum HSI_MOTION_MOVE_TYPE + { + HSI_MOTION_MOVE_WAIT = 1, + HSI_MOTION_MOVE_NOWAIT = 2, + HSI_MOTION_MOVE_INTERMEDIATE_POSITION = 3, + HSI_MOTION_MOVE_FINAL_POSITION = 4, + HSI_MOTION_IN_POSITION_EVENT = 5, + HSI_MOTION_MOVE_FLYMODE = 6, + HSI_MOTION_MOVE_START_POSITION = 7, + HSI_MOTION_MOVE_START_FINAL_POSITION = 8 + } - /////////////////////////////////////////////////////////////////////////////// - //Illumination API - /////////////////////////////////////////////////////////////////////////////// - public enum HSI_ILLUMINATION_INFO - { - HSI_ILLUMINATION_INFO_UNKNOWN = 0, - HSI_ILLUMINATION_INFO_HSI = 0x01, - HSI_ILLUMINATION_INFO_HSI_II = 0x02, //lvgang - HSI_ILLUMINATION_INFO_HSI_III = 0x04, //shixuyong - HSI_ILLUMINATION_INFO_TOTAL - }; + /////////////////////////////////////////////////////////////////////////////// + // Motion API + /////////////////////////////////////////////////////////////////////////////// - public enum HSI_ILLUMINATION_BULB_TYPE - { - HSI_ILLUMINATION_BULB_ROUND = 1, - HSI_ILLUMINATION_BULB_SQUARE = 2, - HSI_ILLUMINATION_BULB_RING = 3, - HSI_ILLUMINATION_BULB_GRID = 4 - }; + public enum HSI_MOTION_TYPE + { + HSI_MOTION_SUPPORTS_DCC_CONTROL = 0x0001, + HSI_MOTION_SUPPORTS_MANUAL_CONTROL = 0x0002, + HSI_MOTION_SUPPORTS_HOMING = 0x0004, + HSI_MOTION_SUPPORTS_CIRCULAR_MOVES = 0x0008, + HSI_MOTION_SUPPORTS_CMM_WRIST = 0x0010, + HSI_MOTION_SUPPORTS_BUFFERED_MOVES = 0x0020, + HSI_MOTION_SUPPORTS_FLY_MOVES = 0x0040, + HSI_MOTION_SUPPORTS_SCAN = 0x0080, + HSI_MOTION_SUPPORTS_ALL_AXIS_MOVE = 0x0100, + HSI_MOTION_SUPPORTS_MEASPOINT_VW = 0x0200 + } - public enum HSI_ILLUMINATION_LAMP_TYPE - { - HSI_ILLUMINATION_LAMP_NONE = 0, - HSI_ILLUMINATION_LAMP_COAXIAL = 1, - HSI_ILLUMINATION_LAMP_SURFACE = 2, - HSI_ILLUMINATION_LAMP_PROFILE = 3, - HSI_ILLUMINATION_LAMP_PROFILE_OUTER = 4 - }; + public enum HSI_NOTIFY_TYPE + { + HSI_NOTIFY_PROGRAM_EXECUTION_START = 0, + HSI_NOTIFY_PROGRAM_EXECUTION_STOP = 1, - public enum HSI_ILLUMINATION_LAMP_CONTROL_TYPE - { - HSI_ILLUMINATION_LAMP_CONTROL_NONE = 0x0000, - HSI_ILLUMINATION_LAMP_CONTROL_BY_WHOLE_LAMP = 0x0001, - HSI_ILLUMINATION_LAMP_CONTROL_BY_RINGS = 0x0002, - HSI_ILLUMINATION_LAMP_CONTROL_BY_OCTANTS = 0x0004, - HSI_ILLUMINATION_LAMP_CONTROL_BY_SEGMENTS = 0x0008, - HSI_ILLUMINATION_LAMP_CONTROL_BY_OTHER - }; + HSI_NOTIFY_TIME_CRITICAL_EVENT_START = 2, + HSI_NOTIFY_TIME_CRITICAL_EVENT_STOP = 3, + HSI_NOTIFY_PROGRAM_OPEN = 4, + HSI_NOTIFY_PROGRAM_CLOSE = 5, + HSI_NOTIFY_PCDMIS_SHUTDOWN = 6 + } - public enum HSI_ILLUMINATION_BULB_STATE - { - HSI_ILLUMINATION_BULB_STATE_TURN_ON = 0, - HSI_ILLUMINATION_BULB_STATE_TURN_OFF = 1, - HSI_ILLUMINATION_BULB_STATE_TOTAL - }; + /////////////////////////////////////////////////////////////////////////////// + // Interface API + /////////////////////////////////////////////////////////////////////////////// + public enum HSI_STATUS + { + HSI_STATUS_NOT_SUPPORTED = -1, + HSI_STATUS_NORMAL = 0, + HSI_STATUS_FAILED, + HSI_FAILED_DLL_LOAD, - public enum HSI_ILLUMINATION_TYPE - { - HSI_ILLUMINATION_SUPPORTS_DCC_CONTROL = 0x0001, - HSI_ILLUMINATION_SUPPORTS_MANUAL_CONTROL = 0x0002 - }; + HSI_STATUS_PORTLOCK_HSI_MISMATCH, - public enum HSI_ILLUMINATION_LAMP_LOCATION_TYPE - { - HSI_ILLUMINATION_LAMP_LOCATION_NONE = 0, - HSI_ILLUMINATION_LAMP_LOCATION_TOP_ON_AXIS = 1, - HSI_ILLUMINATION_LAMP_LOCATION_TOP_ANGLED = 2, - HSI_ILLUMINATION_LAMP_LOCATION_BOTTOM = 3, - HSI_ILLUMINATION_LAMP_LOCATION_MOVABLE = 4 - }; + HSI_STATUS_FILE_NOT_FOUND, + HSI_STATUS_HARDWARE_NOT_FOUND, + HSI_STATUS_INVALID_PARAMETERS, + HSI_STATUS_INVALID_POINTS, + HSI_STATUS_PART_NOT_DETECTED, + HSI_STATUS_MEASURE_ERROR, + HSI_STATUS_TEMPERATURE_ERROR, - public const int HSI_ILLUMINATION_MAX_LAMPS = 6; - public const int HSI_ILLUMINATION_MAX_BULB_COLORS = 3; - public const int HSI_ILLUMINATION_MAX_RINGS = 12; - public const int HSI_ILLUMINATION_MAX_SECTORS = 16; - public const int HSI_ILLUMINATION_MAX_BULBS = HSI_ILLUMINATION_MAX_RINGS*HSI_ILLUMINATION_MAX_SECTORS; + HSI_STATUS_ILLUMINATION_COMM = 50, - public const int HSI_MaxLampNameLength = 29, HSI_MaxLampDescriptionLength = 255; - // Maximum string length (buffer size - 1) - } + HSI_STATUS_OPTICS_COMM = 100, + HSI_STATUS_OPTICS_HOMING, + HSI_STATUS_OPTICS_TIMEOUT, + HSI_STATUS_OPTICS_CALIBRATIONDATA, + HSI_STATUS_OPTICS_CALIBRATIONDATADEFAULT, + HSI_STATUS_OPTICS_CALFILEDATACOUNTMISMATCH, + + HSI_STATUS_MOTION_COMM = 150, + HSI_STATUS_MOTION_HOMING, + HSI_STATUS_MOTION_TIMEOUT, + HSI_STATUS_MOTION_EMERGENCY_STOP, + HSI_STATUS_MOTION_EXCEED_LIMIT, + HSI_STATUS_MOTION_UNKNOWN_ERROR, + HSI_STATUS_MOTION_EXCEED_SW_LIMIT, + HSI_STATUS_MOTION_POSITION_ERROR, + HSI_STATUS_MOTION_MOVING, + + HSI_STATUS_TP_UNEXPECTED_HIT = 200, + HSI_STATUS_TP_TIMEOUT = 201, + HSI_STATUS_TP_APPROACH_TIMEOUT = 202, + HSI_STATUS_TP_WRIST_ERROR, + + HSI_STATUS_FG_COMM = 250, + HSI_STATUS_FG_TIMEOUT, + HSI_STATUS_FG_DIRECTX, + HSI_STATUS_FG_COLORDEPTH, + + HSI_STATUS_LP_TIMEOUT = 300, + HSI_STATUS_LP_EXCEED_LIMIT = 301, + + HSI_STATUS_VP_TIMEOUT = 350, + HSI_STATUS_VP_IMAGEPROCESS_FAIL + } + + public const int HSI_APIVersionMajor = 1; + public const int HSI_APIVersionMinor = 3; + public const int HSI_MaxStringLength = 255; // Maximum string length (buffer size - 1) + + public const int HSI_EF3Version = 0; //默认EF3版本号 + + public const uint HSI_MOTION_AXIS_ALL = + (uint) + (HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_X | HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_Y | + HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_Z); + + public const int HSI_MAX_POSITIONS_STORED = 500; + + public const int HSI_ILLUMINATION_MAX_LAMPS = 6; + public const int HSI_ILLUMINATION_MAX_BULB_COLORS = 3; + public const int HSI_ILLUMINATION_MAX_RINGS = 12; + public const int HSI_ILLUMINATION_MAX_SECTORS = 16; + public const int HSI_ILLUMINATION_MAX_BULBS = HSI_ILLUMINATION_MAX_RINGS * HSI_ILLUMINATION_MAX_SECTORS; + + public const int HSI_MaxLampNameLength = 29, HSI_MaxLampDescriptionLength = 255; + + public struct SHsiEventProperties + { + public uint EventId; + public uint EventCallbackId; + public HSI_EVENT_TYPE EventType; + public HSI_EVENT_RESPONSE_TYPE EventResponse; + public char[] EventData; + + public void Init() + { + EventId = (uint)HSI_EVENT_FUNCTION_ID.HSI_EVENT_DONE; + EventCallbackId = 0; + EventType = HSI_EVENT_TYPE.HSI_EVENT_NONE; + EventResponse = HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_CALLBACK; + EventData = new char[HSI_MaxStringLength + 1]; + } + } + // Maximum string length (buffer size - 1) + } } \ No newline at end of file diff --git a/HSI_SEVENOCEAN_EF1_CsTest/Program.cs b/HSI_SEVENOCEAN_EF1_CsTest/Program.cs index 5b6b0d9..6aa4c76 100644 --- a/HSI_SEVENOCEAN_EF1_CsTest/Program.cs +++ b/HSI_SEVENOCEAN_EF1_CsTest/Program.cs @@ -1,134 +1,150 @@ 锘縰sing System; -using System.Collections.Generic; -using System.Linq; using System.Runtime.InteropServices; using System.Text; -using System.Threading.Tasks; -using HSI_SEVENOCEAN_EF1_CsTest; using HSI_SEVENOCEAN_EF1_CsTest.HSI; namespace HSI_SEVENOCEAN_EF1_CsTest { - class Program - { - private static Interface.PEventCallback _eventCallback; + internal class Program + { + private static Interface.PEventCallback _eventCallback; + private static void Main(string[] args) + { + //鑾峰彇HSI Dll鐗堟湰 + uint major = Def.HSI_APIVersionMajor; + uint minjor = Def.HSI_APIVersionMinor; + var rStatus = Interface.GetInterfaceVersion(ref major, ref minjor); + Console.WriteLine("Interface.GetInterfaceVersion: {0}", rStatus); + Console.WriteLine("HSI.dll Version: {0}.{1}", major, minjor); - static void Main(string[] args) - { - uint major = Def.HSI_APIVersionMajor; - uint minjor = Def.HSI_APIVersionMinor; - var rStatus = Interface.GetInterfaceVersion(ref major, ref minjor); - Console.WriteLine("Interface.GetInterfaceVersion:{0}", rStatus); - Console.WriteLine("Version:{0}.{1}", major, minjor); - var mainIntPtr = User32Api.GetCurrentWindowHandle(); - rStatus = Interface.Startup(mainIntPtr, false); - Console.WriteLine("Interface.Startup:{0}", rStatus); + //HSI 鍒濆鍖 + var mainIntPtr = User32Api.GetCurrentWindowHandle(); + rStatus = Interface.Startup(mainIntPtr, false); + Console.WriteLine("Interface.Startup: {0}", rStatus); - Interface.HsiCallback=new Interface.PEventCallback(Interface.EventCallback); - rStatus = Interface.SetEventCallback(Interface.HsiCallback); - Console.WriteLine("SetEventCallback:{0}", rStatus); + //鑾峰彇鏈哄櫒绫诲瀷 + var machineVersion = Def.HSI_EF3Version; + rStatus = Interface.GetMachineInfo(ref machineVersion); + Console.WriteLine("Interface.GetMachineInfo: {0}", rStatus); + Console.WriteLine("HSI EF3 Version: {0}", machineVersion); - //if (Motion.IsActive(true)) - { - rStatus = Motion.Startup(true); - Console.WriteLine("Motion.Startup:{0}", rStatus); + - var bHomed = true; - rStatus = Motion.IsHomed(ref bHomed); - Console.WriteLine("Motion.IsHomed:{0}", rStatus); - var bexit = false; - double SpeedGear = 1.0; - var dPos = new double[3]; - do - { - var info = Console.ReadKey(); - double dTime = 0; - switch (info.Key) - { - case ConsoleKey.P: - dPos[0] += 10.0; - dPos[1] += 10.0; - rStatus = Motion.SetPositionXyz(Def.HSI_MOTION_AXIS_ALL, dPos[0], dPos[1], dPos[2], Def.HSI_MOTION_MOVE_TYPE.HSI_MOTION_MOVE_NOWAIT, 0.0); + //璁剧疆鍥炶皟锛屾柟渚挎牴鎹洖璋冪粨鏋滆繘琛屾彁閱 + Interface.HsiCallback = Interface.EventCallback; + rStatus = Interface.SetEventCallback(Interface.HsiCallback); + Console.WriteLine("SetEventCallback:{0}", rStatus); //浜嬩欢鍥炶皟鎴愬姛 - break; - case ConsoleKey.Enter: - rStatus = Motion.GetPositionXyz(Def.HSI_MOTION_AXIS_ALL, ref dPos[0], ref dPos[1], ref dPos[2], ref dTime); - Console.WriteLine("Motion.GetPositionXyz:{0}", rStatus); - Console.WriteLine("Motion.XYZ:{0},{1},{2}", dPos[0], dPos[1], dPos[2]); - break; - case ConsoleKey.Escape: - bexit = true; - break; - case ConsoleKey.Spacebar: - rStatus = Motion.StopJog(); - Console.WriteLine("Motion.StopJog:{0}", rStatus); - break; - case ConsoleKey.NumPad1: - case ConsoleKey.D1: - SpeedGear = 1.0; - Console.WriteLine("Motion.SpeedGera:{0}", SpeedGear); - break; - case ConsoleKey.NumPad2: - case ConsoleKey.D2: - SpeedGear = 2.0; - Console.WriteLine("Motion.SpeedGera:{0}", SpeedGear); - break; - case ConsoleKey.NumPad3: - case ConsoleKey.D3: - SpeedGear = 3.0; - Console.WriteLine("Motion.SpeedGera:{0}", SpeedGear); - break; - case ConsoleKey.NumPad4: - case ConsoleKey.D4: - SpeedGear = 4.0; - Console.WriteLine("Motion.SpeedGera:{0}", SpeedGear); - break; - case ConsoleKey.LeftArrow: - rStatus = Motion.Jog((uint)Def.HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_X, -SpeedGear); - Console.WriteLine("Motion.Jog(X,{1}):{0}", rStatus, SpeedGear); - break; - case ConsoleKey.RightArrow: - rStatus = Motion.Jog((uint)Def.HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_X, SpeedGear); - Console.WriteLine("Motion.Jog(X,{1}):{0}", rStatus, SpeedGear); - break; - case ConsoleKey.DownArrow: - rStatus = Motion.Jog((uint)Def.HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_Y, -SpeedGear); - Console.WriteLine("Motion.Jog(Y,{1}):{0}", rStatus, SpeedGear); - break; - case ConsoleKey.UpArrow: - rStatus = Motion.Jog((uint)Def.HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_Y, SpeedGear); - Console.WriteLine("Motion.Jog(Y,{1}):{0}", rStatus, SpeedGear); - break; - case ConsoleKey.PageUp: - rStatus = Motion.Jog((uint)Def.HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_Z, SpeedGear); - Console.WriteLine("Motion.Jog(Z,{1}):{0}", rStatus, SpeedGear); - break; - case ConsoleKey.PageDown: - rStatus = Motion.Jog((uint)Def.HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_Z, -SpeedGear); - Console.WriteLine("Motion.Jog(Z,{1}):{0}", rStatus, SpeedGear); - break; - default: - Console.WriteLine("Invalid"); - break; - } - } while (!bexit); + //if (Motion.IsActive(true)) + { + rStatus = Motion.Startup(true); //杩愬姩鍒濆鍖 + Console.WriteLine("Motion.Startup:{0}", rStatus); + + //鑾峰彇EF3鍥轰欢鐗堟湰鍙,寰呮祴璇 + var EF3Version = new byte[20]; + //IntPtr intPtrEF3Version = IntPtr.Zero; + IntPtr intPtrEF3Version = Marshal.StringToHGlobalAnsi(""); + rStatus = Interface.MotionGetFirewareVerion(intPtrEF3Version); + Console.WriteLine("Interface.MotionGetFirewareVerion: {0}", rStatus); + Marshal.Copy(intPtrEF3Version, EF3Version, 0, EF3Version.Length); + Console.WriteLine("EF3 FirewareVerion Version: {0}", Encoding.Unicode.GetString(EF3Version)); + + var bHomed = true; + rStatus = Motion.IsHomed(ref bHomed); + Console.WriteLine("Motion.IsHomed:{0}", rStatus); + var bexit = false; + var SpeedGear = 1.0; + var dPos = new double[3]; + do + { + var info = Console.ReadKey(); + double dTime = 0; + switch (info.Key) + { + case ConsoleKey.P: + dPos[0] += 10.0; + dPos[1] += 10.0; + rStatus = Motion.SetPositionXyz(Def.HSI_MOTION_AXIS_ALL, dPos[0], dPos[1], dPos[2], + Def.HSI_MOTION_MOVE_TYPE.HSI_MOTION_MOVE_NOWAIT, 0.0); + + break; + case ConsoleKey.Enter: + rStatus = Motion.GetPositionXyz(Def.HSI_MOTION_AXIS_ALL, ref dPos[0], ref dPos[1], + ref dPos[2], ref dTime); + Console.WriteLine("Motion.GetPositionXyz:{0}", rStatus); + Console.WriteLine("Motion.XYZ:{0},{1},{2}", dPos[0], dPos[1], dPos[2]); + break; + case ConsoleKey.Escape: + bexit = true; + break; + case ConsoleKey.Spacebar: + rStatus = Motion.StopJog(); + Console.WriteLine("Motion.StopJog:{0}", rStatus); + break; + case ConsoleKey.NumPad1: + case ConsoleKey.D1: + SpeedGear = 1.0; + Console.WriteLine("Motion.SpeedGera:{0}", SpeedGear); + break; + case ConsoleKey.NumPad2: + case ConsoleKey.D2: + SpeedGear = 2.0; + Console.WriteLine("Motion.SpeedGera:{0}", SpeedGear); + break; + case ConsoleKey.NumPad3: + case ConsoleKey.D3: + SpeedGear = 3.0; + Console.WriteLine("Motion.SpeedGera:{0}", SpeedGear); + break; + case ConsoleKey.NumPad4: + case ConsoleKey.D4: + SpeedGear = 4.0; + Console.WriteLine("Motion.SpeedGera:{0}", SpeedGear); + break; + case ConsoleKey.LeftArrow: + rStatus = Motion.Jog((uint)Def.HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_X, -SpeedGear); + Console.WriteLine("Motion.Jog(X,{1}):{0}", rStatus, SpeedGear); + break; + case ConsoleKey.RightArrow: + rStatus = Motion.Jog((uint)Def.HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_X, SpeedGear); + Console.WriteLine("Motion.Jog(X,{1}):{0}", rStatus, SpeedGear); + break; + case ConsoleKey.DownArrow: + rStatus = Motion.Jog((uint)Def.HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_Y, -SpeedGear); + Console.WriteLine("Motion.Jog(Y,{1}):{0}", rStatus, SpeedGear); + break; + case ConsoleKey.UpArrow: + rStatus = Motion.Jog((uint)Def.HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_Y, SpeedGear); + Console.WriteLine("Motion.Jog(Y,{1}):{0}", rStatus, SpeedGear); + break; + case ConsoleKey.PageUp: + rStatus = Motion.Jog((uint)Def.HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_Z, SpeedGear); + Console.WriteLine("Motion.Jog(Z,{1}):{0}", rStatus, SpeedGear); + break; + case ConsoleKey.PageDown: + rStatus = Motion.Jog((uint)Def.HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_Z, -SpeedGear); + Console.WriteLine("Motion.Jog(Z,{1}):{0}", rStatus, SpeedGear); + break; + default: + Console.WriteLine("Invalid"); + break; + } + } while (!bexit); + rStatus = Motion.Shutdown(); + Console.WriteLine("Motion.Startup:{0}", rStatus); + } - rStatus = Motion.Shutdown(); - Console.WriteLine("Motion.Startup:{0}", rStatus); - } + rStatus = Interface.Shutdown(); + Console.WriteLine("Interface.Shutdown:{0}", rStatus); - - rStatus = Interface.Shutdown(); - Console.WriteLine("Interface.Shutdown:{0}", rStatus); - - Console.WriteLine(); - Console.WriteLine("Press any key to exit..."); - Console.ReadKey(); - } - } -} + Console.WriteLine(); + Console.WriteLine("Press any key to exit..."); + Console.ReadKey(); + } + } +} \ No newline at end of file diff --git a/HSI_SEVENOCEAN_EF1_CsTest/bin/Debug/Config/EF3_Config.ini b/HSI_SEVENOCEAN_EF1_CsTest/bin/Debug/Config/EF3_Config.ini index fca8a990e448660ec8a52a598f75daa9cdae051e..f143dae197784541d557e678d79200680120c44e 100644 GIT binary patch delta 31 jcmZ2u{mptp9J@7xBZD(T@I+}-PB4SPmcd|SWUwp%jQR)2 delta 10 Rcmexny~cV%+{P7tvH%@n1j_&b diff --git a/HSI_SEVENOCEAN_EF1_CsTest/bin/Debug/Log/2022-10-11_16 b/HSI_SEVENOCEAN_EF1_CsTest/bin/Debug/Log/2022-10-11_16 deleted file mode 100644 index e69de29..0000000