763 const char* GetName();
765 const char* GetType();
767 static uint32 GetVersion();
769 #ifndef INOS_RAMP_DLL
770 static CINOSBaseRamp* GetRamp(
const char* apAxisName,
const char* apRampType);
779 eFlgMoveNone= 0x00000000,
780 eFlgMoveWithoutDec1 = 0x00000001,
781 eFlgMoveWithoutDec2 = 0x00000002,
782 eFlgMoveWithoutDec3 = 0x00000004
787 virtual bool Move(real64 arPosition,
SINOSRampParam* apParam = 0);
792 virtual bool Move(real64 arPosition, real64 arSave1, real64 arSave2,
796 virtual bool MoveApp(real64 arPosition, real64 arPositionVel, real64 arVelocity,
800 virtual bool MoveDep(real64 arPosition, real64 arPositionVel, real64 arVelocity,
804 virtual bool Endless(
bool abPositive =
true,
SINOSRampParam* apParam = 0);
826 virtual real64 GetMoveTime(real64 arPosition, real64 arDelta = REAL64(0.0),
829 virtual real64 GetAccelerationTime(real64 arPosition, real64 arDelta = REAL64(0.0),
832 virtual real64 GetConstTime(real64 arPosition, real64 arDelta = REAL64(0.0),
835 virtual real64 GetDecelerationTime(real64 arPosition, real64 arDelta = REAL64(0.0),
839 virtual real64 GetMoveTime(real64 arStartPosition, real64 arEndPosition,
843 virtual real64 GetAccelerationTime(real64 arStartPosition, real64 arEndPosition,
846 virtual real64 GetConstTime(real64 arStartPosition, real64 arEndPosition,
849 virtual real64 GetDecelerationTime(real64 arStartPosition, real64 arEndPosition,
853 virtual real64 GetMoveTime(real64 arStartPosition, real64 arEndPosition,
854 real64 arDelta, real64& arDeltaTime,
SINOSRampParam* apParam = 0);
858 virtual real64 GetMoveAppTime(real64 arPosition, real64 arPositionVel,
859 real64 arVelocity, real64 arDelta = REAL64(0.0),
SINOSRampParam* apParam = 0);
861 virtual real64 GetMoveAppTime(real64 arStartPosition, real64 arEndPosition,
862 real64 arPositionVel, real64 arVelocity, real64 arDelta,
SINOSRampParam* apParam = 0);
864 virtual real64 GetMoveDepTime(real64 arPosition, real64 arPositionVel,
865 real64 arVelocity, real64 arDelta = REAL64(0.0),
SINOSRampParam* apParam = 0);
867 virtual real64 GetMoveDepTime(real64 arStartPosition, real64 arEndPosition,
868 real64 arPositionVel, real64 arVelocity, real64 arDelta,
SINOSRampParam* apParam = 0);
870 virtual real64 GetMoveDist(real64 arTime,
SINOSRampParam* apParam = 0);
872 virtual real64 GetMoveDist(real64 arPosition, real64 arTime,
875 virtual real64 GetMoveDist(real64 arStartPosition, real64 arEndPosition,
879 virtual uint64 GetStartTicks(real64 arDelta);
881 virtual uint64 GetTargetTicks()
883 {
return inos_atomic_gettickcount(&m_uTargetTicks);};
884 virtual uint64 GetTargetTicks(real64 arDelta);
889 virtual uint32 SegBegin(real64 arSlowMotion = REAL64(1.0), real64 arStartVelocity = REAL64(0.0));
891 virtual uint32 SegBegin(real64 arSlowMotion, real64 arStartPosition, real64 arStartVelocity);
893 virtual uint32 SegMove(real64 arPosition, real64 arVelocity = REAL64(0.0),
894 SINOSRampParam* apParam = 0, real64 arAcceleration = REAL64(0.0), real64 arDuration = REAL64(-1.0));
899 virtual uint32 SegMoveResult()
901 {
return m_eSegMoveResult;};
902 virtual uint32 SegConst(real64 arPosition);
904 virtual uint32 SegPos(real64 arTime);
906 virtual uint32 SegPosSetTime(real64 arTime);
908 virtual uint32 SegVelocity(real64 arVelocity,
SINOSRampParam* apParam = 0);
910 virtual real64 SegTime(
bool abRoundedtoCycleTime=
true);
912 virtual uint32 GetSegEnd (real64& arS);
914 virtual void SegJobMustFitInCycle (
bool abMustFitInCycle);
916 virtual uint32 SegRun();
918 virtual CINOSRampJob* GetSegJob()
919 {
return m_pSegJob;};
923 virtual void Pull(real64 arS, real64 arV, real64 arA, real64 arJ);
939 virtual void FlushPull();
946 { ClrFlag(DF_INOS_BASE_RAMP_FLAG_ENABLED);};
952 virtual bool StopLive(real64 arSlowMotion = 1.0,
SINOSRampParam* apParam = 0);
954 virtual bool StopLiveDelta(real64 arDelta, real64 arSlowMotion = 1.0,
SINOSRampParam* apParam = 0);
956 virtual bool Stop(real64 arPosition,
SINOSRampParam* apParam = 0);
962 virtual bool Break(real64 arPosition,
SINOSRampParam* apParam = 0);
965 virtual bool EmergencyStop();
967 virtual bool EmergencyStop(real64 arPosition,
SINOSRampParam* apParam,
bool abPosValid =
true);
969 virtual void EmergencyStopLive();
978 eFlgCmdNone = 0x00000000,
979 eFlgCmdPeak = 0x00000001
982 virtual void SetCmdFlags(uint32 auFlags);
984 ICACHE
virtual void SetCmdPosition(real64 arPosition);
986 ICACHE
virtual void GetCmdPosition(real64& arPosition);
988 virtual void SetCmdVelocity(real64 arVelocity);
990 virtual void GetCmdVelocity(real64& arVelocity, ECmdFlags aeFlags = eFlgCmdNone);
992 virtual void SetCmdAcceleration(real64 arAcceleration);
994 virtual void GetCmdAcceleration(real64& arAcceleration, ECmdFlags aeFlags = eFlgCmdNone);
996 virtual void SetCmdDeceleration(real64 arDeceleration);
998 virtual void GetCmdDeceleration(real64& arDeceleration, ECmdFlags aeFlags = eFlgCmdNone);
1000 virtual void SetCmdCruiseleration(real64 arCruiseleration);
1002 virtual void GetCmdCruiseleration(real64& arCruiseleration);
1004 virtual void SetCmdJerk(real64 arJerk, uint32 auNumber = DF_INOS_RAMP_JERK_ALL);
1006 virtual void GetCmdJerk(real64& arJerk, uint32 auNumber = 0);
1008 virtual void SetCmdCruiseJerk(real64 arCruiseJerk);
1010 virtual void GetCmdCruiseJerk(real64& arCruiseJerk);
1012 virtual void GetCmdRealJerk(real64& arJerk, uint32 auNumber = 0);
1014 virtual void SetCmdSlowMotion(real64 arSlowMotion,
bool abUpdate =
false);
1016 virtual void SetCmdSlowMotion(real64 arSlowMotion,
bool abUpdate,
bool abStopping);
1018 virtual void GetCmdSlowMotion(real64& arSlowMotion,
SINOSRampParam* apParam = 0);
1020 virtual void GetActSlowMotion(real64& arSlowMotion,
SINOSRampParam* apParam = 0);
1022 #ifdef INOS_SAFETY_SUPPORT
1023 virtual void GetSafetySlowMotion(real64& arSlowMotion,
SINOSRampParam* apParam = 0);
1026 virtual void SetCmdRelaxTime(real64 arRelaxTime);
1028 virtual void GetCmdRelaxTime(real64& arRelaxTime);
1030 virtual void SetEmgDeceleration(real64 arDeceleration);
1032 virtual void GetEmgDeceleration(real64& arDeceleration);
1034 virtual void SetEmgJerk(real64 arJerk);
1036 virtual void GetEmgJerk(real64& arJerk);
1039 { *m_pParam = *apParam; };
1042 {
return m_pParam; };
1044 ICACHE
virtual void SetActPosition(real64 arPosition);
1046 ICACHE
virtual void AdjActPosition(real64 arPosition);
1048 ICACHE
virtual void GetActPosition(real64& arPosition);
1050 ICACHE
virtual void GetActPosition(real64& arPosition, uint64 auTicks);
1052 virtual void GetStopPosition(real64& arPosition,
SINOSRampParam* apParam);
1054 virtual void GetBgnPosition(real64& arPosition)
1055 { arPosition = m_rSbgn;};
1057 virtual void SetActVelocity(real64 arVelocity);
1059 virtual void GetActVelocity(real64& arVelocity);
1061 virtual void SetActAcceleration(real64 arAcceleration);
1063 virtual void GetActAcceleration(real64& arAcceleration);
1065 virtual void SetActJerk(real64 arJerk);
1067 virtual void GetActJerk(real64& arJerk);
1069 virtual void GetActSVAJ(
SINOSRampData& arData,
bool abIrqSafe =
true);
1071 virtual void AdjActTime(real64 arDelta);
1073 virtual void SetMinPosition(real64 arPosition);
1075 virtual void GetMinPosition(real64& apPosition)
const;
1077 virtual void SetMaxPosition(real64 arPosition);
1079 virtual void GetMaxPosition(real64& arPosition)
const;
1081 virtual bool CheckPosition(real64& arPosition,
bool abIgnoreMapping =
false,
SINOSRampParam* apParam =
nullptr);
1083 virtual void SetMaxVelocity(real64 arVelocity);
1085 virtual void GetMaxVelocity(real64& arVelocity, uint32 auFlags = eMaxVelocityNone);
1087 virtual void SetMaxSetupVelocity(real64 arVelocity);
1089 virtual void GetMaxSetupVelocity(real64& arVelocity);
1091 virtual void SetMaxInitVelocity(real64 arVelocity);
1093 virtual void GetMaxInitVelocity(real64& arVelocity);
1095 virtual void SetMinVelocity(real64 arVelocity);
1097 virtual void GetMinVelocity(real64& arVelocity);
1099 virtual void SetTrqVelocity(real64 arVelocity);
1101 virtual void GetTrqVelocity(real64& arVelocity);
1103 virtual void AdjustMinMaxValues (real64 arFactor);
1105 virtual void SetMinAcceleration(real64 arAcceleration);
1107 virtual void GetMinAcceleration(real64& arAcceleration);
1109 virtual void SetMaxAcceleration(real64 arAcceleration);
1111 virtual void GetMaxAcceleration(real64& arAcceleration);
1113 virtual void SetMaxAccelerationPull(real64 arAcceleration);
1115 virtual void GetMaxAccelerationPull(real64& arAcceleration);
1117 virtual void SetTrqAcceleration(real64 arAcceleration);
1119 virtual void GetTrqAcceleration(real64& arAcceleration);
1121 virtual void SetMinDeceleration(real64 arDeceleration);
1123 virtual void GetMinDeceleration(real64& arDeceleration);
1125 virtual void SetMaxDeceleration(real64 arDeceleration);
1127 virtual void GetMaxDeceleration(real64& arDeceleration);
1129 virtual void SetTrqDeceleration(real64 arDeceleration);
1131 virtual void GetTrqDeceleration(real64& arDeceleration);
1133 virtual void SetMinCruiseleration(real64 arCruiseleration);
1135 virtual void GetMinCruiseleration(real64& arCruiseleration);
1137 virtual void SetMaxCruiseleration(real64 arCruiseleration);
1139 virtual void GetMaxCruiseleration(real64& arCruiseleration);
1141 virtual void SetMinJerk(real64 arJerk);
1143 virtual void GetMinJerk(real64& arJerk);
1145 virtual void SetMaxJerk(real64 arJerk);
1147 virtual void GetMaxJerk(real64& arJerk);
1150 virtual void GetCycleTime(real64& arCycleTime);
1152 virtual void SetCycleTime(real64 arCycleTime);
1154 virtual uint8 GetOversampling();
1156 virtual void SetOversampling(uint8 auOversampling);
1158 virtual void GetCycleTimeUs(uint32& auCycleTime)
1159 { auCycleTime = m_uCycleTimeUs;};
1161 virtual void GetCycleTimeNs(uint32& auCycleTime)
1162 { auCycleTime = m_uCycleTimeNs;};
1164 virtual const char* GetUnit();
1166 virtual void SetUnit(
const char* apUnit);
1168 #ifndef INOS_RAMP_DLL
1169 virtual uint32 GetCharacteristics();
1171 virtual void SetCharacteristics(uint32 auCharacteristics);
1173 virtual uint8 GetTypeChar() {
return m_uTypeChar;};
1175 virtual void SetTypeChar(uint8 auTypeChar) {m_uTypeChar = auTypeChar;};
1177 virtual uint32 GetParam(
const char* apName, real64& arResult);
1179 virtual volatile real64* GetParamAdr(
const char* apName);
1181 virtual uint32 SetParam(
const char* apName, real64 arValue);
1185 void SetFlag(uint32 auFlag)
1188 void ClrFlag(uint32 auFlag)
1192 {
return m_uFlag & m_uFlagEnb;};
1194 void EnbFlag(uint32 auFlag)
1195 {
INOS_OR(m_uFlagEnb, auFlag);};
1197 void DisFlag(uint32 auFlag)
1200 ICACHE
void SetState(uint32 auState)
1205 if (m_uState == DF_INOS_RAMP_STATE_PEACE) {
1209 m_pActParam =
nullptr;
1213 ICACHE uint32 GetState()
1214 {
return m_uState;};
1216 virtual uint32 GetError();
1218 virtual uint64 GetErrorEx();
1220 virtual uint32 GetWarning();
1222 virtual uint64 GetWarningEx();
1224 virtual void AcceptError(uint32 auError=0xffffffff);
1226 virtual void AcceptWarning(uint32 auWarning=0xffffffff);
1229 ICACHE
virtual void GetS(real64& arS);
1231 ICACHE
virtual void GetSV(real64& arS, real64& arV);
1233 ICACHE
virtual void GetSVA(real64& arS, real64& arV, real64& arA);
1235 ICACHE
virtual void GetSVAJ(real64& arS, real64& arV, real64& arA, real64& arJ);
1239 virtual void GetData (
SINOSRampDataEx* apData,
bool abSingleSample=
false);
1242 #ifndef INOS_RAMP_DLL
1254 void EnableCache(uint32 auSize = 32);
1256 CINOSRampCache* EnableCache(CINOSRampCache* apCache);
1258 CINOSRampCache* DisableCache();
1260 void ReEnableCache();
1268 void SetEpsilon(real64 arEpsilon);
1270 void GetEpsilon(real64& arEpsilon)
1271 {arEpsilon = m_rEpsilon;};
1273 void SetCacheEpsilon(real64 arEpsilon);
1280 #ifndef INOS_RAMP_DLL
1284 virtual CINCOObject* GetRegister(
const char* apName =
"Ramp");
1286 void RegisterFlags(CINCOObject* apParent, uint32* auBase);
1296 virtual void SetMoveSafeMin(real64 arMin, real64 arFact1=REAL64(0.0),
1297 real64 arFact2=REAL64(0.0));
1300 virtual void ResetMoveSafeMin();
1305 void SetMapping(CINOSMapping* apMapping, uint32 auIndex)
1306 { m_pMapping = apMapping; m_uMappingIndex = auIndex;};
1309 { m_pMapping = 0; m_uMappingIndex = 0;};
1314 void EnableSetupMode();
1316 void DisableSetupMode();
1318 bool CheckSetupMode();
1327 if (m_rAmaxPull != REAL64(0.0))
1328 rAmax = m_rAmaxPull;
1332 real64 rVzero = rAmax * m_rCycleTime;
1334 return (m_pFstData == 0) && ((m_Act->
m_rV > rVzero) || (m_Act->
m_rV < -rVzero));
1359 {
return m_uCoreId; };
1363 friend class CINOSMapping;
1364 friend class CINOSShape;
1367 friend class CINOSBaseRampTest;
1369 friend class CINOSRemoteControlWorker;
1370 friend void _INI_0400_CINOSBaseRamp();
1374 virtual const char* GetStateText();
1376 virtual CINOSRampJob* iMove(real64 arSbgn, real64 arSend,
bool abReturnError,
1379 virtual CINOSRampJob* iMove(real64 arPosition, real64 arSave1, real64 arSave2,
1382 virtual CINOSRampJob* iMoveApp(real64 arSbgn, real64 arSend, real64 arSvel,
1383 real64 arVelocity,
bool abReturnError,
SINOSRampParam* apParam, EMoveFlags aeFlags);
1385 virtual CINOSRampJob* iMoveDep(real64 arSbgn, real64 arSend, real64 arSvel,
1395 enum ECalcMoveResult {
1397 eClcMoveResAdjusted = 1,
1398 eClcMoveResShrinked = 2,
1399 eClcMoveResFailed = 3,
1402 virtual ECalcMoveResult CalcMove(real64 arSlen,
SINOSRampParam* apParam, CINOSRampSegTra*& apSegAcc,
1403 CINOSRampSegCns*& apSegCns, CINOSRampSegTra*& apSegDec, real64 arVbgn = REAL64(0.0),
1404 real64 arVend = REAL64(0.0), real64 arAbgn = REAL64(0.0),
1405 real64 arAend = REAL64(0.0), real64 arDuration = REAL64(-1.0));
1408 virtual void CalcMoveApp(real64 arS, real64 arSred, real64 arVred,
1409 SINOSRampParam* apParam, CINOSRampSegTra*& apAcc, CINOSRampSegCns*& apCns,
1410 CINOSRampSegTra*& apDec1, CINOSRampSegCns*& apDec2, CINOSRampSegTra*& apDec3);
1412 virtual void CalcMoveDep(real64 arS, real64 arSred, real64 arVred,
1413 SINOSRampParam* apParam, CINOSRampSegTra*& apAcc1, CINOSRampSegCns*& apAcc2,
1414 CINOSRampSegTra*& apAcc3, CINOSRampSegCns*& apCns, CINOSRampSegTra*& apDec);
1416 virtual bool CalcStop(uint32 auNxtState,
SINOSRampParam* apParam,
bool abEmergency=
false);
1418 virtual bool CalcStopLive(uint32 auNxtState,
SINOSRampParam* apParam,
bool abEmergency=
false);
1420 virtual bool CalcStop(real64 arS, uint32 auNxtState,
SINOSRampParam* apParam,
bool abEmergency=
false);
1423 virtual real64 CalcEscape(real64 arSlen,
SINOSRampParam* apParam);
1425 virtual bool iCalcApp(real64 arS, real64 arSred, real64 arVred,
SINOSRampParam* apParam);
1428 virtual void iStopping();
1431 enum ECalcSegTraType {
1432 eClcSegTraCompatible = 0,
1433 eClcSegTraAccelerate = 1,
1434 eClcSegTraDecelerate = 2,
1435 eClcSegTraMiddle = 3
1438 virtual CINOSRampSegTra* CalcSegTra(
1443 CINOSRampSegTra* apResult=0,
1444 real64 arJb=REAL64(-1.0),
1445 real64 arJe=REAL64(-1.0),
1446 ECalcSegTraType aeType = eClcSegTraCompatible
1449 virtual void CalcSegApp(
1454 CINOSRampSegTra*& apResult1,
1455 CINOSRampSegCns*& apResult2,
1456 CINOSRampSegTra*& apResult3,
1457 uint32 auMoveInMove = 0
1459 virtual void CalcSegDep(
1464 CINOSRampSegTra*& apResult1,
1465 CINOSRampSegCns*& apResult2,
1466 CINOSRampSegTra*& apResult3
1469 CINOSRampSegCns* CalcSegCns(
1472 CINOSRampSegCns* aResult=0
1475 CINOSRampSegPos* CalcSegPos(
1478 CINOSRampSegPos* aResult=0
1481 bool StartJob(CINOSRampJob* apJob);
1483 bool ReleaseJob(CINOSRampJob* apJob);
1487 CINOSRampJob* SwitchJob(CINOSRampJob* apJob, uint32 auNxtState,
1488 uint32 auBusTicks,
bool bLookAhead =
false);
1490 CINOSRampJob* GetActJob(
bool abIncRefCounter =
true);
1492 real64 RoundUpToCycleTime(real64 arTime);
1494 real64 RoundToCycleTime(real64 arTime);
1496 uint64 RoundUpToBusTicks(real64 arTime);
1498 void SetBusTicksPerAxisTick(uint32 auBusTicksPerAxisTick)
1500 { m_uBusTicksPerAxisTick = auBusTicksPerAxisTick; };
1511 bool IsGreater(real64 arA, real64 arB,
bool bPos);
1514 bool Enter(uint32 auState,
bool abEqual=
true);
1516 bool Exit(
bool abExitCode);
1522 bool Sign(real64& arValue)
1524 {
return (*((uint64*)&arValue)&0x8000000000000000LL) ? true :
false;};
1546 #ifdef INOS_SAFETY_SUPPORT
1548 virtual void SetSafetyFunction(ESafetyFunction auFunction, real64 arLimit, uint32 auDelay,
1551 virtual void SetSafetyFunction(ESafetyFunction auFunction);
1553 virtual real64 CalcSlsLimit(real64 arSlsLimit);
1555 void SetSLSVmax(real64 arSLSVmax)
1556 { m_rSLSVmax = arSLSVmax; m_rSLSValue = arSLSVmax; m_eSLSType = eSLSReduceFixed; };
1559 #if defined(INOS_AXIS_EXTENSION_SUPPORT)
1561 void AddExtension(SINOSParamSetExtension* apExtension);
1563 void RemoveExtension(
const char* apName);
1566 SINOSParamSetExtension* GetParamSetExtension(uint32 auExtensionId)
1576 SINOSParamSetExtension* ext = act->m_pExtension;
1580 if (ext->m_uId == auExtensionId) {
1595 void iCoreMismatchError();
1597 void iCoreMismatchWarning();
1616 volatile uint32 m_uAlive;
1618 CINOSRampJob* m_pActJob;
1620 CINOSRampJob* m_pNxtJob;
1622 CINOSRampJob* m_pBrkJob;
1624 CINOSRampJob* m_pSegJob;
1626 CINOSRampSegPos* m_pSegPosLast;
1628 CINOSRampCache* m_pCache;
1632 bool m_bSetupModeOk;
1642 #ifndef INOS_RAMP_DLL
1643 CINCOObject* m_pRegister;
1645 CINCOObject* m_pCmd;
1647 CINCOObject* m_pAct;
1649 CINCOObject* m_pMax;
1651 CINCOObject* m_pProp;
1653 CINCOObject* m_pError;
1655 CINCOObject* m_pWarning;
1657 CINCOObject* m_pFlag;
1659 CINCOObject* m_pFlagEnb;
1661 uint32 m_uCharacteristics;
1666 const char* m_pType;
1675 real64 m_rCycleTime;
1677 real64 m_rCycleTimeOversampled;
1679 real64 m_rCycleTime_1;
1681 uint32 m_uCycleTimeUs;
1683 uint32 m_uCycleTimeNs;
1685 uint8 m_uOversampling;
1702 real64 m_rPausedEnd;
1730 ECalcMoveResult m_eSegMoveResult;
1752 real64 m_rVmaxSetup;
1756 real64 m_rVmaxLimit;
1794 uint64 m_uTickCount;
1797 uint64 m_uTargetTicks;
1799 uint64 m_uStartTicks;
1801 uint64 m_uStartTicks_;
1803 uint32 m_uBusTicksPerAxisTick;
1807 uint16 m_uIterCount;
1809 uint16 m_uIterCountMax;
1811 uint16 m_uStopAliveDelta;
1813 uint16 m_uStopAliveDeltaMax;
1815 int16 m_iStoppingState;
1817 real64 m_rStoppingJerk;
1841 bool m_bMoveSafeMin;
1843 real64 m_rMoveSafeMin;
1845 real64 m_rMoveSafeFact1;
1847 real64 m_rMoveSafeFact2;
1854 eFlgBacklashCompensationRequired = 0x00000001,
1865 #ifdef INOS_SAFETY_SUPPORT
1868 eSLSReduceAbsolute = 0,
1869 eSLSReducePercent = 1,
1870 eSLSReduceFixed = 2,
1872 ESLSType m_eSLSType;
1881 ESafetyFunction m_eSafetyFunction;
1883 uint8 m_uSafetyType;
1885 real64 m_rSafetyLimit;
1887 uint32 m_uSafetyDelay;
1891 CINOSMapping* m_pMapping;
1893 uint32 m_uMappingIndex;
1895 static char m_cStateCombo[494];