772 const char* GetName();
774 const char* GetType();
776 static uint32 GetVersion();
778 #ifndef INOS_RAMP_DLL
779 static CINOSBaseRamp* GetRamp(
const char* apAxisName,
const char* apRampType);
788 eFlgMoveNone= 0x00000000,
789 eFlgMoveWithoutDec1 = 0x00000001,
790 eFlgMoveWithoutDec2 = 0x00000002,
791 eFlgMoveWithoutDec3 = 0x00000004
796 virtual bool Move(real64 arPosition,
SINOSRampParam* apParam = 0);
801 virtual bool Move(real64 arPosition, real64 arSave1, real64 arSave2,
805 virtual bool MoveApp(real64 arPosition, real64 arPositionVel, real64 arVelocity,
809 virtual bool MoveDep(real64 arPosition, real64 arPositionVel, real64 arVelocity,
813 virtual bool Endless(
bool abPositive =
true,
SINOSRampParam* apParam = 0);
835 virtual real64 GetMoveTime(real64 arPosition, real64 arDelta = REAL64(0.0),
838 virtual real64 GetAccelerationTime(real64 arPosition, real64 arDelta = REAL64(0.0),
841 virtual real64 GetConstTime(real64 arPosition, real64 arDelta = REAL64(0.0),
844 virtual real64 GetDecelerationTime(real64 arPosition, real64 arDelta = REAL64(0.0),
848 virtual real64 GetMoveTime(real64 arStartPosition, real64 arEndPosition,
852 virtual real64 GetAccelerationTime(real64 arStartPosition, real64 arEndPosition,
855 virtual real64 GetConstTime(real64 arStartPosition, real64 arEndPosition,
858 virtual real64 GetDecelerationTime(real64 arStartPosition, real64 arEndPosition,
862 virtual real64 GetMoveTime(real64 arStartPosition, real64 arEndPosition,
863 real64 arDelta, real64& arDeltaTime,
SINOSRampParam* apParam = 0);
867 virtual real64 GetMoveAppTime(real64 arPosition, real64 arPositionVel,
868 real64 arVelocity, real64 arDelta = REAL64(0.0),
SINOSRampParam* apParam = 0);
870 virtual real64 GetMoveAppTime(real64 arStartPosition, real64 arEndPosition,
871 real64 arPositionVel, real64 arVelocity, real64 arDelta,
SINOSRampParam* apParam = 0);
873 virtual real64 GetMoveDepTime(real64 arPosition, real64 arPositionVel,
874 real64 arVelocity, real64 arDelta = REAL64(0.0),
SINOSRampParam* apParam = 0);
876 virtual real64 GetMoveDepTime(real64 arStartPosition, real64 arEndPosition,
877 real64 arPositionVel, real64 arVelocity, real64 arDelta,
SINOSRampParam* apParam = 0);
879 virtual real64 GetMoveDist(real64 arTime,
SINOSRampParam* apParam = 0);
881 virtual real64 GetMoveDist(real64 arPosition, real64 arTime,
884 virtual real64 GetMoveDist(real64 arStartPosition, real64 arEndPosition,
888 virtual uint64 GetStartTicks(real64 arDelta);
890 virtual uint64 GetTargetTicks()
892 {
return inos_atomic_gettickcount(&m_uTargetTicks);};
893 virtual uint64 GetTargetTicks(real64 arDelta);
898 virtual uint32 SegBegin(real64 arSlowMotion = REAL64(1.0), real64 arStartVelocity = REAL64(0.0));
900 virtual uint32 SegBegin(real64 arSlowMotion, real64 arStartPosition, real64 arStartVelocity);
902 virtual uint32 SegMove(real64 arPosition, real64 arVelocity = REAL64(0.0),
903 SINOSRampParam* apParam = 0, real64 arAcceleration = REAL64(0.0), real64 arDuration = REAL64(-1.0));
908 virtual uint32 SegMoveResult()
910 {
return m_eSegMoveResult;};
911 virtual uint32 SegConst(real64 arPosition);
913 virtual uint32 SegPos(real64 arTime);
915 virtual uint32 SegPosSetTime(real64 arTime);
917 virtual uint32 SegVelocity(real64 arVelocity,
SINOSRampParam* apParam = 0);
919 virtual real64 SegTime(
bool abRoundedtoCycleTime=
true);
921 virtual uint32 GetSegEnd (real64& arS);
923 virtual void SegJobMustFitInCycle (
bool abMustFitInCycle);
925 virtual uint32 SegRun();
927 virtual CINOSRampJob* GetSegJob()
928 {
return m_pSegJob;};
932 virtual void Pull(real64 arS, real64 arV, real64 arA, real64 arJ);
948 virtual void FlushPull();
955 { ClrFlag(DF_INOS_BASE_RAMP_FLAG_ENABLED);};
961 virtual bool StopLive(real64 arSlowMotion = 1.0,
SINOSRampParam* apParam = 0);
963 virtual bool StopLiveDelta(real64 arDelta, real64 arSlowMotion = 1.0,
SINOSRampParam* apParam = 0);
965 virtual bool Stop(real64 arPosition,
SINOSRampParam* apParam = 0);
971 virtual bool Break(real64 arPosition,
SINOSRampParam* apParam = 0);
974 virtual bool EmergencyStop();
976 virtual bool EmergencyStop(real64 arPosition,
SINOSRampParam* apParam,
bool abPosValid =
true);
978 virtual void EmergencyStopLive();
987 eFlgCmdNone = 0x00000000,
988 eFlgCmdPeak = 0x00000001
991 virtual void SetCmdFlags(uint32 auFlags);
993 ICACHE
virtual void SetCmdPosition(real64 arPosition);
995 ICACHE
virtual void GetCmdPosition(real64& arPosition);
997 virtual void SetCmdVelocity(real64 arVelocity);
999 virtual void GetCmdVelocity(real64& arVelocity, ECmdFlags aeFlags = eFlgCmdNone);
1001 virtual void SetCmdAcceleration(real64 arAcceleration);
1003 virtual void GetCmdAcceleration(real64& arAcceleration, ECmdFlags aeFlags = eFlgCmdNone);
1005 virtual void SetCmdDeceleration(real64 arDeceleration);
1007 virtual void GetCmdDeceleration(real64& arDeceleration, ECmdFlags aeFlags = eFlgCmdNone);
1009 virtual void SetCmdCruiseleration(real64 arCruiseleration);
1011 virtual void GetCmdCruiseleration(real64& arCruiseleration);
1013 virtual void SetCmdJerk(real64 arJerk, uint32 auNumber = DF_INOS_RAMP_JERK_ALL);
1015 virtual void GetCmdJerk(real64& arJerk, uint32 auNumber = 0);
1017 virtual void SetCmdCruiseJerk(real64 arCruiseJerk);
1019 virtual void GetCmdCruiseJerk(real64& arCruiseJerk);
1021 virtual void GetCmdRealJerk(real64& arJerk, uint32 auNumber = 0);
1023 virtual void SetCmdSlowMotion(real64 arSlowMotion,
bool abUpdate =
false);
1025 virtual void SetCmdSlowMotion(real64 arSlowMotion,
bool abUpdate,
bool abStopping);
1027 virtual void GetCmdSlowMotion(real64& arSlowMotion,
SINOSRampParam* apParam = 0);
1029 virtual void GetActSlowMotion(real64& arSlowMotion,
SINOSRampParam* apParam = 0);
1031 #ifdef INOS_SAFETY_SUPPORT
1032 virtual void GetSafetySlowMotion(real64& arSlowMotion,
SINOSRampParam* apParam = 0);
1035 virtual void SetCmdRelaxTime(real64 arRelaxTime);
1037 virtual void GetCmdRelaxTime(real64& arRelaxTime);
1039 virtual void SetEmgDeceleration(real64 arDeceleration);
1041 virtual void GetEmgDeceleration(real64& arDeceleration);
1043 virtual void SetEmgJerk(real64 arJerk);
1045 virtual void SetEmgJerk(real64 arJerk, real64 arJerkEnd);
1047 virtual void GetEmgJerk(real64& arJerk);
1049 virtual void GetEmgJerk(real64& arJerk, real64& arJerkEnd);
1052 { *m_pParam = *apParam; };
1055 {
return m_pParam; };
1057 ICACHE
virtual void SetActPosition(real64 arPosition);
1059 ICACHE
virtual void AdjActPosition(real64 arPosition);
1061 ICACHE
virtual void GetActPosition(real64& arPosition);
1063 ICACHE
virtual void GetActPosition(real64& arPosition, uint64 auTicks);
1065 virtual void GetPullAdjPosition(real64& arPosition);
1067 virtual void GetStopPosition(real64& arPosition,
SINOSRampParam* apParam);
1069 virtual void GetBgnPosition(real64& arPosition)
1070 { arPosition = m_rSbgn;};
1072 virtual void SetActVelocity(real64 arVelocity);
1074 virtual void GetActVelocity(real64& arVelocity);
1076 virtual void SetActAcceleration(real64 arAcceleration);
1078 virtual void GetActAcceleration(real64& arAcceleration);
1080 virtual void SetActJerk(real64 arJerk);
1082 virtual void GetActJerk(real64& arJerk);
1086 virtual void GetActSVAJ(
SINOSRampData& arData,
bool abIrqSafe =
true);
1088 virtual void AdjActTime(real64 arDelta);
1090 virtual void SetMinPosition(real64 arPosition);
1092 virtual void GetMinPosition(real64& apPosition)
const;
1094 virtual void SetMaxPosition(real64 arPosition);
1096 virtual void GetMaxPosition(real64& arPosition)
const;
1098 virtual bool CheckPosition(real64& arPosition,
bool abIgnoreMapping =
false,
SINOSRampParam* apParam =
nullptr);
1100 virtual void SetMaxVelocity(real64 arVelocity);
1102 virtual void GetMaxVelocity(real64& arVelocity, uint32 auFlags = eMaxVelocityNone);
1104 virtual void SetMaxSetupVelocity(real64 arVelocity);
1106 virtual void GetMaxSetupVelocity(real64& arVelocity);
1108 virtual void SetMaxInitVelocity(real64 arVelocity);
1110 virtual void GetMaxInitVelocity(real64& arVelocity);
1112 virtual void SetMinVelocity(real64 arVelocity);
1114 virtual void GetMinVelocity(real64& arVelocity);
1116 virtual void SetTrqVelocity(real64 arVelocity);
1118 virtual void GetTrqVelocity(real64& arVelocity);
1120 virtual void AdjustMinMaxValues (real64 arFactor);
1122 virtual void SetMinAcceleration(real64 arAcceleration);
1124 virtual void GetMinAcceleration(real64& arAcceleration);
1126 virtual void SetMaxAcceleration(real64 arAcceleration);
1128 virtual void GetMaxAcceleration(real64& arAcceleration);
1130 virtual void SetMaxAccelerationPull(real64 arAcceleration);
1132 virtual void GetMaxAccelerationPull(real64& arAcceleration);
1134 virtual void SetTrqAcceleration(real64 arAcceleration);
1136 virtual void GetTrqAcceleration(real64& arAcceleration);
1138 virtual void SetMinDeceleration(real64 arDeceleration);
1140 virtual void GetMinDeceleration(real64& arDeceleration);
1142 virtual void SetMaxDeceleration(real64 arDeceleration);
1144 virtual void GetMaxDeceleration(real64& arDeceleration);
1146 virtual void SetTrqDeceleration(real64 arDeceleration);
1148 virtual void GetTrqDeceleration(real64& arDeceleration);
1150 virtual void SetMinCruiseleration(real64 arCruiseleration);
1152 virtual void GetMinCruiseleration(real64& arCruiseleration);
1154 virtual void SetMaxCruiseleration(real64 arCruiseleration);
1156 virtual void GetMaxCruiseleration(real64& arCruiseleration);
1158 virtual void SetMinJerk(real64 arJerk);
1160 virtual void GetMinJerk(real64& arJerk);
1162 virtual void SetMaxJerk(real64 arJerk);
1164 virtual void GetMaxJerk(real64& arJerk);
1167 virtual void GetCycleTime(real64& arCycleTime);
1169 virtual void SetCycleTime(real64 arCycleTime);
1171 virtual uint8 GetOversampling();
1173 virtual void SetOversampling(uint8 auOversampling);
1175 virtual void GetCycleTimeUs(uint32& auCycleTime)
1176 { auCycleTime = m_uCycleTimeUs;};
1178 virtual void GetCycleTimeNs(uint32& auCycleTime)
1179 { auCycleTime = m_uCycleTimeNs;};
1181 virtual const char* GetUnit();
1183 virtual void SetUnit(
const char* apUnit);
1185 #ifndef INOS_RAMP_DLL
1186 virtual uint32 GetCharacteristics();
1188 virtual void SetCharacteristics(uint32 auCharacteristics);
1190 virtual uint8 GetTypeChar() {
return m_uTypeChar;};
1192 virtual void SetTypeChar(uint8 auTypeChar) {m_uTypeChar = auTypeChar;};
1194 virtual uint32 GetParam(
const char* apName, real64& arResult);
1196 virtual volatile real64* GetParamAdr(
const char* apName);
1198 virtual uint32 SetParam(
const char* apName, real64 arValue);
1202 void SetFlag(uint32 auFlag)
1205 void ClrFlag(uint32 auFlag)
1209 {
return m_uFlag & m_uFlagEnb;};
1211 void EnbFlag(uint32 auFlag)
1212 {
INOS_OR(m_uFlagEnb, auFlag);};
1214 void DisFlag(uint32 auFlag)
1217 ICACHE
void SetState(uint32 auState)
1222 if (m_uState == DF_INOS_RAMP_STATE_PEACE) {
1226 m_pActParam =
nullptr;
1230 ICACHE uint32 GetState()
1231 {
return m_uState;};
1233 virtual uint32 GetError();
1235 virtual uint64 GetErrorEx();
1237 virtual uint32 GetWarning();
1239 virtual uint64 GetWarningEx();
1241 virtual void AcceptError(uint32 auError=0xffffffff);
1243 virtual void AcceptWarning(uint32 auWarning=0xffffffff);
1246 ICACHE
virtual void GetS(real64& arS);
1248 ICACHE
virtual void GetSV(real64& arS, real64& arV);
1250 ICACHE
virtual void GetSVA(real64& arS, real64& arV, real64& arA);
1252 ICACHE
virtual void GetSVAJ(real64& arS, real64& arV, real64& arA, real64& arJ);
1256 virtual void GetData (
SINOSRampDataEx* apData,
bool abSingleSample=
false);
1259 #ifndef INOS_RAMP_DLL
1271 void EnableCache(uint32 auSize = 32);
1273 CINOSRampCache* EnableCache(CINOSRampCache* apCache);
1275 CINOSRampCache* DisableCache();
1277 void ReEnableCache();
1285 void SetEpsilon(real64 arEpsilon);
1287 void GetEpsilon(real64& arEpsilon)
1288 {arEpsilon = m_rEpsilon;};
1290 void SetCacheEpsilon(real64 arEpsilon);
1297 #ifndef INOS_RAMP_DLL
1301 virtual CINCOObject* GetRegister(
const char* apName =
"Ramp");
1303 void RegisterFlags(CINCOObject* apParent, uint32* auBase);
1313 virtual void SetMoveSafeMin(real64 arMin, real64 arFact1=REAL64(0.0),
1314 real64 arFact2=REAL64(0.0));
1317 virtual void ResetMoveSafeMin();
1322 void SetMapping(CINOSMapping* apMapping, uint32 auIndex)
1323 { m_pMapping = apMapping; m_uMappingIndex = auIndex;};
1326 { m_pMapping = 0; m_uMappingIndex = 0;};
1331 void EnableSetupMode();
1333 void DisableSetupMode();
1335 bool CheckSetupMode();
1344 if (m_rAmaxPull != REAL64(0.0))
1345 rAmax = m_rAmaxPull;
1349 real64 rVzero = rAmax * m_rCycleTime;
1351 return (m_pFstData == 0) && ((m_Act->
m_rV > rVzero) || (m_Act->
m_rV < -rVzero));
1376 {
return m_uCoreId; };
1380 friend class CINOSMapping;
1381 friend class CINOSShape;
1384 friend class CINOSBaseRampTest;
1385 friend class CINOSMcRobotCmdLinear;
1386 friend class CINOSRemoteControlWorker;
1387 friend void _INI_0400_CINOSBaseRamp();
1391 virtual const char* GetStateText();
1393 virtual CINOSRampJob* iMove(real64 arSbgn, real64 arSend,
bool abReturnError,
1396 virtual CINOSRampJob* iMove(real64 arPosition, real64 arSave1, real64 arSave2,
1399 virtual CINOSRampJob* iMoveApp(real64 arSbgn, real64 arSend, real64 arSvel,
1400 real64 arVelocity,
bool abReturnError,
SINOSRampParam* apParam, EMoveFlags aeFlags);
1402 virtual CINOSRampJob* iMoveDep(real64 arSbgn, real64 arSend, real64 arSvel,
1412 enum ECalcMoveResult {
1414 eClcMoveResAdjusted = 1,
1415 eClcMoveResShrinked = 2,
1416 eClcMoveResFailed = 3,
1419 virtual ECalcMoveResult CalcMove(real64 arSlen,
SINOSRampParam* apParam, CINOSRampSegTra*& apSegAcc,
1420 CINOSRampSegCns*& apSegCns, CINOSRampSegTra*& apSegDec, real64 arVbgn = REAL64(0.0),
1421 real64 arVend = REAL64(0.0), real64 arAbgn = REAL64(0.0),
1422 real64 arAend = REAL64(0.0), real64 arDuration = REAL64(-1.0));
1425 virtual void CalcMoveApp(real64 arS, real64 arSred, real64 arVred,
1426 SINOSRampParam* apParam, CINOSRampSegTra*& apAcc, CINOSRampSegCns*& apCns,
1427 CINOSRampSegTra*& apDec1, CINOSRampSegCns*& apDec2, CINOSRampSegTra*& apDec3);
1429 virtual void CalcMoveDep(real64 arS, real64 arSred, real64 arVred,
1430 SINOSRampParam* apParam, CINOSRampSegTra*& apAcc1, CINOSRampSegCns*& apAcc2,
1431 CINOSRampSegTra*& apAcc3, CINOSRampSegCns*& apCns, CINOSRampSegTra*& apDec);
1433 virtual bool CalcStop(uint32 auNxtState,
SINOSRampParam* apParam,
bool abEmergency=
false);
1435 virtual bool CalcStopLive(uint32 auNxtState,
SINOSRampParam* apParam,
bool abEmergency=
false);
1437 virtual bool CalcStop(real64 arS, uint32 auNxtState,
SINOSRampParam* apParam,
bool abEmergency=
false);
1440 virtual real64 CalcEscape(real64 arSlen,
SINOSRampParam* apParam);
1442 virtual bool iCalcApp(real64 arS, real64 arSred, real64 arVred,
SINOSRampParam* apParam);
1445 virtual void iStopping();
1448 enum ECalcSegTraType {
1449 eClcSegTraCompatible = 0,
1450 eClcSegTraAccelerate = 1,
1451 eClcSegTraDecelerate = 2,
1452 eClcSegTraMiddle = 3
1455 virtual CINOSRampSegTra* CalcSegTra(
1460 CINOSRampSegTra* apResult=0,
1461 real64 arJb=REAL64(-1.0),
1462 real64 arJe=REAL64(-1.0),
1463 ECalcSegTraType aeType = eClcSegTraCompatible
1466 virtual void CalcSegApp(
1471 CINOSRampSegTra*& apResult1,
1472 CINOSRampSegCns*& apResult2,
1473 CINOSRampSegTra*& apResult3,
1474 uint32 auMoveInMove = 0
1476 virtual void CalcSegDep(
1481 CINOSRampSegTra*& apResult1,
1482 CINOSRampSegCns*& apResult2,
1483 CINOSRampSegTra*& apResult3
1486 CINOSRampSegCns* CalcSegCns(
1489 CINOSRampSegCns* aResult=0
1492 CINOSRampSegPos* CalcSegPos(
1495 CINOSRampSegPos* aResult=0
1498 bool StartJob(CINOSRampJob* apJob);
1500 bool ReleaseJob(CINOSRampJob* apJob);
1504 CINOSRampJob* SwitchJob(CINOSRampJob* apJob, uint32 auNxtState,
1505 uint32 auBusTicks,
bool bLookAhead =
false);
1507 CINOSRampJob* GetActJob(
bool abIncRefCounter =
true);
1509 real64 RoundUpToCycleTime(real64 arTime);
1511 real64 RoundToCycleTime(real64 arTime);
1513 uint64 RoundUpToBusTicks(real64 arTime);
1515 void SetBusTicksPerAxisTick(uint32 auBusTicksPerAxisTick)
1517 { m_uBusTicksPerAxisTick = auBusTicksPerAxisTick; };
1528 bool IsGreater(real64 arA, real64 arB,
bool bPos);
1531 bool Enter(uint32 auState,
bool abEqual=
true);
1533 bool Exit(
bool abExitCode);
1539 bool Sign(real64& arValue)
1541 {
return (*((uint64*)&arValue)&0x8000000000000000LL) ? true :
false;};
1563 #ifdef INOS_SAFETY_SUPPORT
1565 virtual void SetSafetyFunction(ESafetyFunction auFunction, real64 arLimit, uint32 auDelay,
1568 virtual void SetSafetyFunction(ESafetyFunction auFunction);
1570 virtual real64 CalcSlsLimit(real64 arSlsLimit);
1572 void SetSLSVmax(real64 arSLSVmax)
1573 { m_rSLSVmax = arSLSVmax; m_rSLSValue = arSLSVmax; m_eSLSType = eSLSReduceFixed; };
1576 #if defined(INOS_AXIS_EXTENSION_SUPPORT)
1578 void AddExtension(SINOSParamSetExtension* apExtension);
1580 void RemoveExtension(
const char* apName);
1583 SINOSParamSetExtension* GetParamSetExtension(uint32 auExtensionId)
1593 SINOSParamSetExtension* ext = act->m_pExtension;
1597 if (ext->m_uId == auExtensionId) {
1612 void iCoreMismatchError();
1614 void iCoreMismatchWarning();
1633 volatile uint32 m_uAlive;
1635 CINOSRampJob* m_pActJob;
1637 CINOSRampJob* m_pNxtJob;
1639 CINOSRampJob* m_pBrkJob;
1641 CINOSRampJob* m_pSegJob;
1643 CINOSRampSegPos* m_pSegPosLast;
1645 CINOSRampCache* m_pCache;
1649 bool m_bSetupModeOk;
1659 #ifndef INOS_RAMP_DLL
1660 CINCOObject* m_pRegister;
1662 CINCOObject* m_pCmd;
1664 CINCOObject* m_pAct;
1666 CINCOObject* m_pMax;
1668 CINCOObject* m_pProp;
1670 CINCOObject* m_pError;
1672 CINCOObject* m_pWarning;
1674 CINCOObject* m_pFlag;
1676 CINCOObject* m_pFlagEnb;
1678 uint32 m_uCharacteristics;
1683 const char* m_pType;
1692 real64 m_rCycleTime;
1694 real64 m_rCycleTimeOversampled;
1696 real64 m_rCycleTime_1;
1698 uint32 m_uCycleTimeUs;
1700 uint32 m_uCycleTimeNs;
1702 uint8 m_uOversampling;
1719 real64 m_rPausedEnd;
1747 ECalcMoveResult m_eSegMoveResult;
1769 real64 m_rVmaxSetup;
1773 real64 m_rVmaxLimit;
1811 uint64 m_uTickCount;
1814 uint64 m_uTargetTicks;
1816 uint64 m_uStartTicks;
1818 uint64 m_uStartTicks_;
1820 uint32 m_uBusTicksPerAxisTick;
1824 uint16 m_uIterCount;
1826 uint16 m_uIterCountMax;
1828 uint16 m_uStopAliveDelta;
1830 uint16 m_uStopAliveDeltaMax;
1832 int16 m_iStoppingState;
1834 real64 m_rStoppingJerk;
1858 bool m_bMoveSafeMin;
1860 real64 m_rMoveSafeMin;
1862 real64 m_rMoveSafeFact1;
1864 real64 m_rMoveSafeFact2;
1871 eFlgBacklashCompensationRequired = 0x00000001,
1882 #ifdef INOS_SAFETY_SUPPORT
1885 eSLSReduceAbsolute = 0,
1886 eSLSReducePercent = 1,
1887 eSLSReduceFixed = 2,
1889 ESLSType m_eSLSType;
1898 ESafetyFunction m_eSafetyFunction;
1900 uint8 m_uSafetyType;
1902 real64 m_rSafetyLimit;
1904 uint32 m_uSafetyDelay;
1908 CINOSMapping* m_pMapping;
1910 uint32 m_uMappingIndex;
1912 static char m_cStateCombo[494];