29 #ifndef INC_CINOSCONTROL_H
30 #define INC_CINOSCONTROL_H
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
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'
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
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)
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
109 virtual uint32 SetParam(
const char* apName, real64 arValue);
111 virtual uint32 GetParam(
const char* apName, real64& arResult);
113 virtual CINCOObject* GetRegister(
CINOSControl* apControl);
126 {
return (strcmp(m_cName, aSet.m_cName)<0);}
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);}
134 {
return (strcmp(aSet1.m_cName, aSet2.m_cName)==0);}
147 CINCOObject* m_pRegister;
160 struct SINOSControlErrorHook;
161 struct SINOSCollectedControlData;
173 const char* apController,
const char* apInpName,
const char* apOutName);
188 virtual uint32
Activate(
bool abCheckVal =
true,
bool abSimulateVal =
false,
189 bool abSimulateOut =
false,
bool abSimulateAct =
false,
197 virtual void CreateRemoteTargetControl(
const char* apTarget,
198 real64 arRemoteUpdateTime,
201 virtual void AttachRemoteTargetControl(
const char* apTarget,
202 real64 arRemoteUpdateTime,
205 virtual uintptr DoCollectData();
210 virtual uint32 Move(real64 arValue,
216 virtual uint32 Move(real64 arPosition,
const char* apParam,
219 virtual uint32 Toggle(real64 arvalue, real64 arValue2);
230 virtual real64 GetMoveTime(real64 arValue);
232 virtual real64 GetMoveTime(real64 arValue,
SINOSRampParam* apParam);
234 virtual real64 GetMoveTime(real64 arValue,
const char* apParam);
236 virtual real64 GetMoveTime(real64 arValue, real64 arDelta);
238 virtual real64 GetMoveTime(real64 arValue, real64 arDelta,
SINOSRampParam* apParam);
240 virtual real64 GetMoveTime(real64 arValue, real64 arDelta,
const char* apParam);
242 virtual real64 GetMoveTime(real64 arStartValue, real64 arEndValue,
246 virtual real64 GetMoveTime(real64 arStartValue, real64 arEndValue,
250 virtual real64 GetMoveTime(real64 arStartValue, real64 arEndValue,
251 real64 arDelta,
const char* apParam);
254 virtual uint32 GetMoveTicks(real64 arValue);
256 virtual uint32 GetMoveTicks(real64 arPosition,
SINOSRampParam* apParam);
258 virtual uint32 GetMoveTicks(real64 arValue,
const char* apParam);
260 virtual uint32 GetMoveTicks(real64 arValue, real64 arDelta);
262 virtual uint32 GetMoveTicks(real64 arValue, real64 arDelta,
SINOSRampParam* apParam);
264 virtual uint32 GetMoveTicks(real64 arValue, real64 arDelta,
const char* apParam);
266 virtual uint32 GetMoveTicks(real64 arStartValue, real64 arEndValue,
270 virtual uint32 GetMoveTicks(real64 arStartValue, real64 arEndValue,
274 virtual uint32 GetMoveTicks(real64 arStartValue, real64 arEndValue,
275 real64 arDelta,
const char* apParam);
278 virtual real64 GetMoveDist(real64 arValue, real64 arTime);
280 virtual real64 GetMoveDist(real64 arValue, real64 arTime,
283 virtual real64 GetMoveDist(real64 arValue, real64 arTime,
284 const char* apParam);
286 virtual real64 GetMoveDist(real64 arValue, uint32 auTicks);
288 virtual real64 GetMoveDist(real64 arValue, uint32 auTicks,
291 virtual real64 GetMoveDist(real64 arValue, uint32 auTicks,
292 const char* apParam);
294 virtual real64 GetMoveDist(real64 arStartValue, real64 arEndValue,
298 virtual real64 GetMoveDist(real64 arStartValue, real64 arEndValue,
302 virtual real64 GetMoveDist(real64 arStartValue, real64 arEndValue,
303 real64 arTime,
const char* apParam);
306 virtual real64 GetMoveDist(real64 arStartValue, real64 arEndValue,
310 virtual real64 GetMoveDist(real64 arStartValue, real64 arEndValue,
314 virtual real64 GetMoveDist(real64 arStartValue, real64 arEndValue,
315 uint32 auTicks,
const char* apParam);
318 virtual uint64 GetTargetTicks();
323 virtual uint32 Pull(real64 arS, real64 arV, real64 arA, real64 arJ);
332 { m_pRamp->Enable();};
336 { m_pRamp->Disable();};
346 virtual uint32 Stop(real64 arValue,
352 virtual uint32 Stop(real64 arValue,
const char* apParam,
362 virtual const char* GetName();
364 virtual const char* GetUnit();
366 virtual uint32 GetCharacteristics();
368 virtual void SetCmdValue(real64 arValue);
370 virtual void GetCmdValue(real64& arValue);
372 virtual void SetCmdVelocity(real64 arVelocity);
374 virtual void GetCmdVelocity(real64& arVelocity);
376 virtual void SetCmdAcceleration(real64 arAcceleration);
378 virtual void GetCmdAcceleration(real64& arAcceleration);
380 virtual void SetCmdDeceleration(real64 arDeceleration);
382 virtual void GetCmdDeceleration(real64& arDeceleration);
384 virtual void SetCmdJerk(real64 arJerk, uint32 auNumber = DF_INOS_RAMP_JERK_ALL);
386 virtual void GetCmdJerk(real64& arJerk, uint32 auNumber = 0);
388 virtual void GetCmdRealJerk(real64& arJerk, uint32 auNumber = 0);
390 virtual void SetCmdSlowMotion(real64 arSlowMotion);
392 virtual void GetCmdSlowMotion(real64& arSlowMotion);
394 virtual uint32 SetActValue(real64 arValue);
396 virtual void GetActValue(real64& arValue);
398 virtual void GetActVelocity(real64& arVelocity);
400 virtual void GetActAcceleration(real64& arAcceleration);
402 virtual void GetActJerk(real64& arJerk);
404 virtual uint32 SetRealValue(real64 arValue);
406 virtual void GetRealValue(real64& arValue);
408 virtual void SetMinValue(real64 arValue);
410 virtual void GetMinValue(real64& arValue);
412 virtual void SetMaxValue(real64 arValue);
414 virtual void GetMaxValue(real64& arValue);
416 virtual void SetMaxVelocity(real64 arVelocity);
418 virtual void GetMaxVelocity(real64& arVelocity);
420 virtual void SetMaxAcceleration(real64 arAcceleration);
422 virtual void GetMaxAcceleration(real64& arAcceleration);
424 virtual void SetMaxDeceleration(real64 arDeceleration);
426 virtual void GetMaxDeceleration(real64& arDeceleration);
428 virtual void SetMaxJerk(real64 arJerk);
430 virtual void GetMaxJerk(real64& arJerk);
432 virtual void SetCycleTime(real64 arCycleTime);
434 virtual void GetCycleTime(real64& arCycleTime);
436 virtual uint16 GetCycleNumber();
438 virtual uint16 GetCycleId();
440 virtual uint8 GetBusId();
442 virtual uint32 SetParam(
const char* apName, real64 arValue);
444 virtual uint32 GetParam(
const char* apName, real64& arResult);
446 virtual volatile real64* GetParamAdr(
const char* apName);
448 void SetFlag(uint32 auFlag)
451 void ClrFlag(uint32 auFlag)
457 virtual uint32 GetState();
459 virtual uint32 GetState(uint32& auRmpState, uint32& auCtrState);
461 virtual uint32 GetError();
463 virtual uint32 GetError(uint32& auRmpError, uint32& auCtrState);
465 virtual uint32 GetWarning();
467 virtual uint32 GetWarning(uint32& auRmpWarning, uint32& auCtrWarning);
469 virtual void AcceptError();
471 virtual void AcceptError(uint32 auError);
473 virtual void AcceptError(uint32 auError, uint32 auRmpError, uint32 auCtrError);
475 virtual void AcceptWarning();
477 virtual void AcceptWarning(uint32 auWarning);
479 virtual void AcceptWarning(uint32 auWarning, uint32 auRmpWarning, uint32 auCtrError);
483 virtual void eCreateParamSet(
const char* apSetName);
488 virtual void DestroyParamSet(
const char* apSetName);
490 virtual bool SelectParamSet(
const char* apSetName);
495 static void eCreateGlobalParamSet(
const char* apSetName);
500 static void DestroyGlobalParamSet(
const char* apSetName);
507 virtual CINCOObject* GetRegister();
514 virtual uintid RegisterErrorHook(
void* apHandler,
void* apObject = 0);
516 virtual void UnRegisterErrorHook(uintid auHookId);
518 virtual const char* GetInputName();
520 virtual const char* GetOutputName();
522 virtual const char* GetEnbOutputName();
524 virtual const char* GetActivateOutputName();
527 static void SetBusError();
529 static void AcceptBusError();
531 static void SetSafetyError();
533 static void AcceptSafetyError();
535 static void SetApplicationError();
537 static void AcceptApplicationError();
540 virtual void UpdateIncoItems(
bool i_bForceUpdate);
547 friend void _INI_0400_CINOSControl();
548 friend class CINOSRemoteControlWorker;
553 {
return (strcmp(GetName(), aControl.GetName())<0);}
555 {
return (strcmp(GetName(), aControl.GetName())==0);}
556 int operator < (
const char* aName)
557 {
return (strcmp(GetName(), aName)<0);}
558 int operator == (
const char* aName)
559 {
return (strcmp(GetName(), aName)==0);}
565 virtual void SetError(uint32 auErrors);
567 bool Enter(uint32 auCommand,
CINOSSync* apSync = 0);
574 {
return m_CmdLock.
GetOwner() != 0;};
576 virtual void iInActivate();
582 virtual void iControl();
584 virtual void iPostWrite();
586 static void SetTargetError();
588 void OnTargetError();
592 void OnSafetyError();
594 void OnApplicationError();
596 CINOSBit* SearchOutput(
const char* apName)
const;
599 virtual void CallErrorHooks();
609 void eActivate(
bool abCheckVal,
bool abSimulateVal,
bool abSimulateOut,
616 void eAttachRemoteTargetControl(
const char* apTarget, real64 arRemoteUpdateTime,
bool abCreate);
618 void eMove(real64 arPosition,
const char* apParam);
630 void eAcceptWarning();
632 void eTune(
const char* apParam);
659 uint32 m_uWarningMask;
666 CINCOObject* m_pRegister;
668 CINCOObject* m_pCommand;
670 CINCOObject* m_pTest;
672 CINCOObject* m_pError;
674 CINCOObject* m_pErrorDis;
676 CINCOObject* m_pErrorMask;
678 CINCOObject* m_pWarning;
680 CINCOObject* m_pWarningMask;
682 CINCOObject* m_pFlag;
684 CINCOObject* m_pState;
706 uintid m_uPostHookId;
710 uintid m_uBusErrorHookId;
712 SINOSControlErrorHook* m_pErrorHooks;
714 TINOSNameBalancedBinaryTree<CINOSControlParamSet>* m_pParamSets;
716 static TINOSNameBalancedBinaryTree<CINOSControlParamSet>* m_pGlobalParamSets;
718 real64 m_rCycleTimeMs;
726 inosName32 m_cInputName;
728 inosName32 m_cOutputName;
730 inosName32 m_cEnbOutputName;
732 inosName32 m_cActivateOutputName;
734 inosName32 m_cSelectedParamName;
736 inosName32 m_cRemoteTargetName;
738 CINOSBusModule* m_pRemoteControlModule;
740 uint32 m_uRemoteUpdateTime;
762 bool m_bUpdatePending =
false;
764 SINOSCollectedControlData* m_pCollectedData =
nullptr;
766 uint32 m_uRemoteCollectedDataAddr = 0;
768 uint32 m_uRemoteCollectedDataVersion = 0;
772 uint32 m_uActivateCheckVal;
774 uint32 m_uActivateSimulateVal;
776 uint32 m_uActivateSimulateOut;
778 uint32 m_uActivateSimulateAct;
782 inosName32 m_cMoveParam;
784 inosName32 m_cCreateRemoteControlTarget;
786 real64 m_cCreateRemoteControlUpdateTime;
787 bool m_bCreate{
false};
789 char m_cTuneParam[64];
795 static uint32 eCreate(
char* apName,
char* apRamp,
char* apController,
796 char* apInpName,
char* apOutName);
798 static uint32 eDestroy(
char* apName);
803 static TINOSNameBalancedBinaryTree<CINOSControl>* m_pControls;
805 static CINCOObject* m_psRegister;
807 static CINCOObject* m_psCmd;
809 static CINCOObject* m_psEntity;
811 static char m_ceName[64];
813 static char m_ceRamp[32];
815 static char m_ceController[32];
817 static char m_ceInput[32];
819 static char m_ceOutput[32];
829 #endif // INC_CINOSCONTROL_H