From 9c4a54f935f6dce08b9bbbceddb17eff104e35b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=BB=E7=AB=8B=E6=96=B0?= Date: Mon, 14 Feb 2022 11:10:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9moving=20backzero?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../source/LinearShutter/VSMD12XControl.cpp | 43 ++++++++++++++++++ .../source/LinearShutter/VSMD12XControl.h | 28 ++++++------ .../source/LinearShutter/VSMD12XControl.cpp | 45 ++++++++++++++++++- .../source/LinearShutter/VSMD12XControl.h | 28 ++++++------ 4 files changed, 115 insertions(+), 29 deletions(-) diff --git a/othersoft/movingliner/source/LinearShutter/VSMD12XControl.cpp b/othersoft/movingliner/source/LinearShutter/VSMD12XControl.cpp index 520e487..3c976f7 100644 --- a/othersoft/movingliner/source/LinearShutter/VSMD12XControl.cpp +++ b/othersoft/movingliner/source/LinearShutter/VSMD12XControl.cpp @@ -423,6 +423,7 @@ bool CVSMD12XControl::StartBackZero() { return false; } + return IsMotionFinished(); bool bFlagIsStopped = false; while (!bFlagIsStopped) @@ -440,7 +441,49 @@ bool CVSMD12XControl::StartBackZero() // return ParseReturnedString(strRecv, -1); } +bool CVSMD12XControl::IsMotionFinished() +{ + //true means stopped + //false means unknown status + int iCountTotal = 0; + int iCountStopped = 0; + bool bFlagIsStopped = false; + while (!bFlagIsStopped) + { + iCountTotal++; + QThread::msleep(200); + //Delay_MSec(200); + GetStatus(m_stuMSInfo); + ZZ_U8 ucFlag = m_stuMSInfo.uiFlags & 0x000000FF; + ucFlag = ucFlag & 0x10; + if (m_stuMSInfo.fVelocity == 0) + { + iCountStopped++; + } + if (ucFlag == 0x10 && m_stuMSInfo.fVelocity == 0) + { + bFlagIsStopped = true; + return true; + } + if (iCountStopped>=50) + { + qDebug() <<"Warning.Motion Err,should be stopped already.checking register and retry..."; + qDebug() <<"motion status:"<1000) + { + qDebug() << "Err.Motor Hardware Err,should be stopped already"; + qDebug() << "motion status:" << ucFlag << "all status:" << QString::number(m_stuMSInfo.uiFlags, 2); + bFlagIsStopped = true; + return false; + } + } + return false; + +} bool CVSMD12XControl::StopBackZero() { std::string strCMD = "zero stop\n"; diff --git a/othersoft/movingliner/source/LinearShutter/VSMD12XControl.h b/othersoft/movingliner/source/LinearShutter/VSMD12XControl.h index 46e6a5f..c4a019b 100644 --- a/othersoft/movingliner/source/LinearShutter/VSMD12XControl.h +++ b/othersoft/movingliner/source/LinearShutter/VSMD12XControl.h @@ -58,7 +58,7 @@ public: void ILMES_SetPosition(int *piPositionInPulse,size_t szSize); bool ILMES_MoveToPos(int iPositionIndex); - + bool IsMotionFinished(); public: int waitetime; ////init port @@ -79,39 +79,39 @@ public: bool GetStatus(MSInfo &stuMotorParam); //load motor status see MSInfo Struct ////motion control - bool Move(int iRelPulse); // relative move mode,pulse (-2147483647¡«2147483647) - bool MoveTo(int iAbsPulse);//absolute mode,pulse (-2147483647¡«2147483647) - bool Move_NoSyn(int iRelPulse); // relative move mode,pulse (-2147483647¡«2147483647) - bool MoveTo_NoSyn(int iAbsPulse);//absolute mode,pulse (-2147483647¡«2147483647) + bool Move(int iRelPulse); // relative move mode,pulse (-2147483647��2147483647) + bool MoveTo(int iAbsPulse);//absolute mode,pulse (-2147483647��2147483647) + bool Move_NoSyn(int iRelPulse); // relative move mode,pulse (-2147483647��2147483647) + bool MoveTo_NoSyn(int iAbsPulse);//absolute mode,pulse (-2147483647��2147483647) bool SetLogicZero(); //set logic zero bool StartBackZero();//back zero bool StopBackZero();// stop back zero & reset register ////Set&Get - bool SetBaudRate(int iBaudRate);//set controller baud rates,default B9600 (2400 ¡« 921600) + bool SetBaudRate(int iBaudRate);//set controller baud rates,default B9600 (2400 �� 921600) int GetBaudRate(); // -1:should retry; - bool SetMicroSteps(int iMicroSteps);//set micro steps (0¡«5)->(1/2/4/8/16/32) + bool SetMicroSteps(int iMicroSteps);//set micro steps (0��5)->(1/2/4/8/16/32) int GetMicroSteps(); - bool SetAccSpeed(float fAccSpd);//set acceleration speed in pulse (0 ¡« 192000000) + bool SetAccSpeed(float fAccSpd);//set acceleration speed in pulse (0 �� 192000000) float GetAccSpeed(); - bool SetRunSpeed(float fRunSpeed);//set normal running speed in pulse (0 ¡« 192000000) + bool SetRunSpeed(float fRunSpeed);//set normal running speed in pulse (0 �� 192000000) float GetRunSpeed(); - bool SetDecSpeed(float fDecSpeed);//set deceleration speed in pulse (0 ¡« 192000000) + bool SetDecSpeed(float fDecSpeed);//set deceleration speed in pulse (0 �� 192000000) float GetDecSpeed(); bool SetSpeed(float fRunSpeed, float fAccSpd, float fDecSpeed);//see above three functions - bool SetHoldCurrent(float fHoldCurrent);//set hold current ( 0 ¡« 8.0 )Amp? pay attention to your motor specification. + bool SetHoldCurrent(float fHoldCurrent);//set hold current ( 0 �� 8.0 )Amp? pay attention to your motor specification. float GetHoldCurrent(); - bool SetAccCurrent(float fAccCurrent);//set acceleration current ( 0 ¡« 8.0 )Amp? pay attention to your motor specification. + bool SetAccCurrent(float fAccCurrent);//set acceleration current ( 0 �� 8.0 )Amp? pay attention to your motor specification. float GetAccCurrent(); - bool SetRunCurrent(float fRunCurrent);//set normal running current ( 0 ¡« 8.0 )Amp? pay attention to your motor specification. + bool SetRunCurrent(float fRunCurrent);//set normal running current ( 0 �� 8.0 )Amp? pay attention to your motor specification. float GetRunCurrent(); bool SetCurrent(float fAccCurrent, float fRunCurrent, float fHoldCurrent);//see above three functions @@ -129,7 +129,7 @@ public: ZZ_U8 GetS2RETE(); //(ZeroMode 0:off 1:once 2:once + safe position 3:twice 4:twice + safe position) (OpenVoltageLevel 0:Low Level 1:High Level) - //(ZeroSensor 0:S1 1:S2 2:S3 3:S4 4:S5 5:S6)( ZeroVelocity £¨-192000) ¡«£¨192000£©pulse)(SafePosition £¨-2147483647) ¡«£¨2147483647£©) + //(ZeroSensor 0:S1 1:S2 2:S3 3:S4 4:S5 5:S6)( ZeroVelocity ��-192000) ����192000��pulse)(SafePosition ��-2147483647) ����2147483647��) bool SetZeroParams(ZZ_U8 bZeroMode, ZZ_U8 bSwitchOpenVL, ZZ_U8 bZeroSensor, float fZeroVelocity, int iSafePosition); ZZ_U8 GetZeroMode(); ZZ_U8 GetSwitchOpenVoltageLevel(); diff --git a/othersoft/shuttercali/source/LinearShutter/VSMD12XControl.cpp b/othersoft/shuttercali/source/LinearShutter/VSMD12XControl.cpp index 4013b30..c4e8e65 100644 --- a/othersoft/shuttercali/source/LinearShutter/VSMD12XControl.cpp +++ b/othersoft/shuttercali/source/LinearShutter/VSMD12XControl.cpp @@ -422,7 +422,7 @@ bool CVSMD12XControl::StartBackZero() { return false; } - + return IsMotionFinished(); bool bFlagIsStopped = false; while (!bFlagIsStopped) { @@ -438,6 +438,49 @@ bool CVSMD12XControl::StartBackZero() return true; // return ParseReturnedString(strRecv, -1); +} +bool CVSMD12XControl::IsMotionFinished() +{ + //true means stopped + //false means unknown status + int iCountTotal = 0; + int iCountStopped = 0; + bool bFlagIsStopped = false; + + while (!bFlagIsStopped) + { + iCountTotal++; + QThread::msleep(200); + //Delay_MSec(200); + GetStatus(m_stuMSInfo); + ZZ_U8 ucFlag = m_stuMSInfo.uiFlags & 0x000000FF; + ucFlag = ucFlag & 0x10; + if (m_stuMSInfo.fVelocity == 0) + { + iCountStopped++; + } + if (ucFlag == 0x10 && m_stuMSInfo.fVelocity == 0) + { + bFlagIsStopped = true; + return true; + } + if (iCountStopped>=50) + { + qDebug() <<"Warning.Motion Err,should be stopped already.checking register and retry..."; + qDebug() <<"motion status:"<1000) + { + qDebug() << "Err.Motor Hardware Err,should be stopped already"; + qDebug() << "motion status:" << ucFlag << "all status:" << QString::number(m_stuMSInfo.uiFlags, 2); + bFlagIsStopped = true; + return false; + } + } + return false; + } bool CVSMD12XControl::StopBackZero() diff --git a/othersoft/shuttercali/source/LinearShutter/VSMD12XControl.h b/othersoft/shuttercali/source/LinearShutter/VSMD12XControl.h index 46e6a5f..c4a019b 100644 --- a/othersoft/shuttercali/source/LinearShutter/VSMD12XControl.h +++ b/othersoft/shuttercali/source/LinearShutter/VSMD12XControl.h @@ -58,7 +58,7 @@ public: void ILMES_SetPosition(int *piPositionInPulse,size_t szSize); bool ILMES_MoveToPos(int iPositionIndex); - + bool IsMotionFinished(); public: int waitetime; ////init port @@ -79,39 +79,39 @@ public: bool GetStatus(MSInfo &stuMotorParam); //load motor status see MSInfo Struct ////motion control - bool Move(int iRelPulse); // relative move mode,pulse (-2147483647¡«2147483647) - bool MoveTo(int iAbsPulse);//absolute mode,pulse (-2147483647¡«2147483647) - bool Move_NoSyn(int iRelPulse); // relative move mode,pulse (-2147483647¡«2147483647) - bool MoveTo_NoSyn(int iAbsPulse);//absolute mode,pulse (-2147483647¡«2147483647) + bool Move(int iRelPulse); // relative move mode,pulse (-2147483647��2147483647) + bool MoveTo(int iAbsPulse);//absolute mode,pulse (-2147483647��2147483647) + bool Move_NoSyn(int iRelPulse); // relative move mode,pulse (-2147483647��2147483647) + bool MoveTo_NoSyn(int iAbsPulse);//absolute mode,pulse (-2147483647��2147483647) bool SetLogicZero(); //set logic zero bool StartBackZero();//back zero bool StopBackZero();// stop back zero & reset register ////Set&Get - bool SetBaudRate(int iBaudRate);//set controller baud rates,default B9600 (2400 ¡« 921600) + bool SetBaudRate(int iBaudRate);//set controller baud rates,default B9600 (2400 �� 921600) int GetBaudRate(); // -1:should retry; - bool SetMicroSteps(int iMicroSteps);//set micro steps (0¡«5)->(1/2/4/8/16/32) + bool SetMicroSteps(int iMicroSteps);//set micro steps (0��5)->(1/2/4/8/16/32) int GetMicroSteps(); - bool SetAccSpeed(float fAccSpd);//set acceleration speed in pulse (0 ¡« 192000000) + bool SetAccSpeed(float fAccSpd);//set acceleration speed in pulse (0 �� 192000000) float GetAccSpeed(); - bool SetRunSpeed(float fRunSpeed);//set normal running speed in pulse (0 ¡« 192000000) + bool SetRunSpeed(float fRunSpeed);//set normal running speed in pulse (0 �� 192000000) float GetRunSpeed(); - bool SetDecSpeed(float fDecSpeed);//set deceleration speed in pulse (0 ¡« 192000000) + bool SetDecSpeed(float fDecSpeed);//set deceleration speed in pulse (0 �� 192000000) float GetDecSpeed(); bool SetSpeed(float fRunSpeed, float fAccSpd, float fDecSpeed);//see above three functions - bool SetHoldCurrent(float fHoldCurrent);//set hold current ( 0 ¡« 8.0 )Amp? pay attention to your motor specification. + bool SetHoldCurrent(float fHoldCurrent);//set hold current ( 0 �� 8.0 )Amp? pay attention to your motor specification. float GetHoldCurrent(); - bool SetAccCurrent(float fAccCurrent);//set acceleration current ( 0 ¡« 8.0 )Amp? pay attention to your motor specification. + bool SetAccCurrent(float fAccCurrent);//set acceleration current ( 0 �� 8.0 )Amp? pay attention to your motor specification. float GetAccCurrent(); - bool SetRunCurrent(float fRunCurrent);//set normal running current ( 0 ¡« 8.0 )Amp? pay attention to your motor specification. + bool SetRunCurrent(float fRunCurrent);//set normal running current ( 0 �� 8.0 )Amp? pay attention to your motor specification. float GetRunCurrent(); bool SetCurrent(float fAccCurrent, float fRunCurrent, float fHoldCurrent);//see above three functions @@ -129,7 +129,7 @@ public: ZZ_U8 GetS2RETE(); //(ZeroMode 0:off 1:once 2:once + safe position 3:twice 4:twice + safe position) (OpenVoltageLevel 0:Low Level 1:High Level) - //(ZeroSensor 0:S1 1:S2 2:S3 3:S4 4:S5 5:S6)( ZeroVelocity £¨-192000) ¡«£¨192000£©pulse)(SafePosition £¨-2147483647) ¡«£¨2147483647£©) + //(ZeroSensor 0:S1 1:S2 2:S3 3:S4 4:S5 5:S6)( ZeroVelocity ��-192000) ����192000��pulse)(SafePosition ��-2147483647) ����2147483647��) bool SetZeroParams(ZZ_U8 bZeroMode, ZZ_U8 bSwitchOpenVL, ZZ_U8 bZeroSensor, float fZeroVelocity, int iSafePosition); ZZ_U8 GetZeroMode(); ZZ_U8 GetSwitchOpenVoltageLevel();