29 #ifndef INC_CINOSBASEAXIS_H
30 #define INC_CINOSBASEAXIS_H
36 #define DF_INOS_BASE_AXIS_DBT "INOS-BASE-AXIS" // db table name
39 #define DF_INOS_MAX_AXIS 512 // max. number of allowed axis
41 #define DF_INOS_MAX_AXIS 256 // max. number of allowed axis
46 #define DF_INOS_AXIS_STATE_DISABLED -1 // static state 'disabled'
47 #define DF_INOS_AXIS_STATE_UNDEFINED 0 // static state 'undefined'
48 #define DF_INOS_AXIS_STATE_OFF 0 // static state 'off', same as 'undefined'
49 #define DF_INOS_AXIS_STATE_ACTIVE 1 // static state 'active'
50 #define DF_INOS_AXIS_STATE_READY 2 // static state 'ready'
51 #define DF_INOS_AXIS_STATE_PEACE 2 // static state 'ready'
52 #define DF_INOS_AXIS_STATE_PULL 3 // static state 'pull'
53 #define DF_INOS_AXIS_STATE_BREAK 4 // static state 'break'
54 #define DF_INOS_AXIS_STATE_COUPLED 5 // static state 'coupled'
55 #define DF_INOS_AXIS_STATE_FORCE 6 // static state 'force'
56 #define DF_INOS_AXIS_STATE_ACTIVATING 8 // dynamic state 'activating'
57 #define DF_INOS_AXIS_STATE_INACTIVATING 9 // dynamic state 'inactivating'
58 #define DF_INOS_AXIS_STATE_SYNCING 10 // dynamic state 'syncing'
59 #define DF_INOS_AXIS_STATE_MOVING 11 // dynamic state 'moving'
60 #define DF_INOS_AXIS_STATE_ENDLESS 12 // dynamic state 'endless'
61 #define DF_INOS_AXIS_STATE_TOGGLE 13 // dynamic state 'toggle'
62 #define DF_INOS_AXIS_STATE_STOPPING 14 // dynamic state 'stopping'
63 #define DF_INOS_AXIS_STATE_BREAKING 15 // dynamic state 'breaking'
64 #define DF_INOS_AXIS_STATE_EMSTOPPING 16 // dynamic state 'emergency stopping'
65 #define DF_INOS_AXIS_STATE_MOVINGEX 17 // dynamic state 'moving ex'
66 #define DF_INOS_AXIS_STATE_CURSOR 18 // dynamic state 'cursor'
67 #define DF_INOS_AXIS_STATE_TRACK 19 // dynamic state 'track'
68 #define DF_INOS_AXIS_STATE_MOVINGAPP 20 // dynamic state 'movingapp'
69 #define DF_INOS_AXIS_STATE_MOVINGDEP 21 // dynamic state 'movingapp'
70 #define DF_INOS_AXIS_STATE_RELAXING 22 // dynamic state 'relaxing'
71 #define DF_INOS_AXIS_STATE_UMOVE 23 // dynamic state 'micromove' => see also DF_INOS_CONTROL_SUBSTATE_ACTIVE_UMOVE
72 #define DF_INOS_AXIS_STATE_SEARCHING 24 // dynamic state 'searching touch down'
73 #define DF_INOS_AXIS_STATE_DEPARTING 25 // dynamic state 'departing from touch down'
74 #define DF_INOS_AXIS_STATES 27 // number of states
78 #define DF_INOS_AXIS_SUBSTATE_TRACK_FOLLOW 0 // track mode 'follow'
79 #define DF_INOS_AXIS_SUBSTATE_TRACK_KEEP 1 // track mode 'keep'
83 #define DF_INOS_AXIS_CMD_ACTIVATE 0x00000001 // command 'Activate'
84 #define DF_INOS_AXIS_CMD_INACTIVATE 0x00000002 // command 'InActivate'
85 #define DF_INOS_AXIS_CMD_SYNC 0x00000004 // command 'Sync'
86 #define DF_INOS_AXIS_CMD_MOVE 0x00000008 // command 'Move'
87 #define DF_INOS_AXIS_CMD_ENDLESS 0x00000010 // command 'Endless'
88 #define DF_INOS_AXIS_CMD_STOP 0x00000020 // command 'Stop'
89 #define DF_INOS_AXIS_CMD_BREAK 0x00000040 // command 'Break'
90 #define DF_INOS_AXIS_CMD_CONTINUE 0x00000080 // command 'Continue'
91 #define DF_INOS_AXIS_CMD_EMSTOP 0x00000100 // command 'EmergencyStop'
92 #define DF_INOS_AXIS_CMD_UPDATE 0x00000200 // command 'Update'
93 #define DF_INOS_AXIS_CMD_TOGGLE 0x00000400 // command 'Toggle'
94 #define DF_INOS_AXIS_CMD_MOVEEX 0x00002000 // command 'MoveEx'
95 #define DF_INOS_AXIS_CMD_HANDLE_CACHE 0x00004000 // commands 'Enable,Disable,FlushCache'
96 #define DF_INOS_AXIS_CMD_CURSOR 0x00008000 // command 'Cursor'
97 #define DF_INOS_AXIS_CMD_TRACK 0x00010000 // command 'Track'
98 #define DF_INOS_AXIS_CMD_MOVESEG 0x00020000 // command 'Seg...'
99 #define DF_INOS_AXIS_CMD_COUPLING 0x00040000 // command 'couple'
100 #define DF_INOS_AXIS_CMD_PULL 0x00080000 // command 'pull'
101 #define DF_INOS_AXIS_CMD_MOVEAPP 0x00100000 // command 'MoveApp'
102 #define DF_INOS_AXIS_CMD_MOVEDEP 0x00200000 // command 'MoveDep'
103 #define DF_INOS_AXIS_CMD_ENABLE 0x00400000 // command 'Enable'
104 #define DF_INOS_AXIS_CMD_DISABLE 0x00800000 // command 'Disable'
105 #define DF_INOS_AXIS_CMD_COMMUTATE 0x01000000 // command 'Commutate'
106 #define DF_INOS_AXIS_CMD_MOVETIME 0x02000000 // command 'MoveTime'
107 #define DF_INOS_AXIS_CMD_RELAX 0x04000000 // command 'Relax'
111 #define ER_INOS_AXIS_REJECTED 0x00000001 // command rejected
112 #define ER_INOS_AXIS_FAILED 0x00000002 // command failed
113 #define ER_INOS_AXIS_POS_WINDOW 0x00000004 // positioning window failed
114 #define ER_INOS_AXIS_CPD_ERROR 0x00000008 // coupled axis on error
115 #define ER_INOS_AXIS_CPD_DELTA 0x00000010 // coupling max delta reached
116 #define ER_INOS_AXIS_CPD_CORR 0x00000020 // coupling max correction reached
117 #define ER_INOS_AXIS_COM_FAILED 0x00000040 // communication to foreign controller failed
118 #define ER_INOS_AXIS_RAMP_LIMIT 0x00000080 // ramp limits exceeded
119 #define ER_INOS_AXIS_REJECTED_SOS 0x00000100// command SOS (safe operating stop) rejected
120 #define ER_INOS_AXIS_PULL_UNDERRUN 0x00000200// pull underrun detected
121 #define ER_INOS_AXIS_SLS_VIOLATION 0x00000400// emergency stop due to upcoming SLS violation
122 #define ER_INOS_AXIS_SOS_VIOLATION 0x00000800// emergency stop due to upcoming SOS violation
123 #define ER_INOS_AXIS_CORE_MISMATCH 0x00001000// core mismatch
124 #define ER_INOS_AXIS_FORCE_CONTROL 0x00002000 // force control error pending
125 #define ER_INOS_AXIS_CONTROL 0x00004000 // control error pending
126 #define ER_INOS_AXIS_RAMP 0x00008000 // ramp error pending
127 #define ER_INOS_AXIS_HOOK 0x00010000 // registering hook failed
131 #define WR_INOS_AXIS_RAMP 0x00008000 // ramp warning pending
132 #define WR_INOS_AXIS_CONTROL 0x00004000 // control warning pending
133 #define WR_INOS_AXIS_IGNORED 0x00000001 // command ignored
134 #define WR_INOS_AXIS_CPD_CORR_IGNORED 0x00000002 // coupling correction ignored
135 #define WR_INOS_AXIS_COUPLED 0x00000008 // coupled axis has warning
136 #define WR_INOS_AXIS_EME_STOPPED 0x00000010 // the axis has been emergency stopped
140 #define DF_INOS_AXIS_FLAG_ZERO 0x00000001 // zero position after move
141 #define DF_INOS_AXIS_FLAG_NORM 0x00000002 // norm position after move
142 #define DF_INOS_AXIS_FLAG_INCR 0x00000004 // incremental moves
143 #define DF_INOS_AXIS_FLAG_SYNC 0x00000008 // live sync position
144 #define DF_INOS_AXIS_FLAG_EDONE 0x00000010 // early done
145 #define DF_INOS_AXIS_FLAG_AACC 0x00000020 // auto accept errors on activate
146 #define DF_INOS_AXIS_FLAG_CURL 0x00000040 // current limitation
147 #define DF_INOS_AXIS_FLAG_LSNCD 0x00000080 // limits only checked if synched
148 #define DF_INOS_AXIS_FLAG_DISMP 0x00000100 // mapping permanently disabled
149 #define DF_INOS_AXIS_FLAG_RNDNR 0x00000200 // axis has random number
150 #define DF_INOS_AXIS_FLAG_PWCL 0x00000400 // limits are checked in post write
151 #define DF_INOS_AXIS_FLAG_DSAP 0x00000800 // disable SetAct/SetRealPosition in case of synched
152 #define DF_INOS_AXIS_FLAG_SAFETY 0x00001000 // powered by Indel safety
153 #define DF_INOS_AXIS_FLAG_ESPULL 0x00002000 // emergency stop pull in case of an axis error
154 #define DF_INOS_AXIS_FLAG_IGNORE_CORE 0x00004000 // ignore core mismatch failure (should only be used in desperate situations)
155 #define DF_INOS_AXIS_FLAG_INPUT_SHAPING_ACTIVE 0x20000000 // temporary input shaping active
156 #define DF_INOS_AXIS_FLAG_WINDOW 0x40000000 // temporary position window active
157 #define DF_INOS_AXIS_FLAG_SNCD 0x80000000 // axis is synced
161 #define DF_INOS_AXIS_SYNC_NOADJ 0x00 // live sync with no move adjust
162 #define DF_INOS_AXIS_SYNC_ADJUST 0x01 // live sync with move adjust
163 #define DF_INOS_AXIS_SYNC_STOP 0x02 // live sync with stop at sync
171 #define DF_INOS_AXIS_NORM_AFTER 0x00
174 #define DF_INOS_AXIS_NORM_LIVE 0x01
177 #define DF_INOS_AXIS_NORM_POSITIVE 0x40
182 #define DF_INOS_AXIS_NORM_ROUND 0x80
188 #define DF_INOS_AXIS_NORM_MOVE_DIR_NO 0x00
193 #define DF_INOS_AXIS_NORM_MOVE_DIR_POS 0x01
198 #define DF_INOS_AXIS_NORM_MOVE_DIR_NEG 0x02
203 #define DF_INOS_AXIS_NORM_MOVE_DIR_SHORT 0x03
209 #define DF_INOS_AXIS_NORM_MOVE_DIR_SHORT_EX 0x04
216 #define DF_INOS_AXIS_SAFETY_EMGSTOP 0x00
221 #define DF_INOS_AXIS_SAFETY_AUTO 0x01
224 #define DF_INOS_AXIS_SAFETY_NONE 0x02
232 #define DF_INOS_AXIS_EMGT_STOP 0x00
238 #define DF_INOS_AXIS_EMGT_STOP_INACTIVATE 0x01
241 #define DF_INOS_AXIS_EMGT_INACTIVATE 0x02
245 #define DF_INOS_AXIS_EMGT_NONE 0x03
251 #define DF_INOS_AXIS_EMGT_STOP_POSITION 0x04
257 #define DF_INOS_AXIS_EMGT_STOP_POSITION_INACTIVATE 0x05
261 #define DF_PRECONFIGURED_EME_STOP_TYPE 0xffff // preconfigured (by dt2 or via inco variable) emergency stop type
265 #define DF_PRECONFIGURED_EME_STOP_POS_OR_STOP 0xfffe
266 #define DF_PRECONFIGURED_EME_STOP_DELAY 0xffff // preconfigured (by dt2 or via inco variable) emergency stop delay
272 #define DF_INOS_AXIS_PST_STANDARD 0x00000000
277 #define DF_INOS_AXIS_PST_WINDOW 0x00000001
283 #define DF_INOS_AXIS_PST_WINDOW_OPT 0x00000002
291 #define DF_INOS_BASE_AXIS_OPT_EARLY_DONE 0x00000001
298 #define DF_INOS_BASE_AXIS_OPT_AUTO_ACCEPT 0x00000002
302 #define DF_INOS_BASE_AXIS_OPT_LIMITS_IF_SNCD 0x00000004
307 #define DF_INOS_BASE_AXIS_OPT_MAPPING_DISABLED 0x00000008
312 #define DF_INOS_BASE_AXIS_OPT_NORM_ENABLED 0x00000010
317 #define DF_INOS_BASE_AXIS_OPT_CHECK_LIMITS 0x00000020
322 #define DF_INOS_BASE_AXIS_OPT_LIFETIME 0x00000040
327 #define DF_INOS_BASE_AXIS_OPT_SETPOS_DISABLED 0x00000080
332 #define DF_INOS_BASE_AXIS_OPT_EMGSTOP_PULL 0x00000100
335 #define DF_INOS_BASE_AXIS_OPT_FORCE_CONTROL 0x00000200
339 #define DF_INOS_BASE_AXIS_OPT_IGNORE_CORE 0x00000400
341 #if defined(INOS_MOTORCONFIG_LOAD_SUPPORT)
348 #define DF_INOS_BASE_AXIS_OPT_CPF_UNIQUE 0x00000800
353 #define DF_INOS_BASE_AXIS_LIMIT_S 0x00000001 // position limit of cmdS exceeded
354 #define DF_INOS_BASE_AXIS_LIMIT_V_OF_S 0x00000002 // velocity limit of cmdS exceeded
355 #define DF_INOS_BASE_AXIS_LIMIT_A_OF_S 0x00000004 // accelleration ity limit of cmdS exceeded
356 #define DF_INOS_BASE_AXIS_LIMIT_B_OF_S 0x00000008 // de-accelleration ity limit of cmdS exceeded
357 #define DF_INOS_BASE_AXIS_LIMIT_S_V_CONS 0x00000010 // consistency error between S and V
358 #define DF_INOS_BASE_AXIS_LIMIT_V 0x00000020 // velocity limit of cmdV exceeded
359 #define DF_INOS_BASE_AXIS_LIMIT_A_OF_V 0x00000040 // accelleration ity limit of cmdV exceeded
360 #define DF_INOS_BASE_AXIS_LIMIT_B_OF_V 0x00000080 // de-accelleration ity limit of cmdV exceeded
361 #define DF_INOS_BASE_AXIS_LIMIT_A 0x00000100 // accelleration ity limit of cmdA exceeded
362 #define DF_INOS_BASE_AXIS_LIMIT_B 0x00000200 // de-accelleration ity limit of cmdA exceeded
363 #define DF_INOS_BASE_AXIS_LIMIT_BRAKE 0x00000400 // axis cannot stop within bordes
364 #define DF_INOS_BASE_AXIS_LIMIT_J_OF_S 0x00000800 // jerk limit of cmdS exceeded
365 #define DF_INOS_BASE_AXIS_LIMIT_J_OF_V 0x00001000 // jerk limit of cmdV exceeded
366 #define DF_INOS_BASE_AXIS_LIMIT_J_OF_A 0x00002000 // jerk limit of cmdA exceeded
367 #define DF_INOS_BASE_AXIS_LIMIT_J 0x00004000 // jerk limit of cmdJ exceeded
377 #if defined(INOS_AXIS_EXTENSION_SUPPORT)
378 #include <cinosbaseaxisextension.h>
573 class CINOSMoveCache;
575 class CINOSLimitChecker;
582 class CINOSBaseAxisParamSet
588 virtual uint32 SetParam(
const char* apName, real64 arValue);
592 virtual uint32 GetParam(
const char* apName, real64& arResult);
599 virtual CINCOObject* GetRegister()
const;
604 {
return &m_pRamp->m_Param;};
606 #if defined(INOS_AXIS_EXTENSION_SUPPORT)
607 void AddExtension(SINOSParamSetExtension* apExtension);
610 void RemoveExtension(
const char* apName);
618 friend class CINOSShape;
625 CINOSBaseAxisParamSet& operator=(
const CINOSBaseAxisParamSet& aOther);
626 int operator < (CINOSBaseAxisParamSet& aSet)
const
627 {
return (strcmp(m_cName, aSet.m_cName)<0);}
628 int operator == (CINOSBaseAxisParamSet& aSet)
const
629 {
return (strcmp(m_cName, aSet.m_cName)==0);}
630 int operator < (
const char* apName)
const
631 {
return (strcmp(m_cName, apName)<0);}
632 int operator == (
const char* apName)
const
633 {
return (strcmp(m_cName, apName)==0);}
634 friend int operator == (CINOSBaseAxisParamSet& aSet1, CINOSBaseAxisParamSet& aSet2)
635 {
return (strcmp(aSet1.m_cName, aSet2.m_cName)==0);}
639 explicit CINOSBaseAxisParamSet(
const char* apName);
641 CINOSBaseAxisParamSet(
const CINOSBaseAxisParamSet& aOther);
646 virtual ~CINOSBaseAxisParamSet();
653 CINCOObject* m_pRegister;
661 uint32 m_uPosTimeout;
663 real64 m_rPosTolerance;
675 typedef real64 (*tpGetter)(
void* apVal);
677 struct SINOSBaseAxisHook;
716 if (auNumber < DF_INOS_MAX_AXIS)
717 return m_pAxis[auNumber];
726 static uint8 GetNumber(
const char* apAxisName);
736 virtual uint32
WaitTicks(uint32 auTicks = 1);
771 virtual uint32
Activate(
bool abCheckPos =
true,
bool abSimulatePos =
false,
772 bool abSimulateOut =
false,
bool abSimulateAct =
false,
814 virtual uint32
Sync(real64 arPosition,
const char* apParam,
824 virtual uint32
Sync(real64 arPosition, real64 arSyncPos,
836 virtual uint32
Sync(real64 arPosition, real64 arSyncPos,
847 virtual uint32
Sync(real64 arPosition, real64 arSyncPos,
857 virtual uint32
Sync(real64 arSyncPos,
const char* apParam, CINCOObject* apObject,
866 virtual uint32
Move(real64 arPosition,
885 virtual uint32
Move(real64 arPosition,
const char* apParam,
898 virtual uint32
MoveTime(real64 arPosition, real64 arTime,
bool abUseP5 =
true,
913 virtual uint32
MoveTime(real64 arPosition, real64 arTime,
bool abUseP5,
927 virtual uint32
MoveTime(real64 arPosition, real64 arTime,
bool abUseP5,
944 virtual uint32
Move(real64 arPosition, real64 arSafe1, real64 arSafe2,
961 virtual uint32
Move(real64 arPosition, real64 arSave1, real64 arSave2,
962 const char* apParam1,
const char* apParam2, real64 arPartner,
const char* apPartner,
975 virtual uint32
MoveApp(real64 arPosition, real64 arPositionVel, real64 arVelocity,
992 virtual uint32
MoveApp(real64 arPosition, real64 arPositionVel, real64 arVelocity,
1009 virtual uint32
MoveApp(real64 arPosition, real64 arPositionVel, real64 arVelocity,
1025 virtual uint32
MoveDep(real64 arPosition, real64 arPositionVel, real64 arVelocity,
1042 virtual uint32
MoveDep(real64 arPosition, real64 arPositionVel, real64 arVelocity,
1059 virtual uint32
MoveDep(real64 arPosition, real64 arPositionVel, real64 arVelocity,
1068 virtual uint32
Toggle(real64 arPosition1, real64 arPosition2);
1080 virtual uint32
ToggleSection(real64 arPos1Min, real64 arPos1Max,
1081 real64 arPos2Min, real64 arPos2Max, uint32 auDelayMin, uint32 auDelayMax);
1091 virtual uint32
Track(
const char* apVarName, real64 arFactor,
1092 uint32 auFilterLength, uint32 auDirection = 0);
1103 virtual uint32
Track(
const char* apVarName, real64 arFactor,
1104 uint32 auFilterLength, uint32 auDirection,
const char* apParam);
1115 virtual uint32
Track(
const char* apVarName, real64 arCmdValue,
1116 real64 arFactor, uint32 auFilterLength);
1129 virtual uint32
Endless(
bool abPositive =
true);
1147 virtual uint32
Endless(
bool abPositive,
const char* apParam,
1156 virtual uint32
Cursor(
bool abPositive =
true);
1164 virtual uint32
Cursor(real64 arPosition);
1173 virtual uint32
Cursor(
bool abPositive, uint32 auWaitTime);
1181 virtual uint32
Cursor(real64 arPosition, uint32 auWaitTime);
1191 virtual uint32
Cursor(
bool abPositive, uint32 auWaitTime,
1202 virtual uint32
Cursor(real64 arPosition, uint32 auWaitTime,
1214 virtual uint32
Cursor(
bool abPositive, uint32 auWaitTime,
1226 virtual uint32
Cursor(real64 arPosition, uint32 auWaitTime,
1238 virtual uint32
Cursor(
bool abPositive, uint32 auWaitTime,
1239 real64 arStep,
const char* apParam);
1250 virtual uint32
Cursor(real64 arbPosition, uint32 auWaitTime,
1251 real64 arStep,
const char* apParam);
1326 real64 arDelta,
const char* apParam);
1385 virtual real64
GetMoveTime(real64 arPosition,
const char* apParam);
1399 virtual real64
GetConstTime(real64 arPosition,
const char* apParam);
1413 virtual real64
GetMoveTime(real64 arPosition, real64 arDelta);
1427 virtual real64
GetConstTime(real64 arPosition, real64 arDelta);
1474 virtual real64
GetMoveTime(real64 arPosition, real64 arDelta,
const char* apParam);
1482 virtual real64
GetAccelerationTime(real64 arPosition, real64 arDelta,
const char* apParam);
1490 virtual real64
GetConstTime(real64 arPosition, real64 arDelta,
const char* apParam);
1498 virtual real64
GetDecelerationTime(real64 arPosition, real64 arDelta,
const char* apParam);
1507 virtual real64
GetMoveTime(real64 arStartPosition, real64 arEndPosition,
1527 virtual real64
GetConstTime(real64 arStartPosition, real64 arEndPosition,
1548 virtual real64
GetMoveTime(real64 arStartPosition, real64 arEndPosition,
1570 virtual real64
GetConstTime(real64 arStartPosition, real64 arEndPosition,
1592 virtual real64
GetMoveTime(real64 arStartPosition, real64 arEndPosition,
1593 real64 arDelta,
const char* apParam);
1604 real64 arDelta,
const char* apParam);
1614 virtual real64
GetConstTime(real64 arStartPosition, real64 arEndPosition,
1615 real64 arDelta,
const char* apParam);
1626 real64 arDelta,
const char* apParam);
1635 virtual real64
GetMoveAppTime(real64 arPosition, real64 arPositionVel,
1646 virtual real64
GetMoveAppTime(real64 arPosition, real64 arPositionVel,
1657 virtual real64
GetMoveAppTime(real64 arPosition, real64 arPositionVel,
1658 real64 arVelocity,
const char* apParam);
1668 virtual real64
GetMoveAppTime(real64 arPosition, real64 arPositionVel,
1669 real64 arVelocity, real64 arDelta);
1680 virtual real64
GetMoveAppTime(real64 arPosition, real64 arPositionVel,
1692 virtual real64
GetMoveAppTime(real64 arPosition, real64 arPositionVel,
1693 real64 arVelocity, real64 arDelta,
const char* apParam);
1704 virtual real64
GetMoveAppTime(real64 arStartPosition, real64 arEndPosition,
1705 real64 arPositionVel, real64 arVelocity, real64 arDelta);
1717 virtual real64
GetMoveAppTime(real64 arStartPosition, real64 arEndPosition,
1718 real64 arPositionVel, real64 arVelocity, real64 arDelta,
SINOSRampParam* apParam);
1730 virtual real64
GetMoveAppTime(real64 arStartPosition, real64 arEndPosition,
1731 real64 arPositionVel, real64 arVelocity, real64 arDelta,
const char* apParam);
1740 virtual real64
GetMoveDepTime(real64 arPosition, real64 arPositionVel,
1751 virtual real64
GetMoveDepTime(real64 arPosition, real64 arPositionVel,
1762 virtual real64
GetMoveDepTime(real64 arPosition, real64 arPositionVel,
1763 real64 arVelocity,
const char* apParam);
1773 virtual real64
GetMoveDepTime(real64 arPosition, real64 arPositionVel,
1774 real64 arVelocity, real64 arDelta);
1785 virtual real64
GetMoveDepTime(real64 arPosition, real64 arPositionVel,
1797 virtual real64
GetMoveDepTime(real64 arPosition, real64 arPositionVel,
1798 real64 arVelocity, real64 arDelta,
const char* apParam);
1809 virtual real64
GetMoveDepTime(real64 arStartPosition, real64 arEndPosition,
1810 real64 arPositionVel, real64 arVelocity, real64 arDelta);
1822 virtual real64
GetMoveDepTime(real64 arStartPosition, real64 arEndPosition,
1823 real64 arPositionVel, real64 arVelocity, real64 arDelta,
SINOSRampParam* apParam);
1835 virtual real64
GetMoveDepTime(real64 arStartPosition, real64 arEndPosition,
1836 real64 arPositionVel, real64 arVelocity, real64 arDelta,
const char* apParam);
1895 virtual int32
GetMoveTicks(real64 arPosition,
const char* apParam);
1909 virtual int32
GetConstTicks(real64 arPosition,
const char* apParam);
1923 virtual int32
GetMoveTicks(real64 arPosition, real64 arDelta);
1937 virtual int32
GetConstTicks(real64 arPosition, real64 arDelta);
1984 virtual int32
GetMoveTicks(real64 arPosition, real64 arDelta,
const char* apParam);
2000 virtual int32
GetConstTicks(real64 arPosition, real64 arDelta,
const char* apParam);
2017 virtual int32
GetMoveTicks(real64 arStartPosition, real64 arEndPosition,
2037 virtual int32
GetConstTicks(real64 arStartPosition, real64 arEndPosition,
2058 virtual int32
GetMoveTicks(real64 arStartPosition, real64 arEndPosition,
2080 virtual int32
GetConstTicks(real64 arStartPosition, real64 arEndPosition,
2102 virtual int32
GetMoveTicks(real64 arStartPosition, real64 arEndPosition,
2103 real64 arDelta,
const char* apParam);
2114 real64 arDelta,
const char* apParam);
2124 virtual int32
GetConstTicks(real64 arStartPosition, real64 arEndPosition,
2125 real64 arDelta,
const char* apParam);
2136 real64 arDelta,
const char* apParam);
2154 virtual real64
GetMoveDist(real64 arPosition, real64 arTime);
2169 virtual real64
GetMoveDist(real64 arPosition, real64 arTime,
2177 virtual real64
GetMoveDist(real64 arTime,
const char* apParam);
2185 virtual real64
GetMoveDist(real64 arPosition, real64 arTime,
2186 const char* apParam);
2193 virtual real64
GetMoveDist(real64 arPosition, uint32 auTicks);
2201 virtual real64
GetMoveDist(real64 arPosition, uint32 auTicks,
2210 virtual real64
GetMoveDist(real64 arPosition, uint32 auTicks,
2211 const char* apParam);
2220 virtual real64
GetMoveDist(real64 arStartPosition, real64 arEndPosition,
2231 virtual real64
GetMoveDist(real64 arStartPosition, real64 arEndPosition,
2242 virtual real64
GetMoveDist(real64 arStartPosition, real64 arEndPosition,
2243 real64 arTime,
const char* apParam);
2252 virtual real64
GetMoveDist(real64 arStartPosition, real64 arEndPosition,
2263 virtual real64
GetMoveDist(real64 arStartPosition, real64 arEndPosition,
2274 virtual real64
GetMoveDist(real64 arStartPosition, real64 arEndPosition,
2275 uint32 auTicks,
const char* apParam);
2297 virtual uint32
SegBegin(real64 arSlowMotion = REAL64(1.0), real64 arStartVelocity = REAL64(0.0));
2305 virtual uint32
SegBegin(real64 arSlowMotion, real64 arStartPosition, real64 arStartVelocity);
2312 virtual uint32
SegMove(real64 arPosition);
2328 virtual uint32
SegMove(real64 arPosition,
const char* apParam);
2336 virtual uint32
SegMove(real64 arPosition, real64 arVelocity);
2345 virtual uint32
SegMove(real64 arPosition, real64 arVelocity,
2355 virtual uint32
SegMove(real64 arPosition, real64 arVelocity,
2356 const char* apParam);
2362 virtual uint32
SegConst(real64 arPosition);
2368 virtual uint32
SegPos(real64 arTime);
2389 virtual uint32
SegVelocity(real64 arVelocity,
const char* apParam);
2424 virtual uint32
Pull(real64 arS, real64 arV, real64 arA, real64 arJ);
2510 virtual uint32
Stop(real64 arPosition,
const char* apParam,
2596 virtual uint32
Break(real64 arPosition,
const char* apParam,
2634 virtual uint32
EmergencyStop(uint16 auType = DF_PRECONFIGURED_EME_STOP_TYPE, uint16 auDelay = DF_PRECONFIGURED_EME_STOP_DELAY,
2653 virtual uint32
EmergencyStopLive(uint16 auType, uint16 auDelay = DF_PRECONFIGURED_EME_STOP_DELAY);
2668 virtual const char*
GetName();
2670 virtual const char* GetType();
2672 virtual const char* GetUnit();
2674 virtual uint32 GetCharacteristics();
2676 virtual uint8 GetNumber()
2679 virtual uint32 GetOptions()
2682 virtual char GetShort()
2684 {
return m_cShort[0];};
2685 virtual void SetShort(
char acShort)
2687 { m_cShort[0] = acShort;};
2688 virtual void SetPartner(
const char* apPartner);
2692 virtual void SetCmdPosition(real64 arPosition);
2694 virtual void SetPathPosition(real64 arPosition){};
2696 virtual void GetCmdPosition(real64& arPosition);
2698 virtual void SetCmdVelocity(real64 arVelocity);
2700 virtual void GetCmdVelocity(real64& arVelocity, CINOSBaseRamp::ECmdFlags aeFlags = CINOSBaseRamp::eFlgCmdNone);
2702 virtual void SetCmdAcceleration(real64 arAcceleration);
2704 virtual void GetCmdAcceleration(real64& arAcceleration, CINOSBaseRamp::ECmdFlags aeFlags = CINOSBaseRamp::eFlgCmdNone);
2706 virtual void SetCmdDeceleration(real64 arDeceleration);
2708 virtual void GetCmdDeceleration(real64& arDeceleration, CINOSBaseRamp::ECmdFlags aeFlags = CINOSBaseRamp::eFlgCmdNone);
2710 virtual void SetCmdCruiseleration(real64 arCruiseleration);
2712 virtual void GetCmdCruiseleration(real64& arCruiseleration);
2714 virtual void SetCmdJerk(real64 arJerk, uint32 auNumber = DF_INOS_RAMP_JERK_ALL);
2716 virtual void GetCmdJerk(real64& arJerk, uint32 auNumber = 0);
2718 virtual void SetCmdCruiseJerk(real64 arCruiseJerk);
2720 virtual void GetCmdCruiseJerk(real64& arCruiseJerk);
2722 virtual void GetCmdRealJerk(real64& arJerk, uint32 auNumber = 0);
2724 virtual void SetCmdSlowMotion(real64 arSlowMotion,
bool abUpdate =
false);
2726 virtual void GetCmdSlowMotion(real64& arSlowMotion,
const char* apParam = 0);
2728 virtual void GetActSlowMotion(real64& arSlowMotion,
const char* apParam = 0);
2730 virtual void SetCmdRelaxTime(real64 arRelaxTime);
2732 virtual void GetCmdRelaxTime(real64& arRelaxTime);
2734 virtual void SetEmgDeceleration(real64 arDeceleration);
2736 virtual void GetEmgDeceleration(real64& arDeceleration);
2739 virtual void SetEmgPosition(real64 arPosition);
2741 virtual void GetEmgPosition(real64& arPosition);
2770 virtual void GetActPosition(real64& arPosition,
bool abRamp =
true);
2781 if (m_uFlag & DF_INOS_AXIS_FLAG_NORM){
2793 virtual uint32 NrmActPosition(real64 arRange = REAL64(0.0),
bool abRound =
false);
2795 virtual void GetActVelocity(real64& arVelocity,
bool abMapped =
true);
2797 virtual void GetActAcceleration(real64& arAcceleration,
bool abRamp =
true);
2799 virtual void GetActJerk(real64& arJerk,
bool abRamp =
true);
2801 virtual uint32 AdjActTime(real64 arDelta);
2832 virtual void GetRealPosition(real64& arPosition,
bool abMapped =
true);
2834 virtual void GetRealVelocity(real64& arVelocity);
2836 virtual void GetRealAcceleration(real64& arAcceleration);
2838 virtual void GetRealJerk(real64& arJerk);
2840 virtual void GetActPosError(real64& arPosError)
2841 { arPosError = REAL64(0.0);};
2843 virtual void GetActVelocityError(real64& arVelocityError,
bool abFiltered =
false)
2844 { arVelocityError = REAL64(0.0);};
2846 virtual void GetUnitsPerInc(
double& adUnits);
2848 virtual void GetIncsPerUnit(
double& adIncs);
2850 virtual void SetMinPosition(real64 arPosition);
2852 virtual void GetMinPosition(real64& apPosition)
const;
2854 virtual void SetMaxPosition(real64 arPosition);
2856 virtual void GetMaxPosition(real64& arPosition)
const;
2858 virtual bool CheckPosition(real64& arPosition,
bool abIgnoreMapping =
false,
SINOSRampParam* apParam =
nullptr);
2860 virtual void SetMinVelocity(real64 arVelocity);
2862 virtual void SetMaxVelocity(real64 arVelocity);
2864 virtual void SetMaxSetupVelocity(real64 arVelocity);
2866 virtual void SetMaxInitVelocity(real64 arVelocity);
2868 virtual void GetMinVelocity(real64& arVelocity);
2870 virtual void GetMaxVelocity(real64& arVelocity, uint32 auFlags = eMaxVelocityNone);
2872 virtual void GetTrqVelocity(real64& arVelocity);
2874 virtual void GetMaxSetupVelocity(real64& arVelocity);
2876 virtual void GetMaxInitVelocity(real64& arVelocity);
2878 virtual void SetMinAcceleration(real64 arAcceleration);
2880 virtual void SetMaxAcceleration(real64 arAcceleration);
2882 virtual void SetMaxAccelerationPull(real64 arAcceleration);
2884 virtual void GetMinAcceleration(real64& arAcceleration);
2886 virtual void GetMaxAcceleration(real64& arAcceleration);
2888 virtual void GetMaxAccelerationPull(real64& arAcceleration);
2890 virtual void GetTrqAcceleration(real64& arAcceleration);
2892 virtual void SetMinDeceleration(real64 arDeceleration);
2894 virtual void SetMaxDeceleration(real64 arDeceleration);
2896 virtual void GetMinDeceleration(real64& arDeceleration);
2898 virtual void GetMaxDeceleration(real64& arDeceleration);
2900 virtual void GetTrqDeceleration(real64& arDeceleration);
2902 virtual void SetMinCruiseleration(real64 arCruiseleration);
2904 virtual void SetMaxCruiseleration(real64 arCruiseleration);
2906 virtual void GetMinCruiseleration(real64& arCruiseleration);
2908 virtual void GetMaxCruiseleration(real64& arCruiseleration);
2910 virtual void SetMinJerk(real64 arJerk);
2912 virtual void SetMaxJerk(real64 arJerk);
2914 virtual void GetMinJerk(real64& arJerk);
2916 virtual void GetMaxJerk(real64& arJerk);
2918 virtual void GetEpsilon(real64& arEpsilon);
2920 virtual void GetCycleTime(real64& arCycleTime,
bool abOversampled=
false);
2922 virtual void GetCycleTimeUs(uint32& auCycleTime);
2924 virtual void GetCycleTimeNs(uint32& auCycleTime);
2926 virtual uint8 GetOversampling();
2928 virtual uint16 GetCycleNumber();
2930 virtual uint16 GetCycleId();
2932 virtual void UpdateCycleId(uint16 auCycleId);
2934 virtual uint8 GetBusId();
2936 virtual uint32 SetParam(
const char* apName, real64 arValue);
2938 virtual uint32 SetParam(
const char* apName, uint64 auValue)
2940 {
return defVarNotFound;};
2941 virtual uint32 GetParam(
const char* apName, real64& arResult);
2943 virtual uint32 GetParam(
const char* apName, uint64& auResult)
2945 {
return defVarNotFound;};
2946 virtual volatile real64* GetParamAdr(
const char* apName);
2948 void SetFlag(uint32 auFlag)
2951 void ClrFlag(uint32 auFlag)
2955 {
return m_uFlag & m_uFlagEnb;};
2958 { ClrFlag(DF_INOS_AXIS_FLAG_INCR);};
2961 { SetFlag(DF_INOS_AXIS_FLAG_INCR);};
2963 virtual uint32 SetState(uint32 auState);
2965 virtual int32 GetState();
2967 virtual int32 GetState(uint32& auRampState);
2969 const char* GetStateText()
const;
2971 virtual bool IsBusy()
const;
2982 virtual uint32 GetError(
bool abResolveExternal =
false);
2984 virtual uint64 GetErrorEx(
bool abResolveExternal =
false);
2986 virtual uint32 GetError(uint32& auRampError,
bool abResolveExternal =
false);
2988 virtual uint64 GetErrorEx(uint64& auRampError,
bool abResolveExternal =
false);
2990 virtual uint32 GetErrorHook() {
return m_uErrorHook; };
2992 virtual bool IsErrorFatal()
2995 virtual uint32 GetWarning(
bool abResolveExternal =
false);
2997 virtual uint64 GetWarningEx(
bool abResolveExternal =
false);
2999 virtual uint32 GetWarning(uint32& auRampWarning,
bool abResolveExternal =
false);
3001 virtual uint64 GetWarningEx(uint64& auRampWarning,
bool abResolveExternal =
false);
3003 virtual uint32 GetLimitViolation() {
return m_uLimitViolation;};
3005 virtual void SetErrorMask(uint32 auMask) { m_uErrorMask = auMask;};
3007 virtual void SetWarningMask(uint32 auMask) { m_uWarningMask = auMask;};
3009 virtual void SetLimitViolation(uint32 auLimitViolation)
3010 { INOSOr(&m_uLimitViolation, auLimitViolation);};
3012 virtual uint32 GetErrorMask() {
return m_uErrorMask;};
3014 virtual uint32 GetWarningMask() {
return m_uWarningMask;};
3016 virtual uint32 AcceptError();
3018 virtual uint32 AcceptError(uint32 auError);
3020 virtual uint32 AcceptError(uint32 auError, uint32 auRampError);
3022 virtual uint32 AcceptWarning();
3024 virtual uint32 AcceptWarning(uint32 auWarning);
3026 virtual uint32 AcceptWarning(uint32 auWarning, uint32 auRampWarning);
3028 virtual uint32 AcceptLimitViolation() { m_uLimitViolation = 0;
return 0;};
3032 virtual void eCreateParamSet(
const char* apSetName);
3035 virtual CINOSBaseAxisParamSet* CreateParamSet(
const char* apSetName);
3037 virtual void DestroyParamSet(
const char* apSetName);
3039 virtual bool SelectParamSet(
const char* apSetName);
3043 eFlgParamSetNone = 0x00000000,
3044 eFlgParamSetSearchGlobal = 0x00000001,
3045 eFlgParamSetIgnoreOverwrite = 0x00000002
3048 virtual CINOSBaseAxisParamSet* GetParamSet(
const char* apSetName, uint32 auFlags = eFlgParamSetSearchGlobal);
3050 virtual SINOSRampParam* GetRampParam(
const char* apSetName, uint32 auFlags = eFlgParamSetSearchGlobal);
3052 virtual bool GetRampParam(
const char* apSetName,
char* apResult, uint32 auSize,
3053 SINOSRampParam& aResult, uint32 auFlags = eFlgParamSetSearchGlobal);
3060 static void eCreateGlobalParamSet(
const char* apSetName);
3063 static CINOSBaseAxisParamSet* CreateGlobalParamSet(
const char* apSetName);
3065 static void DestroyGlobalParamSet(
const char* apSetName);
3067 static CINOSBaseAxisParamSet* GetGlobalParamSet(
const char* apSetName);
3069 static SINOSRampParam* GetGlobalRampParam(
const char* apSetName);
3073 virtual void SetPosType(uint32 auPosType)
3075 { m_uPosType = auPosType; };
3076 virtual void SetPosTime(uint32 auPosTime)
3078 { m_uPosTime = auPosTime; };
3079 virtual void SetPosTimeout(uint32 auPosTimeout)
3081 { m_uPosTimeout = auPosTimeout; };
3082 virtual void SetPosTolerance(real64 arPosTolerance)
3084 { m_rPosTolerance = arPosTolerance; };
3088 #if defined(INOS_AXIS_EXTENSION_SUPPORT)
3089 SINOSParamSetExtension* GetParamSetExtension(uint32 auExtensionId)
3093 return m_pRamp->GetParamSetExtension(auExtensionId);
3101 void EnableCache(uint32 auSize = 32);
3103 CINOSRampCache* EnableCache(CINOSRampCache* apCache);
3105 CINOSRampCache* DisableCache();
3107 void ReEnableCache();
3115 void SetCacheEpsilon(real64 arEpsilon);
3117 #ifdef INOS_MOVE_CACHE_SUPPORT
3118 void FlushMoveCache();
3124 #ifdef INOS_SAFETY_SUPPORT
3125 virtual void EnableSafetySupervision();
3128 virtual bool DisableSafetySupervision();
3130 virtual void ToggleSafetySupervision();
3135 virtual CINCOObject* GetRegister();
3142 virtual CINOSMapping* GetMapping()
3143 {
return m_pMapping;};
3145 uint32 GetMappingIndex()
3146 {
return m_uMappingIndex;};
3151 virtual uint32 RegisterHook(uintid& auHookId,
void* apHandler,
void* apObject,
3152 int32 aiOrder,
bool abEnabled=
true);
3155 virtual uint32 UnRegisterHook(uintid auHookId);
3157 virtual uint32 EnableHook(uintid auHookId);
3159 virtual uint32 DisableHook(uintid auHookId);
3161 virtual uint32 RegisterPostHook(uintid& auHookId,
void* apHandler,
void* apObject,
3162 int32 aiOrder,
bool abEnabled=
true);
3165 virtual uint32 UnRegisterPostHook(uintid auHookId);
3167 virtual uintid RegisterErrorHook(
void* apHandler,
void* apObject = 0);
3169 virtual void UnRegisterErrorHook(uintid auHookId);
3171 virtual uintid RegisterWarningHook(
void* apHandler,
void* apObject = 0);
3173 virtual void UnRegisterWarningHook(uintid auHookId);
3175 #ifdef INOS_SAFETY_SUPPORT
3176 virtual uintid RegisterSOSHook(
void* apHandler,
void* apObject = 0);
3178 virtual void UnRegisterSOSHook(uintid auHookId);
3182 #if defined(INOS_AXIS_EXTENSION_SUPPORT)
3183 virtual void RegisterExtension(IINOSBaseAxisExtension* apExtension);
3186 virtual void UnRegisterExtension(IINOSBaseAxisExtension* apExtension);
3191 virtual void EnableSync(real64 arPosition = REAL64(0.0),
3192 uint8 auMode = DF_INOS_AXIS_SYNC_NOADJ){};
3194 virtual void DisableSync(){};
3196 virtual void GetSyncCount(uint32& auSyncCount)
3197 { auSyncCount = 0;};
3199 virtual void SetSyncCount(uint32 auSyncCount){};
3226 real64 arNormPos = REAL64(0.0));
3232 {
return m_uNormMoveDir; };
3236 { m_uNormMoveDir = auNormMoveDir; };
3240 {
return m_uNormMode; };
3244 { m_uNormMode = auNormMode; };
3248 virtual void EnableCurLimit(){};
3250 virtual void DisableCurLimit(){};
3252 virtual bool GetCurLimit()
3254 {
return (m_uFlag & DF_INOS_AXIS_FLAG_CURL) != 0;};
3265 if (aeType == eActInput) {
3269 else if (aeType == eActActual) {
3293 {
return GetActual(eActOutput,
false);};
3297 virtual void SetMoveSafeMin(real64 arMin, real64 arFact1=REAL64(0.0),
3298 real64 arFact2=REAL64(0.0));
3301 virtual void ResetMoveSafeMin();
3306 void EnableSetupMode();
3308 void DisableSetupMode();
3310 virtual bool CheckSetupMode();
3313 #ifdef INOS_USE_CUSTOMER_IMAGE_DATA
3314 void* GetCustomerSpecificData()
const {
return m_pCustomerSpecificData; }
3317 void SetCustomerSpecificData(
void* apData) { m_pCustomerSpecificData = apData; }
3328 {
return m_uToggleCnt; };
3331 { m_uToggleCnt=auSetVal; };
3333 #ifdef INOS_MOVEPATH_SUPPORT
3352 #ifdef INOS_SAFETY_SUPPORT
3353 uint32 GetSafetyUid()
3355 {
return m_uSafetyUid; };
3357 uint32 GetSafetyType()
3358 {
return m_uSafetyType; };
3360 ESafetyFunction GetSafetyFunction()
const {
3361 return m_eSafetyFunction;
3368 friend void _INI_0000_CINOSBaseAxis();
3369 friend void _INI_0400_CINOSBaseAxis();
3370 friend class CINOSRegisterBaseAxis;
3371 friend class CINOSMapping;
3373 friend void _INI_0400_INFO_DCM();
3374 friend class CINOSBaseAxisTest;
3375 friend class CINOSMovePathResourcePosAxis;
3376 friend class CINOSMcRobotCmdMove;
3377 friend class CINOSMcRobotCmdInit;
3378 friend class CINOSMcRobotCmdCalib;
3379 friend class CINOSMcTargetAxis;
3385 real64 iNormPosition(real64 arPosition, real64 arRange = REAL64(0.0),
bool abRound =
false)
const;
3389 virtual void SignalSync(
CINOSSync& apSync);
3391 virtual void SetError(uint32 auErrors);
3393 virtual void SetWarning(uint32 auWarnings);
3395 #ifdef INOS_SAFETY_SUPPORT
3396 virtual void CallSOSHooks();
3398 #endif // INOS_SAFETY_SUPPORT
3399 bool Enter(uint32 auCommand,
CINOSSync* apSync = 0);
3406 {
return m_CmdLock.
GetOwner() != 0;};
3408 virtual void iInActivate();
3412 virtual void iEmergencyStop(
bool abLive =
false);
3414 virtual uint32 iCursor(
bool abPositive, uint32 auWaitTime,
3417 virtual uint32 iCursor(real64 arPosition, uint32 auWaitTime,
3420 real64 iGetAbsPosition(real64 arRelPosition);
3422 real64 iGetNrmAbsPosition(real64 arRelPosition,
SINOSRampParam* apParam =
nullptr,
bool abConsiderStop =
false);
3424 virtual void iSetCycleTime(real64 arCycleTime);
3426 virtual void iRegisterAxis();
3428 ICACHE
virtual void iPreMap();
3430 ICACHE
virtual void iPostMap();
3432 ICACHE
inline void iCheckRampLimits() {
3433 if (m_pRamp->GetError() & ER_INOS_RAMP_VMAX_REACHED) {
3434 SetError(ER_INOS_AXIS_RAMP_LIMIT);
3439 ICACHE
virtual void iPostWrite();
3441 void SetMapping(CINOSMapping* apMapping, uint32 auIndex)
3442 { m_pMapping = apMapping; m_uMappingIndex = auIndex;
3443 m_pRamp->SetMapping(apMapping, auIndex);};
3446 { m_pMapping = 0; m_uMappingIndex = 0;
3447 m_pRamp->ResetMapping();};
3449 virtual bool iInPosition(
bool abEarlyDone);
3451 virtual bool iInPosition();
3458 virtual void iAdjPreviousPositions(real64 arDifference);
3460 virtual void iSetActRampPosition(real64 arPosition);
3462 virtual bool IsCheckPositionRequired();
3464 void SetDefaultParamIfRequired();
3471 virtual void iResetTrajectory();
3474 void iCoreMismatchError();
3479 CINOSBus* pBus=CINOSBus::FindBus(GetBusId());
3490 CINOSBus* pBus=CINOSBus::FindBus(GetBusId());
3492 return pBus->AtomicGatherExit(auToken);
3506 uint32 eActivate(
bool abCheckPos,
bool abSimulatePos,
bool abSimulateOut,
3507 bool abSimulateAct);
3509 uint32 eInActivate();
3511 uint32 eRelax(uint32 auTimeMs);
3513 uint32 eMove(real64 arPosition);
3515 uint32 eMove(real64 arPosition,
char* apParam);
3517 uint32 eMoveTime(real64 arPosition, real64 arTime);
3519 uint32 eMoveTime(real64 arPosition, real64 arTime,
char* apParam);
3521 uint32 eMoveApp(real64 arPosition, real64 arPositionVel, real64 arVelocity);
3523 uint32 eMoveApp(real64 arPosition, real64 aPositionVel, real64 arVelocity,
char* apParam);
3525 uint32 eMoveDep(real64 arPosition, real64 arPositionVel, real64 arVelocity);
3527 uint32 eMoveDep(real64 arPosition, real64 aPositionVel, real64 arVelocity,
char* apParam);
3529 uint32 eSync(real64 arPosition);
3531 uint32 eSync(real64 arPosition,
char* apParam);
3533 uint32 eSync(real64 arPosition, real64 arSyncPosition);
3535 uint32 eSync(real64 arPosition, real64 arSyncPosition,
char* apParam);
3541 uint32 eUpdate(
const char* apParam);
3543 uint32 eEndless(
bool abPositive);
3545 uint32 eEndless(
bool abPositive,
const char* aparam);
3549 uint32 eStop(
const char* apParam);
3551 uint32 eStop(real64 arPosition);
3553 uint32 eStop(real64 arPosition,
const char* apParam);
3557 uint32 eBreak(
const char* apParam);
3559 uint32 eBreak(real64 arPosition);
3561 uint32 eBreak(real64 arPosition,
const char* apParam);
3563 uint32 eEmergencyStop();
3565 uint32 eEmergencyStop(uint32 auType, uint32 auDelay);
3569 uint32 eContinue(
const char* apParam);
3571 void eSetSlowMotion(real64 arSlowMotion);
3581 uint32 eAcceptError();
3583 uint32 eAcceptWarning();
3589 bool iTrack(
const char* apVarName, real64 arFactor, uint32 auFilterLength);
3591 uint32 _Track(
const char* apVarName, real64 arFactor, uint32 auFilter,
3593 void iTrackFollow();
3614 uint32 m_uErrorMask;
3616 uint32 m_uErrorHook;
3620 uint32 m_uWarningMask;
3622 uint32 m_uLimitViolation;
3629 const char* m_pName;
3631 const char* m_pType;
3637 CINCOObject* m_pRegister;
3639 CINCOObject* m_pCommand;
3641 CINCOObject* m_pTest;
3643 CINCOObject* m_pError;
3645 CINCOObject* m_pWarning;
3647 CINCOObject* m_pLimitViolation;
3649 CINCOObject* m_pFlag;
3651 CINCOObject* m_pState;
3655 CINOSLimitChecker* m_pLimitChecker;
3657 CINOSMapping* m_pMapping;
3659 uint32 m_uMappingIndex;
3689 uint32 m_uWaitTicks;
3691 uintid m_uPreMapHookId;
3693 uintid m_uPostMapHookId;
3695 uintid m_uPostWriteHookId;
3697 uintid m_uPreHookId;
3699 #ifdef INOS_SAFETY_SUPPORT
3700 bool m_bPreHookSafetyEnabled;
3703 uintid m_uPostHookId;
3705 SINOSBaseAxisHook* m_pErrorHooks;
3707 SINOSBaseAxisHook* m_pWarningHooks;
3709 TINOSNameBalancedBinaryTree<CINOSBaseAxisParamSet>* m_pParamSets;
3713 static TINOSNameBalancedBinaryTree<CINOSBaseAxisParamSet>* m_pGlobalParamSets;
3715 #ifdef INOS_MOVE_CACHE_SUPPORT
3716 CINOSMoveCache* m_pMoveCache;
3752 uint32 m_uToggleCnt;
3756 real64 m_rFeedPerTurn;
3758 real64 m_rFeedPerTurn_1;
3763 inosName32 m_cSelectedParamName;
3768 uint32 m_uEmergencyType;
3771 uint32 m_uEmergencyDelay;
3773 real64 m_rEmergencyPosition;
3775 uint16 m_uIntEmergencyType;
3777 uint16 m_uIntEmergencyDelay;
3783 uint32 m_uCurWaitTime;
3785 real64 m_rCurPosition;
3794 bool m_bSyncAvailable =
true;
3799 uint8 m_uNormMoveDir;
3810 uint16 m_uTrackValType;
3836 real64* m_pTrackBuf;
3838 tpGetter m_pTrackGet;
3840 real64 m_rTrackVmax;
3841 real64 m_rTrackAmax;
3842 real64 m_rTrackBmax;
3850 uint32 m_uPosTimeout;
3854 int32 m_iPosTimeout;
3856 real64 m_rPosTolerance;
3864 bool m_bPartnerMoving;
3874 #ifdef INOS_USE_CUSTOMER_IMAGE_DATA
3880 void* m_pCustomerSpecificData;
3885 #ifdef INOS_SAFETY_SUPPORT
3889 uint8 m_uSafetyLevel;
3891 uint8 m_uSafetyType;
3893 ESafetyFunction m_eSafetyFunction;
3895 real64 m_rSafetyLimit;
3897 uint32 m_uSafetyDelay;
3899 int32 m_iSafetySupervisionStart;
3901 real64 m_rSafetySupervisionLimit;
3903 SINOSBaseAxisHook* m_pSOSHooks;
3906 friend class CINOSMcTargetSafety;
3908 void iSetupSafety();
3910 virtual bool iSetupSafetyRegistration();
3915 #if defined(INOS_AXIS_EXTENSION_SUPPORT)
3916 TINOSDoubleLinkedList<IINOSBaseAxisExtension>* m_pExtensions = 0;
3922 uint32 m_ueActivateCheckPos;
3924 uint32 m_ueActivateSimulatePos;
3926 uint32 m_ueActivateSimulateOut;
3928 uint32 m_ueActivateSimulateAct;
3930 real64 m_rePosition;
3932 real64 m_rePositionVel{};
3934 real64 m_reVelocity{};
3936 real64 m_reSyncPosition;
3938 inosName32 m_ceParam;
3940 char m_ceVariable[64];
3948 uint32 m_ueTrackDir;
3950 uint32 m_ueDirection;
3970 real64 m_reSlowMotion;
3973 #ifdef INOS_MOVEPATH_SUPPORT
3974 class CINCOMovePathActuals* m_pMovePathActuals;
3979 static uint32 m_uCount;
3981 static uint8 m_uCountCoreId;
3989 static char m_cStateCombo[494];
4002 typedef CINOSBaseAxis *(*TCreateAxis)(
const char* apAxisName);
4003 class CINOSRegisterBaseAxis
4006 friend void _INI_0000_CINOSRegisterBaseAxis();
4012 static CINOSRegisterBaseAxis* m_pFirst;
4014 CINOSRegisterBaseAxis* m_pNext;
4016 TCreateAxis m_pCreate;
4018 const char* m_pAxisType;
4020 const char* m_pDatabaseTable;
4026 CINOSRegisterBaseAxis(TCreateAxis apFunction,
const char* apAxisType,
4027 const char* apDatabaseTable);
4030 static CINOSBaseAxis* GetAxis(
const char* apAxisName,
const char* apAxisType);
4032 static void CreateAll();
4041 #if defined(INOS_MULTICORE)
4042 #define INOS_AXIS_CORE_MISMATCH_IS_ERROR(ret) \
4043 if ((m_uCoreId != DF_INOS_CORE_DEFAULT) && (::GetCoreId() != m_uCoreId)) { \
4044 if (!(GetFlag() & DF_INOS_AXIS_FLAG_IGNORE_CORE)) { \
4045 iCoreMismatchError(); \
4050 #define INOS_AXIS_CORE_MISMATCH_IS_ERROR(ret)
4059 #ifdef INOS_SAFETY_SUPPORT
4060 #define SAFETY_CHECK_SOS() \
4061 if (GetFlag() & DF_INOS_AXIS_FLAG_SAFETY) { \
4062 if (m_eSafetyFunction == eSafetyFunctionSOS) { \
4063 real64 rSlowMotion; GetActSlowMotion(rSlowMotion); \
4064 if (rSlowMotion != REAL64(0.0)) { \
4065 m_uError |= ER_INOS_AXIS_REJECTED_SOS; \
4066 INOS_ERROR("AXIS[%s]: Command rejected, axis in SOS (safe operating stop)", GetName());\
4072 #define SAFETY_CHECK_SOS_SYNC(apSync) \
4073 if (GetFlag() & DF_INOS_AXIS_FLAG_SAFETY) { \
4074 if (m_eSafetyFunction == eSafetyFunctionSOS) { \
4075 real64 rSlowMotion; GetActSlowMotion(rSlowMotion); \
4076 if (rSlowMotion != REAL64(0.0)) { \
4077 m_uError |= ER_INOS_AXIS_REJECTED_SOS; \
4078 INOS_ERROR("AXIS[%s]: Command rejected, axis in SOS (safe operating stop)", GetName());\
4085 #define SAFETY_IGNORE_IF_SOS() \
4086 if (GetFlag() & DF_INOS_AXIS_FLAG_SAFETY) { \
4087 if (m_eSafetyFunction == eSafetyFunctionSOS) { \
4092 #define SAFETY_CHECK_SOS()
4093 #define SAFETY_CHECK_SOS_SYNC(apSync)
4094 #define SAFETY_IGNORE_IF_SOS()
4101 #endif // INC_CINOSBASEAXIS_H