INOS
cinoscontrol.h
Go to the documentation of this file.
1//******************************************************************************
27//******************************************************************************
28
29#ifndef INC_CINOSCONTROL_H
30#define INC_CINOSCONTROL_H
31//
32//------------------------------------------------------------------------------
33// defines
34//------------------------------------------------------------------------------
35//
36// --- controller states -------------------------------------------------------
37//
38#define DF_INOS_CTRL_STATE_UNDEFINED 0 // static state 'undefined'
39#define DF_INOS_CTRL_STATE_ACTIVE 1 // static state 'active'
40#define DF_INOS_CTRL_STATE_READY 2 // static state 'ready'
41#define DF_INOS_CTRL_STATE_PULL 3 // static state 'pull'
42#define DF_INOS_CTRL_STATE_ACTIVATING 8 // dynamic state 'activating'
43#define DF_INOS_CTRL_STATE_INACTIVATING 9 // dynamic state 'inactivating'
44#define DF_INOS_CTRL_STATE_MOVING 11 // dynamic state 'moving'
45#define DF_INOS_CTRL_STATE_TOGGLE 13 // dynamic state 'toggle'
46#define DF_INOS_CTRL_STATE_STOPPING 14 // dynamic state 'stopping'
47#define DF_INOS_CTRL_STATE_TUNING 32 // dynamic state 'tuning'
48#define DF_INOS_CTRL_STATES 33 // number of states
49//
50// --- controller commands -----------------------------------------------------
51//
52#define DF_INOS_CTRL_CMD_ACTIVATE 0x00000001 // command 'Activate'
53#define DF_INOS_CTRL_CMD_INACTIVATE 0x00000002 // command 'InActivate'
54#define DF_INOS_CTRL_CMD_MOVE 0x00000008 // command 'Move'
55#define DF_INOS_CTRL_CMD_STOP 0x00000020 // command 'Stop'
56#define DF_INOS_CTRL_CMD_UPDATE 0x00000200 // command 'Update'
57#define DF_INOS_CTRL_CMD_TOGGLE 0x00000400 // command 'Toggle'
58#define DF_INOS_CTRL_CMD_CURSOR 0x00008000 // command 'Cursor'
59#define DF_INOS_CTRL_CMD_TUNE 0x00010000 // command 'Tune'
60//
61// --- controller errors -------------------------------------------------------
62//
63#define ER_INOS_CTRL_REJECTED 0x00000001 // command rejected
64#define ER_INOS_CTRL_FAILED 0x00000002 // command failed
65#define ER_INOS_CTRL_REMOTE_NOT_FOUND 0x00000004 // remote target not found
66#define ER_INOS_CTRL_REMOTE_OFFLINE 0x00000008 // remote target offline
67#define ER_INOS_CTRL_REMOTE_COMM_ERR 0x00000010 // remote target communication error
68#define ER_INOS_CTRL_REMOTE_REJECTED 0x00000020 // attached to remote, command rejected
69#define ER_INOS_CTRL_GROUP 0x00000800 // group member on error
70#define ER_INOS_CTRL_BUS 0x00001000 // fieldbus on error
71#define ER_INOS_CTRL_TARGET 0x00002000 // target on error
72#define ER_INOS_CTRL_CONTROL 0x00004000 // control error pending
73#define ER_INOS_CTRL_RAMP 0x00008000 // ramp error pending
74#define ER_INOS_CTRL_SAFETY 0x00010000 // safety error pending
75#define ER_INOS_CTRL_APPLICAT 0x00020000 // application specific error pending
76
77#define ER_INOS_CTRL_REMOTE (ER_INOS_CTRL_REMOTE_NOT_FOUND | ER_INOS_CTRL_REMOTE_OFFLINE | ER_INOS_CTRL_REMOTE_COMM_ERR | ER_INOS_CTRL_REMOTE_REJECTED)
78//
79// --- controller warnings -----------------------------------------------------
80//
81#define WR_INOS_CTRL_RAMP 0x00008000 // ramp warning pending
82#define WR_INOS_CTRL_CONTROL 0x00004000 // control warning pending
83#define WR_INOS_CTRL_IGNORED 0x00000001 // command ignored
84//
85//------------------------------------------------------------------------------
86// includes
87//------------------------------------------------------------------------------
88//
89// system
90#include <cinosbus.h>
91#include <cinosbaseramp.h>
92#include <cinosbasecontroller.h>
93//
94// C++
95//
96// project
97//
98//------------------------------------------------------------------------------
99// class definition
100//------------------------------------------------------------------------------
101//
102class CINOSControl;
104{
105 //--- user interface ---------------------------------------------------
106
107 // public member functions
108 public :
109 virtual uint32 SetParam(const char* apName, real64 arValue);
110 //; universal set parameter with aName to aValue and return error code
111 virtual uint32 GetParam(const char* apName, real64& arResult);
112 //; universal get parameter with aName to aResult and return error code
113 virtual CINCOObject* GetRegister(CINOSControl* apControl);
114 //; return pointer to my inco object
115
116 virtual CINOSBaseRampParamSet* GetRamp() {return m_pRamp;};
117
118 //--- internals --------------------------------------------------------
119
120 // my axis is my friend
121 friend class CINOSControl;
122
123 // public but just for internal use
124 public:
125 int operator < (CINOSControlParamSet& aSet) const
126 { return (strcmp(m_cName, aSet.m_cName)<0);}
127 int operator == (CINOSControlParamSet& aSet) const
128 { return (strcmp(m_cName, aSet.m_cName)==0);}
129 int operator < (const char* apName) const
130 { return (strcmp(m_cName, apName)<0);}
131 int operator == (const char* apName) const
132 { return (strcmp(m_cName, apName)==0);}
133 friend int operator == (CINOSControlParamSet& aSet1, CINOSControlParamSet& aSet2)
134 { return (strcmp(aSet1.m_cName, aSet2.m_cName)==0);}
135
136 // public but just for internal use
137 public:
138 explicit CINOSControlParamSet(const char* apName);
139 //; constructor
140 virtual ~CINOSControlParamSet();
141 //; destructor
142
143 // protected members
144 protected:
145 inosName32 m_cName;
146 //; set name
147 CINCOObject* m_pRegister;
148 //; pointer to inco registration of set
149 CINOSBaseRampParamSet* m_pRamp;
150 //; pointer to ramp param set
151
152 // allow dynamic object handling (new/delete)
154};
155
156//------------------------------------------------------------------------------
157// class definition
158//------------------------------------------------------------------------------
159//
160struct SINOSControlErrorHook;
161struct SINOSCollectedControlData;
162
164{
165 //--- user interface ---------------------------------------------------
166
167 // public member functions
168 public :
169
170 // constructor/destructor
171
172 CINOSControl(const char* apName, const char* apRamp,
173 const char* apController, const char* apInpName, const char* apOutName);
174 //; constructor
175 virtual ~CINOSControl();
176 //; destructor
177 static CINOSControl* GetControl(uint32 auIndex);
178 //; return pointer to controller auNumber or NULL if not found
179 static CINOSControl* GetControl(const char* apName);
180 //; return pointer to controller apName or NULL if not found
181 static CINOSControl* Find(const char* apName);
183 static uint32 Add(CINOSControl* apControl);
185 static uint32 Remove(CINOSControl* apControl);
187
188 virtual uint32 Activate(bool abCheckVal = true, bool abSimulateVal = false,
189 bool abSimulateOut = false, bool abSimulateAct = false,
191 //; activate axis
192 virtual uint32 InActivate(CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
193 //; inactivate axis
194 virtual uint32 ReActivate(CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
195 //; reactivate axis
196
197 virtual void CreateRemoteTargetControl(const char* apTarget,
198 real64 arRemoteUpdateTime,
200
201 virtual void AttachRemoteTargetControl(const char* apTarget,
202 real64 arRemoteUpdateTime,
204
205 virtual uintptr DoCollectData();
206 //; start collecting data in every control cycle
207
208 // moving functions
209
210 virtual uint32 Move(real64 arValue,
212 //; move to value with commanded jerk, acc/deceleration and velocity
213 virtual uint32 Move(real64 arValue, SINOSRampParam* apParam,
215 //; move to value with apParam
216 virtual uint32 Move(real64 arPosition, const char* apParam,
218 //; move to value with apParam
219 virtual uint32 Toggle(real64 arvalue, real64 arValue2);
220 //; starts an endless toggle between pos1 and pos2
221 virtual uint32 Update(CINOSSync* apSync = DF_INOS_ASYNCHRONOUS);
222 //; update a running Move to actual commanded values (acc,dec,vel,jerk)
223 //; signal apSync if constant velocity reached (acc = 0)
224 virtual uint32 Update(SINOSRampParam* apParam, CINOSSync* apSync = DF_INOS_ASYNCHRONOUS);
225 //; update a running Move to apParam values (acc,dec,vel,jerk)
226 //; signal apSync if constant velocity reached (acc = 0)
227 virtual uint32 Update(const char* apParam, CINOSSync* apSync = DF_INOS_ASYNCHRONOUS);
228 //; update a running Move to apParam values (acc,dec,vel,jerk)
229 //; signal apSync if constant velocity reached (acc = 0)
230 virtual real64 GetMoveTime(real64 arValue);
231 //; return time [sec] a Move(arValue) needs until arValue
232 virtual real64 GetMoveTime(real64 arValue, SINOSRampParam* apParam);
233 //; return time [sec] a Move(arValue) needs until arValue
234 virtual real64 GetMoveTime(real64 arValue, const char* apParam);
235 //; return time [sec] a Move(arValue) needs until arValue
236 virtual real64 GetMoveTime(real64 arValue, real64 arDelta);
237 //; return time [sec] a Move(arValue) needs until arValue-arDelta
238 virtual real64 GetMoveTime(real64 arValue, real64 arDelta, SINOSRampParam* apParam);
239 //; return time [sec] a Move(arValue) needs until arValue-arDelta
240 virtual real64 GetMoveTime(real64 arValue, real64 arDelta, const char* apParam);
241 //; return time [sec] a Move(arValue) needs until arValue-arDelta
242 virtual real64 GetMoveTime(real64 arStartValue, real64 arEndValue,
243 real64 arDelta);
244 //; return time [sec] a Move needs from arStartValue
245 //; until arEndValue-arDelta
246 virtual real64 GetMoveTime(real64 arStartValue, real64 arEndValue,
247 real64 arDelta, SINOSRampParam* apParam);
248 //; return time [sec] a Move needs from arStartValue
249 //; until arEndValue-arDelta
250 virtual real64 GetMoveTime(real64 arStartValue, real64 arEndValue,
251 real64 arDelta, const char* apParam);
252 //; return time [sec] a Move needs from arStartValue
253 //; until arEndValue-arDelta
254 virtual uint32 GetMoveTicks(real64 arValue);
255 //; return bus ticks a Move(arValue) needs until arValue
256 virtual uint32 GetMoveTicks(real64 arPosition, SINOSRampParam* apParam);
257 //; return bus ticks a Move(adPosition) needs until arValue
258 virtual uint32 GetMoveTicks(real64 arValue, const char* apParam);
259 //; return bus ticks a Move(adPosition) needs until arValue
260 virtual uint32 GetMoveTicks(real64 arValue, real64 arDelta);
261 //; return bus ticks a Move(adPosition) needs until arValue-arDelta
262 virtual uint32 GetMoveTicks(real64 arValue, real64 arDelta, SINOSRampParam* apParam);
263 //; return bus ticks a Move(adPosition) needs until arValue-arDelta
264 virtual uint32 GetMoveTicks(real64 arValue, real64 arDelta, const char* apParam);
265 //; return bus ticks a Move(adPosition) needs until arValue-arDelta
266 virtual uint32 GetMoveTicks(real64 arStartValue, real64 arEndValue,
267 real64 arDelta);
268 //; return bus ticks [sec] a Move needs from arStartValue
269 //; until arEndValue-arDelta
270 virtual uint32 GetMoveTicks(real64 arStartValue, real64 arEndValue,
271 real64 arDelta, SINOSRampParam* apParam);
272 //; return bus ticks [sec] a Move needs from arStartValue
273 //; until arEndValue-arDelta
274 virtual uint32 GetMoveTicks(real64 arStartValue, real64 arEndValue,
275 real64 arDelta, const char* apParam);
276 //; return bus ticks [sec] a Move needs from arStartValue
277 //; until arEndValue-arDelta
278 virtual real64 GetMoveDist(real64 arValue, real64 arTime);
279 //; return distance [unit] a Move(arValue) progresses in arTime [sec]
280 virtual real64 GetMoveDist(real64 arValue, real64 arTime,
281 SINOSRampParam* apParam);
282 //; return distance [unit] a Move(arValue) progresses in arTime [sec]
283 virtual real64 GetMoveDist(real64 arValue, real64 arTime,
284 const char* apParam);
285 //; return distance [unit] a Move(arValue) progresses in arTime [sec]
286 virtual real64 GetMoveDist(real64 arValue, uint32 auTicks);
287 //; return distance [unit] a Move(arValue) progresses in auTicks [bus ticks]
288 virtual real64 GetMoveDist(real64 arValue, uint32 auTicks,
289 SINOSRampParam* apParam);
290 //; return distance [unit] a Move(arValue) progresses in auTicks [bus ticks]
291 virtual real64 GetMoveDist(real64 arValue, uint32 auTicks,
292 const char* apParam);
293 //; return distance [unit] a Move(arValue) progresses in auTicks [bus ticks]
294 virtual real64 GetMoveDist(real64 arStartValue, real64 arEndValue,
295 real64 arTime);
296 //; return distance [unit] a Move from arStartValue to arEndValue
297 //; progresses in arTime [sec]
298 virtual real64 GetMoveDist(real64 arStartValue, real64 arEndValue,
299 real64 arTime, SINOSRampParam* apParam);
300 //; return distance [unit] a Move from arStartValue to arEndValue
301 //; progresses in arTime [sec]
302 virtual real64 GetMoveDist(real64 arStartValue, real64 arEndValue,
303 real64 arTime, const char* apParam);
304 //; return distance [unit] a Move from arStartValue to arEndValue
305 //; progresses in arTime [sec]
306 virtual real64 GetMoveDist(real64 arStartValue, real64 arEndValue,
307 uint32 auTicks);
308 //; return distance [unit] a Move from arStartValue to arEndValue
309 //; progresses in auTicks [bus ticks]
310 virtual real64 GetMoveDist(real64 arStartValue, real64 arEndValue,
311 uint32 auTicks, SINOSRampParam* apParam);
312 //; return distance [unit] a Move from arStartValue to arEndValue
313 //; progresses in auTicks [bus ticks]
314 virtual real64 GetMoveDist(real64 arStartValue, real64 arEndValue,
315 uint32 auTicks, const char* apParam);
316 //; return distance [unit] a Move from arStartValue to arEndValue
317 //; progresses in auTicks [bus ticks]
318 virtual uint64 GetTargetTicks();
319 //; return absolut bus ticks the actual move reaches the target
320
321 // pulling
322
323 virtual uint32 Pull(real64 arS, real64 arV, real64 arA, real64 arJ);
324 //; add s, v, a, j to the actual pull list (starts pull if not yet done)
325 virtual void Pull(SINOSRampData& aData);
326 //; add aData to the actual pull list (starts pull if not yet done)
327 virtual void Pull(SINOSRampDataEx* apData);
328 //; add apData to the actual pull list (starts pull if not yet done)
329 //; apData IS deleted after processed
330 void EnableRamp()
331 //; enable ramp geni
332 { m_pRamp->Enable();};
333 void DisableRamp()
334 //; disable ramp geni (needed to be able to fill up pull list without
335 //; starting immediately)
336 { m_pRamp->Disable();};
337
338 // stop/break/continue functions
339
340 virtual uint32 Stop(CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
341 //; stop move with acc/deceleration
342 virtual uint32 Stop(SINOSRampParam* apParam, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
343 //; stop move with acc/deceleration
344 virtual uint32 Stop(const char* apParam, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
345 //; stop move with acc/deceleration
346 virtual uint32 Stop(real64 arValue,
348 //; stop move with acc/deceleration at arValue
349 virtual uint32 Stop(real64 arPosition, SINOSRampParam* apParam,
351 //; stop move with acc/deceleration at arPosition
352 virtual uint32 Stop(real64 arValue, const char* apParam,
354 //; stop move with acc/deceleration at arValue
355
356 // tuning
357
358 virtual uint32 Tune(const char* apParam, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
359 virtual uint32 TuneAccept(const char* apParam, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
360
361 // get/set property functions
362
363 virtual const char* GetName();
364 //; return control name
365 virtual const char* GetUnit();
366 //; return control unit
367 virtual uint32 GetCharacteristics();
368 //; return control characteristics
369 virtual void SetCmdValue(real64 arValue);
370 //; set commanded controller value
371 virtual void GetCmdValue(real64& arValue);
372 //; get commanded controller value
373 virtual void SetCmdVelocity(real64 arVelocity);
374 //; set commanded velocity
375 virtual void GetCmdVelocity(real64& arVelocity);
376 //; get commanded velocity
377 virtual void SetCmdAcceleration(real64 arAcceleration);
378 //; set commanded acceleration
379 virtual void GetCmdAcceleration(real64& arAcceleration);
380 //; get commanded acceleration
381 virtual void SetCmdDeceleration(real64 arDeceleration);
382 //; set commanded deceleration
383 virtual void GetCmdDeceleration(real64& arDeceleration);
384 //; get commanded deceleration
385 virtual void SetCmdJerk(real64 arJerk, uint32 auNumber = DF_INOS_RAMP_JERK_ALL);
386 //; set commanded jerk
387 virtual void GetCmdJerk(real64& arJerk, uint32 auNumber = 0);
388 //; get commanded jerk
389 virtual void GetCmdRealJerk(real64& arJerk, uint32 auNumber = 0);
390 //; get commanded real jerk
391 virtual void SetCmdSlowMotion(real64 arSlowMotion);
392 //; set commanded slowmotion factor
393 virtual void GetCmdSlowMotion(real64& arSlowMotion);
394 //; get commanded slowmotion factor
395 virtual uint32 SetActValue(real64 arValue);
396 //; set actual commanded position
397 virtual void GetActValue(real64& arValue);
398 //; get actual commanded position
399 virtual void GetActVelocity(real64& arVelocity);
400 //; get actual commaned velocity
401 virtual void GetActAcceleration(real64& arAcceleration);
402 //; get actual commanded acceleration
403 virtual void GetActJerk(real64& arJerk);
404 //; get actual commanded jerk
405 virtual uint32 SetRealValue(real64 arValue);
406 //; set actual real value
407 virtual void GetRealValue(real64& arValue);
408 //; get actual real value
409 virtual void SetMinValue(real64 arValue);
410 //; set min. allowed value
411 virtual void GetMinValue(real64& arValue);
412 //; get min. allowed value
413 virtual void SetMaxValue(real64 arValue);
414 //; set max. allowed value
415 virtual void GetMaxValue(real64& arValue);
416 //; get max. allowed value
417 virtual void SetMaxVelocity(real64 arVelocity);
418 //; set max. allowed velocity
419 virtual void GetMaxVelocity(real64& arVelocity);
420 //; get max. allowed velocity
421 virtual void SetMaxAcceleration(real64 arAcceleration);
422 //; set max. allowed acceleration
423 virtual void GetMaxAcceleration(real64& arAcceleration);
424 //; get max. allowed acceleration
425 virtual void SetMaxDeceleration(real64 arDeceleration);
426 //; set max. allowed deceleration
427 virtual void GetMaxDeceleration(real64& arDeceleration);
428 //; get max. allowed deceleration
429 virtual void SetMaxJerk(real64 arJerk);
430 //; set max. allowed jerk
431 virtual void GetMaxJerk(real64& arJerk);
432 //; get max. allowed jerk
433 virtual void SetCycleTime(real64 arCycleTime);
434 //; set controller cycle time [sec]
435 virtual void GetCycleTime(real64& arCycleTime);
436 //; get controller cycle time [sec]
437 virtual uint16 GetCycleNumber();
438 //; get controller cycle number
439 virtual uint16 GetCycleId();
440 //; get controller cycle id
441 virtual uint8 GetBusId();
442 //; get axis bus id
443 virtual uint32 SetParam(const char* apName, real64 arValue);
444 //; universal set parameter with aName to aValue and return error code
445 virtual uint32 GetParam(const char* apName, real64& arResult);
446 //; universal get parameter with aName to aResult and return error code
447 virtual volatile real64* GetParamAdr(const char* apName);
448 //; universal get address of parameter with aName or NULL if not found
449 void SetFlag(uint32 auFlag)
450 { INOS_OR(m_uFlag, auFlag);};
451 //; set controller flags
452 void ClrFlag(uint32 auFlag)
453 { INOS_AND(m_uFlag, ~auFlag);};
454 //; clear controller flags
455 uint32 GetFlag()
456 { return m_uFlag;};
457 //; get controller flags
458 virtual uint32 GetState();
459 //; get controller state
460 virtual uint32 GetState(uint32& auRmpState, uint32& auCtrState);
461 //; get controller, ramp and controller state
462 virtual uint32 GetError();
463 //; get controller error
464 virtual uint32 GetError(uint32& auRmpError, uint32& auCtrState);
465 //; get controller, ramp and controller error
466 virtual uint32 GetWarning();
467 //; get controller warning
468 virtual uint32 GetWarning(uint32& auRmpWarning, uint32& auCtrWarning);
469 //; get controller, ramp and controller warning
470 virtual void AcceptError();
471 //; accept all errors
472 virtual void AcceptError(uint32 auError);
473 //; accept error
474 virtual void AcceptError(uint32 auError, uint32 auRmpError, uint32 auCtrError);
475 //; accept error
476 virtual void AcceptWarning();
477 //; accept all warnings
478 virtual void AcceptWarning(uint32 auWarning);
479 //; accept warning
480 virtual void AcceptWarning(uint32 auWarning, uint32 auRmpWarning, uint32 auCtrError);
481 //; accept warning
482
483 // param set functions
484 virtual void eCreateParamSet(const char* apSetName);
485 //; Same as CreateParamSet but for INCO registration (as it doesn't return
486 //; a pointer)
487 virtual CINOSControlParamSet* CreateParamSet(const char* apSetName);
488 //; create new param set with name apSetName and return pointer to it
489 virtual void DestroyParamSet(const char* apSetName);
490 //; destroy param set with name apSetName
491 virtual bool SelectParamSet(const char* apSetName);
492 //; select param set with name apSetName
493 virtual CINOSControlParamSet* GetParamSet(const char* apSetName);
494 //; get pointer to param set with name apSetName
495
496 static void eCreateGlobalParamSet(const char* apSetName);
497 //; Same as CreateGlobalParamSet but for INCO registration (as it doesn't return
498 //; a pointer)
499 static CINOSControlParamSet* CreateGlobalParamSet(const char* apSetName);
500 //; create new param set with name apSetName and return pointer to it
501 static void DestroyGlobalParamSet(const char* apSetName);
502 //; destroy param set with name apSetName
503 static CINOSControlParamSet* GetGlobalParamSet(const char* apSetName);
504 //; get pointer to param set with name apSetName
505
506 // miscellaneous functions
507
508 virtual CINCOObject* GetRegister();
509 //; do inco registration and return pointer to it
510 virtual void SetRamp(CINOSBaseRamp* apRamp);
511 //; set new ramp geni
512 CINOSBaseRamp* GetRamp()
513 { return m_pRamp;};
514 //; return pointer to ramp geni
515 virtual uintid RegisterErrorHook(void* apHandler, void* apObject = 0);
516 //; register error hook and return hook id
517 virtual void UnRegisterErrorHook(uintid auHookId);
518 //; unregister error hook
519 virtual const char* GetInputName();
520 //; return control input name
521 virtual const char* GetOutputName();
522 //; return control output name
523 virtual const char* GetEnbOutputName();
524 //; return enable output name
525 virtual const char* GetActivateOutputName();
526 //; return output name for m_pActiveOutput
527
528 static void SetBusError();
529 //; bus error occured
530 static void AcceptBusError();
531 //; accept bus error
532 static void SetSafetyError();
533 //; safety error occured
534 static void AcceptSafetyError();
535 //; accept safety error
536 static void SetApplicationError();
537 //; target error occured
538 static void AcceptApplicationError();
539 //; accept application error
540
541 virtual void UpdateIncoItems(bool i_bForceUpdate);
542
543 CINOSBaseController* GetController() { return m_pController; }
544 //; return controller
545
546 //--- internals --------------------------------------------------------
547
548 friend void _INI_0400_CINOSControl();
549 friend class CINOSRemoteControlWorker;
550
551 // operators (for binary tree of shapes)
552 public:
553 int operator < (CINOSControl& aControl)
554 { return (strcmp(GetName(), aControl.GetName())<0);}
555 int operator == (CINOSControl& aControl)
556 { return (strcmp(GetName(), aControl.GetName())==0);}
557 int operator < (const char* aName)
558 { return (strcmp(GetName(), aName)<0);}
559 int operator == (const char* aName)
560 { return (strcmp(GetName(), aName)==0);}
561
562 // protected member functions
563 protected:
564 void Signal(CINOSSync*& apSync);
565 //; signal sync object if requested
566 virtual void SetError(uint32 auErrors);
567 //; set axis error (and call error hook if nessecary)
568 bool Enter(uint32 auCommand, CINOSSync* apSync = 0);
569 //; check if command allowed in current state and return false if not
570 void Exit ();
571 //; leave critical section
572 void Exit (CINOSSync*& apCmdSync, CINOSSync* apSync);
573 //; leave critical section and wait if nessecary
574 bool IsCritical()
575 { return m_CmdLock.GetOwner() != 0;};
576 //; return true if somebody stays in critical section
577 virtual void iInActivate();
578 //; inactivate controller
579 virtual void iStop(SINOSRampParam* apParam);
580 //; internal stop
581 virtual SINOSRampParam* iGetRampParam(const char* apSetName);
582 //; get pointer to ramp param of set apSetName
583 virtual void iControl();
584 //; main control handler
585 virtual void iPostWrite();
586 //; post bus write handler
587 static void SetTargetError();
588 //; target error occured
589 void OnTargetError();
590 //; target error occured
591 void OnBusError();
592 //; bus error occured
593 void OnSafetyError();
594 //; safety error occured
595 void OnApplicationError();
596 //; safety error occured
597 CINOSBit* SearchOutput(const char* apName) const;
598 //; searches an output in the 'g_pOutputs', 'g_pFlags' and creates
599 //; creates it as a new flag if it doesn't exist.
600 virtual void CallErrorHooks();
601 //; call error hooks
602
603 // private member functions (external versions, because until now we are not
604 // able to register functions with default parameters)
605 private:
606 CINOSBus& GetBus();
607 //; Gets this controller's INOS bus. Assertion fails if no bus is available
608 void eActivate();
609 //; activate controller
610 void eActivate(bool abCheckVal, bool abSimulateVal, bool abSimulateOut,
611 bool abSimulateAct);
612 //; activate controller
613 void eReActivate();
614 //; reactivate controller
615 void eInActivate();
616 //; inactivate controller
617 void eAttachRemoteTargetControl(const char* apTarget, real64 arRemoteUpdateTime, bool abCreate);
618 //; create remote target controller
619 void eMove(real64 arPosition, const char* apParam);
620 //; move to position with acc/deceleration and velocity
621 void eStop();
622 //; stop move with acc/deceleration
623 void eVal1();
624 //; move to val 1
625 void eVal2();
626 //; move to val 2
627 void eToggle();
628 //; toggle between pos 1 and pos 2
629 void eAcceptError();
630 //; accept all pending errors
631 void eAcceptWarning();
632 //; accept all pending warnings
633 void eTune(const char* apParam);
634 //; tune controller
635 void eTuneAccept(const char* apParam);
636 //; accept tune results
637 void iToggling();
638 //; toggle handler (called cyclic)
639
640 // protected members
641 protected:
642 uint32 m_uState;
643 //; actual state
644 uint32 m_uSubState;
645 //; actual sub state
646 uint32 m_uNxtState;
647 //; next state
648 uint32 m_uPrvState;
649 //; previous state
650 uint32 m_uRmpState;
651 //; state of ramp geni before GetSVAJ
652 uint32 m_uError;
653 //; actual errors
654 uint32 m_uErrorDis;
655 //; actual disabling errors
656 uint32 m_uErrorMask;
657 //; actual error mask
658 uint32 m_uMaskFatal;
659 //; mask of fatal errors
660 uint32 m_uWarning;
661 //; actual warnings
662 uint32 m_uWarningMask;
663 //; actual warning mask
664 uint32 m_uFlag;
665 //; controller flags
666
667 inosName64 m_cName;
668 //; control name
669 CINCOObject* m_pRegister;
670 //; pointer to inco registration
671 CINCOObject* m_pCommand;
672 //; pointer to inco registration of commands
673 CINCOObject* m_pTest;
674 //; pointer to inco registration of controller test
675 CINCOObject* m_pError;
676 //; pointer to inco registration of errors
677 CINCOObject* m_pErrorDis;
678 //; pointer to inco registration of disabling errors
679 CINCOObject* m_pErrorMask;
680 //; pointer to inco registration of error mask
681 CINCOObject* m_pWarning;
682 //; pointer to inco registration of warnings
683 CINCOObject* m_pWarningMask;
684 //; pointer to inco registration of warning mask
685 CINCOObject* m_pFlag;
686 //; pointer to inco registration of controller flags
687 CINCOObject* m_pState;
688 //; pointer to inco registration of controller state
689 CINOSBaseRamp* m_pRamp;
690 //; pointer to ramp generator
691 CINOSBaseController* m_pController;
692 //; pointer to controller
693 CINOSMutex m_CmdLock;
694 //; mutex to guarantee mutual exclusion in command handling
695 CINOSSync* m_pActivate;
696 //; pointer to synch object to be signaled on end of activate
697 CINOSSync* m_pInActivate;
698 //; pointer to synch object to be signaled on end of inactivate
699 CINOSSync* m_pMove;
700 //; pointer to synch object to be signaled on end of move
701 CINOSSync* m_pStop;
702 //; pointer to synch object to be signaled on end of stop
703 CINOSSync* m_pVelocity;
704 //; pointer to synch object to be signaled on velocity reached
705 CINOSSync* m_pTune;
706 //; pointer to synch object to be signaled on tune ended
707 uintid m_uHookId;
708 //; id of main hook
709 uintid m_uPostHookId;
710 //; id of post hook
711 uintid m_uCmdHookId;
712 //; id of command hooks (e.g. toggle)
713 uintid m_uBusErrorHookId;
714 //; id of bus error hook
715 SINOSControlErrorHook* m_pErrorHooks;
716 //; pointer to list of error hooks
717 TINOSNameBalancedBinaryTree<CINOSControlParamSet>* m_pParamSets;
718 //; pool of all param sets
719 static TINOSNameBalancedBinaryTree<CINOSControlParamSet>* m_pGlobalParamSets;
720 //; pool of all param sets
721 real64 m_rCycleTimeMs;
722 //; requested cycle time [ms]
723 uint32 m_uCycleTime;
724 //; cycletime [us]
725 uint32 m_uHookTime;
726 //; cycletime [us]
727 uint32 m_uTimer;
728 //; cycletime [us]
729 inosName64 m_cInputName;
730 //; input name
731 inosName64 m_cOutputName;
732 //; output name
733 inosName64 m_cEnbOutputName;
734 //; enable output name
735 inosName64 m_cActivateOutputName;
736 //; output name for m_pActiveOutput
737 inosName64 m_cSelectedParamName;
738 //; last selected param name
739 inosName64 m_cRemoteTargetName;
740 //; remote target name (using local control if empty).
741 CINOSBusModule* m_pRemoteControlModule;
742 //; remote target module (using local control if nullptr).
743 uint32 m_uRemoteUpdateTime;
744 //; requested remote update time [ms].
745
746 CINOSBit* m_pEnbOutput;
747 //; pointer to enable output
748 CINOSBit* m_pActiveOutput;
749 //; output will reflect the activation state. If controller
750 //; is active, the output will be set, otherwise cleared.
751 bool m_bEmgSet;
752 //; true if I 've set the emg output
753
754 // test values
755
756 real64 m_rVal1;
757 //; toggle value 1
758 real64 m_rVal2;
759 //; toggle value 2
760 uint32 m_uDelay;
761 //; delay in ms between toggles
762 int32 m_iTicks;
763 //; system ticks to handle delay
764
765 bool m_bUpdatePending = false;
766 //; remote INCO items need to be updated
767 SINOSCollectedControlData* m_pCollectedData = nullptr;
768 //; collected data pointer
769 uint32 m_uRemoteCollectedDataAddr = 0;
770 //; collected data address from remote target
771 uint32 m_uRemoteCollectedDataVersion = 0;
772 //; version of collected data frame used by remote target (sender)
773 // command parameters
774 private:
775 uint32 m_uActivateCheckVal;
776 //; param : CheckVal
777 uint32 m_uActivateSimulateVal;
778 //; param : SimulateVal
779 uint32 m_uActivateSimulateOut;
780 //; param : SimulateOut
781 uint32 m_uActivateSimulateAct;
782 //; param : SimulateAct
783 real64 m_rMoveValue;
784 //; param : Value
785 inosName32 m_cMoveParam;
786 //; param
787 inosName32 m_cCreateRemoteControlTarget;
788 //; param
789 real64 m_cCreateRemoteControlUpdateTime;
790 bool m_bCreate{false};
791 //; remote target
792 char m_cTuneParam[64];
793 //; tune param
794
795 // inco explorer methods
796 private :
798 static uint32 eCreate(char* apName, char* apRamp, char* apController,
799 char* apInpName, char* apOutName);
801 static uint32 eDestroy(char* apName);
802
803 // static private members
804 private:
806 static TINOSNameBalancedBinaryTree<CINOSControl>* m_pControls;
808 static CINCOObject* m_psRegister;
810 static CINCOObject* m_psCmd;
812 static CINCOObject* m_psEntity;
814 static char m_ceName[64];
816 static char m_ceRamp[32];
818 static char m_ceController[32];
820 static char m_ceInput[32];
822 static char m_ceOutput[32];
823
824 // allow dynamic object handling (new/delete)
826};
827
828//------------------------------------------------------------------------------
829// end of file
830//------------------------------------------------------------------------------
831
832#endif // INC_CINOSCONTROL_H
Short comment.
Short comment.
Short comment.
#define DECLARE_DYNAMIC(aClass)
Definition cinospartitionmemory.h:328
Definition cinosbasecontroller.h:111
Definition cinosbaseramp.h:697
Definition cinosbaseramp.h:752
Definition cinosbit.h:54
Definition cinosbus.h:565
Definition cinoscontrol.h:104
Definition cinoscontrol.h:164
static uint32 Remove(CINOSControl *apControl)
add control
static uint32 Add(CINOSControl *apControl)
return pointer to control 'apName'
virtual uint32 Activate(bool abCheckVal=true, bool abSimulateVal=false, bool abSimulateOut=false, bool abSimulateAct=false, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
remove control
Definition cinosmutex.h:36
ICACHE class CINOSTask * GetOwner()
Return id of mutex owner.
Definition cinosmutex.h:118
Definition inos_syn.h:67
#define INOS_OR(variable, mask)
Definition inosmacro.h:201
#define DF_INOS_ASYNCHRONOUS
Definition inosmacro.h:337
#define DF_INOS_SYNCHRONOUS
Definition inosmacro.h:332
#define INOS_AND(variable, mask)
Definition inosmacro.h:210
extended ramp data
Definition cinosbaseramp.h:617
ramp data
Definition cinosbaseramp.h:602
ramp parameters
Definition cinosbaseramp.h:503