771 const char* GetName();
773 const char* GetType();
775 static uint32 GetVersion();
777 #ifndef INOS_RAMP_DLL
778 static CINOSBaseRamp* GetRamp(
const char* apAxisName,
const char* apRampType);
787 eFlgMoveNone= 0x00000000,
788 eFlgMoveWithoutDec1 = 0x00000001,
789 eFlgMoveWithoutDec2 = 0x00000002,
790 eFlgMoveWithoutDec3 = 0x00000004
795 virtual bool Move(real64 arPosition,
SINOSRampParam* apParam = 0);
800 virtual bool Move(real64 arPosition, real64 arSave1, real64 arSave2,
804 virtual bool MoveApp(real64 arPosition, real64 arPositionVel, real64 arVelocity,
808 virtual bool MoveDep(real64 arPosition, real64 arPositionVel, real64 arVelocity,
812 virtual bool Endless(
bool abPositive =
true,
SINOSRampParam* apParam = 0);
834 virtual real64 GetMoveTime(real64 arPosition, real64 arDelta = REAL64(0.0),
837 virtual real64 GetAccelerationTime(real64 arPosition, real64 arDelta = REAL64(0.0),
840 virtual real64 GetConstTime(real64 arPosition, real64 arDelta = REAL64(0.0),
843 virtual real64 GetDecelerationTime(real64 arPosition, real64 arDelta = REAL64(0.0),
847 virtual real64 GetMoveTime(real64 arStartPosition, real64 arEndPosition,
851 virtual real64 GetAccelerationTime(real64 arStartPosition, real64 arEndPosition,
854 virtual real64 GetConstTime(real64 arStartPosition, real64 arEndPosition,
857 virtual real64 GetDecelerationTime(real64 arStartPosition, real64 arEndPosition,
861 virtual real64 GetMoveTime(real64 arStartPosition, real64 arEndPosition,
862 real64 arDelta, real64& arDeltaTime,
SINOSRampParam* apParam = 0);
866 virtual real64 GetMoveAppTime(real64 arPosition, real64 arPositionVel,
867 real64 arVelocity, real64 arDelta = REAL64(0.0),
SINOSRampParam* apParam = 0);
869 virtual real64 GetMoveAppTime(real64 arStartPosition, real64 arEndPosition,
870 real64 arPositionVel, real64 arVelocity, real64 arDelta,
SINOSRampParam* apParam = 0);
872 virtual real64 GetMoveDepTime(real64 arPosition, real64 arPositionVel,
873 real64 arVelocity, real64 arDelta = REAL64(0.0),
SINOSRampParam* apParam = 0);
875 virtual real64 GetMoveDepTime(real64 arStartPosition, real64 arEndPosition,
876 real64 arPositionVel, real64 arVelocity, real64 arDelta,
SINOSRampParam* apParam = 0);
878 virtual real64 GetMoveDist(real64 arTime,
SINOSRampParam* apParam = 0);
880 virtual real64 GetMoveDist(real64 arPosition, real64 arTime,
883 virtual real64 GetMoveDist(real64 arStartPosition, real64 arEndPosition,
887 virtual uint64 GetStartTicks(real64 arDelta);
889 virtual uint64 GetTargetTicks()
891 {
return inos_atomic_gettickcount(&m_uTargetTicks);};
892 virtual uint64 GetTargetTicks(real64 arDelta);
897 virtual uint32 SegBegin(real64 arSlowMotion = REAL64(1.0), real64 arStartVelocity = REAL64(0.0));
899 virtual uint32 SegBegin(real64 arSlowMotion, real64 arStartPosition, real64 arStartVelocity);
901 virtual uint32 SegMove(real64 arPosition, real64 arVelocity = REAL64(0.0),
902 SINOSRampParam* apParam = 0, real64 arAcceleration = REAL64(0.0), real64 arDuration = REAL64(-1.0));
907 virtual uint32 SegMoveResult()
909 {
return m_eSegMoveResult;};
910 virtual uint32 SegConst(real64 arPosition);
912 virtual uint32 SegPos(real64 arTime);
914 virtual uint32 SegPosSetTime(real64 arTime);
916 virtual uint32 SegVelocity(real64 arVelocity,
SINOSRampParam* apParam = 0);
918 virtual real64 SegTime(
bool abRoundedtoCycleTime=
true);
920 virtual uint32 GetSegEnd (real64& arS);
922 virtual void SegJobMustFitInCycle (
bool abMustFitInCycle);
924 virtual uint32 SegRun();
926 virtual CINOSRampJob* GetSegJob()
927 {
return m_pSegJob;};
931 virtual void Pull(real64 arS, real64 arV, real64 arA, real64 arJ);
947 virtual void FlushPull();
954 { ClrFlag(DF_INOS_BASE_RAMP_FLAG_ENABLED);};
960 virtual bool StopLive(real64 arSlowMotion = 1.0,
SINOSRampParam* apParam = 0);
962 virtual bool StopLiveDelta(real64 arDelta, real64 arSlowMotion = 1.0,
SINOSRampParam* apParam = 0);
964 virtual bool Stop(real64 arPosition,
SINOSRampParam* apParam = 0);
970 virtual bool Break(real64 arPosition,
SINOSRampParam* apParam = 0);
973 virtual bool EmergencyStop();
975 virtual bool EmergencyStop(real64 arPosition,
SINOSRampParam* apParam,
bool abPosValid =
true);
977 virtual void EmergencyStopLive();
986 eFlgCmdNone = 0x00000000,
987 eFlgCmdPeak = 0x00000001
990 virtual void SetCmdFlags(uint32 auFlags);
992 ICACHE
virtual void SetCmdPosition(real64 arPosition);
994 ICACHE
virtual void GetCmdPosition(real64& arPosition);
996 virtual void SetCmdVelocity(real64 arVelocity);
998 virtual void GetCmdVelocity(real64& arVelocity, ECmdFlags aeFlags = eFlgCmdNone);
1000 virtual void SetCmdAcceleration(real64 arAcceleration);
1002 virtual void GetCmdAcceleration(real64& arAcceleration, ECmdFlags aeFlags = eFlgCmdNone);
1004 virtual void SetCmdDeceleration(real64 arDeceleration);
1006 virtual void GetCmdDeceleration(real64& arDeceleration, ECmdFlags aeFlags = eFlgCmdNone);
1008 virtual void SetCmdCruiseleration(real64 arCruiseleration);
1010 virtual void GetCmdCruiseleration(real64& arCruiseleration);
1012 virtual void SetCmdJerk(real64 arJerk, uint32 auNumber = DF_INOS_RAMP_JERK_ALL);
1014 virtual void GetCmdJerk(real64& arJerk, uint32 auNumber = 0);
1016 virtual void SetCmdCruiseJerk(real64 arCruiseJerk);
1018 virtual void GetCmdCruiseJerk(real64& arCruiseJerk);
1020 virtual void GetCmdRealJerk(real64& arJerk, uint32 auNumber = 0);
1022 virtual void SetCmdSlowMotion(real64 arSlowMotion,
bool abUpdate =
false);
1024 virtual void SetCmdSlowMotion(real64 arSlowMotion,
bool abUpdate,
bool abStopping);
1026 virtual void GetCmdSlowMotion(real64& arSlowMotion,
SINOSRampParam* apParam = 0);
1028 virtual void GetActSlowMotion(real64& arSlowMotion,
SINOSRampParam* apParam = 0);
1030 #ifdef INOS_SAFETY_SUPPORT
1031 virtual void GetSafetySlowMotion(real64& arSlowMotion,
SINOSRampParam* apParam = 0);
1034 virtual void SetCmdRelaxTime(real64 arRelaxTime);
1036 virtual void GetCmdRelaxTime(real64& arRelaxTime);
1038 virtual void SetEmgDeceleration(real64 arDeceleration);
1040 virtual void GetEmgDeceleration(real64& arDeceleration);
1042 virtual void SetEmgJerk(real64 arJerk);
1044 virtual void SetEmgJerk(real64 arJerk, real64 arJerkEnd);
1046 virtual void GetEmgJerk(real64& arJerk);
1048 virtual void GetEmgJerk(real64& arJerk, real64& arJerkEnd);
1051 { *m_pParam = *apParam; };
1054 {
return m_pParam; };
1056 ICACHE
virtual void SetActPosition(real64 arPosition);
1058 ICACHE
virtual void AdjActPosition(real64 arPosition);
1060 ICACHE
virtual void GetActPosition(real64& arPosition);
1062 ICACHE
virtual void GetActPosition(real64& arPosition, uint64 auTicks);
1064 virtual void GetPullAdjPosition(real64& arPosition);
1066 virtual void GetStopPosition(real64& arPosition,
SINOSRampParam* apParam);
1068 virtual void GetBgnPosition(real64& arPosition)
1069 { arPosition = m_rSbgn;};
1071 virtual void SetActVelocity(real64 arVelocity);
1073 virtual void GetActVelocity(real64& arVelocity);
1075 virtual void SetActAcceleration(real64 arAcceleration);
1077 virtual void GetActAcceleration(real64& arAcceleration);
1079 virtual void SetActJerk(real64 arJerk);
1081 virtual void GetActJerk(real64& arJerk);
1085 virtual void GetActSVAJ(
SINOSRampData& arData,
bool abIrqSafe =
true);
1087 virtual void AdjActTime(real64 arDelta);
1089 virtual void SetMinPosition(real64 arPosition);
1091 virtual void GetMinPosition(real64& apPosition)
const;
1093 virtual void SetMaxPosition(real64 arPosition);
1095 virtual void GetMaxPosition(real64& arPosition)
const;
1097 virtual bool CheckPosition(real64& arPosition,
bool abIgnoreMapping =
false,
SINOSRampParam* apParam =
nullptr);
1099 virtual void SetMaxVelocity(real64 arVelocity);
1101 virtual void GetMaxVelocity(real64& arVelocity, uint32 auFlags = eMaxVelocityNone);
1103 virtual void SetMaxSetupVelocity(real64 arVelocity);
1105 virtual void GetMaxSetupVelocity(real64& arVelocity);
1107 virtual void SetMaxInitVelocity(real64 arVelocity);
1109 virtual void GetMaxInitVelocity(real64& arVelocity);
1111 virtual void SetMinVelocity(real64 arVelocity);
1113 virtual void GetMinVelocity(real64& arVelocity);
1115 virtual void SetTrqVelocity(real64 arVelocity);
1117 virtual void GetTrqVelocity(real64& arVelocity);
1119 virtual void AdjustMinMaxValues (real64 arFactor);
1121 virtual void SetMinAcceleration(real64 arAcceleration);
1123 virtual void GetMinAcceleration(real64& arAcceleration);
1125 virtual void SetMaxAcceleration(real64 arAcceleration);
1127 virtual void GetMaxAcceleration(real64& arAcceleration);
1129 virtual void SetMaxAccelerationPull(real64 arAcceleration);
1131 virtual void GetMaxAccelerationPull(real64& arAcceleration);
1133 virtual void SetTrqAcceleration(real64 arAcceleration);
1135 virtual void GetTrqAcceleration(real64& arAcceleration);
1137 virtual void SetMinDeceleration(real64 arDeceleration);
1139 virtual void GetMinDeceleration(real64& arDeceleration);
1141 virtual void SetMaxDeceleration(real64 arDeceleration);
1143 virtual void GetMaxDeceleration(real64& arDeceleration);
1145 virtual void SetTrqDeceleration(real64 arDeceleration);
1147 virtual void GetTrqDeceleration(real64& arDeceleration);
1149 virtual void SetMinCruiseleration(real64 arCruiseleration);
1151 virtual void GetMinCruiseleration(real64& arCruiseleration);
1153 virtual void SetMaxCruiseleration(real64 arCruiseleration);
1155 virtual void GetMaxCruiseleration(real64& arCruiseleration);
1157 virtual void SetMinJerk(real64 arJerk);
1159 virtual void GetMinJerk(real64& arJerk);
1161 virtual void SetMaxJerk(real64 arJerk);
1163 virtual void GetMaxJerk(real64& arJerk);
1166 virtual void GetCycleTime(real64& arCycleTime);
1168 virtual void SetCycleTime(real64 arCycleTime);
1170 virtual uint8 GetOversampling();
1172 virtual void SetOversampling(uint8 auOversampling);
1174 virtual void GetCycleTimeUs(uint32& auCycleTime)
1175 { auCycleTime = m_uCycleTimeUs;};
1177 virtual void GetCycleTimeNs(uint32& auCycleTime)
1178 { auCycleTime = m_uCycleTimeNs;};
1180 virtual const char* GetUnit();
1182 virtual void SetUnit(
const char* apUnit);
1184 #ifndef INOS_RAMP_DLL
1185 virtual uint32 GetCharacteristics();
1187 virtual void SetCharacteristics(uint32 auCharacteristics);
1189 virtual uint8 GetTypeChar() {
return m_uTypeChar;};
1191 virtual void SetTypeChar(uint8 auTypeChar) {m_uTypeChar = auTypeChar;};
1193 virtual uint32 GetParam(
const char* apName, real64& arResult);
1195 virtual volatile real64* GetParamAdr(
const char* apName);
1197 virtual uint32 SetParam(
const char* apName, real64 arValue);
1201 void SetFlag(uint32 auFlag)
1204 void ClrFlag(uint32 auFlag)
1208 {
return m_uFlag & m_uFlagEnb;};
1210 void EnbFlag(uint32 auFlag)
1211 {
INOS_OR(m_uFlagEnb, auFlag);};
1213 void DisFlag(uint32 auFlag)
1216 ICACHE
void SetState(uint32 auState)
1221 if (m_uState == DF_INOS_RAMP_STATE_PEACE) {
1225 m_pActParam =
nullptr;
1229 ICACHE uint32 GetState()
1230 {
return m_uState;};
1232 virtual uint32 GetError();
1234 virtual uint64 GetErrorEx();
1236 virtual uint32 GetWarning();
1238 virtual uint64 GetWarningEx();
1240 virtual void AcceptError(uint32 auError=0xffffffff);
1242 virtual void AcceptWarning(uint32 auWarning=0xffffffff);
1245 ICACHE
virtual void GetS(real64& arS);
1247 ICACHE
virtual void GetSV(real64& arS, real64& arV);
1249 ICACHE
virtual void GetSVA(real64& arS, real64& arV, real64& arA);
1251 ICACHE
virtual void GetSVAJ(real64& arS, real64& arV, real64& arA, real64& arJ);
1255 virtual void GetData (
SINOSRampDataEx* apData,
bool abSingleSample=
false);
1258 #ifndef INOS_RAMP_DLL
1270 void EnableCache(uint32 auSize = 32);
1272 CINOSRampCache* EnableCache(CINOSRampCache* apCache);
1274 CINOSRampCache* DisableCache();
1276 void ReEnableCache();
1284 void SetEpsilon(real64 arEpsilon);
1286 void GetEpsilon(real64& arEpsilon)
1287 {arEpsilon = m_rEpsilon;};
1289 void SetCacheEpsilon(real64 arEpsilon);
1296 #ifndef INOS_RAMP_DLL
1300 virtual CINCOObject* GetRegister(
const char* apName =
"Ramp");
1302 void RegisterFlags(CINCOObject* apParent, uint32* auBase);
1312 virtual void SetMoveSafeMin(real64 arMin, real64 arFact1=REAL64(0.0),
1313 real64 arFact2=REAL64(0.0));
1316 virtual void ResetMoveSafeMin();
1321 void SetMapping(CINOSMapping* apMapping, uint32 auIndex)
1322 { m_pMapping = apMapping; m_uMappingIndex = auIndex;};
1325 { m_pMapping = 0; m_uMappingIndex = 0;};
1330 void EnableSetupMode();
1332 void DisableSetupMode();
1334 bool CheckSetupMode();
1343 if (m_rAmaxPull != REAL64(0.0))
1344 rAmax = m_rAmaxPull;
1348 real64 rVzero = rAmax * m_rCycleTime;
1350 return (m_pFstData == 0) && ((m_Act->
m_rV > rVzero) || (m_Act->
m_rV < -rVzero));
1375 {
return m_uCoreId; };
1379 friend class CINOSMapping;
1380 friend class CINOSShape;
1383 friend class CINOSBaseRampTest;
1384 friend class CINOSMcRobotCmdLinear;
1385 friend class CINOSRemoteControlWorker;
1386 friend void _INI_0400_CINOSBaseRamp();
1390 virtual const char* GetStateText();
1392 virtual CINOSRampJob* iMove(real64 arSbgn, real64 arSend,
bool abReturnError,
1395 virtual CINOSRampJob* iMove(real64 arPosition, real64 arSave1, real64 arSave2,
1398 virtual CINOSRampJob* iMoveApp(real64 arSbgn, real64 arSend, real64 arSvel,
1399 real64 arVelocity,
bool abReturnError,
SINOSRampParam* apParam, EMoveFlags aeFlags);
1401 virtual CINOSRampJob* iMoveDep(real64 arSbgn, real64 arSend, real64 arSvel,
1411 enum ECalcMoveResult {
1413 eClcMoveResAdjusted = 1,
1414 eClcMoveResShrinked = 2,
1415 eClcMoveResFailed = 3,
1418 virtual ECalcMoveResult CalcMove(real64 arSlen,
SINOSRampParam* apParam, CINOSRampSegTra*& apSegAcc,
1419 CINOSRampSegCns*& apSegCns, CINOSRampSegTra*& apSegDec, real64 arVbgn = REAL64(0.0),
1420 real64 arVend = REAL64(0.0), real64 arAbgn = REAL64(0.0),
1421 real64 arAend = REAL64(0.0), real64 arDuration = REAL64(-1.0));
1424 virtual void CalcMoveApp(real64 arS, real64 arSred, real64 arVred,
1425 SINOSRampParam* apParam, CINOSRampSegTra*& apAcc, CINOSRampSegCns*& apCns,
1426 CINOSRampSegTra*& apDec1, CINOSRampSegCns*& apDec2, CINOSRampSegTra*& apDec3);
1428 virtual void CalcMoveDep(real64 arS, real64 arSred, real64 arVred,
1429 SINOSRampParam* apParam, CINOSRampSegTra*& apAcc1, CINOSRampSegCns*& apAcc2,
1430 CINOSRampSegTra*& apAcc3, CINOSRampSegCns*& apCns, CINOSRampSegTra*& apDec);
1432 virtual bool CalcStop(uint32 auNxtState,
SINOSRampParam* apParam,
bool abEmergency=
false);
1434 virtual bool CalcStopLive(uint32 auNxtState,
SINOSRampParam* apParam,
bool abEmergency=
false);
1436 virtual bool CalcStop(real64 arS, uint32 auNxtState,
SINOSRampParam* apParam,
bool abEmergency=
false);
1439 virtual real64 CalcEscape(real64 arSlen,
SINOSRampParam* apParam);
1441 virtual bool iCalcApp(real64 arS, real64 arSred, real64 arVred,
SINOSRampParam* apParam);
1444 virtual void iStopping();
1447 enum ECalcSegTraType {
1448 eClcSegTraCompatible = 0,
1449 eClcSegTraAccelerate = 1,
1450 eClcSegTraDecelerate = 2,
1451 eClcSegTraMiddle = 3
1454 virtual CINOSRampSegTra* CalcSegTra(
1459 CINOSRampSegTra* apResult=0,
1460 real64 arJb=REAL64(-1.0),
1461 real64 arJe=REAL64(-1.0),
1462 ECalcSegTraType aeType = eClcSegTraCompatible
1465 virtual void CalcSegApp(
1470 CINOSRampSegTra*& apResult1,
1471 CINOSRampSegCns*& apResult2,
1472 CINOSRampSegTra*& apResult3,
1473 uint32 auMoveInMove = 0
1475 virtual void CalcSegDep(
1480 CINOSRampSegTra*& apResult1,
1481 CINOSRampSegCns*& apResult2,
1482 CINOSRampSegTra*& apResult3
1485 CINOSRampSegCns* CalcSegCns(
1488 CINOSRampSegCns* aResult=0
1491 CINOSRampSegPos* CalcSegPos(
1494 CINOSRampSegPos* aResult=0
1497 bool StartJob(CINOSRampJob* apJob);
1499 bool ReleaseJob(CINOSRampJob* apJob);
1503 CINOSRampJob* SwitchJob(CINOSRampJob* apJob, uint32 auNxtState,
1504 uint32 auBusTicks,
bool bLookAhead =
false);
1506 CINOSRampJob* GetActJob(
bool abIncRefCounter =
true);
1508 real64 RoundUpToCycleTime(real64 arTime);
1510 real64 RoundToCycleTime(real64 arTime);
1512 uint64 RoundUpToBusTicks(real64 arTime);
1514 void SetBusTicksPerAxisTick(uint32 auBusTicksPerAxisTick)
1516 { m_uBusTicksPerAxisTick = auBusTicksPerAxisTick; };
1527 bool IsGreater(real64 arA, real64 arB,
bool bPos);
1530 bool Enter(uint32 auState,
bool abEqual=
true);
1532 bool Exit(
bool abExitCode);
1538 bool Sign(real64& arValue)
1540 {
return (*((uint64*)&arValue)&0x8000000000000000LL) ? true :
false;};
1562 #ifdef INOS_SAFETY_SUPPORT
1564 virtual void SetSafetyFunction(ESafetyFunction auFunction, real64 arLimit, uint32 auDelay,
1567 virtual void SetSafetyFunction(ESafetyFunction auFunction);
1569 virtual real64 CalcSlsLimit(real64 arSlsLimit);
1571 void SetSLSVmax(real64 arSLSVmax)
1572 { m_rSLSVmax = arSLSVmax; m_rSLSValue = arSLSVmax; m_eSLSType = eSLSReduceFixed; };
1575 #if defined(INOS_AXIS_EXTENSION_SUPPORT)
1577 void AddExtension(SINOSParamSetExtension* apExtension);
1579 void RemoveExtension(
const char* apName);
1582 SINOSParamSetExtension* GetParamSetExtension(uint32 auExtensionId)
1592 SINOSParamSetExtension* ext = act->m_pExtension;
1596 if (ext->m_uId == auExtensionId) {
1611 void iCoreMismatchError();
1613 void iCoreMismatchWarning();
1632 volatile uint32 m_uAlive;
1634 CINOSRampJob* m_pActJob;
1636 CINOSRampJob* m_pNxtJob;
1638 CINOSRampJob* m_pBrkJob;
1640 CINOSRampJob* m_pSegJob;
1642 CINOSRampSegPos* m_pSegPosLast;
1644 CINOSRampCache* m_pCache;
1648 bool m_bSetupModeOk;
1658 #ifndef INOS_RAMP_DLL
1659 CINCOObject* m_pRegister;
1661 CINCOObject* m_pCmd;
1663 CINCOObject* m_pAct;
1665 CINCOObject* m_pMax;
1667 CINCOObject* m_pProp;
1669 CINCOObject* m_pError;
1671 CINCOObject* m_pWarning;
1673 CINCOObject* m_pFlag;
1675 CINCOObject* m_pFlagEnb;
1677 uint32 m_uCharacteristics;
1682 const char* m_pType;
1691 real64 m_rCycleTime;
1693 real64 m_rCycleTimeOversampled;
1695 real64 m_rCycleTime_1;
1697 uint32 m_uCycleTimeUs;
1699 uint32 m_uCycleTimeNs;
1701 uint8 m_uOversampling;
1718 real64 m_rPausedEnd;
1746 ECalcMoveResult m_eSegMoveResult;
1768 real64 m_rVmaxSetup;
1772 real64 m_rVmaxLimit;
1810 uint64 m_uTickCount;
1813 uint64 m_uTargetTicks;
1815 uint64 m_uStartTicks;
1817 uint64 m_uStartTicks_;
1819 uint32 m_uBusTicksPerAxisTick;
1823 uint16 m_uIterCount;
1825 uint16 m_uIterCountMax;
1827 uint16 m_uStopAliveDelta;
1829 uint16 m_uStopAliveDeltaMax;
1831 int16 m_iStoppingState;
1833 real64 m_rStoppingJerk;
1857 bool m_bMoveSafeMin;
1859 real64 m_rMoveSafeMin;
1861 real64 m_rMoveSafeFact1;
1863 real64 m_rMoveSafeFact2;
1870 eFlgBacklashCompensationRequired = 0x00000001,
1881 #ifdef INOS_SAFETY_SUPPORT
1884 eSLSReduceAbsolute = 0,
1885 eSLSReducePercent = 1,
1886 eSLSReduceFixed = 2,
1888 ESLSType m_eSLSType;
1897 ESafetyFunction m_eSafetyFunction;
1899 uint8 m_uSafetyType;
1901 real64 m_rSafetyLimit;
1903 uint32 m_uSafetyDelay;
1907 CINOSMapping* m_pMapping;
1909 uint32 m_uMappingIndex;
1911 static char m_cStateCombo[494];