INOS
cinosbaseaxis.h
Go to the documentation of this file.
1 //******************************************************************************
27 //******************************************************************************
28 
29 #ifndef INC_CINOSBASEAXIS_H
30 #define INC_CINOSBASEAXIS_H
31 //
32 //------------------------------------------------------------------------------
33 // defines
34 //------------------------------------------------------------------------------
35 //
36 #define DF_INOS_BASE_AXIS_DBT "INOS-BASE-AXIS" // db table name
37 //
38 #if defined(INOS_64)
39 #define DF_INOS_MAX_AXIS 512 // max. number of allowed axis
40 #else
41 #define DF_INOS_MAX_AXIS 256 // max. number of allowed axis
42 #endif
43 //
44 // --- axis states -------------------------------------------------------------
45 //
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
75 //
76 // --- axis substates ----------------------------------------------------------
77 //
78 #define DF_INOS_AXIS_SUBSTATE_TRACK_FOLLOW 0 // track mode 'follow'
79 #define DF_INOS_AXIS_SUBSTATE_TRACK_KEEP 1 // track mode 'keep'
80 //
81 // --- axis commands -----------------------------------------------------------
82 //
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'
108 //
109 // --- axis errors -------------------------------------------------------------
110 //
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
128 //
129 // --- axis warnings -----------------------------------------------------------
130 //
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
137 //
138 // --- axis flags --------------------------------------------------------------
139 //
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
158 //
159 // --- axis sync modes ---------------------------------------------------------
160 //
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
164 //
165 // --- axis norm modes ---------------------------------------------------------
166 //
171 #define DF_INOS_AXIS_NORM_AFTER 0x00
172 
174 #define DF_INOS_AXIS_NORM_LIVE 0x01
175 
177 #define DF_INOS_AXIS_NORM_POSITIVE 0x40
178 
182 #define DF_INOS_AXIS_NORM_ROUND 0x80
183 //
184 // --- axis moving direction in norm mode --------------------------------------
185 //
188 #define DF_INOS_AXIS_NORM_MOVE_DIR_NO 0x00
189 
193 #define DF_INOS_AXIS_NORM_MOVE_DIR_POS 0x01
194 
198 #define DF_INOS_AXIS_NORM_MOVE_DIR_NEG 0x02
199 
203 #define DF_INOS_AXIS_NORM_MOVE_DIR_SHORT 0x03
204 
209 #define DF_INOS_AXIS_NORM_MOVE_DIR_SHORT_EX 0x04
210 //
211 // --- axis safety types -------------------------------------------------------
212 //
216 #define DF_INOS_AXIS_SAFETY_EMGSTOP 0x00
217 
221 #define DF_INOS_AXIS_SAFETY_AUTO 0x01
222 
224 #define DF_INOS_AXIS_SAFETY_NONE 0x02
225 //
226 // --- axis emergency types ----------------------------------------------------
227 //
232 #define DF_INOS_AXIS_EMGT_STOP 0x00
233 
238 #define DF_INOS_AXIS_EMGT_STOP_INACTIVATE 0x01
239 
241 #define DF_INOS_AXIS_EMGT_INACTIVATE 0x02
242 
245 #define DF_INOS_AXIS_EMGT_NONE 0x03
246 
251 #define DF_INOS_AXIS_EMGT_STOP_POSITION 0x04
252 
257 #define DF_INOS_AXIS_EMGT_STOP_POSITION_INACTIVATE 0x05
258 //
259 // --- emergency stop special values -------------------------------------------
260 //
261 #define DF_PRECONFIGURED_EME_STOP_TYPE 0xffff // preconfigured (by dt2 or via inco variable) emergency stop type
262 
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
267 //
268 // --- positioning type --------------------------------------------------------
269 //
272 #define DF_INOS_AXIS_PST_STANDARD 0x00000000
273 
277 #define DF_INOS_AXIS_PST_WINDOW 0x00000001
278 
283 #define DF_INOS_AXIS_PST_WINDOW_OPT 0x00000002
284 //
285 // --- axis options ------------------------------------------------------------
286 //
291 #define DF_INOS_BASE_AXIS_OPT_EARLY_DONE 0x00000001
292 
298 #define DF_INOS_BASE_AXIS_OPT_AUTO_ACCEPT 0x00000002
299 
302 #define DF_INOS_BASE_AXIS_OPT_LIMITS_IF_SNCD 0x00000004
303 
307 #define DF_INOS_BASE_AXIS_OPT_MAPPING_DISABLED 0x00000008
308 
312 #define DF_INOS_BASE_AXIS_OPT_NORM_ENABLED 0x00000010
313 
317 #define DF_INOS_BASE_AXIS_OPT_CHECK_LIMITS 0x00000020
318 
322 #define DF_INOS_BASE_AXIS_OPT_LIFETIME 0x00000040
323 
327 #define DF_INOS_BASE_AXIS_OPT_SETPOS_DISABLED 0x00000080
328 
332 #define DF_INOS_BASE_AXIS_OPT_EMGSTOP_PULL 0x00000100
333 
335 #define DF_INOS_BASE_AXIS_OPT_FORCE_CONTROL 0x00000200
336 
339 #define DF_INOS_BASE_AXIS_OPT_IGNORE_CORE 0x00000400
340 
341 #if defined(INOS_MOTORCONFIG_LOAD_SUPPORT)
342 
348 #define DF_INOS_BASE_AXIS_OPT_CPF_UNIQUE 0x00000800
349 #endif
350 
354 #define DF_INOS_BASE_AXIS_OPT_EMERGENCY_EXTERNAL 0x00001000
355 
356 // --- axis limit errors -------------------------------------------------------------
357 //
358 #define DF_INOS_BASE_AXIS_LIMIT_S 0x00000001 // position limit of cmdS exceeded
359 #define DF_INOS_BASE_AXIS_LIMIT_V_OF_S 0x00000002 // velocity limit of cmdS exceeded
360 #define DF_INOS_BASE_AXIS_LIMIT_A_OF_S 0x00000004 // accelleration ity limit of cmdS exceeded
361 #define DF_INOS_BASE_AXIS_LIMIT_B_OF_S 0x00000008 // de-accelleration ity limit of cmdS exceeded
362 #define DF_INOS_BASE_AXIS_LIMIT_S_V_CONS 0x00000010 // consistency error between S and V
363 #define DF_INOS_BASE_AXIS_LIMIT_V 0x00000020 // velocity limit of cmdV exceeded
364 #define DF_INOS_BASE_AXIS_LIMIT_A_OF_V 0x00000040 // accelleration ity limit of cmdV exceeded
365 #define DF_INOS_BASE_AXIS_LIMIT_B_OF_V 0x00000080 // de-accelleration ity limit of cmdV exceeded
366 #define DF_INOS_BASE_AXIS_LIMIT_A 0x00000100 // accelleration ity limit of cmdA exceeded
367 #define DF_INOS_BASE_AXIS_LIMIT_B 0x00000200 // de-accelleration ity limit of cmdA exceeded
368 #define DF_INOS_BASE_AXIS_LIMIT_BRAKE 0x00000400 // axis cannot stop within bordes
369 #define DF_INOS_BASE_AXIS_LIMIT_J_OF_S 0x00000800 // jerk limit of cmdS exceeded
370 #define DF_INOS_BASE_AXIS_LIMIT_J_OF_V 0x00001000 // jerk limit of cmdV exceeded
371 #define DF_INOS_BASE_AXIS_LIMIT_J_OF_A 0x00002000 // jerk limit of cmdA exceeded
372 #define DF_INOS_BASE_AXIS_LIMIT_J 0x00004000 // jerk limit of cmdJ exceeded
373 
374 //
375 //------------------------------------------------------------------------------
376 // includes
377 //------------------------------------------------------------------------------
378 //
379 // system
380 #include <cinosbus.h>
381 #include <cinosbaseramp.h>
382 #if defined(INOS_AXIS_EXTENSION_SUPPORT)
383 #include <cinosbaseaxisextension.h>
384 #endif
385 //
386 // C++
387 //
388 // project
389 //
390 //------------------------------------------------------------------------------
391 //--- structures ---------------------------------------------------------------
392 //------------------------------------------------------------------------------
393 
399 {
402  inosName64 m_cName;
403 
408  inosName32 m_cRampType;
409 
415  uint16 m_uNumber;
416 
420  uint8 m_uCoreId;
421 
424  uint8 m_uReserved;
425 
437  uint32 m_uOptions;
438 
445 
457 
462 
467  uint32 m_uTestDelay;
468 
471  real64 m_rTestPos1;
472 
476 
479  real64 m_rTestPos2;
480 
484 
489 
493 
497 
505  uint32 m_uPosType;
506 
510  uint32 m_uPosTime;
511 
516 
521 
525  uint32 m_uCacheSize;
526 
530  uint16 m_cShort;
531 
539  uint8 m_uNormMode;
540 
550 
553  real64 m_rNormPos;
554 
560  inosName32 m_cDefaultParam;
561 
564  inosName32 m_cEmergencyParam;
565 
570 
573  inosName32 m_cPowerParam;
574 
577  inosName64 m_cDescription;
578 
579  // constructor
580  SINOSBaseAxis();
581 };
582 
583 //------------------------------------------------------------------------------
584 // forward declarations
585 //------------------------------------------------------------------------------
586 //
587 class CINOSMoveCache;
588 class CINOSBaseAxis;
589 class CINOSLimitChecker;
590 //
591 //------------------------------------------------------------------------------
592 // class definition
593 //------------------------------------------------------------------------------
594 
596 class CINOSBaseAxisParamSet
597 {
598  //--- user interface ---------------------------------------------------
599 
600  // public member functions
601  public :
602  virtual uint32 SetParam(const char* apName, real64 arValue);
603  //; universal set parameter with aName to aValue and return error code
604  //; \return 0 on success, an INCO error code otherwise, such as
605  //; defVarNotFound, defVarReadOnly, etc.
606  virtual uint32 GetParam(const char* apName, real64& arResult);
607  //; universal get parameter with aName to aResult and return error code
608  virtual CINCOObject* GetRegister(CINOSBaseAxis* apAxis);
609  //; On the first invocation, this function creates the INCO tree
610  //; for this object. Subsequent invocations just return the
611  //; previously created tree.
612  //; return pointer to my inco object
613  virtual CINCOObject* GetRegister() const;
614  //; \return Pointer to my INCO object (or NULL if non have been
615  //; created so far). This function doesn't create any INCO items,
616  //; it just returns what's currently there.
617  SINOSRampParam* GetRampParam()
618  { return &m_pRamp->m_Param;};
619 
620  #if defined(INOS_AXIS_EXTENSION_SUPPORT)
621  void AddExtension(SINOSParamSetExtension* apExtension);
624  void RemoveExtension(const char* apName);
625  #endif
626 
627  //--- internals --------------------------------------------------------
628 
629  // my axis is my friend
630  friend class CINOSBaseAxis;
631  friend class CINOSPhysicalAxis;
632  friend class CINOSShape;
633 
634  // public but just for internal use
635  public:
639  CINOSBaseAxisParamSet& operator=(const CINOSBaseAxisParamSet& aOther);
640  int operator < (CINOSBaseAxisParamSet& aSet) const
641  { return (strcmp(m_cName, aSet.m_cName)<0);}
642  int operator == (CINOSBaseAxisParamSet& aSet) const
643  { return (strcmp(m_cName, aSet.m_cName)==0);}
644  int operator < (const char* apName) const
645  { return (strcmp(m_cName, apName)<0);}
646  int operator == (const char* apName) const
647  { return (strcmp(m_cName, apName)==0);}
648  friend int operator == (CINOSBaseAxisParamSet& aSet1, CINOSBaseAxisParamSet& aSet2)
649  { return (strcmp(aSet1.m_cName, aSet2.m_cName)==0);}
650 
651  // public but just for internal use
652  public:
653  explicit CINOSBaseAxisParamSet(const char* apName);
654  //; constructor
655  CINOSBaseAxisParamSet(const CINOSBaseAxisParamSet& aOther);
656  //; copy constructor, creates deep copies of the values. Note
657  //; that m_pRegister will not be copied nor created. The caller
658  //; would need to call GetRegister() to create the INCO
659  //; representation
660  virtual ~CINOSBaseAxisParamSet();
661  //; destructor
662 
663  // protected members
664  protected:
665  inosName64 m_cName;
666  //; set name
667  CINCOObject* m_pRegister;
668  //; pointer to inco registration of set
669  CINOSBaseRampParamSet* m_pRamp;
670  //; pointer to ramp param set
671  uint32 m_uPosType;
672  //; positioning type [0-standard, 1-window]
673  uint32 m_uPosTime;
674  //; positioning time [ms]
675  uint32 m_uPosTimeout;
676  //; positioning timeout [ms]
677  real64 m_rPosTolerance;
678  //; positioning tolerance [unit]
679 
680  // allow dynamic object handling (new/delete)
681  DECLARE_DYNAMIC(CINOSBaseAxisParamSet);
682 };
684 
685 //------------------------------------------------------------------------------
686 // class definition
687 //------------------------------------------------------------------------------
688 //
689 typedef real64 (*tpGetter)(void* apVal);
690 
691 struct SINOSBaseAxisHook;
692 class CINOSMapping;
694 {
695  //--- user interface ---------------------------------------------------
696 
697  // public member functions
698  public :
699 
704  explicit CINOSBaseAxis(SINOSBaseAxis* apDesc);
705 
712  CINOSBaseAxis(SINOSBaseAxis* apDesc, CINOSBaseRamp* apRamp);
713 
716  virtual ~CINOSBaseAxis();
717 
722  static CINOSBaseAxis* GetAxis(const char* apAxisName);
723 
728  static CINOSBaseAxis* GetAxis(uint32 auNumber)
729  {
730  if (auNumber < DF_INOS_MAX_AXIS)
731  return m_pAxis[auNumber];
732  else
733  return nullptr;
734  }
735 
740  static uint8 GetNumber(const char* apAxisName);
741  //; return number of axis apAxis
742 
750  virtual uint32 WaitTicks(uint32 auTicks = 1);
751 
755  virtual uint32 Connect()
756  { return 0; };
757 
763  virtual uint32 Enable(CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
764 
770  virtual uint32 Disable(CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
771 
773  void InitializeLimitChecker();
774 
775 
785  virtual uint32 Activate(bool abCheckPos = true, bool abSimulatePos = false,
786  bool abSimulateOut = false, bool abSimulateAct = false,
787  CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
788 
793  virtual uint32 InActivate(CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
794 
800  virtual uint32 Relax(uint32 auTimeMs, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
801 
808  virtual uint32 Sync(real64 arPosition, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
809 
818  virtual uint32 Sync(real64 arPosition, SINOSRampParam* apParam,
819  CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
820 
828  virtual uint32 Sync(real64 arPosition, const char* apParam,
829  CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
830 
838  virtual uint32 Sync(real64 arPosition, real64 arSyncPos,
839  CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
840 
850  virtual uint32 Sync(real64 arPosition, real64 arSyncPos,
851  SINOSRampParam* apParam, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
852 
861  virtual uint32 Sync(real64 arPosition, real64 arSyncPos,
862  const char* apParam, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
863 
871  virtual uint32 Sync(real64 arSyncPos, const char* apParam, CINCOObject* apObject,
872  CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
873 
880  virtual uint32 Move(real64 arPosition,
881  CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
882 
890  virtual uint32 Move(real64 arPosition, SINOSRampParam* apParam,
891  CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
892 
899  virtual uint32 Move(real64 arPosition, const char* apParam,
900  CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
901 
912  virtual uint32 MoveTime(real64 arPosition, real64 arTime, bool abUseP5 = true,
913  CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
914 
927  virtual uint32 MoveTime(real64 arPosition, real64 arTime, bool abUseP5,
928  SINOSRampParam* apParam, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
929 
941  virtual uint32 MoveTime(real64 arPosition, real64 arTime, bool abUseP5,
942  const char* apParam, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
943 
958  virtual uint32 Move(real64 arPosition, real64 arSafe1, real64 arSafe2,
959  SINOSRampParam* apParam1, SINOSRampParam* apParam2, real64 arPartner, SINOSRampParam* apPartner,
960  CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
961 
975  virtual uint32 Move(real64 arPosition, real64 arSave1, real64 arSave2,
976  const char* apParam1, const char* apParam2, real64 arPartner, const char* apPartner,
977  CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
978 
989  virtual uint32 MoveApp(real64 arPosition, real64 arPositionVel, real64 arVelocity,
990  CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
991 
1006  virtual uint32 MoveApp(real64 arPosition, real64 arPositionVel, real64 arVelocity,
1007  SINOSRampParam* apParam, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
1008 
1023  virtual uint32 MoveApp(real64 arPosition, real64 arPositionVel, real64 arVelocity,
1024  const char* apParam, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
1025 
1039  virtual uint32 MoveDep(real64 arPosition, real64 arPositionVel, real64 arVelocity,
1040  CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
1041 
1056  virtual uint32 MoveDep(real64 arPosition, real64 arPositionVel, real64 arVelocity,
1057  SINOSRampParam* apParam, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
1058 
1073  virtual uint32 MoveDep(real64 arPosition, real64 arPositionVel, real64 arVelocity,
1074  const char* apParam, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
1075 
1082  virtual uint32 Toggle(real64 arPosition1, real64 arPosition2);
1083 
1094  virtual uint32 ToggleSection(real64 arPos1Min, real64 arPos1Max,
1095  real64 arPos2Min, real64 arPos2Max, uint32 auDelayMin, uint32 auDelayMax);
1096 
1105  virtual uint32 Track(const char* apVarName, real64 arFactor,
1106  uint32 auFilterLength, uint32 auDirection = 0);
1107 
1117  virtual uint32 Track(const char* apVarName, real64 arFactor,
1118  uint32 auFilterLength, uint32 auDirection, const char* apParam);
1119 
1129  virtual uint32 Track(const char* apVarName, real64 arCmdValue,
1130  real64 arFactor, uint32 auFilterLength);
1131 
1136  virtual uint32 SetTrackFactor(real64 arFactor);
1137 
1143  virtual uint32 Endless(bool abPositive = true);
1144 
1152  virtual uint32 Endless(bool abPositive, SINOSRampParam* apParam,
1153  CINOSSync* apSync = DF_INOS_ASYNCHRONOUS);
1154 
1161  virtual uint32 Endless(bool abPositive, const char* apParam,
1162  CINOSSync* apSync = DF_INOS_ASYNCHRONOUS);
1163 
1170  virtual uint32 Cursor(bool abPositive = true);
1171 
1178  virtual uint32 Cursor(real64 arPosition);
1179 
1187  virtual uint32 Cursor(bool abPositive, uint32 auWaitTime);
1188 
1195  virtual uint32 Cursor(real64 arPosition, uint32 auWaitTime);
1196 
1205  virtual uint32 Cursor(bool abPositive, uint32 auWaitTime,
1206  real64 arStep);
1207 
1216  virtual uint32 Cursor(real64 arPosition, uint32 auWaitTime,
1217  real64 arStep);
1218 
1228  virtual uint32 Cursor(bool abPositive, uint32 auWaitTime,
1229  real64 arStep, SINOSRampParam* apParam);
1230 
1240  virtual uint32 Cursor(real64 arPosition, uint32 auWaitTime,
1241  real64 arStep, SINOSRampParam* apParam);
1242 
1252  virtual uint32 Cursor(bool abPositive, uint32 auWaitTime,
1253  real64 arStep, const char* apParam);
1254 
1264  virtual uint32 Cursor(real64 arbPosition, uint32 auWaitTime,
1265  real64 arStep, const char* apParam);
1266 
1272  virtual uint32 Update(CINOSSync* apSync = DF_INOS_ASYNCHRONOUS);
1273 
1280  virtual uint32 Update(SINOSRampParam* apParam, CINOSSync* apSync = DF_INOS_ASYNCHRONOUS);
1281 
1288  virtual uint32 Update(const char* apParam, CINOSSync* apSync = DF_INOS_ASYNCHRONOUS);
1289 
1294  virtual SINOSTimeCharacteristics GetTimeCharacteristics(real64 arPosition);
1295 
1300  virtual SINOSTimeCharacteristics GetTimeCharacteristics(real64 arPosition, SINOSRampParam* apParam);
1301 
1306  virtual SINOSTimeCharacteristics GetTimeCharacteristics(real64 arPosition, const char* apParam);
1311  virtual SINOSTimeCharacteristics GetTimeCharacteristics(real64 arPosition, real64 arDelta);
1316  virtual SINOSTimeCharacteristics GetTimeCharacteristics(real64 arPosition, real64 arDelta,
1317  SINOSRampParam* apParam);
1322  virtual SINOSTimeCharacteristics GetTimeCharacteristics(real64 arPosition, real64 arDelta, const char* apParam);
1327  virtual SINOSTimeCharacteristics GetTimeCharacteristics(real64 arStartPosition, real64 arEndPosition,
1328  real64 arDelta);
1333  virtual SINOSTimeCharacteristics GetTimeCharacteristics(real64 arStartPosition, real64 arEndPosition,
1334  real64 arDelta, SINOSRampParam* apParam);
1339  virtual SINOSTimeCharacteristics GetTimeCharacteristics(real64 arStartPosition, real64 arEndPosition,
1340  real64 arDelta, const char* apParam);
1341 
1346  virtual real64 GetMoveTime(real64 arPosition);
1347 
1352  virtual real64 GetAccelerationTime(real64 arPosition);
1353 
1358  virtual real64 GetConstTime(real64 arPosition);
1359 
1364  virtual real64 GetDecelerationTime(real64 arPosition);
1365 
1371  virtual real64 GetMoveTime(real64 arPosition, SINOSRampParam* apParam);
1372 
1378  virtual real64 GetAccelerationTime(real64 arPosition, SINOSRampParam* apParam);
1379 
1385  virtual real64 GetConstTime(real64 arPosition, SINOSRampParam* apParam);
1386 
1392  virtual real64 GetDecelerationTime(real64 arPosition, SINOSRampParam* apParam);
1393 
1399  virtual real64 GetMoveTime(real64 arPosition, const char* apParam);
1400 
1406  virtual real64 GetAccelerationTime(real64 arPosition, const char* apParam);
1407 
1413  virtual real64 GetConstTime(real64 arPosition, const char* apParam);
1414 
1420  virtual real64 GetDecelerationTime(real64 arPosition, const char* apParam);
1421 
1427  virtual real64 GetMoveTime(real64 arPosition, real64 arDelta);
1428 
1434  virtual real64 GetAccelerationTime(real64 arPosition, real64 arDelta);
1435 
1441  virtual real64 GetConstTime(real64 arPosition, real64 arDelta);
1442 
1448  virtual real64 GetDecelerationTime(real64 arPosition, real64 arDelta);
1449 
1456  virtual real64 GetMoveTime(real64 arPosition, real64 arDelta, SINOSRampParam* apParam);
1457 
1464  virtual real64 GetAccelerationTime(real64 arPosition, real64 arDelta, SINOSRampParam* apParam);
1465 
1472  virtual real64 GetConstTime(real64 arPosition, real64 arDelta, SINOSRampParam* apParam);
1473 
1480  virtual real64 GetDecelerationTime(real64 arPosition, real64 arDelta, SINOSRampParam* apParam);
1481 
1488  virtual real64 GetMoveTime(real64 arPosition, real64 arDelta, const char* apParam);
1489 
1496  virtual real64 GetAccelerationTime(real64 arPosition, real64 arDelta, const char* apParam);
1497 
1504  virtual real64 GetConstTime(real64 arPosition, real64 arDelta, const char* apParam);
1505 
1512  virtual real64 GetDecelerationTime(real64 arPosition, real64 arDelta, const char* apParam);
1513 
1521  virtual real64 GetMoveTime(real64 arStartPosition, real64 arEndPosition,
1522  real64 arDelta);
1523 
1531  virtual real64 GetAccelerationTime(real64 arStartPosition, real64 arEndPosition,
1532  real64 arDelta);
1533 
1541  virtual real64 GetConstTime(real64 arStartPosition, real64 arEndPosition,
1542  real64 arDelta);
1543 
1551  virtual real64 GetDecelerationTime(real64 arStartPosition, real64 arEndPosition,
1552  real64 arDelta);
1553 
1562  virtual real64 GetMoveTime(real64 arStartPosition, real64 arEndPosition,
1563  real64 arDelta, SINOSRampParam* apParam);
1564 
1573  virtual real64 GetAccelerationTime(real64 arStartPosition, real64 arEndPosition,
1574  real64 arDelta, SINOSRampParam* apParam);
1575 
1584  virtual real64 GetConstTime(real64 arStartPosition, real64 arEndPosition,
1585  real64 arDelta, SINOSRampParam* apParam);
1586 
1595  virtual real64 GetDecelerationTime(real64 arStartPosition, real64 arEndPosition,
1596  real64 arDelta, SINOSRampParam* apParam);
1597 
1606  virtual real64 GetMoveTime(real64 arStartPosition, real64 arEndPosition,
1607  real64 arDelta, const char* apParam);
1608 
1617  virtual real64 GetAccelerationTime(real64 arStartPosition, real64 arEndPosition,
1618  real64 arDelta, const char* apParam);
1619 
1628  virtual real64 GetConstTime(real64 arStartPosition, real64 arEndPosition,
1629  real64 arDelta, const char* apParam);
1630 
1639  virtual real64 GetDecelerationTime(real64 arStartPosition, real64 arEndPosition,
1640  real64 arDelta, const char* apParam);
1641 
1649  virtual real64 GetMoveAppTime(real64 arPosition, real64 arPositionVel,
1650  real64 arVelocity);
1651 
1660  virtual real64 GetMoveAppTime(real64 arPosition, real64 arPositionVel,
1661  real64 arVelocity, SINOSRampParam* apParam);
1662 
1671  virtual real64 GetMoveAppTime(real64 arPosition, real64 arPositionVel,
1672  real64 arVelocity, const char* apParam);
1673 
1682  virtual real64 GetMoveAppTime(real64 arPosition, real64 arPositionVel,
1683  real64 arVelocity, real64 arDelta);
1684 
1694  virtual real64 GetMoveAppTime(real64 arPosition, real64 arPositionVel,
1695  real64 arVelocity, real64 arDelta, SINOSRampParam* apParam);
1696 
1706  virtual real64 GetMoveAppTime(real64 arPosition, real64 arPositionVel,
1707  real64 arVelocity, real64 arDelta, const char* apParam);
1708 
1718  virtual real64 GetMoveAppTime(real64 arStartPosition, real64 arEndPosition,
1719  real64 arPositionVel, real64 arVelocity, real64 arDelta);
1720 
1731  virtual real64 GetMoveAppTime(real64 arStartPosition, real64 arEndPosition,
1732  real64 arPositionVel, real64 arVelocity, real64 arDelta, SINOSRampParam* apParam);
1733 
1744  virtual real64 GetMoveAppTime(real64 arStartPosition, real64 arEndPosition,
1745  real64 arPositionVel, real64 arVelocity, real64 arDelta, const char* apParam);
1746 
1754  virtual real64 GetMoveDepTime(real64 arPosition, real64 arPositionVel,
1755  real64 arVelocity);
1756 
1765  virtual real64 GetMoveDepTime(real64 arPosition, real64 arPositionVel,
1766  real64 arVelocity, SINOSRampParam* apParam);
1767 
1776  virtual real64 GetMoveDepTime(real64 arPosition, real64 arPositionVel,
1777  real64 arVelocity, const char* apParam);
1778 
1787  virtual real64 GetMoveDepTime(real64 arPosition, real64 arPositionVel,
1788  real64 arVelocity, real64 arDelta);
1789 
1799  virtual real64 GetMoveDepTime(real64 arPosition, real64 arPositionVel,
1800  real64 arVelocity, real64 arDelta, SINOSRampParam* apParam);
1801 
1811  virtual real64 GetMoveDepTime(real64 arPosition, real64 arPositionVel,
1812  real64 arVelocity, real64 arDelta, const char* apParam);
1813 
1823  virtual real64 GetMoveDepTime(real64 arStartPosition, real64 arEndPosition,
1824  real64 arPositionVel, real64 arVelocity, real64 arDelta);
1825 
1836  virtual real64 GetMoveDepTime(real64 arStartPosition, real64 arEndPosition,
1837  real64 arPositionVel, real64 arVelocity, real64 arDelta, SINOSRampParam* apParam);
1838 
1849  virtual real64 GetMoveDepTime(real64 arStartPosition, real64 arEndPosition,
1850  real64 arPositionVel, real64 arVelocity, real64 arDelta, const char* apParam);
1851 
1856  virtual int32 GetMoveTicks(real64 arPosition);
1857 
1862  virtual int32 GetAccelerationTicks(real64 arPosition);
1863 
1868  virtual int32 GetConstTicks(real64 arPosition);
1869 
1874  virtual int32 GetDecelerationTicks(real64 arPosition);
1875 
1881  virtual int32 GetMoveTicks(real64 arPosition, SINOSRampParam* apParam);
1882 
1888  virtual int32 GetAccelerationTicks(real64 arPosition, SINOSRampParam* apParam);
1889 
1895  virtual int32 GetConstTicks(real64 arPosition, SINOSRampParam* apParam);
1896 
1902  virtual int32 GetDecelerationTicks(real64 arPosition, SINOSRampParam* apParam);
1903 
1909  virtual int32 GetMoveTicks(real64 arPosition, const char* apParam);
1910 
1916  virtual int32 GetAccelerationTicks(real64 arPosition, const char* apParam);
1917 
1923  virtual int32 GetConstTicks(real64 arPosition, const char* apParam);
1924 
1930  virtual int32 GetDecelerationTicks(real64 arPosition, const char* apParam);
1931 
1937  virtual int32 GetMoveTicks(real64 arPosition, real64 arDelta);
1938 
1944  virtual int32 GetAccelerationTicks(real64 arPosition, real64 arDelta);
1945 
1951  virtual int32 GetConstTicks(real64 arPosition, real64 arDelta);
1952 
1958  virtual int32 GetDecelerationTicks(real64 arPosition, real64 arDelta);
1959 
1966  virtual int32 GetMoveTicks(real64 arPosition, real64 arDelta, SINOSRampParam* apParam);
1967 
1974  virtual int32 GetAccelerationTicks(real64 arPosition, real64 arDelta, SINOSRampParam* apParam);
1975 
1982  virtual int32 GetConstTicks(real64 arPosition, real64 arDelta, SINOSRampParam* apParam);
1983 
1990  virtual int32 GetDecelerationTicks(real64 arPosition, real64 arDelta, SINOSRampParam* apParam);
1991 
1998  virtual int32 GetMoveTicks(real64 arPosition, real64 arDelta, const char* apParam);
1999 
2006  virtual int32 GetAccelerationTicks(real64 arPosition, real64 arDelta, const char* apParam);
2007 
2014  virtual int32 GetConstTicks(real64 arPosition, real64 arDelta, const char* apParam);
2015 
2022  virtual int32 GetDecelerationTicks(real64 arPosition, real64 arDelta, const char* apParam);
2023 
2031  virtual int32 GetMoveTicks(real64 arStartPosition, real64 arEndPosition,
2032  real64 arDelta);
2033 
2041  virtual int32 GetAccelerationTicks(real64 arStartPosition, real64 arEndPosition,
2042  real64 arDelta);
2043 
2051  virtual int32 GetConstTicks(real64 arStartPosition, real64 arEndPosition,
2052  real64 arDelta);
2053 
2061  virtual int32 GetDecelerationTicks(real64 arStartPosition, real64 arEndPosition,
2062  real64 arDelta);
2063 
2072  virtual int32 GetMoveTicks(real64 arStartPosition, real64 arEndPosition,
2073  real64 arDelta, SINOSRampParam* apParam);
2074 
2083  virtual int32 GetAccelerationTicks(real64 arStartPosition, real64 arEndPosition,
2084  real64 arDelta, SINOSRampParam* apParam);
2085 
2094  virtual int32 GetConstTicks(real64 arStartPosition, real64 arEndPosition,
2095  real64 arDelta, SINOSRampParam* apParam);
2096 
2105  virtual int32 GetDecelerationTicks(real64 arStartPosition, real64 arEndPosition,
2106  real64 arDelta, SINOSRampParam* apParam);
2107 
2116  virtual int32 GetMoveTicks(real64 arStartPosition, real64 arEndPosition,
2117  real64 arDelta, const char* apParam);
2118 
2127  virtual int32 GetAccelerationTicks(real64 arStartPosition, real64 arEndPosition,
2128  real64 arDelta, const char* apParam);
2129 
2138  virtual int32 GetConstTicks(real64 arStartPosition, real64 arEndPosition,
2139  real64 arDelta, const char* apParam);
2140 
2149  virtual int32 GetDecelerationTicks(real64 arStartPosition, real64 arEndPosition,
2150  real64 arDelta, const char* apParam);
2151 
2155  virtual int32 GetExitTicks();
2156 
2161  virtual real64 GetMoveDist(real64 arTime);
2162 
2168  virtual real64 GetMoveDist(real64 arPosition, real64 arTime);
2169 
2175  virtual real64 GetMoveDist(real64 arTime, SINOSRampParam* apParam);
2176 
2183  virtual real64 GetMoveDist(real64 arPosition, real64 arTime,
2184  SINOSRampParam* apParam);
2185 
2191  virtual real64 GetMoveDist(real64 arTime, const char* apParam);
2192 
2199  virtual real64 GetMoveDist(real64 arPosition, real64 arTime,
2200  const char* apParam);
2201 
2207  virtual real64 GetMoveDist(real64 arPosition, uint32 auTicks);
2208 
2215  virtual real64 GetMoveDist(real64 arPosition, uint32 auTicks,
2216  SINOSRampParam* apParam);
2217 
2224  virtual real64 GetMoveDist(real64 arPosition, uint32 auTicks,
2225  const char* apParam);
2226 
2234  virtual real64 GetMoveDist(real64 arStartPosition, real64 arEndPosition,
2235  real64 arTime);
2236 
2245  virtual real64 GetMoveDist(real64 arStartPosition, real64 arEndPosition,
2246  real64 arTime, SINOSRampParam* apParam);
2247 
2256  virtual real64 GetMoveDist(real64 arStartPosition, real64 arEndPosition,
2257  real64 arTime, const char* apParam);
2258 
2266  virtual real64 GetMoveDist(real64 arStartPosition, real64 arEndPosition,
2267  uint32 auTicks);
2268 
2277  virtual real64 GetMoveDist(real64 arStartPosition, real64 arEndPosition,
2278  uint32 auTicks, SINOSRampParam* apParam);
2279 
2288  virtual real64 GetMoveDist(real64 arStartPosition, real64 arEndPosition,
2289  uint32 auTicks, const char* apParam);
2290 
2294  virtual uint64 GetStartTicks(real64 arDelta);
2295 
2299  virtual uint64 GetTargetTicks();
2300 
2304  virtual uint64 GetTargetTicks(real64 arDelta);
2305 
2311  virtual uint32 SegBegin(real64 arSlowMotion = REAL64(1.0), real64 arStartVelocity = REAL64(0.0));
2312 
2319  virtual uint32 SegBegin(real64 arSlowMotion, real64 arStartPosition, real64 arStartVelocity);
2320 
2326  virtual uint32 SegMove(real64 arPosition);
2327 
2334  virtual uint32 SegMove(real64 arPosition, SINOSRampParam* apParam);
2335 
2342  virtual uint32 SegMove(real64 arPosition, const char* apParam);
2343 
2350  virtual uint32 SegMove(real64 arPosition, real64 arVelocity);
2351 
2359  virtual uint32 SegMove(real64 arPosition, real64 arVelocity,
2360  SINOSRampParam* apParam);
2361 
2369  virtual uint32 SegMove(real64 arPosition, real64 arVelocity,
2370  const char* apParam);
2371 
2376  virtual uint32 SegConst(real64 arPosition);
2377 
2382  virtual uint32 SegPos(real64 arTime);
2383 
2389  virtual uint32 SegPosSetTime(real64 arTime);
2390 
2396  virtual uint32 SegVelocity(real64 arVelocity, SINOSRampParam* apParam);
2397 
2403  virtual uint32 SegVelocity(real64 arVelocity, const char* apParam);
2404 
2408  virtual real64 SegTime();
2409 
2414  virtual uint32 SegRun(CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
2415 
2419  virtual uint32 WaitInPosition();
2420 
2424  virtual uint32 GetBusTicksPerAxisTick();
2425 
2426  // pulling
2427 
2438  virtual uint32 Pull(real64 arS, real64 arV, real64 arA, real64 arJ);
2439 
2448  virtual uint32 Pull(SINOSRampData& aData);
2449 
2459  virtual uint32 Pull(SINOSRampDataEx* apData);
2460 
2464  void EnableRamp()
2465  {
2466  // enable trajectory generator
2467  m_pRamp->Enable();
2468  };
2469 
2475  {
2476  // disable trajectory generator
2477  m_pRamp->Disable();
2478  };
2479 
2480  // stop/break/continue functions
2481 
2486  virtual uint32 Stop(CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
2487 
2493  virtual uint32 Stop(SINOSRampParam* apParam, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
2494 
2500  virtual uint32 Stop(const char* apParam, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
2501 
2507  virtual uint32 Stop(real64 arPosition, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
2508 
2515  virtual uint32 Stop(real64 arPosition, SINOSRampParam* apParam,
2516  CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
2517 
2524  virtual uint32 Stop(real64 arPosition, const char* apParam,
2525  CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
2526 
2533  virtual uint32 StopLive();
2534 
2543  virtual uint32 StopLive(real64 arSlowMotion, SINOSRampParam* apParam);
2544 
2554  virtual uint32 StopLiveDelta(real64 arDelta, real64 arSlowMotion, SINOSRampParam* apParam = nullptr);
2555 
2562  virtual uint32 Break(CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
2563 
2571  virtual uint32 Break(SINOSRampParam* apParam, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
2572 
2580  virtual uint32 Break(const char* apParam, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
2581 
2589  virtual uint32 Break(real64 arPosition, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
2590 
2599  virtual uint32 Break(real64 arPosition, SINOSRampParam* apParam,
2600  CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
2601 
2610  virtual uint32 Break(real64 arPosition, const char* apParam,
2611  CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
2612 
2618  virtual uint32 Continue(CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
2619 
2626  virtual uint32 Continue(SINOSRampParam* apParam, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
2627 
2634  virtual uint32 Continue(const char* apParam, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
2635 
2640  virtual uint32 EmergencyStop(CINOSSync* apSync);
2641 
2648  virtual uint32 EmergencyStop(uint16 auType = DF_PRECONFIGURED_EME_STOP_TYPE, uint16 auDelay = DF_PRECONFIGURED_EME_STOP_DELAY,
2649  CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
2650 
2657  virtual uint32 EmergencyStopLive();
2658 
2667  virtual uint32 EmergencyStopLive(uint16 auType, uint16 auDelay = DF_PRECONFIGURED_EME_STOP_DELAY);
2668 
2669  // get/set property functions
2670 
2682  virtual const char* GetName();
2683  //; return axis name
2684  virtual const char* GetType();
2685  //; return axis type
2686  virtual const char* GetUnit();
2687  //; return axis unit
2688  virtual uint32 GetCharacteristics();
2689  //; return axis characteristics
2690  virtual uint8 GetNumber()
2691  //; return axis number
2692  { return (uint8) m_pDesc->m_uNumber;};
2693  virtual uint32 GetOptions()
2694  //; return axis options
2695  { return m_pDesc->m_uOptions;};
2696  virtual char GetShort()
2697  //; return axis short character
2698  { return m_cShort[0];};
2699  virtual void SetShort(char acShort)
2700  //; set axis short character
2701  { m_cShort[0] = acShort;};
2702  virtual void SetPartner(const char* apPartner);
2703  //; set partner axis (used for special move commands)
2704  virtual void SetPartner(CINOSBaseAxis* apPartner);
2705  //; set partner axis (used for special move commands)
2706  virtual void SetCmdPosition(real64 arPosition);
2707  //; set commanded axis position (see comment above)
2708  virtual void SetPathPosition(real64 arPosition){};
2709  //; set commanded path axis position
2710  virtual void GetCmdPosition(real64& arPosition);
2711  //; get commanded axis position (see comment above)
2712  virtual void SetCmdVelocity(real64 arVelocity);
2713  //; set commanded velocity (see comment above)
2714  virtual void GetCmdVelocity(real64& arVelocity, CINOSBaseRamp::ECmdFlags aeFlags = CINOSBaseRamp::eFlgCmdNone);
2715  //; get commanded velocity (see comment above)
2716  virtual void SetCmdAcceleration(real64 arAcceleration);
2717  //; set commanded acceleration (see comment above)
2718  virtual void GetCmdAcceleration(real64& arAcceleration, CINOSBaseRamp::ECmdFlags aeFlags = CINOSBaseRamp::eFlgCmdNone);
2719  //; get commanded acceleration (see comment above)
2720  virtual void SetCmdDeceleration(real64 arDeceleration);
2721  //; set commanded deceleration (see comment above)
2722  virtual void GetCmdDeceleration(real64& arDeceleration, CINOSBaseRamp::ECmdFlags aeFlags = CINOSBaseRamp::eFlgCmdNone);
2723  //; get commanded deceleration (see comment above)
2724  virtual void SetCmdCruiseleration(real64 arCruiseleration);
2725  //; set commanded cruiseleration (see comment above)
2726  virtual void GetCmdCruiseleration(real64& arCruiseleration);
2727  //; get commanded cruiseleration (see comment above)
2728  virtual void SetCmdJerk(real64 arJerk, uint32 auNumber = DF_INOS_RAMP_JERK_ALL);
2729  //; set commanded jerk (see comment above)
2730  virtual void GetCmdJerk(real64& arJerk, uint32 auNumber = 0);
2731  //; get commanded jerk (see comment above)
2732  virtual void SetCmdCruiseJerk(real64 arCruiseJerk);
2733  //; set commanded cruise jerk (see comment above)
2734  virtual void GetCmdCruiseJerk(real64& arCruiseJerk);
2735  //; get commanded cruise jerk (see comment above)
2736  virtual void GetCmdRealJerk(real64& arJerk, uint32 auNumber = 0);
2737  //; get commanded real jerk (see comment above)
2738  virtual void SetCmdSlowMotion(real64 arSlowMotion, bool abUpdate = false);
2739  //; set commanded slowmotion factor
2740  virtual void GetCmdSlowMotion(real64& arSlowMotion, const char* apParam = 0);
2741  //; get commanded slowmotion factor
2742  virtual void GetActSlowMotion(real64& arSlowMotion, const char* apParam = 0);
2743  //; get actual slowmotion factor (slowmotion>slowmotionmax ? slowmotionmax : slowmotion)
2744  virtual void SetCmdRelaxTime(real64 arRelaxTime);
2745  //; set commanded relax time
2746  virtual void GetCmdRelaxTime(real64& arRelaxTime);
2747  //; get commanded relax time
2748  virtual void SetEmgDeceleration(real64 arDeceleration);
2749  //; set commanded emergency deceleration
2750  virtual void GetEmgDeceleration(real64& arDeceleration);
2751  //; get commanded emergency deceleration
2752  //; get commanded relax time
2753  virtual void SetEmgPosition(real64 arPosition);
2754  //; set emergency position
2755  virtual void GetEmgPosition(real64& arPosition);
2756  //; get emergency position
2757 
2758 
2771  virtual uint32 SetActPosition(real64 arPosition);
2772 
2784  virtual void GetActPosition(real64& arPosition, bool abRamp = true);
2785 
2793  double NormPosition(real64 arPosition) const
2794  {
2795  if (m_uFlag & DF_INOS_AXIS_FLAG_NORM){
2796  // norming active
2797  return iNormPosition(arPosition, m_rNormPos, m_uNormMode & DF_INOS_AXIS_NORM_ROUND);
2798  }
2799  else {
2800  // no norming
2801  return arPosition;
2802  }
2803  }
2804 
2805  virtual void GetActPosition(real64& arPosition, uint64 auTicks);
2806  //; get actual commanded position at bus ticks auTicks
2807  virtual uint32 NrmActPosition(real64 arRange = REAL64(0.0), bool abRound = false);
2808  //; norm actual position
2809  virtual void GetActVelocity(real64& arVelocity, bool abMapped = true);
2810  //; get actual commaned velocity (see comment above)
2811  virtual void GetActAcceleration(real64& arAcceleration, bool abRamp = true);
2812  //; get actual commanded acceleratio (see comment above)n
2813  virtual void GetActJerk(real64& arJerk, bool abRamp = true);
2814  //; get actual commanded jerk (see comment above)
2815  virtual uint32 AdjActTime(real64 arDelta);
2816  //; adjust actual move time
2817 
2833  virtual uint32 SetRealPosition(real64 arPosition);
2834 
2846  virtual void GetRealPosition(real64& arPosition, bool abMapped = true);
2847 
2848  virtual void GetRealVelocity(real64& arVelocity);
2849  //; get real velocity (see comment above)
2850  virtual void GetRealAcceleration(real64& arAcceleration);
2851  //; get real acceleration (see comment above)
2852  virtual void GetRealJerk(real64& arJerk);
2853  //; get real jerk (see comment above)
2854  virtual void GetActPosError(real64& arPosError)
2855  { arPosError = REAL64(0.0);};
2856  //; get actual position error (see comment above)
2857  virtual void GetActVelocityError(real64& arVelocityError, bool abFiltered = false)
2858  { arVelocityError = REAL64(0.0);};
2859  //; get actual position error
2860  virtual void GetUnitsPerInc(double& adUnits);
2861  //; get number of units per one inc
2862  virtual void GetIncsPerUnit(double& adIncs);
2863  //; get number of incs per unit
2864  virtual void SetMinPosition(real64 arPosition);
2865  //; set min. allowed position
2866  virtual void GetMinPosition(real64& apPosition) const;
2867  //; get min. allowed position
2868  virtual void SetMaxPosition(real64 arPosition);
2869  //; set max. allowed position
2870  virtual void GetMaxPosition(real64& arPosition) const;
2871  //; get max. allowed position
2872  virtual bool CheckPosition(real64& arPosition, bool abIgnoreMapping = false, SINOSRampParam* apParam = nullptr);
2873  //; return true if arPosition within the range or no range requested
2874  virtual void SetMinVelocity(real64 arVelocity);
2875  //; set min. allowed velocity
2876  virtual void SetMaxVelocity(real64 arVelocity);
2877  //; set max. allowed velocity
2878  virtual void SetMaxSetupVelocity(real64 arVelocity);
2879  //; set max. allowed velocity in setup mode
2880  virtual void SetMaxInitVelocity(real64 arVelocity);
2881  //; set max. allowed velocity during initialization
2882  virtual void GetMinVelocity(real64& arVelocity);
2883  //; get min. allowed velocity
2884  virtual void GetMaxVelocity(real64& arVelocity, uint32 auFlags = eMaxVelocityNone);
2885  //; get max. allowed velocity
2886  virtual void GetTrqVelocity(real64& arVelocity);
2887  //; get torque velocity
2888  virtual void GetMaxSetupVelocity(real64& arVelocity);
2889  //; get max. allowed velocity in setup mode
2890  virtual void GetMaxInitVelocity(real64& arVelocity);
2891  //; get max. allowed velocity during initialization
2892  virtual void SetMinAcceleration(real64 arAcceleration);
2893  //; set min. allowed acceleration
2894  virtual void SetMaxAcceleration(real64 arAcceleration);
2895  //; set max. allowed acceleration
2896  virtual void SetMaxAccelerationPull(real64 arAcceleration);
2897  //; set max. allowed acceleration during pull
2898  virtual void GetMinAcceleration(real64& arAcceleration);
2899  //; get min. allowed acceleration
2900  virtual void GetMaxAcceleration(real64& arAcceleration);
2901  //; get max. allowed acceleration
2902  virtual void GetMaxAccelerationPull(real64& arAcceleration);
2903  //; get max. allowed acceleration during pull
2904  virtual void GetTrqAcceleration(real64& arAcceleration);
2905  //; get torque acceleration
2906  virtual void SetMinDeceleration(real64 arDeceleration);
2907  //; set min. allowed deceleration
2908  virtual void SetMaxDeceleration(real64 arDeceleration);
2909  //; set max. allowed deceleration
2910  virtual void GetMinDeceleration(real64& arDeceleration);
2911  //; get min. allowed deceleration
2912  virtual void GetMaxDeceleration(real64& arDeceleration);
2913  //; get max. allowed deceleration
2914  virtual void GetTrqDeceleration(real64& arDeceleration);
2915  //; get tourque deceleration
2916  virtual void SetMinCruiseleration(real64 arCruiseleration);
2917  //; set min. allowed cruiseleration
2918  virtual void SetMaxCruiseleration(real64 arCruiseleration);
2919  //; set max. allowed cruiseleration
2920  virtual void GetMinCruiseleration(real64& arCruiseleration);
2921  //; get min. allowed cruiseleration
2922  virtual void GetMaxCruiseleration(real64& arCruiseleration);
2923  //; get max. allowed cruiseleration
2924  virtual void SetMinJerk(real64 arJerk);
2925  //; set min. allowed jerk
2926  virtual void SetMaxJerk(real64 arJerk);
2927  //; set max. allowed jerk
2928  virtual void GetMinJerk(real64& arJerk);
2929  //; get min. allowed jerk
2930  virtual void GetMaxJerk(real64& arJerk);
2931  //; get max. allowed jerk
2932  virtual void GetEpsilon(real64& arEpsilon);
2933  //; get axis epsilon
2934  virtual void GetCycleTime(real64& arCycleTime, bool abOversampled=false);
2935  //; get axis cycle time [sec]
2936  virtual void GetCycleTimeUs(uint32& auCycleTime);
2937  //; get axis cycle time [us]
2938  virtual void GetCycleTimeNs(uint32& auCycleTime);
2939  //; get axis cycle time [ns]
2940  virtual uint8 GetOversampling();
2941  //; get oversampling factor
2942  virtual uint16 GetCycleNumber();
2943  //; get axis cycle number
2944  virtual uint16 GetCycleId();
2945  //; get axis cycle id
2946  virtual void UpdateCycleId(uint16 auCycleId);
2947  //; inform about updated cycle id (core id and cycle number could have changed)
2948  virtual uint8 GetBusId();
2949  //; get axis bus id
2950  virtual uint32 SetParam(const char* apName, real64 arValue);
2951  //; universal set parameter with aName to aValue and return error code
2952  virtual uint32 SetParam(const char* apName, uint64 auValue)
2953  //; universal set parameter with aName to aValue and return error code
2954  { return defVarNotFound;};
2955  virtual uint32 GetParam(const char* apName, real64& arResult);
2956  //; universal get parameter with aName to aResult and return error code
2957  virtual uint32 GetParam(const char* apName, uint64& auResult)
2958  //; universal get parameter with aName to aResult and return error code
2959  { return defVarNotFound;};
2960  virtual volatile real64* GetParamAdr(const char* apName);
2961  //; universal get address of parameter with aName or NULL if not found
2962  void SetFlag(uint32 auFlag)
2963  { INOS_OR(m_uFlag, auFlag);};
2964  //; set axis flags
2965  void ClrFlag(uint32 auFlag)
2966  { INOS_AND(m_uFlag, ~auFlag);};
2967  //; clear axis flags
2968  uint32 GetFlag()
2969  { return m_uFlag & m_uFlagEnb;};
2970  //; get axis flags
2971  void Absolute()
2972  { ClrFlag(DF_INOS_AXIS_FLAG_INCR);};
2973  //; switch to absolute mode
2974  void Incremental()
2975  { SetFlag(DF_INOS_AXIS_FLAG_INCR);};
2976  //; switch to incremental mode
2977  virtual uint32 SetState(uint32 auState);
2978  //; set axis state (used to set from ready to active to be able to force sync)
2979  virtual int32 GetState();
2980  //; get axis state
2981  virtual int32 GetState(uint32& auRampState);
2982  //; get axis and ramp state
2983  const char* GetStateText() const;
2984  //; \return A human readable text describing the current axis state.
2985  virtual bool IsBusy() const;
2986  //; Whether the axis is busy or not. Busy means: The axis is "used"
2987  //; by someone. E.g. the axis is also busy if it's in the "Coupled"
2988  //; state, which means that this axis is the "slave" and therefore
2989  //; it gets its positions/commands from its master axis. The axis
2990  //; is also busy if it is in "break" state (which means it is not
2991  //; currently moving, but it'll continue an already started move
2992  //; later). And it is also 'busy' if it's in "relax" state. In
2993  //; fact, the axis is always busy, unless it is in undefined,
2994  //; disabled, active, peace or read state.
2995  //; return true if the axis is currently busy. false otherwise.
2996  virtual uint32 GetError(bool abResolveExternal = false);
2997  //; get axis error
2998  virtual uint64 GetErrorEx(bool abResolveExternal = false);
2999  //; get extended axis errors
3000  virtual uint32 GetError(uint32& auRampError, bool abResolveExternal = false);
3001  //; get axis and ramp error
3002  virtual uint64 GetErrorEx(uint64& auRampError, bool abResolveExternal = false);
3003  //; get extended axis and ramp error
3004  virtual uint32 GetErrorHook() { return m_uErrorHook; };
3005  //; get axis and ramp error
3006  virtual bool IsErrorFatal()
3007  //; return true if error is fatal
3008  { return false;};
3009  virtual uint32 GetWarning(bool abResolveExternal = false);
3010  //; get axis warning
3011  virtual uint64 GetWarningEx(bool abResolveExternal = false);
3012  //; get extended axis warning
3013  virtual uint32 GetWarning(uint32& auRampWarning, bool abResolveExternal = false);
3014  //; get axis and ramp warning
3015  virtual uint64 GetWarningEx(uint64& auRampWarning, bool abResolveExternal = false);
3016  //; get extended axis and ramp warning
3017  virtual uint32 GetLimitViolation() { return m_uLimitViolation;};
3018  //; get axis limit violation
3019  virtual void SetErrorMask(uint32 auMask) { m_uErrorMask = auMask;};
3020  //; set error mask and return old mask
3021  virtual void SetWarningMask(uint32 auMask) { m_uWarningMask = auMask;};
3022  //; set warning mask and return old mask
3023  virtual void SetLimitViolation(uint32 auLimitViolation)
3024  { INOSOr(&m_uLimitViolation, auLimitViolation);};
3025  //; set axis limit violation
3026  virtual uint32 GetErrorMask() { return m_uErrorMask;};
3027  //; get actual error mask
3028  virtual uint32 GetWarningMask() { return m_uWarningMask;};
3029  //; get actual warning mask
3030  virtual uint32 AcceptError();
3031  //; accept all errors
3032  virtual uint32 AcceptError(uint32 auError);
3033  //; accept error
3034  virtual uint32 AcceptError(uint32 auError, uint32 auRampError);
3035  //; accept error
3036  virtual uint32 AcceptWarning();
3037  //; accept all warnings
3038  virtual uint32 AcceptWarning(uint32 auWarning);
3039  //; accept warning
3040  virtual uint32 AcceptWarning(uint32 auWarning, uint32 auRampWarning);
3041  //; accept warning
3042  virtual uint32 AcceptLimitViolation() { m_uLimitViolation = 0; return 0;};
3043  //; get axis limit violation
3044 
3045  // param set functions
3046  virtual void eCreateParamSet(const char* apSetName);
3047  //; Same as CreateParamSet but for INCO registration (as it doesn't return
3048  //; a pointer)
3049  virtual CINOSBaseAxisParamSet* CreateParamSet(const char* apSetName);
3050  //; create new param set with name apSetName and return pointer to it
3051  virtual void DestroyParamSet(const char* apSetName);
3052  //; destroy param set with name apSetName
3053  virtual bool SelectParamSet(const char* apSetName);
3054  //; select param set with name apSetName
3055 
3056  enum {
3057  eFlgParamSetNone = 0x00000000,
3058  eFlgParamSetSearchGlobal = 0x00000001,
3059  eFlgParamSetIgnoreOverwrite = 0x00000002
3060  };
3061 
3062  virtual CINOSBaseAxisParamSet* GetParamSet(const char* apSetName, uint32 auFlags = eFlgParamSetSearchGlobal);
3063  //; get pointer to param set with name apSetName
3064  virtual SINOSRampParam* GetRampParam(const char* apSetName, uint32 auFlags = eFlgParamSetSearchGlobal);
3065  //; get pointer to ramp param of set apSetName
3066  virtual bool GetRampParam(const char* apSetName, char* apResult, uint32 auSize,
3067  SINOSRampParam& aResult, uint32 auFlags = eFlgParamSetSearchGlobal);
3068  //; copy ramp param data to aResult and return true if successful, copy also to original speed set
3069  //; name to apResult. This method is also able to handle the xxx[V/A/B=yyy] case
3070  virtual void PreDestroyRampParam(SINOSRampParam* apParam);
3071  //; use this method to inform axis, that we're about to destroy a previously
3072  //; used speed set
3073 
3074  static void eCreateGlobalParamSet(const char* apSetName);
3075  //; Same as CreateParamSet but for INCO registration (as it doesn't return
3076  //; a pointer)
3077  static CINOSBaseAxisParamSet* CreateGlobalParamSet(const char* apSetName);
3078  //; create new param set with name apSetName and return pointer to it
3079  static void DestroyGlobalParamSet(const char* apSetName);
3080  //; destroy param set with name apSetName
3081  static CINOSBaseAxisParamSet* GetGlobalParamSet(const char* apSetName);
3082  //; get pointer to param set with name apSetName
3083  static SINOSRampParam* GetGlobalRampParam(const char* apSetName);
3084  //; get pointer to ramp param of set apSetName
3085 
3086  // pos type functions
3087  virtual void SetPosType(uint32 auPosType)
3088  //; set pos type
3089  { m_uPosType = auPosType; };
3090  virtual void SetPosTime(uint32 auPosTime)
3091  //; set pos time
3092  { m_uPosTime = auPosTime; };
3093  virtual void SetPosTimeout(uint32 auPosTimeout)
3094  //; set pos timeout
3095  { m_uPosTimeout = auPosTimeout; };
3096  virtual void SetPosTolerance(real64 arPosTolerance)
3097  //; set pos tolerance
3098  { m_rPosTolerance = arPosTolerance; };
3099 
3100  // param set extensions
3101 
3102  #if defined(INOS_AXIS_EXTENSION_SUPPORT)
3103  SINOSParamSetExtension* GetParamSetExtension(uint32 auExtensionId)
3105  {
3106  // handle over
3107  return m_pRamp->GetParamSetExtension(auExtensionId);
3108  }
3110  real64 GetMoveTimeAdjust(SINOSRampParam* apParam);
3111  #endif
3112 
3113  // caching functions
3114 
3115  void EnableCache(uint32 auSize = 32);
3116  //; create moving cache with size auSize if nessecary and enable it
3117  CINOSRampCache* EnableCache(CINOSRampCache* apCache);
3118  //; set actual moving cache to apCache and return old one or 0
3119  CINOSRampCache* DisableCache();
3120  //; disable moving cache and return old one
3121  void ReEnableCache();
3122  //; Reenables a previously disabled ramp cache. This function is
3123  //; useful if the cache feature has temporarily been disabled
3124  //; before (DisableCache). Note: This function has no effect if
3125  //; the ramp does not yet owns a cache object. Also: It's safe
3126  //; to call this function while the cache is already enabled.
3127  void FlushCache();
3128  //; flush ramp cache
3129  void SetCacheEpsilon(real64 arEpsilon);
3130  //; set new cache 'epsilon' (standard is = 0.0)
3131  #ifdef INOS_MOVE_CACHE_SUPPORT
3132  void FlushMoveCache();
3133  //; flush moving cache
3134  #endif
3135 
3136  // safety
3137 
3138  #ifdef INOS_SAFETY_SUPPORT
3139  virtual void EnableSafetySupervision();
3142  virtual bool DisableSafetySupervision();
3144  virtual void ToggleSafetySupervision();
3145  #endif
3146 
3147  // miscellaneous functions
3148 
3149  virtual CINCOObject* GetRegister();
3150  //; do inco registration and return pointer to it
3151  virtual void SetRamp(CINOSBaseRamp* apRamp);
3152  //; set new ramp geni
3153  CINOSBaseRamp* GetRamp()
3154  { return m_pRamp;};
3155  //; return pointer to ramp geni
3156  virtual CINOSMapping* GetMapping()
3157  { return m_pMapping;};
3158  //; return pointer to actual axis mapping
3159  uint32 GetMappingIndex()
3160  { return m_uMappingIndex;};
3161  //; get actual mapping index
3162 
3163  // miscellaneous functions
3164 
3165  virtual uint32 RegisterHook(uintid& auHookId, void* apHandler, void* apObject,
3166  int32 aiOrder, bool abEnabled=true);
3167  //; register bus hook that runs in the same bus context, core,
3168  //; category, cyclenumber and cycletime as the axis
3169  virtual uint32 UnRegisterHook(uintid auHookId);
3170  //; unregister bus hook
3171  virtual uint32 EnableHook(uintid auHookId);
3172  //; enable hook
3173  virtual uint32 DisableHook(uintid auHookId);
3174  //; disable hook
3175  virtual uint32 RegisterPostHook(uintid& auHookId, void* apHandler, void* apObject,
3176  int32 aiOrder, bool abEnabled=true);
3177  //; register post bus hook that runs in the same bus context, core,
3178  //; category, cyclenumber and cycletime as the axis
3179  virtual uint32 UnRegisterPostHook(uintid auHookId);
3180  //; unregister bus hook
3181  virtual uintid RegisterErrorHook(void* apHandler, void* apObject = 0);
3182  //; register error hook and return hook id
3183  virtual void UnRegisterErrorHook(uintid auHookId);
3184  //; unregister error hook
3185  virtual uintid RegisterWarningHook(void* apHandler, void* apObject = 0);
3186  //; register Warning hook and return hook id
3187  virtual void UnRegisterWarningHook(uintid auHookId);
3188  //; unregister Warning hook
3189  #ifdef INOS_SAFETY_SUPPORT
3190  virtual uintid RegisterSOSHook(void* apHandler, void* apObject = 0);
3191  //; register SOS hook and return hook id
3192  virtual void UnRegisterSOSHook(uintid auHookId);
3193  //; unregister SOS hook
3194  #endif
3195 
3196  #if defined(INOS_AXIS_EXTENSION_SUPPORT)
3197  virtual void RegisterExtension(IINOSBaseAxisExtension* apExtension);
3200  virtual void UnRegisterExtension(IINOSBaseAxisExtension* apExtension);
3201  #endif
3202 
3203  // auto sync
3204 
3205  virtual void EnableSync(real64 arPosition = REAL64(0.0),
3206  uint8 auMode = DF_INOS_AXIS_SYNC_NOADJ){};
3207  //; enable auto syncing (at sync set pos = arPosition)
3208  virtual void DisableSync(){};
3209  //; disable auto syncing
3210  virtual void GetSyncCount(uint32& auSyncCount)
3211  { auSyncCount = 0;};
3212  //; return actual sync counter
3213  virtual void SetSyncCount(uint32 auSyncCount){};
3214  //; set sync counter
3215 
3216  // auto norm
3217 
3238  virtual void EnableNorm(uint8 auMode = DF_INOS_AXIS_NORM_AFTER,
3239  uint8 auMoveDir = DF_INOS_AXIS_NORM_MOVE_DIR_NO,
3240  real64 arNormPos = REAL64(0.0));
3242  virtual void DisableNorm();
3243 
3245  virtual uint8 GetNormMoveDir()
3246  { return m_uNormMoveDir; };
3247 
3249  virtual void SetNormMoveDir(uint8 auNormMoveDir)
3250  { m_uNormMoveDir = auNormMoveDir; };
3251 
3253  virtual uint8 GetNormMode()
3254  { return m_uNormMode; };
3255 
3257  virtual void SetNormMode(uint8 auNormMode)
3258  { m_uNormMode = auNormMode; };
3259 
3260  // current limitation
3261 
3262  virtual void EnableCurLimit(){};
3263  //; enable current limitation
3264  virtual void DisableCurLimit(){};
3265  //; disable current limitation
3266  virtual bool GetCurLimit()
3267  //; return state of current limitation
3268  { return (m_uFlag & DF_INOS_AXIS_FLAG_CURL) != 0;};
3269 
3270  enum EActualType {
3271  eActInput,
3272  eActActual,
3273  eActOutput
3274  };
3276  SINOSRampData* GetActual(EActualType aeType = eActOutput, bool abCopy = true)
3277  {
3278  // check reqeusted type
3279  if (aeType == eActInput) {
3280  // return pointer to ramp values
3281  return m_pActRamp;
3282  } // end if
3283  else if (aeType == eActActual) {
3284  // return pointer to actual values
3285  return m_pActual;
3286  } // end if
3287  else {
3288  // copy requested ?
3289  if (abCopy && (m_pActual == m_pActRamp)) {
3290  // yes
3292  }
3293  // actuals are now control avalues
3295  // return pointer to output values
3296  return m_pActControl;
3297  } // end else
3298  };
3301  { return m_pRealVrt;};
3304  { return m_pActRamp;};
3307  { return GetActual(eActOutput, false);};
3308 
3309  // safety move
3310 
3311  virtual void SetMoveSafeMin(real64 arMin, real64 arFact1=REAL64(0.0),
3312  real64 arFact2=REAL64(0.0));
3313  //; set move safe minimum : arMin=requested minimum,
3314  //; safe1=safe1+arFact(MoveSafeMin-calcedMin), safe2=dito
3315  virtual void ResetMoveSafeMin();
3316  //; reset move safe minimum
3317 
3318  // setup mode
3319 
3320  void EnableSetupMode();
3321  //; enable setup mode
3322  void DisableSetupMode();
3323  //; disable setup mode
3324  virtual bool CheckSetupMode();
3325  //; return true if setup mode active and fullfilled
3326 
3327  #ifdef INOS_USE_CUSTOMER_IMAGE_DATA
3328  void* GetCustomerSpecificData() const { return m_pCustomerSpecificData; }
3329  //; \return The pinter to the customer specific data (or NULL if
3330  //; no such data are set).
3331  void SetCustomerSpecificData(void* apData) { m_pCustomerSpecificData = apData; }
3332  //; Sets apData to be the "customer specific data" of this axis.
3333  //; The function doesn't care about any previously set customer
3334  //; specific data: The caller is 100% responsible for freeing amy
3335  //; resource related to these data!
3336  //; This class will never access the data in any way apart from
3337  //; initialization to NULL during object contstruction!
3338  #endif
3339 
3341  virtual uint32 GetToggleCnt()
3342  { return m_uToggleCnt; };
3344  virtual void SetToggleCnt(uint32 auSetVal)
3345  { m_uToggleCnt=auSetVal; };
3346 
3347  #ifdef INOS_MOVEPATH_SUPPORT
3348  void SetMovePathActuals(struct SINOSMovePathActual* apActuals);
3349  #endif
3350 
3351  // torque limitation
3352 
3355  { return m_pRamp->GetTrqLimitAcceleration(); };
3358  { return m_pRamp->GetTrqLimitDeceleration(); };
3359 
3360  // multicore
3361 
3363  uint8 GetCoreId()
3364  { return m_uCoreId; };
3365 
3366  #ifdef INOS_SAFETY_SUPPORT
3367  uint32 GetSafetyUid()
3369  { return m_uSafetyUid; };
3371  uint32 GetSafetyType()
3372  { return m_uSafetyType; };
3374  ESafetyFunction GetSafetyFunction() const {
3375  return m_eSafetyFunction;
3376  }
3377  #endif
3378 
3379  //--- internals --------------------------------------------------------
3380 
3381  // after this function you can register new ramps
3382  friend void _INI_0000_CINOSBaseAxis();
3383  friend void _INI_0400_CINOSBaseAxis();
3384  friend class CINOSRegisterBaseAxis;
3385  friend class CINOSMapping;
3386  friend class CINOSPhysicalAxis;
3387  friend void _INI_0400_INFO_DCM();
3388  friend class CINOSBaseAxisTest;
3389  friend class CINOSMovePathResourcePosAxis;
3390  friend class CINOSMcRobotCmdMove;
3391  friend class CINOSMcRobotCmdInit;
3392  friend class CINOSMcRobotCmdCalib;
3393  friend class CINOSMcTargetAxis;
3394 
3395  // protected member functions
3396  protected:
3397  void Create();
3398  //; create base axis
3399  real64 iNormPosition(real64 arPosition, real64 arRange = REAL64(0.0), bool abRound = false) const;
3400  //; norm arPosition to 0..360
3401  void Signal(CINOSSync*& apSync);
3402  //; signal sync object if requested
3403  virtual void SignalSync(CINOSSync& apSync);
3404  //; signal given sync object
3405  virtual void SetError(uint32 auErrors);
3406  //; set axis error (and call error hook if nessecary)
3407  virtual void SetWarning(uint32 auWarnings);
3408  //; set axis warning (and call warning hook if nessecary)
3409 #ifdef INOS_SAFETY_SUPPORT
3410  virtual void CallSOSHooks();
3411  //; call SOS hooks
3412 #endif // INOS_SAFETY_SUPPORT
3413  bool Enter(uint32 auCommand, CINOSSync* apSync = 0);
3414  //; check if command allowed in current state and return false if not
3415  void Exit ();
3416  //; leave critical section
3417  void Exit (CINOSSync*& apCmdSync, CINOSSync* apSync);
3418  //; leave critical section and wait if nessecary
3419  bool IsCritical()
3420  { return m_CmdLock.GetOwner() != 0;};
3421  //; return true if somebody stays in critical section
3422  virtual void iInActivate();
3423  //; inactivate axis
3424  virtual void iStop(SINOSRampParam* apParam);
3425  //; internal stop
3426  virtual void iEmergencyStop(bool abLive = false);
3427  //; internal emergency stop
3428  virtual void iPowerEmergencyStop();
3429  //; internal power failure emergency stop
3430  virtual uint32 iCursor(bool abPositive, uint32 auWaitTime,
3431  real64 arStep, SINOSRampParam* apParam);
3432  //; internal cursor
3433  virtual uint32 iCursor(real64 arPosition, uint32 auWaitTime,
3434  real64 arStep, SINOSRampParam* apParam);
3435  //; internal cursor
3436  real64 iGetAbsPosition(real64 arRelPosition);
3437  //; get absolute position of arRelPosition
3438  real64 iGetNrmAbsPosition(real64 arRelPosition, SINOSRampParam* apParam = nullptr, bool abConsiderStop = false);
3439  //; get normed absolute position of arRelPosition
3440  virtual void iSetCycleTime(real64 arCycleTime);
3441  //; set axis cycle time [sec]
3442  virtual void iRegisterAxis();
3443  //; register axis
3444  ICACHE virtual void iPreMap();
3445  //; pre mapping handler
3446  ICACHE virtual void iPostMap();
3447 
3448  ICACHE inline void iCheckRampLimits() {
3449  if (m_pRamp->GetError() & ER_INOS_RAMP_VMAX_REACHED) {
3450  SetError(ER_INOS_AXIS_RAMP_LIMIT);
3451  }
3452  }
3453 
3454  //; post mapping handler
3455  ICACHE virtual void iPostWrite();
3456  //; post bus write handler
3457  void SetMapping(CINOSMapping* apMapping, uint32 auIndex)
3458  { m_pMapping = apMapping; m_uMappingIndex = auIndex;
3459  m_pRamp->SetMapping(apMapping, auIndex);};
3460  //; set actual axis mapping
3461  void ResetMapping()
3462  { m_pMapping = 0; m_uMappingIndex = 0;
3463  m_pRamp->ResetMapping();};
3464  //; reset actual axis mapping
3465  virtual bool iInPosition(bool abEarlyDone);
3466  //; returns true if requested position reached
3467  virtual bool iInPosition();
3468  //; returns true if requested position reached (originally, only
3469  //; this overload existed. Then, the abEarlyDone was introduced.
3470  //; Unfortunately, as this function was already 'virtual' we could
3471  //; not just add abEalyDone with a default value, as it would
3472  //; cause derived class, implemented by customers, to not function
3473  //; properly anymore.
3474  virtual void iAdjPreviousPositions(real64 arDifference);
3475  //; adjust previous axis positions (used in limit checker)
3476  virtual void iSetActRampPosition(real64 arPosition);
3477  //; set actual ramp geni position
3478  virtual bool IsCheckPositionRequired();
3479  //; return true if check position required
3480  void SetDefaultParamIfRequired();
3481  //; Sets the "default param" values (V,A,J) to the ramp if those
3482  //; ramp values are current undefined (means: are 0.0). Function does
3483  //; nothing otherwise, or if no "default param" has been specified
3484  //; in the axis config (e.g. in dt2)
3485  void iSetupPositionType(SINOSRampParam* apParam = 0);
3486  //; init position type handling
3487  virtual void iResetTrajectory();
3488  //; reset trajectory planner
3489 
3490  void iCoreMismatchError();
3491  //; set core mismatch axis error
3492 
3493  INOS_INLINE void AtomicEnter(uint32& auToken)
3494  {
3495  CINOSBus* pBus=CINOSBus::FindBus(GetBusId());
3496  if (pBus) {
3497  pBus->AtomicGatherEnter(auToken);
3498  } else {
3499  // no bus -> no token
3500  auToken = 0;
3501  }
3502  }
3503 
3504  INOS_INLINE bool AtomicExit(uint32 auToken)
3505  {
3506  CINOSBus* pBus=CINOSBus::FindBus(GetBusId());
3507  if (pBus) {
3508  return pBus->AtomicGatherExit(auToken);
3509  } else {
3510  // no bus -> always OK
3511  return true;
3512  }
3513  }
3514 
3515  // private member functions (external versions, because until now we are not
3516  // able to register functions with default parameters)
3517  private:
3518  uint32 eEnable();
3519  //; enable axis
3520  uint32 eDisable();
3521  //; disable axis
3522  uint32 eActivate(bool abCheckPos, bool abSimulatePos, bool abSimulateOut,
3523  bool abSimulateAct);
3524  //; activate physical axis
3525  uint32 eInActivate();
3526  //; inactivate physical axis
3527  uint32 eRelax(uint32 auTimeMs);
3528  //; relax coupled axis
3529  uint32 eMove(real64 arPosition);
3530  //; move to position with acc/deceleration and velocity
3531  uint32 eMove(real64 arPosition, char* apParam);
3532  //; move to position with apParam parameters
3533  uint32 eMoveTime(real64 arPosition, real64 arTime);
3534  //; move to position with acc/deceleration and velocity
3535  uint32 eMoveTime(real64 arPosition, real64 arTime, char* apParam);
3536  //; move to position with apParam parameters
3537  uint32 eMoveApp(real64 arPosition, real64 arPositionVel, real64 arVelocity);
3538  //; move to position with acc/deceleration and velocity
3539  uint32 eMoveApp(real64 arPosition, real64 aPositionVel, real64 arVelocity, char* apParam);
3540  //; move to position with apParam parameters
3541  uint32 eMoveDep(real64 arPosition, real64 arPositionVel, real64 arVelocity);
3542  //; move to position with acc/deceleration and velocity
3543  uint32 eMoveDep(real64 arPosition, real64 aPositionVel, real64 arVelocity, char* apParam);
3544  //; move to position with apParam parameters
3545  uint32 eSync(real64 arPosition);
3546  //; sync axis
3547  uint32 eSync(real64 arPosition, char* apParam);
3548  //; sync axis
3549  uint32 eSync(real64 arPosition, real64 arSyncPosition);
3550  //; sync axis
3551  uint32 eSync(real64 arPosition, real64 arSyncPosition, char* apParam);
3552  //; sync axis
3553  uint32 eCursor();
3554  //; cursor
3555  uint32 eUpdate();
3556  //; update
3557  uint32 eUpdate(const char* apParam);
3558  //; update
3559  uint32 eEndless(bool abPositive);
3560  //; move to position with acc/deceleration and velocity
3561  uint32 eEndless(bool abPositive, const char* aparam);
3562  //; move to position with acc/deceleration and velocity
3563  uint32 eStop();
3564  //; stop
3565  uint32 eStop(const char* apParam);
3566  //; stop
3567  uint32 eStop(real64 arPosition);
3568  //; stop
3569  uint32 eStop(real64 arPosition, const char* apParam);
3570  //; stop
3571  uint32 eBreak();
3572  //; break
3573  uint32 eBreak(const char* apParam);
3574  //; break
3575  uint32 eBreak(real64 arPosition);
3576  //; break
3577  uint32 eBreak(real64 arPosition, const char* apParam);
3578  //; break
3579  uint32 eEmergencyStop();
3580  //; emergency stop
3581  uint32 eEmergencyStop(uint32 auType, uint32 auDelay);
3582  //; emergency stop
3583  uint32 eContinue();
3584  //; stop
3585  uint32 eContinue(const char* apParam);
3586  //; stop
3587  void eSetSlowMotion(real64 arSlowMotion);
3588  //; stop
3589  void ePos1();
3590  //; move to pos 1
3591  void ePos2();
3592  //; move to pos 2
3593  void eToggle();
3594  //; toggle between pos 1 and pos 2
3595  void eZero();
3596  //; set act pos = 0
3597  uint32 eAcceptError();
3598  //; accept all pending errors
3599  uint32 eAcceptWarning();
3600  //; accept all pending warnings
3601  void iToggling();
3602  //; toggle handler (called cyclic)
3603  void iCursoring();
3604  //; toggle handler (called cyclic)
3605  bool iTrack(const char* apVarName, real64 arFactor, uint32 auFilterLength);
3606  //; track the variable apVarName
3607  uint32 _Track(const char* apVarName, real64 arFactor, uint32 auFilter,
3608  uint32 auDirection, SINOSRampParam* apParam);
3609  void iTrackFollow();
3610  //; tracking handler (called cyclic)
3611  void iTrackKeep();
3612  //; tracking handler (called cyclic)
3613 
3614  // protected members
3615  protected:
3616  int32 m_uState;
3617  //; actual state
3618  uint32 m_uSubState;
3619  //; actual sub state
3620  uint32 m_uNxtState;
3621  //; next state
3622  uint32 m_uPrvState;
3623  //; previous state
3624  uint32 m_uBrkState;
3625  //; state before break
3626  uint32 m_uRmpState;
3627  //; state of ramp geni before GetSVAJ
3628  uint32 m_uError;
3629  //; actual errors
3630  uint32 m_uErrorMask;
3631  //; actual error mask
3632  uint32 m_uErrorHook;
3633  //; actual hook error
3634  uint32 m_uWarning;
3635  //; actual warnings
3636  uint32 m_uWarningMask;
3637  //; actual warnings mask
3638  uint32 m_uLimitViolation;
3639  //; actual limit violation mask
3640  uint32 m_uFlag;
3641  //; axis flags (zero, norm, ...)
3642  uint32 m_uFlagEnb;
3643  //; axis flags enable
3644 
3645  const char* m_pName;
3646  //; axis name
3647  const char* m_pType;
3648  //; axis type
3649  char m_cShort[2];
3650  //; short character
3651  CINOSBaseAxis* m_pPartner;
3652  //; pointer to partner axis
3653  CINCOObject* m_pRegister;
3654  //; pointer to inco registration
3655  CINCOObject* m_pCommand;
3656  //; pointer to inco registration of commands
3657  CINCOObject* m_pTest;
3658  //; pointer to inco registration of axis test
3659  CINCOObject* m_pError;
3660  //; pointer to inco registration of axis errors
3661  CINCOObject* m_pWarning;
3662  //; pointer to inco registration of axis warnings
3663  CINCOObject* m_pLimitViolation;
3664  //; pointer to inco registration of limit violations
3665  CINCOObject* m_pFlag;
3666  //; pointer to inco registration of axis flags
3667  CINCOObject* m_pState;
3668  //; pointer to inco registration of axis state
3669  CINOSBaseRamp* m_pRamp;
3670  //; pointer to ramp generator
3671  CINOSLimitChecker* m_pLimitChecker;
3672  //; pointer to limit checker
3673  CINOSMapping* m_pMapping;
3674  //; pointer to actual mapping
3675  uint32 m_uMappingIndex;
3676  //; index this axis has in the actual mapping
3677  SINOSBaseAxis* m_pDesc;
3678  //; pointer to object descriptor
3679  CINOSMutex m_CmdLock;
3680  //; mutex to guarantee mutual exclusion in command handling
3681  CINOSSync* m_pActivate;
3682  //; pointer to synch object to be signaled on end of activate
3683  CINOSSync* m_pInActivate;
3684  //; pointer to synch object to be signaled on end of inactivate
3685  CINOSSync* m_pMove;
3686  //; pointer to synch object to be signaled on end of move
3687  CINOSSync* m_pEndless;
3688  //; pointer to synch object to be signaled on end of endless
3689  CINOSSync* m_pStop;
3690  //; pointer to synch object to be signaled on end of stop
3691  CINOSSync* m_pEmStop;
3692  //; pointer to synch object to be signaled on end of emstop
3693  CINOSSync* m_pBreak;
3694  //; pointer to synch object to be signaled on end of break
3695  CINOSSync* m_pVelocity;
3696  //; pointer to synch object to be signaled on velocity reached
3697  CINOSSync* m_pContinue;
3698  //; pointer to synch object to be signaled on end of continue
3699  CINOSSync* m_pWaitInPosition;
3700  //; pointer to synch object to be signaled on end of waitinposition
3701  CINOSSync* m_pWaitInPositionDyn;
3702  //; pointer to dynamically created synch object to be signaled on end of waitinposition
3703  CINOSSync* m_pWaitTicks;
3704  //; pointer to synch object to be signaled on end of waitticks
3705  uint32 m_uWaitTicks;
3706  //; to to be waited for
3707  uintid m_uPreMapHookId;
3708  //; id of pre map hook
3709  uintid m_uPostMapHookId;
3710  //; id of post map hook
3711  uintid m_uPostWriteHookId;
3712  //; id of post bus write hook
3713  uintid m_uPreHookId;
3714  //; id of pre axis command hooks (e.g. track)
3715  #ifdef INOS_SAFETY_SUPPORT
3716  bool m_bPreHookSafetyEnabled;
3718  #endif
3719  uintid m_uPostHookId;
3720  //; id of post hook command hooks (e.g. toggle)
3721  SINOSBaseAxisHook* m_pErrorHooks;
3722  //; pointer to list of error hooks
3723  SINOSBaseAxisHook* m_pWarningHooks;
3724  //; pointer to list of error hooks
3725  TINOSNameBalancedBinaryTree<CINOSBaseAxisParamSet>* m_pParamSets;
3726  //; pool of all param sets
3727  static CINOSMutex m_GlobalParamSetsMutex;
3728  //; global param set mutex
3729  static TINOSNameBalancedBinaryTree<CINOSBaseAxisParamSet>* m_pGlobalParamSets;
3730  //; pool of all param sets
3731  #ifdef INOS_MOVE_CACHE_SUPPORT
3732  CINOSMoveCache* m_pMoveCache;
3733  //; pointer to move cache
3734  #endif
3735 
3736  // actual commanded values
3737 
3746 
3747  // previous three commanded values
3748  SINOSRampData m_sPreviousVrt[3];
3749 
3750  // test values
3751 
3752  real64 m_rPos1;
3753  //; toggle position 1
3754  real64 m_rPos1Max;
3755  //; max. toggle position 1
3756  real64 m_rPos2;
3757  //; toggle position 2
3758  real64 m_rPos2Max;
3759  //; max. toggle position 2
3760  uint32 m_uDelay;
3761  //; delay in ms between toggles
3762  uint32 m_uDelayMax;
3763  //; max. delay in ms between toggles
3764  uint32 m_uDelayAct;
3765  //; act. delay in ms between toggles
3766  int32 m_iTicks;
3767  //; system ticks to handle delay
3768  uint32 m_uToggleCnt;
3769  //; toggle counter
3770 
3771  // miscelanselous
3772  real64 m_rFeedPerTurn;
3773  //; feed per turn (used in method NormPosition)
3774  real64 m_rFeedPerTurn_1;
3775  //; 1 / feed per turn (used in method NormPosition)
3776  real64 m_rInertia;
3777  //; inertia (used in torque limitation)
3778 
3779  inosName32 m_cSelectedParamName;
3780  //; last selected param name
3781 
3782  // emergency values
3783 
3784  uint32 m_uEmergencyType;
3785  //; type of emergency stop (0-Stop, 1-Stop/InActivate, 2-InActivate, 3-none
3786  //; 4-Position, 5-Position/InActivate)
3787  uint32 m_uEmergencyDelay;
3788  //; Delay [ms] after Stop till InActivate (Type = 1)
3789  real64 m_rEmergencyPosition;
3790  //; emergency position
3791  uint16 m_uIntEmergencyType;
3792  //; type of emergency stop (0-Stop, 1-Stop/InActivate, 2-InActivate)
3793  uint16 m_uIntEmergencyDelay;
3794  //; Delay [ms] after Stop till InActivate (Type = 1)
3795  SINOSRampParam* m_pEmergency;
3796  //; pointer to emergency speed set (if available)
3797  SINOSRampParam* m_pPowerFailure;
3798  //; pointer to power failure speed set (if available)
3799 
3800  // cursoring
3801  uint32 m_uCurWaitTime;
3802  //; wait afet initial move
3803  real64 m_rCurPosition;
3804  //; cursoring direction
3805  SINOSRampParam* m_pCurParam;
3806  //; cursoring params
3807 
3808  // syncing
3809  uint8 m_uSyncMode;
3810  //; requested sync mode
3811  // sync methods available
3812  bool m_bSyncAvailable = true;
3813 
3814  // norming
3815  uint8 m_uNormMode;
3816  //; requested norm mode
3817  uint8 m_uNormMoveDir;
3818  //; requested norm move direction
3819  real64 m_rNormPos;
3820  //; requested norm position
3821 
3822  // multicore
3823 
3826 
3827  // tracking
3828  uint16 m_uTrackValType;
3829  //; tracking value type
3830  uint16 m_uTrackDir;
3831  //; tracking direction (0-pos and neg, 1-pos, 2-neg)
3832  void* m_pTrackVal;
3833  //; pointer to track value
3834  real64 m_rTrackCyc;
3835  //; track cycletime [sec]
3836  real64 m_rTrackFct;
3837  //; tracking factor
3838  real64 m_rTrackPos;
3839  //; tracking position
3840  real64 m_rTrackVel;
3841  //; tracking velocity
3842  real64 m_rTrackCmd;
3843  //; tracking commanded value
3844  real64 m_rTrackSum;
3845  //; tracking sum
3846  uint16 m_uTrackLen;
3847  //; tracking buffer length
3848  uint16 m_uTrackInd;
3849  //; tracking buffer index
3850  int32 m_iTrackLst;
3851  //; last track value
3852  int32 m_iTrackOld;
3853  //; old track value
3854  real64* m_pTrackBuf;
3855  //; pointer to tracking buffer
3856  tpGetter m_pTrackGet;
3857  //; pointer to tracking value getter method
3858  real64 m_rTrackVmax;
3859  real64 m_rTrackAmax;
3860  real64 m_rTrackBmax;
3861 
3862  // positioning
3863 
3864  uint32 m_uPosType;
3865  //; positioning type
3866  uint32 m_uPosTime;
3867  //; positioning time [ms]
3868  uint32 m_uPosTimeout;
3869  //; positioning timeout [ms]
3870  int32 m_iPosTicks;
3871  //; positioning ticks
3872  int32 m_iPosTimeout;
3873  //; positioning timeout ticks
3874  real64 m_rPosTolerance;
3875  //; positioning tolerance
3876 
3877  // save moves
3878 
3879  // exit time
3880  real64 m_rExitTime;
3881  // partner also running
3882  bool m_bPartnerMoving;
3883 
3884  // bus timing
3885 
3888 
3890  uint16 m_uCycleId;
3891 
3892  #ifdef INOS_USE_CUSTOMER_IMAGE_DATA
3893 
3898  void* m_pCustomerSpecificData;
3899  #endif
3900 
3901  // safety
3902 
3903  #ifdef INOS_SAFETY_SUPPORT
3904  tUid m_uSafetyUid;
3907  uint8 m_uSafetyLevel;
3909  uint8 m_uSafetyType;
3911  ESafetyFunction m_eSafetyFunction;
3913  real64 m_rSafetyLimit;
3915  uint32 m_uSafetyDelay;
3917  int32 m_iSafetySupervisionStart;
3919  real64 m_rSafetySupervisionLimit;
3921  SINOSBaseAxisHook* m_pSOSHooks;
3922 
3923  // also called from CINOSMcTargetSafety at reload of ch.indel.safety.config.img
3924  friend class CINOSMcTargetSafety;
3926  void iSetupSafety();
3928  virtual bool iSetupSafetyRegistration();
3929  #endif
3930 
3931  // axis extensions
3932 
3933  #if defined(INOS_AXIS_EXTENSION_SUPPORT)
3934  TINOSDoubleLinkedList<IINOSBaseAxisExtension>* m_pExtensions = 0;
3936  #endif
3937 
3938  // command parameters
3939  protected:
3940  uint32 m_ueActivateCheckPos;
3941  //; param : CheckPos
3942  uint32 m_ueActivateSimulatePos;
3943  //; param : SimulatePos
3944  uint32 m_ueActivateSimulateOut;
3945  //; param : SimulateOut
3946  uint32 m_ueActivateSimulateAct;
3947  //; param : SimulateAct
3948  real64 m_rePosition;
3949  //; param : Position
3950  real64 m_rePositionVel{};
3951  //; param : PositionVel
3952  real64 m_reVelocity{};
3953  //; param : Velocity
3954  real64 m_reSyncPosition;
3955  //; param : SyncPosition
3956  inosName32 m_ceParam;
3957  //; param : Param
3958  char m_ceVariable[64];
3959  //; param : Variable
3960  real64 m_reFactor;
3961  //; param : Factor
3962  real64 m_reValue;
3963  //; param : Value
3964  uint32 m_ueFilter;
3965  //; param : Filter
3966  uint32 m_ueTrackDir;
3967  //; param : Track direction
3968  uint32 m_ueDirection;
3969  //; param : Direction
3970  uint32 m_ueWait;
3971  //; param : Wait
3972  real64 m_reStep;
3973  //; param : Step
3974  real64 m_reReturn;
3975  //; param : return
3976  real64 m_reDelta;
3977  //; param : delta
3978  real64 m_reStart;
3979  //; param : start
3980  real64 m_reEnd;
3981  //; param : end
3982  uint32 m_ueReturn;
3983  //; param : return
3984  uint32 m_ueTicks;
3985  //; param : ticks
3986  real64 m_reTime;
3987  //; param : time
3988  real64 m_reSlowMotion;
3989  //; param SLowMotion
3990 
3991  #ifdef INOS_MOVEPATH_SUPPORT
3992  class CINCOMovePathActuals* m_pMovePathActuals;
3993  #endif
3994 
3995  // static private members
3996  private:
3997  static uint32 m_uCount;
3998  //; number of axis in pool
3999  static uint8 m_uCountCoreId;
4000  //; current core id
4001  static CINOSBaseAxis* m_pFirst;
4002  //; pointer to first axis
4003  CINOSBaseAxis* m_pNext;
4004  //; pointer to next axis in the chain of all axis
4005  static CINOSBaseAxis* m_pAxis[DF_INOS_MAX_AXIS];
4006  //; array of axis pointers
4007  static char m_cStateCombo[494];
4008  //; axis state INCO item text. Use 494 (=defMaxDataLength). I fear
4009  //; to include inco_com.h here, that's why a plain number is used)
4010 
4011  // allow dynamic object handling (new/delete)
4013 };
4014 
4015 //------------------------------------------------------------------------------
4016 // class registration
4017 //------------------------------------------------------------------------------
4018 
4020 typedef CINOSBaseAxis *(*TCreateAxis)(const char* apAxisName);
4021 class CINOSRegisterBaseAxis
4022 {
4023  // after this function you can register new ramps
4024  friend void _INI_0000_CINOSRegisterBaseAxis();
4025 
4026  //--- internals --------------------------------------------------------
4027  // private members
4028 private:
4029  // pointer to the first registered axis
4030  static CINOSRegisterBaseAxis* m_pFirst;
4031  // pointer to the next axis
4032  CINOSRegisterBaseAxis* m_pNext;
4033  // create funtion for axis
4034  TCreateAxis m_pCreate;
4035  // axis type name
4036  const char* m_pAxisType;
4037  // database table name
4038  const char* m_pDatabaseTable;
4039 
4040  //--- user interface ---------------------------------------------------
4041 
4042 public:
4043  // register a new axis type
4044  CINOSRegisterBaseAxis(TCreateAxis apFunction, const char* apAxisType,
4045  const char* apDatabaseTable);
4046 
4047  // create and return and new axis instance
4048  static CINOSBaseAxis* GetAxis(const char* apAxisName, const char* apAxisType);
4049  // create all registered axis
4050  static void CreateAll();
4051 };
4053 
4054 //
4055 //------------------------------------------------------------------------------
4056 //--- helper macros ------------------------------------------------------------
4057 //------------------------------------------------------------------------------
4058 //
4059 #if defined(INOS_MULTICORE)
4060 #define INOS_AXIS_CORE_MISMATCH_IS_ERROR(ret) \
4061 if ((m_uCoreId != DF_INOS_CORE_DEFAULT) && (::GetCoreId() != m_uCoreId)) { \
4062  if (!(GetFlag() & DF_INOS_AXIS_FLAG_IGNORE_CORE)) { \
4063  iCoreMismatchError(); \
4064  return ret; \
4065  } \
4066 }
4067 #else
4068 #define INOS_AXIS_CORE_MISMATCH_IS_ERROR(ret)
4069 #endif
4070 
4071 
4072 //
4073 //------------------------------------------------------------------------------
4074 // safety macros
4075 //------------------------------------------------------------------------------
4076 //
4077 #ifdef INOS_SAFETY_SUPPORT
4078 #define SAFETY_CHECK_SOS() \
4079  if (GetFlag() & DF_INOS_AXIS_FLAG_SAFETY) { \
4080  if (m_eSafetyFunction == eSafetyFunctionSOS) { \
4081  real64 rSlowMotion; GetActSlowMotion(rSlowMotion); \
4082  if (rSlowMotion != REAL64(0.0)) { \
4083  m_uError |= ER_INOS_AXIS_REJECTED_SOS; \
4084  INOS_ERROR("AXIS[%s]: Command rejected, axis in SOS (safe operating stop)", GetName());\
4085  return m_uError; \
4086  } \
4087  } \
4088  }
4089 //
4090 #define SAFETY_CHECK_SOS_SYNC(apSync) \
4091  if (GetFlag() & DF_INOS_AXIS_FLAG_SAFETY) { \
4092  if (m_eSafetyFunction == eSafetyFunctionSOS) { \
4093  real64 rSlowMotion; GetActSlowMotion(rSlowMotion); \
4094  if (rSlowMotion != REAL64(0.0)) { \
4095  m_uError |= ER_INOS_AXIS_REJECTED_SOS; \
4096  INOS_ERROR("AXIS[%s]: Command rejected, axis in SOS (safe operating stop)", GetName());\
4097  Signal(apSync); \
4098  return m_uError; \
4099  } \
4100  } \
4101  }
4102 //
4103 #define SAFETY_IGNORE_IF_SOS() \
4104  if (GetFlag() & DF_INOS_AXIS_FLAG_SAFETY) { \
4105  if (m_eSafetyFunction == eSafetyFunctionSOS) { \
4106  return m_uError; \
4107  } \
4108  }
4109 #else
4110 #define SAFETY_CHECK_SOS()
4111 #define SAFETY_CHECK_SOS_SYNC(apSync)
4112 #define SAFETY_IGNORE_IF_SOS()
4113 #endif
4114 //
4115 //------------------------------------------------------------------------------
4116 // end of file
4117 //------------------------------------------------------------------------------
4118 
4119 #endif // INC_CINOSBASEAXIS_H
CINOSMutex
Definition: cinosmutex.h:35
CINOSBus
Definition: cinosbus.h:564
CINOSBaseAxis::Break
virtual uint32 Break(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Pause a running move with the currently selected speed set. The move is still pending and can be cont...
SINOSBaseAxis::m_rPowerPosition
real64 m_rPowerPosition
Power failure position. The system tries to move to this position in case of a power failure.
Definition: cinosbaseaxis.h:569
DF_INOS_AXIS_NORM_AFTER
#define DF_INOS_AXIS_NORM_AFTER
Definition: cinosbaseaxis.h:171
CINOSBaseAxis::SetTrackFactor
virtual uint32 SetTrackFactor(real64 arFactor)
Allows to live change the tracking factor of an active 'Track'.
CINOSBaseAxis::GetDecelerationTicks
virtual int32 GetDecelerationTicks(real64 arPosition)
Calc bus ticks a Move(adPosition) needs for the deceleration part.
CINOSBaseRamp::GetTrqLimitAcceleration
SINOSBaseRampTrqLimit * GetTrqLimitAcceleration()
get torque limit acceleration
Definition: cinosbaseramp.h:1349
CINOSBaseAxis::GetExitTicks
virtual int32 GetExitTicks()
Calc bus ticks needed till exit in a safe move.
CINOSBaseAxis::SegMove
virtual uint32 SegMove(real64 arPosition)
Add a move to arPosition. Velocity and acceleration in arPosition have to be 0.0.
SINOSTimeCharacteristics
time characteristics of a move
Definition: cinosbaseramp.h:627
CINOSMutex::GetOwner
ICACHE class CINOSTask * GetOwner()
Return id of mutex owner.
Definition: cinosmutex.h:118
CINOSBaseAxis::Update
virtual uint32 Update(CINOSSync *apSync=DF_INOS_ASYNCHRONOUS)
Update a running Move to actual commanded values (acc,dec,vel,jerk) Signal apSync if constant velocit...
CINOSBaseAxis::GetAxis
static CINOSBaseAxis * GetAxis(uint32 auNumber)
Get pointer to axis with a given number.
Definition: cinosbaseaxis.h:728
SINOSBaseAxis::m_uTestDelay
uint32 m_uTestDelay
For testing purposes, an axis provides a test folder in the INCO tree where one can toggle the axis b...
Definition: cinosbaseaxis.h:467
CINOSBaseAxis::SegPos
virtual uint32 SegPos(real64 arTime)
stay at actual position for arTime [sec].
CINOSBaseAxis::Cursor
virtual uint32 Cursor(bool abPositive=true)
Moves one 'inc' in the requested direction, waits 500ms and starts an endless move to the defined sof...
SINOSBaseAxis::m_rNormPos
real64 m_rNormPos
Defines the default norming position, e.g. 360.0 for a turning axis.
Definition: cinosbaseaxis.h:553
CINOSBaseAxis::GetStartTicks
virtual uint64 GetStartTicks(real64 arDelta)
Get absolut bus ticks the actual move reaches the start position + arDelta.
CINOSBaseAxis::GetAxis
static CINOSBaseAxis * GetAxis(const char *apAxisName)
Get pointer to axis with name apAxisName.
CINOSBaseAxis::GetConstTicks
virtual int32 GetConstTicks(real64 arPosition)
Calc bus ticks a Move(adPosition) needs for the constant part.
CINOSBaseAxis::MoveDep
virtual uint32 MoveDep(real64 arPosition, real64 arPositionVel, real64 arVelocity, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Move to arPosition with actual commanded jerk, acc/deceleration and velocity. Ensure befor arPosition...
SINOSBaseAxis::m_cName
inosName64 m_cName
Axis name.
Definition: cinosbaseaxis.h:402
SINOSBaseAxis::m_rTestPos1
real64 m_rTestPos1
Test mode position 1, see also m_rTestPos2 and m_uTestDelay.
Definition: cinosbaseaxis.h:471
SINOSBaseAxis::m_uOptions
uint32 m_uOptions
Axis options, see DF_INOS_BASE_AXIS_OPT_EARLY_DONE, DF_INOS_BASE_AXIS_OPT_AUTO_ACCEPT,...
Definition: cinosbaseaxis.h:437
CINOSBaseAxis
Provides axis functionality.
Definition: cinosbaseaxis.h:693
SINOSBaseAxis::m_uPosTimeout
uint32 m_uPosTimeout
Default positioning timeout [ms] for types DF_INOS_AXIS_PST_WINDOW and DF_INOS_AXIS_PST_WINDOW_OPT.
Definition: cinosbaseaxis.h:515
INOS_OR
#define INOS_OR(variable, mask)
Definition: inosmacro.h:201
CINOSBaseAxis::StopLiveDelta
virtual uint32 StopLiveDelta(real64 arDelta, real64 arSlowMotion, SINOSRampParam *apParam=nullptr)
Stop a running move with the given speed set and required slowmotion factor. The stop is calculated l...
CINOSBaseAxis::GetActVrt
SINOSRampData * GetActVrt()
deprecated
Definition: cinosbaseaxis.h:3303
CINOSBaseAxis::InitializeLimitChecker
void InitializeLimitChecker()
Initializes the limit checker if requested.
CINOSBaseRamp::GetTrqLimitDeceleration
SINOSBaseRampTrqLimit * GetTrqLimitDeceleration()
get torque limit deceleration
Definition: cinosbaseramp.h:1355
CINOSBaseAxis::StopLive
virtual uint32 StopLive()
Stop a running move with the currently selected speed set. The stop is calculated live and therefore ...
SINOSBaseAxis::m_cShort
uint16 m_cShort
Gives the user the possibility to define a short one character based axis alias. This option is depre...
Definition: cinosbaseaxis.h:530
CINOSBaseAxis::GetTimeCharacteristics
virtual SINOSTimeCharacteristics GetTimeCharacteristics(real64 arPosition)
Calculate time characteristics of a move.
SINOSRampData
ramp data
Definition: cinosbaseramp.h:601
DF_INOS_AXIS_NORM_MOVE_DIR_NO
#define DF_INOS_AXIS_NORM_MOVE_DIR_NO
Definition: cinosbaseaxis.h:188
SINOSBaseAxis::m_uNormMoveDir
uint8 m_uNormMoveDir
Used to define the default axis norm moving direction, e.g. move always in positive direction,...
Definition: cinosbaseaxis.h:549
CINOSBaseAxis::EnableNorm
virtual void EnableNorm(uint8 auMode=0x00, uint8 auMoveDir=0x00, real64 arNormPos=REAL64(0.0))
CINOSBaseAxis::m_pActual
SINOSRampDataEx * m_pActual
actual commanded values (handed over to control)
Definition: cinosbaseaxis.h:3739
SINOSBaseAxis::m_cDescription
inosName64 m_cDescription
Axis description.
Definition: cinosbaseaxis.h:577
SINOSBaseAxis::m_uPosType
uint32 m_uPosType
Tells the system how an end of a move is defined. There are three different type available,...
Definition: cinosbaseaxis.h:505
DF_INOS_AXIS_NORM_ROUND
#define DF_INOS_AXIS_NORM_ROUND
Definition: cinosbaseaxis.h:182
SINOSBaseAxis::m_cEmergencyParam
inosName32 m_cEmergencyParam
Name of the speed set to be used for emergency stops.
Definition: cinosbaseaxis.h:564
INOS_INLINE
#define INOS_INLINE
Definition: inosdefine.h:60
SINOSBaseAxis::m_uPosTime
uint32 m_uPosTime
Default positioning time [ms] for types DF_INOS_AXIS_PST_WINDOW and DF_INOS_AXIS_PST_WINDOW_OPT.
Definition: cinosbaseaxis.h:510
CINOSBaseAxis::InActivate
virtual uint32 InActivate(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Inactivate axis.
SINOSBaseAxis::m_uCacheSize
uint32 m_uCacheSize
Used to define a cache size for the special safe move commands. Currently only used on a special cust...
Definition: cinosbaseaxis.h:525
cinosbaseramp.h
Short comment.
SINOSBaseAxis::m_rTrackFactor
real64 m_rTrackFactor
Defines the default tracking factor.
Definition: cinosbaseaxis.h:492
CINOSBaseAxis::GetMoveDist
virtual real64 GetMoveDist(real64 arTime)
Calc distance [unit] a Move progresses in arTime [sec].
CINOSBaseAxis::GetName
virtual const char * GetName()
CINOSBaseRamp
Definition: cinosbaseramp.h:751
DF_INOS_ASYNCHRONOUS
#define DF_INOS_ASYNCHRONOUS
Definition: inosmacro.h:337
CINOSBaseAxis::Activate
virtual uint32 Activate(bool abCheckPos=true, bool abSimulatePos=false, bool abSimulateOut=false, bool abSimulateAct=false, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Activate axis in a given mode, e.g Activate(true,true,true,true) enables the axis in a full simulated...
CINOSBaseAxis::m_pActRamp
SINOSRampDataEx * m_pActRamp
actual commanded values from ramp geni
Definition: cinosbaseaxis.h:3741
CINOSBaseAxis::Move
virtual uint32 Move(real64 arPosition, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Move to arPosition with actual commanded jerk, acc/deceleration and velocity.
CINOSBaseAxis::SegBegin
virtual uint32 SegBegin(real64 arSlowMotion=REAL64(1.0), real64 arStartVelocity=REAL64(0.0))
Create a new segmentation move.
SINOSBaseAxis::m_cDefaultParam
inosName32 m_cDefaultParam
If this string is not empty and the axis ramps A,V,J are set to 0.0 (means undefined) then the speed ...
Definition: cinosbaseaxis.h:560
CINOSBaseAxis::GetAccelerationTime
virtual real64 GetAccelerationTime(real64 arPosition)
Calc time [sec] a Move(adPosition) needs for the acceleration part.
CINOSBaseAxis::GetActPosition
virtual void GetActPosition(real64 &arPosition, bool abRamp=true)
Gets the actual axis position.
CINOSBaseAxis::Stop
virtual uint32 Stop(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Stop a running move with the currently selected speed set.
SINOSBaseAxis
Descriptor structure used to configure a base axis. It is usually only used in conjunction with SINOS...
Definition: cinosbaseaxis.h:398
CINOSBaseAxis::Relax
virtual uint32 Relax(uint32 auTimeMs, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Relax a coupled slave axis for a given time.
CINOSBaseAxis::CINOSBaseAxis
CINOSBaseAxis(SINOSBaseAxis *apDesc)
Create an axis based on a descriptor (usually not used because this is done by the configuration syst...
SINOSRampDataEx
extended ramp data
Definition: cinosbaseramp.h:616
CINOSBaseAxis::m_uBusTicksPerAxisTick
uint32 m_uBusTicksPerAxisTick
number of bus ticks an axis tick takes
Definition: cinosbaseaxis.h:3887
CINOSBaseAxis::SegConst
virtual uint32 SegConst(real64 arPosition)
Add a move to arPosition with actual velocity.
CINOSBaseAxis::GetTrqLimitAcceleration
SINOSBaseRampTrqLimit * GetTrqLimitAcceleration()
get torque limit acceleration
Definition: cinosbaseaxis.h:3354
CINOSBaseAxis::SegRun
virtual uint32 SegRun(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Run actual segments.
CINOSBaseAxis::Connect
virtual uint32 Connect()
Connect axis to hardware.
Definition: cinosbaseaxis.h:755
SINOSBaseAxis::m_rTestPos1Max
real64 m_rTestPos1Max
Test mode position 1 maximum, see also m_rTestPos1.
Definition: cinosbaseaxis.h:475
CINOSBaseAxis::MoveApp
virtual uint32 MoveApp(real64 arPosition, real64 arPositionVel, real64 arVelocity, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Move to arPosition with actual commanded jerk, acc/deceleration and velocity. Ensure after arPosition...
CINOSBus::AtomicGatherEnter
INOS_INLINE void AtomicGatherEnter(uint32 &ouToken)
Definition: cinosbus.h:952
CINOSBaseAxis::Track
virtual uint32 Track(const char *apVarName, real64 arFactor, uint32 auFilterLength, uint32 auDirection=0)
Track the variable with name apVarName.
CINOSBaseAxis::Disable
virtual uint32 Disable(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Disables an enabled axis. Only inactivated axis can be disabled. Use 'Enable' to reenable the axis.
CINOSBaseAxis::Continue
virtual uint32 Continue(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Continue a pause move.
CINOSBaseAxis::EmergencyStopLive
virtual uint32 EmergencyStopLive()
Stop a running move with the defined emergency deceleration/jerk. The stop is calculated live and the...
CINOSBaseAxis::Toggle
virtual uint32 Toggle(real64 arPosition1, real64 arPosition2)
Start an endless toggle between arPosition1 and arPosition2 with actual commanded a jerk,...
CINOSBaseAxis::Pull
virtual uint32 Pull(real64 arS, real64 arV, real64 arA, real64 arJ)
Add a path point to the actual pull list and start pull mode if not et done. If one is running an axi...
SINOSBaseAxis::m_uCoreId
uint8 m_uCoreId
Id of core the axis has to run on. In the configuration file do not define this value or set it to 0x...
Definition: cinosbaseaxis.h:420
INOS_AND
#define INOS_AND(variable, mask)
Definition: inosmacro.h:210
CINOSBaseAxis::GetMoveTime
virtual real64 GetMoveTime(real64 arPosition)
Calc time [sec] a Move(adPosition) needs until arPosition.
CINOSBaseAxis::SetActPosition
virtual uint32 SetActPosition(real64 arPosition)
Sets the actual axis position. This method doesn't change a current following error and it is therefo...
cinosbus.h
Short comment.
SINOSBaseAxis::m_uNormMode
uint8 m_uNormMode
Used to define the default axis norming mode, e.g. norm an turn axis to 0..360° see DF_INOS_AXIS_NORM...
Definition: cinosbaseaxis.h:539
CINOSBaseRampParamSet
Definition: cinosbaseramp.h:696
CINOSBaseAxis::ToggleSection
virtual uint32 ToggleSection(real64 arPos1Min, real64 arPos1Max, real64 arPos2Min, real64 arPos2Max, uint32 auDelayMin, uint32 auDelayMax)
Start an endless section toggle between arPosition1 and arPosition2 with actual commanded a jerk,...
CINOSBaseAxis::SegVelocity
virtual uint32 SegVelocity(real64 arVelocity, SINOSRampParam *apParam)
Directly change velocity to the new value.
tUid
uint32 tUid
Definition: inostype.h:190
CINOSBaseAxis::DisableNorm
virtual void DisableNorm()
SINOSBaseAxis::m_uTrackFilterLength
uint32 m_uTrackFilterLength
Defines the default tracking filter length.
Definition: cinosbaseaxis.h:496
SINOSBaseAxis::m_uEmergencyType
uint8 m_uEmergencyType
Defines the default behaviour in case of an emergency stop of the axis. An emergency stop is either i...
Definition: cinosbaseaxis.h:456
CINOSBaseAxis::m_uCycleId
uint16 m_uCycleId
cycle id
Definition: cinosbaseaxis.h:3890
CINOSBaseAxis::Sync
virtual uint32 Sync(real64 arPosition, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Search reference mark till arPosition and set actual position to 0.0 at mark.
SINOSBaseAxis::m_uNumber
uint16 m_uNumber
Optional axis number. This value is only used on specific Indel targets like e.g. a GIN-AX4x4 to defi...
Definition: cinosbaseaxis.h:415
SINOSBaseAxis::m_rPosTolerance
real64 m_rPosTolerance
Default positioning tolerance [unit] for types DF_INOS_AXIS_PST_WINDOW and DF_INOS_AXIS_PST_WINDOW_OP...
Definition: cinosbaseaxis.h:520
CINOSBaseAxis::GetMoveTicks
virtual int32 GetMoveTicks(real64 arPosition)
Calc bus ticks a Move(adPosition) needs until arPosition.
CINOSBaseAxis::SetNormMoveDir
virtual void SetNormMoveDir(uint8 auNormMoveDir)
Definition: cinosbaseaxis.h:3249
CINOSBaseAxis::GetAccelerationTicks
virtual int32 GetAccelerationTicks(real64 arPosition)
Calc bus ticks a Move(adPosition) needs for the acceleration part.
CINOSBaseAxis::GetMoveAppTime
virtual real64 GetMoveAppTime(real64 arPosition, real64 arPositionVel, real64 arVelocity)
Calc time [sec] an according MoveApp needs.
CINOSBaseAxis::GetDecelerationTime
virtual real64 GetDecelerationTime(real64 arPosition)
Calc time [sec] a Move(adPosition) needs for the deceleration part.
CINOSBaseAxis::Endless
virtual uint32 Endless(bool abPositive=true)
Start and endless move in the requested direction with actual commanded acc/dec and velocity.
CINOSBaseAxis::GetRealPosition
virtual void GetRealPosition(real64 &arPosition, bool abMapped=true)
Gets the real axis position.
SINOSBaseAxis::m_uEmergencyDelay
uint16 m_uEmergencyDelay
The required default delay [ms] if working with emergency type DF_INOS_AXIS_EMGT_STOP_INACTIVATE.
Definition: cinosbaseaxis.h:461
SINOSBaseAxis::m_rEmergencyPosition
real64 m_rEmergencyPosition
Emergency stop position (used in emergency types DF_INOS_AXIS_EMGT_STOP_POSITION and DF_INOS_AXIS_EMG...
Definition: cinosbaseaxis.h:488
CINOSPhysicalAxis
Provides physical aka real axis functionality.
Definition: cinosphysicalaxis.h:286
DF_INOS_SYNCHRONOUS
#define DF_INOS_SYNCHRONOUS
Definition: inosmacro.h:332
CINOSBaseAxis::NormPosition
double NormPosition(real64 arPosition) const
Returned the 'normed' value of arPosition.
Definition: cinosbaseaxis.h:2793
CINOSBaseAxis::GetToggleCnt
virtual uint32 GetToggleCnt()
get current toggle counter
Definition: cinosbaseaxis.h:3341
CINOSBaseAxis::m_pActControl
SINOSRampDataEx * m_pActControl
actual commanded values (valid if mapping active or after a SetActual)
Definition: cinosbaseaxis.h:3743
CINOSBaseAxis::WaitTicks
virtual uint32 WaitTicks(uint32 auTicks=1)
Wait for the given axis control cycle ticks. This method can be useful if it is necessary to synchron...
CINOSBaseAxis::GetConstTime
virtual real64 GetConstTime(real64 arPosition)
Calc time [sec] a Move(adPosition) needs for the constant part.
CINOSBaseAxis::m_pRealVrt
SINOSRampDataEx * m_pRealVrt
actual real virtual values
Definition: cinosbaseaxis.h:3745
SINOSBaseRampTrqLimit
torque limitation
Definition: cinosbaseramp.h:660
SINOSBaseAxis::m_uSafetyType
uint8 m_uSafetyType
Defines the behaviour in case of an SOS request DF_INOS_AXIS_SAFETY_EMGSTOP, DF_INOS_AXIS_SAFETY_AUTO...
Definition: cinosbaseaxis.h:444
CINOSBaseAxis::GetTrqLimitDeceleration
SINOSBaseRampTrqLimit * GetTrqLimitDeceleration()
get torque limit deceleration
Definition: cinosbaseaxis.h:3357
CINOSBaseAxis::GetActPhy
SINOSRampData * GetActPhy()
deprecated
Definition: cinosbaseaxis.h:3306
CINOSBaseAxis::GetActual
SINOSRampData * GetActual(EActualType aeType=eActOutput, bool abCopy=true)
get pointer to actual control values
Definition: cinosbaseaxis.h:3276
CINOSBaseAxis::EmergencyStop
virtual uint32 EmergencyStop(CINOSSync *apSync)
Stop a running move with the defined emergency deceleration/jerk.
CINOSBaseAxis::m_uCoreId
uint8 m_uCoreId
id of core the axis is handled in
Definition: cinosbaseaxis.h:3825
SINOSBaseAxis::m_rTestPos2Max
real64 m_rTestPos2Max
Test mode position 2 maximum, see also m_rTestPos2.
Definition: cinosbaseaxis.h:483
CINOSBaseAxis::SetRealPosition
virtual uint32 SetRealPosition(real64 arPosition)
Sets the real axis position. This method ignores a current following error and should therefore NOT b...
SINOSBaseAxis::m_cRampType
inosName32 m_cRampType
Trajectory generator name. Valid types are INOSJerkRamp, INOSJerkTrqRamp, INOSTrapezeRamp or a custom...
Definition: cinosbaseaxis.h:408
SINOSBaseAxis::m_uReserved
uint8 m_uReserved
Reserved for future use.
Definition: cinosbaseaxis.h:424
CINOSSync
Definition: inos_syn.h:66
DECLARE_DYNAMIC
#define DECLARE_DYNAMIC(aClass)
Definition: cinospartitionmemory.h:328
CINOSBaseAxis::GetBusTicksPerAxisTick
virtual uint32 GetBusTicksPerAxisTick()
Get number of bus ticks an axis tick takes.
CINOSBaseAxis::WaitInPosition
virtual uint32 WaitInPosition()
Wait for any move to finish.
CINOSBaseAxis::GetMoveDepTime
virtual real64 GetMoveDepTime(real64 arPosition, real64 arPositionVel, real64 arVelocity)
Calc time [sec] an according MoveDep needs.
SINOSRampParam
ramp parameters
Definition: cinosbaseramp.h:502
CINOSBaseAxis::GetRealVrt
SINOSRampData * GetRealVrt()
get pointer to real values
Definition: cinosbaseaxis.h:3300
CINOSBaseAxis::GetTargetTicks
virtual uint64 GetTargetTicks()
Get absolut bus ticks the actual move reaches the target position.
CINOSBaseAxis::SetNormMode
virtual void SetNormMode(uint8 auNormMode)
Definition: cinosbaseaxis.h:3257
SINOSBaseAxis::m_rTestPos2
real64 m_rTestPos2
Test mode position 2, see also m_rTestPos1 and m_uTestDelay.
Definition: cinosbaseaxis.h:479
SINOSBaseAxis::m_cPowerParam
inosName32 m_cPowerParam
Name of the speed set to be used for a power failure move.
Definition: cinosbaseaxis.h:573
CINOSBaseAxis::Enable
virtual uint32 Enable(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Enables a previously disabled axis. Only enabled axis can be activated.
CINOSBaseAxis::EnableRamp
void EnableRamp()
Enable a recently disabled trajectory generator.
Definition: cinosbaseaxis.h:2464
CINOSBaseAxis::SegTime
virtual real64 SegTime()
Returns time the actual segment move takes.
CINOSBaseAxis::~CINOSBaseAxis
virtual ~CINOSBaseAxis()
Destroy the axis (usually not used)
CINOSBaseAxis::DisableRamp
void DisableRamp()
Disable the axis trajectory generator. Can be used to fill up a pull list without staring immediately...
Definition: cinosbaseaxis.h:2474
DF_INOS_CORE_DEFAULT
#define DF_INOS_CORE_DEFAULT
Definition: inosdefine.h:175
CINOSBaseAxis::GetNormMoveDir
virtual uint8 GetNormMoveDir()
Definition: cinosbaseaxis.h:3245
CINOSBaseAxis::GetNormMode
virtual uint8 GetNormMode()
Definition: cinosbaseaxis.h:3253
CINOSBaseAxis::SegPosSetTime
virtual uint32 SegPosSetTime(real64 arTime)
Sets the time of the last added segpos segment [sec]. Can be used to adjust a previous added pos segm...
CINOSBaseAxis::GetCoreId
uint8 GetCoreId()
get core id the axis is running on
Definition: cinosbaseaxis.h:3363
CINOSBaseAxis::MoveTime
virtual uint32 MoveTime(real64 arPosition, real64 arTime, bool abUseP5=true, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Move to arPosition within the given time arTime. Actual commanded jerk, acc/deceleration and velocity...
CINOSBaseAxis::SetToggleCnt
virtual void SetToggleCnt(uint32 auSetVal)
set toggle counter to given value
Definition: cinosbaseaxis.h:3344