From 9a5ca2a7d11330b055f4e7e344d6c1742a1be0d1 Mon Sep 17 00:00:00 2001 From: "zhengxuan.zhang" Date: Thu, 20 Oct 2022 14:18:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AE=BE=E7=BD=AE=E5=8D=95?= =?UTF-8?q?=E8=BD=B4=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HSI_HexagonMI_EF3/HSI.cpp | 101 +++++----- HSI_HexagonMI_EF3/HSI.h | 12 +- HSI_HexagonMI_EF3/HSI_HexagonMI_EF3.vcxproj | 4 +- HSI_HexagonMI_EF3/HSI_Motion.cpp | 176 +++++++++++++++++- HSI_HexagonMI_EF3/HSI_Motion.h | 30 ++- HSI_HexagonMI_EF3/version.h | 4 +- HSI_SEVENOCEAN_EF1_CsTest/HSI/HSI.cs | 4 +- .../bin/Debug/Config/EF3_Config.ini | Bin 7670 -> 7670 bytes 8 files changed, 268 insertions(+), 63 deletions(-) diff --git a/HSI_HexagonMI_EF3/HSI.cpp b/HSI_HexagonMI_EF3/HSI.cpp index 222d788..d644871 100644 --- a/HSI_HexagonMI_EF3/HSI.cpp +++ b/HSI_HexagonMI_EF3/HSI.cpp @@ -309,13 +309,53 @@ HSI_API HSI_STATUS WINAPI HSI_MOTION_IS_HOMED(bool& bHomed) } return rStatus; } -#pragma endregion -#ifdef USE_Motion_API - -#pragma region 后续考虑 //=========================================================================== -HSI_API HSI_STATUS WINAPI HSI_MOTION_IS_SUPPORTED(UINT &Types) +HSI_API HSI_STATUS WINAPI HSI_EF3MOTION_GET_SPEED_XYZ(int axis, double& Speed) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->GetSpeedXyz(axis, Speed); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} + +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_SPEED_EX(UINT AxisTypes, double Speed) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->SetSpeedEx(AxisTypes, Speed); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_DIO(UINT IOChannel, UINT& _Status) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->GetDIO(IOChannel, _Status); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} + +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_IS_SUPPORTED(UINT& Types) { auto rStatus = HSI_STATUS_NORMAL; if (g_bOfflineOnly == 0) @@ -335,20 +375,13 @@ HSI_API HSI_STATUS WINAPI HSI_MOTION_IS_SUPPORTED(UINT &Types) } return rStatus; } -//=========================================================================== -HSI_API HSI_STATUS WINAPI HSI_EF3MOTION_GET_SPEED_XYZ(int axis,double &Speed) -{ - auto rStatus = HSI_STATUS_NORMAL; - if (g_pHSI_Motion) - { - rStatus = g_pHSI_Motion->GetSpeedXyz(axis,Speed); - } - else - { - rStatus = HSI_STATUS_FAILED; - } - return rStatus; -} +#pragma endregion + +#ifdef USE_Motion_API + +#pragma region 后续考虑 + + //=========================================================================== HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_FOCUSSPEED_XYZ(double &Speed) { @@ -604,20 +637,7 @@ HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_POSITION_R(UINT AxisTypes, double Posi UNREFERENCED_PARAMETER(bWait); return HSI_STATUS_NOT_SUPPORTED; } -//=========================================================================== -HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_DIO(UINT IOChannel, UINT& _Status) -{ - auto rStatus = HSI_STATUS_NORMAL; - if (g_pHSI_Motion) - { - rStatus = g_pHSI_Motion->GetDIO(IOChannel,_Status); - } - else - { - rStatus = HSI_STATUS_FAILED; - } - return rStatus; -} + //=========================================================================== HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_DIO(UINT IOChannel, UINT _Status) { @@ -922,20 +942,7 @@ HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_SPEED_EX(UINT AxisTypes, double &Speed) } return rStatus; } -//=========================================================================== -HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_SPEED_EX(UINT AxisTypes, double Speed) -{ - auto rStatus = HSI_STATUS_NORMAL; - if (g_pHSI_Motion) - { - rStatus = g_pHSI_Motion->SetSpeedEx(AxisTypes, Speed); - } - else - { - rStatus = HSI_STATUS_FAILED; - } - return rStatus; -} + //=========================================================================== HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_ACCELERATION_EX(UINT AxisTypes, double &Accel) { diff --git a/HSI_HexagonMI_EF3/HSI.h b/HSI_HexagonMI_EF3/HSI.h index e70c052..bc8a3c1 100644 --- a/HSI_HexagonMI_EF3/HSI.h +++ b/HSI_HexagonMI_EF3/HSI.h @@ -20,8 +20,8 @@ #define HSI_API extern "C" __declspec(dllimport) #endif -const int HSI_APIVersionMajor = 0; -const int HSI_APIVersionMinor = 0; +const int HSI_APIVersionMajor = 1; +const int HSI_APIVersionMinor = 9; const int HSI_MaxStringLength = 255; // Maximum string length (buffer size - 1) /////////////////////////////////////////////////////////////////////////////// // Interface API @@ -426,9 +426,10 @@ HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_POSITION_XYZ(UINT AxisTypes, double Pos double PositionZ, HSI_MOTION_MOVE_TYPE eType, double dSpeedGear); HSI_API HSI_STATUS WINAPI HSI_MOTION_ABORT_MOTION(); HSI_API HSI_STATUS WINAPI HSI_MOTION_IS_HOMED(bool& bHomed); +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_DIO(UINT IOChannel, UINT& _Status); +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_DIO(UINT IOChannel, UINT _Status); - -//HSI_API HSI_STATUS WINAPI HSI_MOTION_IS_SUPPORTED(UINT &Types); +HSI_API HSI_STATUS WINAPI HSI_MOTION_IS_SUPPORTED(UINT &Types); //HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_SPEED_XYZ(double &Speed); //HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_SPEED_XYZ(double Speed); //HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_ACCELERATION_XYZ(double &AccelX, double &AccelY, double &AccelZ); @@ -447,8 +448,7 @@ HSI_API HSI_STATUS WINAPI HSI_MOTION_IS_HOMED(bool& bHomed); //HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_POSITION_R(UINT AxisTypes, double &PositionR, double &Time); //HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_POSITION_R(UINT AxisTypes, double PositionR, HSI_MOTION_AXIS_R_MOVE_TYPE DirectionType, bool bWait); //HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_PLAN_SCAN(double *pdStartPosX, double *pdStartPosY, double *pdStartPosZ, double *pdEndPosX, double *pdEndPosY, double *pdEndPosZ, double *pdStepDis, bool *pbTrig, int iCount); -//HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_DIO(UINT IOChannel, UINT& _Status); -//HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_DIO(UINT IOChannel, UINT _Status); + //HSI_API HSI_STATUS WINAPI HSI_MOTION_DCC_SCAN_SET_DATA(UINT AxisTypes, HSI_SCAN_MOTION_TYPE eType, UINT lTrigNumber, double* dTrigDis); //HSI_API HSI_STATUS WINAPI HSI_MOTION_DCC_SCAN_START(); //HSI_API HSI_STATUS WINAPI HSI_MOTION_DCC_SCAN_STOP(); diff --git a/HSI_HexagonMI_EF3/HSI_HexagonMI_EF3.vcxproj b/HSI_HexagonMI_EF3/HSI_HexagonMI_EF3.vcxproj index bfd2364..dd867a7 100644 --- a/HSI_HexagonMI_EF3/HSI_HexagonMI_EF3.vcxproj +++ b/HSI_HexagonMI_EF3/HSI_HexagonMI_EF3.vcxproj @@ -106,7 +106,9 @@ $(LocalDebuggerWorkingDirectory)\ACS;%(AdditionalLibraryDirectories) - copy "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)HSI_SEVENOCEAN_EF1_CsTest\bin\Debug\HSI.dll" + copy "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)HSI_SEVENOCEAN_EF1_CsTest\bin\Debug\HSI.dll" +copy "$(TargetDir)$(ProjectName).dll" "C:\Hexagon\Metus2021\HSI.dll" +copy "$(TargetDir)$(ProjectName).dll" "E:\HexagonProjects\2022-05-鐩寸嚎鐢垫満骞冲彴\EF3-Interfac\PcDmis\Base\Interfac\Msi\Hsi\Tools\UsbUtility\HSI_Sevenocean_EF1_WPFTest\bin\x64\Debug\HSI.dll" version.cmd diff --git a/HSI_HexagonMI_EF3/HSI_Motion.cpp b/HSI_HexagonMI_EF3/HSI_Motion.cpp index 28392c0..45a8334 100644 --- a/HSI_HexagonMI_EF3/HSI_Motion.cpp +++ b/HSI_HexagonMI_EF3/HSI_Motion.cpp @@ -4545,7 +4545,13 @@ HSI_STATUS HSI_Motion::SpecialMotorMove(short AxisNumber, double Position) } //========================IO=================================================== -HSI_STATUS HSI_Motion::GetDIO(UINT IOChannel, UINT& _Status) +/** + * \brief + * \param IOChannel + * \param _Status + * \return + */ +HSI_STATUS HSI_Motion::GetDIOOld(UINT IOChannel, UINT& _Status) { auto rStatus = HSI_STATUS_NORMAL; if (g_pHSI_Motion) @@ -4597,7 +4603,63 @@ HSI_STATUS HSI_Motion::GetDIO(UINT IOChannel, UINT& _Status) } return rStatus; } +HSI_STATUS HSI_Motion::GetDIO(UINT IOChannel, UINT& _Status) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + if (m_SO7_Serial.m_RecvData[0] == 2) + { + if (IOChannel == HSI_MOTION_INPUT_LIMIT_SWITCH) + { + _Status = m_SO7_Serial.m_RecvData[33]; + } + if (IOChannel == HSI_MOTION_INPUT_ALARM) + { + _Status = m_SO7_Serial.m_RecvData[40]; + } + if (IOChannel == HSI_MOTION_INPUT_CH1) //获取通用输入 + { + _Status = m_SO7_Serial.m_RecvData[34]; + _Status = (m_SO7_Serial.m_RecvData[35] | (_Status << 8)) & 0xffff; + } + if (IOChannel == HSI_MOTION_OUTPUT_CH1) //获取通用输出 + { + _Status = m_SO7_Serial.m_RecvData[36]; + _Status = (m_SO7_Serial.m_RecvData[37] | (_Status << 8)) & 0xffff; + } + m_axisStatus = m_SO7_Serial.m_RecvData[58]; + m_axisAlarmStatus = m_SO7_Serial.m_RecvData[59]; + } + else if (m_bISUseMoreLights > 0) + { + if (m_Led8MotionFlag[m_selectedIndex]) + { + if (tReciveData[0] == 0x05) + { + _Status = tReciveData[2]; + } + } + else + { + if (tReciveData[0] == 0x05) + { + _Status = tReciveData[1] << 24 | tReciveData[1] << 16 | tReciveData[3] << 8 | tReciveData[4]; + } + } + } + else + { + g_pLogger->SendAndFlushWithTime(L"[GetDIO] failed\n"); + } + } + //-----------TEST Begin------------------ + _Status = 0; + + //-----------TEST End------------------ + return rStatus; +} //=========================================================================== HSI_STATUS HSI_Motion::SetDIO(UINT IOChannel, UINT _Status) { @@ -6613,7 +6675,13 @@ bool HSI_Motion::SpeedPercentJoyStick(int AxisNum, long& Speed, int& DirveSpeed, } //=========================================================================== -HSI_STATUS HSI_Motion::GetSpeedXyz(int AxisNum, double& Speed) +/** + * \brief 获取单轴设置的速度 + * \param AxisNum + * \param Speed + * \return + */ +HSI_STATUS HSI_Motion::GetSpeedXyzOld(int AxisNum, double& Speed) { g_pLogger->SendAndFlushWithTime(L"[GetSpeedXyz] In\n"); auto rStatus = HSI_STATUS_NORMAL; @@ -6630,6 +6698,22 @@ HSI_STATUS HSI_Motion::GetSpeedXyz(int AxisNum, double& Speed) return rStatus; } +HSI_STATUS HSI_Motion::GetSpeedXyz(int AxisNum, double& Speed) +{ + g_pLogger->SendAndFlushWithTime(L"[GetSpeedXyz] In\n"); + auto rStatus = HSI_STATUS_NORMAL; + short AxisNumber = AxisConvertIndex(AxisNum); + if (1 == m_iSpeedType) + { + Speed = m_SetPotion_DriveSpeed[AxisNumber] * (m_Resolution[AxisNumber] * 50); + } + else + { + Speed = m_SetPotion_DriveSpeed[AxisNumber]; + } + g_pLogger->SendAndFlushWithTime(L"[GetSpeedXyz] Out\n"); + return rStatus; +} //=========================================================================== HSI_STATUS HSI_Motion::SetSpeedXyz(double Speed) { @@ -6986,7 +7070,13 @@ HSI_STATUS HSI_Motion::GetSpeedEx(UINT AxisTypes, double& Speed) } //=========================================================================== -HSI_STATUS HSI_Motion::SetSpeedEx(UINT AxisTypes, double Speed) +/** + * \brief 设置单轴运动速度 + * \param AxisTypes + * \param Speed + * \return + */ +HSI_STATUS HSI_Motion::SetSpeedExOld(UINT AxisTypes, double Speed) { auto rStatus = HSI_STATUS_NORMAL; g_pLogger->SendAndFlushWithTime(L"[SetSpeedEx] In\n"); @@ -7067,6 +7157,86 @@ HSI_STATUS HSI_Motion::SetSpeedEx(UINT AxisTypes, double Speed) return rStatus; } +HSI_STATUS HSI_Motion::SetSpeedEx(UINT AxisTypes, double Speed) +{ + auto rStatus = HSI_STATUS_NORMAL; + g_pLogger->SendAndFlushWithTime(L"[SetSpeedEx] In\n"); + short AxisNumber = AxisConvertIndex(AxisTypes); + if (Speed <= 0) + { + m_SetPotion_DriveSpeed[AxisNumber] = 0; + } + if (1 == m_iSpeedType) + { + if (Speed >= 65000 * (m_Resolution[AxisNumber] * 50)) + { + m_SetPotion_DriveSpeed[AxisNumber] = 65000; + } + } + else + { + if (Speed >= 65000) + { + m_SetPotion_DriveSpeed[AxisNumber] = 65000; + } + } + if (AxisNumber >= 1 && AxisNumber <= 4) + { + if (m_ForSoft == 1) + { + if (m_motorType == 1) + { + if (1 == m_iSpeedType) + { + m_SetPotion_DriveSpeed[1] = static_cast(Speed) / (m_Resolution[1] * 50); + } + else + { + m_SetPotion_DriveSpeed[1] = static_cast(Speed); + } + } + else + { + g_pLogger->SendAndFlushWithTime(L"[SetSpeedEx] AxisNumber = %d,Speed = %f \n", AxisNumber, Speed); + //if (!bSaveSpeedFlag) + //{ + // bSaveSpeedFlag = true; + // m_SaveAxisNum = AxisNumber; + // m_SaveAxisSpeed = m_SetPotion_DriveSpeed[AxisNumber]; + // g_pLogger->SendAndFlushWithTime(L"[SetSpeedEx] m_SaveAxisNum = %d,m_SaveAxisSpeed = %d \n", m_SaveAxisNum, m_SaveAxisSpeed); + //} + //if (bSaveSpeedFlag && ((int)Speed == m_SetPotion_DriveSpeed[1] * (m_Resolution[1] * 50))) + //{ + // bSaveSpeedFlag = false; + // m_SetPotion_DriveSpeed[m_SaveAxisNum] = m_SaveAxisSpeed; + // return rStatus; + //} + if (1 == m_iSpeedType) + { + m_SetPotion_DriveSpeed[AxisNumber] = static_cast(Speed / (m_Resolution[AxisNumber] * 50)); + } + else + { + m_SetPotion_DriveSpeed[AxisNumber] = static_cast(Speed); + } + g_pLogger->SendAndFlushWithTime(L"[SetSpeedEx] AxisNumber = %d\n", AxisNumber); + } + } + else + { + if (m_motorType == 1) + { + m_SetPotion_DriveSpeed[AxisNumber] = static_cast(Speed / (m_Resolution[AxisNumber] * 50)); + } + else + { + m_SetPotion_DriveSpeed[AxisNumber] = static_cast(Speed / (m_Resolution[AxisNumber] * 50)); + } + } + } + g_pLogger->SendAndFlushWithTime(L"[SetSpeedEx] Out\n"); + return rStatus; +} //=========================================================================== HSI_STATUS HSI_Motion::GetAccelerationEx(UINT AxisTypes, double& Accel) { diff --git a/HSI_HexagonMI_EF3/HSI_Motion.h b/HSI_HexagonMI_EF3/HSI_Motion.h index 81ae8e6..17064e7 100644 --- a/HSI_HexagonMI_EF3/HSI_Motion.h +++ b/HSI_HexagonMI_EF3/HSI_Motion.h @@ -182,7 +182,14 @@ public: */ HSI_STATUS IsHomed(bool& bHomed); HSI_STATUS IsHomedOld(bool& bHomed); + /** + * \brief 获取单轴运动速度 + * \param AxisNum + * \param Speed + * \return + */ HSI_STATUS GetSpeedXyz(int AxisNum, double& Speed); + HSI_STATUS GetSpeedXyzOld(int AxisNum, double& Speed); HSI_STATUS SetSpeedXyz(double Speed); HSI_STATUS GetFocusSpeed(double& Speed); HSI_STATUS SetFocusSpeed(double Speed); @@ -195,7 +202,7 @@ public: HSI_STATUS GetDeadBand(double& DeadbandX, double& DeadbandY, double& DeadbandZ, double& DeadbandR); HSI_STATUS GetRefreshDeadBand(double& Deadband); /** - * \brief + * \brief Jog运动 * \param AxisTypes * \param Speed * \return @@ -264,8 +271,20 @@ public: */ HSI_STATUS AbortMotion(); HSI_STATUS AbortMotionOld(); - + /** + * \brief + * \param IOChannel + * \param _Status + * \return + */ HSI_STATUS GetDIO(UINT IOChannel, UINT& _Status); + HSI_STATUS GetDIOOld(UINT IOChannel, UINT& _Status); + /** + * \brief + * \param IOChannel + * \param _Status + * \return + */ HSI_STATUS SetDIO(UINT IOChannel, UINT _Status); HSI_STATUS GetAxisStatus(int* _Status); HSI_STATUS GetAppPath(CString& Path); @@ -283,7 +302,14 @@ public: HSI_STATUS SetPositionStep(UINT AxisTypes, double Position, HSI_MOTION_MOVE_TYPE eType, double dSpeedGear); HSI_STATUS SetPositionEx(UINT AxisTypes, double Position, HSI_MOTION_MOVE_TYPE eType, double dSpeedGear); HSI_STATUS GetSpeedEx(UINT AxisTypes, double& Speed); + /** + * \brief 设置单轴运动速度 + * \param AxisTypes + * \param Speed + * \return + */ HSI_STATUS SetSpeedEx(UINT AxisTypes, double Speed); + HSI_STATUS SetSpeedExOld(UINT AxisTypes, double Speed); HSI_STATUS GetAccelerationEx(UINT AxisTypes, double& Accel); HSI_STATUS SetAccelerationEx(UINT AxisTypes, double Accel); HSI_STATUS SetTriggerLight(int triggleNum, int delayLighting, int delayLightBefor, int triggleMode, diff --git a/HSI_HexagonMI_EF3/version.h b/HSI_HexagonMI_EF3/version.h index 64155d7..97831f4 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.19 / 20:17 " -#define HSI_FILE_CSDESCRIPTION _T("2022.10.19 / 20:17 ") +#define HSI_FILE_DESCRIPTION "2022.10.20 / 12:06 " +#define HSI_FILE_CSDESCRIPTION _T("2022.10.20 / 12:06 ") diff --git a/HSI_SEVENOCEAN_EF1_CsTest/HSI/HSI.cs b/HSI_SEVENOCEAN_EF1_CsTest/HSI/HSI.cs index 69a3f69..e37e7b5 100644 --- a/HSI_SEVENOCEAN_EF1_CsTest/HSI/HSI.cs +++ b/HSI_SEVENOCEAN_EF1_CsTest/HSI/HSI.cs @@ -177,8 +177,8 @@ namespace HSI_SEVENOCEAN_EF1_CsTest.HSI [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_DIO", CharSet = CharSet.Unicode)] - //public static extern Def.HSI_STATUS GetDIO(uint ioChannel, ref uint status); + [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_DIO", CharSet = CharSet.Unicode)] //public static extern Def.HSI_STATUS SetDIO(uint ioChannel, uint status); 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 ad11e48b22bee06f168c59495bbc9325b4056695..aeeaa9ab114ad6f379bd3cf57679b2330cbe43d4 100644 GIT binary patch delta 14 Vcmexn{mptqg$$#~=1Q4bMgTH<1)=}| delta 14 Vcmexn{mptqg$$$d=1Q4bMgTH(1)%@{