INOS
cinosmcmodule.h
Go to the documentation of this file.
1//******************************************************************************
26//******************************************************************************
27
28#ifndef INC_CINOSMCMODULE_H
29#define INC_CINOSMCMODULE_H
30
31//------------------------------------------------------------------------------
32// defines
33//------------------------------------------------------------------------------
34//
35#define INOS_MCMODULE_STEP_INST(_inst_,_msg_) \
36 if (!(_msg_->GetData() && (_msg_->GetData()->GetFlag()&CINOSMcDataInst::eFlgIgnoreStep)) &&\
37 !_msg_->GetTrigger() && \
38 !IsDispatcher(_msg_->GetSender()) && \
39 ((_inst_.GetMode() == CINOSMcModule::eModStep) || \
40 ((_inst_.GetParent()&&(_inst_.GetParent()->GetMode() == CINOSMcModule::eModStep)) &&\
41 ((_inst_.GetParent()&&(!_inst_.GetParent()->GetModule(_msg_->GetSender()->GetName()))))))){\
42 char msg[256]; \
43 inos_strncpy(msg, _msg_->GetName(), sizeof(msg)); \
44 uint32 uRes = SendMessage(INOS_MCMSG_TYPE_STEP, INOS_MCMSG_CODE_MODULE_STEP,\
45 INOS_MCMSG_FLAG_RESUME|INOS_MCMSG_FLAG_SKIP| \
46 INOS_MCMSG_FLAG_CANCEL|INOS_MCMSG_FLAG_STOP, \
47 msg); \
48 if (uRes & INOS_MCMSG_FLAG_CANCEL){ \
49 _inst_.iStepCanceled(_msg_); \
50 return _inst_.MsgDone(_msg_, CINOSTaskEx::eRplCanceled, 0); \
51 } \
52 if (uRes & INOS_MCMSG_FLAG_STOP){ \
53 _inst_.iStepStopped(_msg_); \
54 return _inst_.MsgDone(_msg_, CINOSTaskEx::eRplStopped, 0); \
55 } \
56 if (uRes & INOS_MCMSG_FLAG_SKIP){ \
57 _inst_.iStepSkipped(_msg_); \
58 return _inst_.MsgDone(_msg_, CINOSTaskEx::eRplSkipped, 0); \
59 } \
60 }
61#define INOS_MCMODULE_STEP(_msg_) INOS_MCMODULE_STEP_INST((*this), _msg_)
62//
63typedef char inosResName[128];
64#define DF_INOS_MCMODULE_MAXCOUNT 8 // max. number of counters
65#define DF_INOS_MCMODULE_MAXAVERAGE 32 // max. average
66#define DF_INOS_MCMODULE_EMGDELAY 100 // default emergency delay
67//
68//------------------------------------------------------------------------------
69// includes
70//------------------------------------------------------------------------------
71//
72// system
73#include <inos_1ms.h>
74#include <cinosprocessimage.h>
75#include <cinosphysicalaxis.h>
76#include <cinoscontrol.h>
77#include <cinosserialinout.h>
78#include <cinostaskex.h>
79#include <cinosmcmessage.h>
80#include <cinosmcjob.h>
81#include <cinosmcscript.h>
82#include <cinosmcdata.h>
83#include <cinosmccron.h>
84//
85// C++
86//
87// project
88//
89//------------------------------------------------------------------------------
90// forward declarations
91//------------------------------------------------------------------------------
92//
93#if defined(INOS_COORDINATOR_SUPPORT)
94class CINOSMcCoord;
95class CINOSMcScript;
96#endif
97class CINOSMcLua;
98struct lua_State;
99class CINOSMcFastLoad;
100class CINOSMcGuardian;
101class CINOSMcJob;
102class CINOSMcData;
103class CINOSBaseAxis;
105class CINOSMcModule;
106class CINOSMcValves;
107
108//------------------------------------------------------------------------------
109// types
110//------------------------------------------------------------------------------
111//
113using TINOSMcModuleCondFunc = std::function<bool()>;
116using TINOSMcModuleCondHandler = std::function<uint32()>;
117
118
119//------------------------------------------------------------------------------
120// class CINOSMcModuleRes
121//------------------------------------------------------------------------------
122//
123#define INOS_RESOURCE_TYPE(type,id) ((type&0xF) + ((id&0xfff)<<4))
124//
125class CINOSMcModuleRes : public CINCOstring
126{
127 //--- user interface ---------------------------------------------------
128
129 // public enumerations
130 public:
131 // resource types
132
133 // IMPORTANT : Do NOT change these numbers, as these are part of the
134 // mcrobot message sourceid -> customer code on PC side relies on them
135 enum {
136 eResModule = 0,
137 eResDigInp = 1,
138 eResDigOut = 2,
139 eResAnaInp = 3,
140 eResAnaOut = 4,
141 eResDigFlg = 5,
142 eResPos = 6,
143 eResAxis = 7,
144 eResControl = 8,
145 eResSio = 9,
146 };
147
148 // resource flags
149 enum EResFlag {
150 eResFlgNone = 0x00000000,
151 eResFlgMandatory = 0x00000001,
152 eResFlgCountUp = 0x00000002,
153 eResFlgCountDown = 0x00000004,
154 // count both rising and falling edges
155 eResFlgCountUpDown = (eResFlgCountUp + eResFlgCountDown),
156 // any kind of statistics
157 eResFlgStat = eResFlgCountUpDown
158 };
159
160
161 //--- internals --------------------------------------------------------
162
163 friend class CINOSMcModule;
164 friend class CINOSMcRobot;
165
166 // public members
167 public :
169 CINOSMcModuleRes(const char* apName, const inosResName* apValue, void* apPtr,
170 uint32 auType, CINOSMcModule* apModule, uint32 auFlags);
172 uint32 GetResState();
175 void Update();
177 void Handle();
180 {m_bEnabled=true;};
183 {m_bEnabled=false;};
185 void SetOut(real64 arValue);
187 bool GetIO(real64& arValue) const;
189 void SetSetId(int16 aiSetId, const char* apParam=0);
191 void SetClrId(int16 aiClrId, const char* apParam=0);
193 uint32 GetResType()
194 { return m_uResTyp;};
196 uint32 GetResId() const
197 { return m_uResId;};
199 const char* GetOrgName()
200 { return &m_cName[0];};
202 const char* GetFullName()
203 { return &m_cFullName[0];};
205 const char* GetIncoName()
206 { return &m_cFullName[m_uIncoIndex];};
208 const char* GetUnit()
209 { return &m_cUnit[0];};
211 void RegisterStat(CINCOObject* apParent);
212 // get resource
213 template <class T> void GetResource(T*& apResource);
215 void SetObj(CINCOObject* apObj)
216 { m_pObj = apObj; }
218 CINCOObject* GetObj()
219 { return m_pObj; }
221 bool GetHookInfo(uint8& aoBusId, uint16& aoCycleId, uint32& aoCycleTime) const;
222
223 // resource state
224 enum {
225 eStaUndefined,
226 eStaOk,
227 eStaNotFound,
228 eStaSetNotFound,
229 eStaClrNotFound
230 };
231
233 inosName64 m_cFullName;
235 inosResName m_cName;
237 inosName64 m_cPureName;
239 inosName m_cUnit;
249 void* m_pDummy;
251 uint32 m_uResTyp;
253 uint32 m_uResId;
261 bool m_bSet;
263 intptr m_iSetId;
264 int16 m_iSetType;
265 // set command sub-code
266 uint32 m_uSetSubId;
268 intptr m_iClrId;
269 int16 m_iClrType;
273 inosName32 m_cSetParam;
275 inosName32 m_cClrParam;
276
277 nvuint32 m_uCounter;
279 CINCOObject* m_pObj{};
280
281 // public member functions
282 public:
283 // put 'aSource' to item
284 virtual long Put(void* aSource, long aIndex=0, long aOffset=0);
285
288};
289
290
291//------------------------------------------------------------------------------
292// class definition
293//------------------------------------------------------------------------------
294//
296{
297 //--- user interface ---------------------------------------------------
298
299 // public member functions
300 public :
301
302 // module commands
303
308 virtual CMcResult On(CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
309
314 virtual CMcResult Off(CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
315
320 virtual CMcResult Safe(CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
321
326 virtual CMcResult Init(CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
327
332 virtual CMcResult Home(CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
333
338 virtual CMcResult Recover(CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
339
347 virtual CMcResult Start(CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
348
352 virtual CMcResult Stop();
353
358 virtual CMcResult Stop(CINOSSync* apSync);
359
364 virtual CMcResult Stop(const char* apParam);
365
370 virtual CMcResult Pause(CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
371
376 virtual CMcResult Resume(CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
377
381 virtual CMcResult Cancel();
382
386 virtual CMcResult Cancel(CINOSSync* apSync);
387
392 virtual CMcResult Cancel(const char* apParam);
393
397 virtual CMcResult Retry(CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
398
402 virtual CMcResult Confirm(CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
403
407 virtual CMcResult Manual(CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
408
413 virtual CMcResult Prepare(real64 arStage, CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
414
418 virtual CMcResult Backup(CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
419
423 virtual CMcResult Restore(CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
424
431 virtual CMcResult CreateSubModule(const char* apName,
432 const char* apType, const char* apParam, CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
433
438 virtual CMcResult DestroySubModule(const char* apName,
440
449 "SetItems", &CINOSMcModule::iSetItems, nullptr, *this,
450 { "Values", "", nullptr, CINOSTaskExMsgParam::eFlgStructure},
451 { "Overwrite", false},
452 0xFFFFFFFF,
453 "Cmd=SetItems"
454 };
455
457 virtual CMcResult CreateData(const char* apName,
458 const char* apType,
459 const char* apParam,
461
463 virtual CMcResult DestroyData(const char* apName,
465
467 virtual CMcResult MoveData(const char* apSrcName, const char* apDstModule,
468 const char* apDstName, CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
469
471 virtual CMcResult CreateJob(const char* apName,
472 const char* apType,
473 const char* apParam,
475
477 virtual CMcResult DestroyJob(const char* apName,
479
481 virtual CMcResult CreateScript(const char* apName,
482 const char* apType,
483 const char* apParam,
485
487 virtual CMcResult DestroyScript(const char* apName,
489
491 virtual CMcResult RunJob(const char* apName, const char* apParam,
494 virtual CMcResult RunScript(const char* apName, const char* apData,
495 const char* apParam, CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
496
498 virtual CMcResult SetMode(const char* apName,
501 virtual CMcResult SetModeAuto(CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
503 virtual CMcResult SetModeStep(CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
505 virtual CMcResult SetModeSetup(CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
507 virtual CMcResult ClrModeSetup(CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
508
519 virtual CMcResult SetOut(const char* apName, real64 arValue,
530 virtual CMcResult GetIO(const char* apName, CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
532 virtual CMcResult WaitBitEx(const char* apName, real64 arValue, real64 arTimeout,
533 real64 arErrorType, real64 arErrorCode, real64 arErrorFlags,
534 const char* apErrorText, real64 arErrorSend, CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
536 virtual CMcResult WaitInp(const char* apName, real64 arValue, real64 arTimeout,
539 virtual CMcResult WaitAdcNB(const char* apName, uint32 auSlope, real64 arValue, real64 arTimeout,
542 virtual CMcResult WaitPosNB(const char* apName, uint32 auSlope, real64 arValue, real64 arTimeout,
545 virtual CMcResult WaitAxis(const char* apName, uint32 auSlope, real64 arValue, real64 arTimeout,
548 virtual CMcResult WaitAxisEx(const char* apName, uint32 auSlope, real64 arValue, real64 arTimeout, uint32 auFlags,
551 virtual CMcResult CntInc(CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
553 virtual CMcResult CntDec(CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
555 virtual CMcResult CntAdj(int32 aiValue, CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
556
558 virtual CMcResult SetCounter(uint32 auType, uint32 auNbr, uint32 auValue,
560
562 virtual CMcResult CronEnable(const char* apName, CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
564 virtual CMcResult CronDisable(const char* apName, CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
566 virtual CMcResult CronTouch(const char* apName, CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
568 virtual CMcResult CronCount(const char* apName, CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
569
571 virtual CMcResult IsActionAllowed(const char* apScriptName, CINOSSync* apSync=DF_INOS_SYNCHRONOUS);
572
574 virtual CMcResult ValveActivate(const char* apName, CINOSSync *apSync = DF_INOS_SYNCHRONOUS);
576 virtual CMcResult ValveRelease(const char* apName, CINOSSync *apSync = DF_INOS_SYNCHRONOUS);
577
581 virtual CINOSMcModule* GetModule(uint32 auIndex);
583 virtual CINOSMcModule* GetModule(const char* apName);
584
586 virtual CINOSMcModule* FindSubModule(const char* apName);
588 static CINOSMcModule* FindModule(const char* apName);
589
591 virtual CINOSMcGuardian* GetGuardian() const;
593 #if defined(INOS_COORDINATOR_SUPPORT)
594 virtual CINOSMcCoord* GetCoord();
595 #endif
597 #if defined(INOS_LUAINTERPRETER)
598 virtual CINOSMcLua* GetLua();
599 #endif
601 virtual CINOSMcBaseJob* GetJob(const char* apName);
603 virtual CINOSMcBaseScript* GetScript(uint32 auNr);
605 virtual CINOSMcBaseScript* GetScript(const char* apName);
607 virtual void RemScript(const char* apName);
609 virtual CINOSMcData* GetData(uint32 auNr);
611 virtual CINOSMcData* GetData(const char* apName);
613 virtual CINOSMcData* GetData(const char* apPrefix, uint32 auNr);
615 virtual CINOSMcData* GetData(const char* apPrefix, const char* apName);
616
618 virtual bool GetEmergency();
620 virtual uint32 GetEmergencyDelay();
625 { return m_pDiEmergency; };
628 { return true; };
630 virtual bool DoPostSTOMessage()
631 { return true; };
633 virtual uint32 GetSimLevel();
635 virtual void SetSimLevel(uint32 auSimLevel, bool abNonVolatile);
637 virtual real64 GetSlowMotion();
639 virtual void SetSlowMotion(real64 arSlowMotion, bool abNonVolatile);
641 virtual real64 GetProp(const char* apName, real64 arDefValue, CINOSTaskExMsg* apMsg);
643 virtual void GetProp(const char* apName, char* apBuffer, uint32 auLength, CINOSTaskExMsg* apMsg);
645 virtual real64 GetProp(const char* apName, real64 arDefValue, CINOSMcData* apData);
647 virtual void GetProp(const char* apName, const char* apDefault, char* apBuffer, uint32 auLength, CINOSMcData* apData);
648
649 // get resource
650 template<class T> T* GetResource(const char* apName);
651 // get digital input resource named 'Inp.apName'
652 CINOSBit* GetInpResource(const char* apName);
653 // get digital output resource named 'Out.apName'
654 CINOSBit* GetOutResource(const char* apName);
655 // get digital flag resource named 'Flg.apName'
656 CINOSBit* GetFlgResource(const char* apName);
657 // get analog input resource named 'Adc.apName'
658 CINOSAdcChannel* GetAdcResource(const char* apName);
659 // get analog output resource named 'Dac.apName'
660 CINOSDacChannel* GetDacResource(const char* apName);
661 // get poschannel resource named 'Pos.apName'
662 CINOSPosChannel* GetPosResource(const char* apName);
663 // get axis resource named 'Axes.apName'
664 virtual CINOSPhysicalAxis* GetAxisResource(const char* apName) { return NULL; };
671 tMsgId AddInpResource(const char* apResName, const char* apImageName, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
678 tMsgId AddOutResource(const char* apResName, const char* apImageName, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
685 tMsgId AddAdcResource(const char* apResName, const char* apImageName, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
692 tMsgId AddDacResource(const char* apResName, const char* apImageName, CINOSSync* apSync = DF_INOS_SYNCHRONOUS);
693
703 uint32 RegisterHook(uintid& aoHookId, const char* apResName, void* apHandler, void* apObject, int32 aiOrder);
704
711 uint32 UnRegisterHook(uintid aoHookId, const char* apResName);
712
714 virtual CINCOObject* GetResObj();
715
717 virtual uint32 GetMode()
718 { return m_uMode;};
719
721 virtual uint32 GetCntValue(uint32 auType, uint32 auNbr);
722
724 virtual const char* GetModuleName()
725 { return GetTreeName();};
726
731 static CINOSMcModule* GetMachine(const char* apName);
732
737 static CINOSMcModule* GetMachine(uint32 auIndex);
738
746 static uint32 CreateMachine(CINOSMcModule* &apNewModule,
747 const char* apName,
748 const char* apType,
749 const char* apParam);
750
755 static uint32 DestroyMachine(const char* apName);
756
760 static uint32 ShutdownRequest();
761
763 virtual void AddCommand(const char* apName, uint32 auCode,
764 CINCOProcedure* apProc) override;
765 virtual void AddCommand(CINOSTaskExMsg* apMsg,
766 uint64 aChar, // characteristics of object
767 uint16 aKeyLevel, // keylevel of object
768 bool abRegisterInco=true) override;
770 virtual void AddCommand(const char* apName, uint32 auCode, uint32 auType=eMsgCmd) override;
772 virtual void RemCommand(const char* apName) override;
774 virtual void AddChildCommand(const char* apModuleName,
775 const char* apFunctionName,
776 CINOSTaskExMsg* apCmdMsg,
777 bool abRegisterInco = true) override;
779 virtual void RemChildCommand(const char* apModuleName, const char* apFunctionName) override;
780
782 virtual void AddChildModule(const char* apModuleName) override;
784 virtual void RemChildModule(const char* apModuleName) override;
785
787 constexpr static int GetLastCmd() {
788 return eCmdINOSMcModuleLast;
789 }
791 constexpr static int GetLastUsr() {
792 return eUsrINOSMcModuleLast;
793 }
794
795 //--- internals --------------------------------------------------------
796
797 friend class CINOSMcModuleRes;
798 friend class CINOSMcModuleWaitObj;
799 friend class CINOSMcValve;
800 friend class CINOSMcFastLoad;
801 friend void _INI_0000_CINOSMcModule();
802 friend void _INI_0300_CINOSMcModule();
803 friend void _INI_0500_CINOSMcModule();
804 friend void _INI_1000_CINOSMcModule();
805
806 friend int l_add_command(lua_State *L);
807
808 // public members (used by container class)
809 public:
811 CINOSMcModule (const char* apName, const char* apParam);
813 CINOSMcModule (const char* apName, const char* apType, const char* apParam);
815 virtual ~CINOSMcModule ();
817 virtual void PostCreate(void* apParent) override;
819 virtual bool PreDestroy(bool& bDeleteSelf) override;
820
821 // command codes
822 enum {
823 eCmdINOSMcModuleFirst = eCmdINOSTaskExLast+1,
824 eCmdOn,
825 eCmdOff,
826 eCmdSafe,
827 eCmdInit,
828 eCmdHome,
829 eCmdRecover,
830 eCmdStart,
831 eCmdStop,
832 eCmdPause,
833 eCmdResume,
834 eCmdCancel,
835 eCmdRetry,
836 eCmdConfirm,
837 eCmdManual,
838 eCmdPrepare,
839 eCmdBackup,
840 eCmdRestore,
841 eCmdCreateSubModule,
842 eCmdDestroySubModule,
843 eCmdCreateData,
844 eCmdDestroyData,
845 eCmdMoveData,
846 eCmdMoveDataInt,
847 eCmdCreateJob,
848 eCmdDestroyJob,
849 eCmdCreateScript,
850 eCmdDestroyScript,
851 eCmdRunJob,
852 eCmdRunScript,
853 eCmdRunRegisteredLuaFunction,
854 eCmdSetMode,
855 eCmdSetModeAuto,
856 eCmdSetModeStep,
857 eCmdSetModeSetup,
858 eCmdClrModeSetup,
859 eCmdSetOut,
860 eCmdGetIO,
861 eCmdWaitBitEx,
862 eCmdWaitInp,
863 eCmdWaitAdc,
864 eCmdWaitPos,
865 eCmdWaitAxis,
866 eCmdSetCounter,
867 eCmdCntInc,
868 eCmdCntDec,
869 eCmdCntAdj,
870 eCmdCronEnable,
871 eCmdCronDisable,
872 eCmdCronTouch,
873 eCmdCronCount,
874 eCmdCanLoad,
875 eCmdValveActivate,
876 eCmdValveRelease,
877 eCmdAddInpResource,
878 eCmdAddOutResource,
879 eCmdAddAdcResource,
880 eCmdAddDacResource,
881 eCmdINOSMcModuleLast
882 };
883
884 // user command codes
885 enum {
886 eUsrINOSMcModuleFirst = eUsrINOSTaskExLast+1,
887 eUsrEmgSet,
888 eUsrEmgClr,
889 eUsrSTOSet,
890 eUsrSTOClr,
891 eUsrMsgSet,
892 eUsrMsgAck,
893 eUsrSlowMotionChanged,
894 eUsrSimLevelChanged,
895 eUsrLinkDown,
896 eUsrSTOConfirmSet,
897 eUsrSTOConfirmClr,
898 eUsrSafetyConfigUpdate,
899 eUsrINOSMcModuleLast
900 };
901 // internal command codes
902 enum {
903 eIntINOSMcModuleFirst = eIntINOSTaskExLast + 1,
904 eIntGetResource,
905 eIntWaitTimeout,
906 eIntINOSMcModuleLast
907 };
908
909 // states
910 enum {
911 eStaINOSMcModuleFirst = eStaINOSTaskExLast+1,
912 eStaINOSMcModuleLast
913 };
914
915 // modes
916 enum {
917 eModAuto,
918 eModSequential,
919 eModStep,
920 eModLast
921 };
922
923 // simulation levels
924 enum {
925 eSimNo,
926 eSimSemi,
927 eSimFull
928 };
929
930 // act job states
931 enum {
932 eStaJobNone,
933 eStaJobRunning,
934 eStaJobCompleted,
935 eStaJobStopped,
936 eStaJobCanceled,
937 eStaJobFailed,
938 eStaJobError,
939 eStaJobFatal,
940 eStaJobRejected,
941 eStaJobIgnored,
942 eStaJobInComplete,
943 eStaJobPaused
944 };
945
946 // options
947 enum {
948 eOptCoord = 0x00000100, // coordintator support
949 eOptMode = 0x00000200, // mode support
950 eOptGuard = 0x00000400, // guardian support
951 eOptConc = 0x00000800, // job/script concurrency support
952 eOptCron = 0x00001000, // cron support
953 eOptSafety = 0x00002000, // safety support
954 eOptResMcM4 = 0x00004000, // reserved for future use
955 eOptResMcM5 = 0x00008000 // reserved for future use
956 };
957
958 // flags (R - read only, W - read/write)
959 enum EFlags : uint64 {
960 eFlgResource= 0x00000100, // R resource ok
961 eFlgOn = 0x00000200, // R on ok
962 eFlgInit = 0x00000400, // R init ok
963 eFlgSetup = 0x00000800, // R setup ok
964 eFlgJob = 0x00001000, // R job running
965 eFlgBackup = 0x00002000, // R backup ok
966 eFlgPaused = 0x00004000, // R paused
967 eFlgSafe = 0x00008000, // R safe
968 eFlgCreated = 0x0000010000000000LL// R module creation completed
969 };
970
971 // requests
972 enum {
973 eReqOff = 0x00000100, // R off request
974 eReqStop = 0x00000200, // R stop request
975 eReqCancel = 0x00000400, // R cancel request
976 eReqStep = 0x00000800, // R step request
977 eReqStart = 0x00001000, // R start request
978 eReqPause = 0x00002000, // R pause request
979 eReqSafe = 0x00004000, // R safe request
980 eReqSetup = 0x00008000 // R setup request
981 };
982
983 // critical sections
984 enum {
985 eCrtWaitObj = 0x00000100, // waiting for object
986 eCrtResMcM1 = 0x00000200, // reserved for future use
987 eCrtResMcM2 = 0x00000400, // reserved for future use
988 eCrtResMcM3 = 0x00000800, // reserved for future use
989 eCrtResMcM4 = 0x00001000, // reserved for future use
990 eCrtResMcM5 = 0x00002000, // reserved for future use
991 eCrtResMcM6 = 0x00004000, // reserved for future use
992 eCrtResMcM7 = 0x00008000 // reserved for future use
993 };
994
995 // wait object handling
996 enum ETypWait {
997 eTypWaitGt=0,
998 eTypWaitGte=1,
999 eTypWaitLt=2,
1000 eTypWaitLte=3,
1001 eTypWaitEq=4,
1002 eTypWaitNe=5,
1003 };
1004
1005 // protected members
1006 protected :
1008 virtual bool DispatchCmd(CINOSTaskExMsg* apMsg) override;
1010 virtual bool DispatchTmd(CINOSTaskExMsg* apMsg) override;
1012 virtual bool DispatchUser(CINOSTaskExMsg* apMsg) override;
1014 virtual bool DispatchEvent(CINOSTaskExMsg* apMsg) override;
1016 virtual bool DispatchReply(CINOSTaskExMsg* apReply) override;
1018 virtual bool DispatchInternal(CINOSTaskExMsg* apMsg) override;
1019
1020
1021 // public (but just for internal use)
1022 public :
1024 virtual CINOSMcModuleRes* AddResource(const char* apName, uint32 auType,
1025 uint32 auFlags = CINOSMcModuleRes::eResFlgMandatory, CINCOObject* apObj = 0);
1026 virtual CINOSMcModuleRes* AddResource(const char* apName, inosResName* apValue,
1027 uint32 auType, uint32 auFlags = CINOSMcModuleRes::eResFlgMandatory,
1028 CINCOObject* apObj = 0);
1029 virtual CINOSMcModuleRes* AddResource(const char* apName, void* apPtr,
1030 uint32 auType, uint32 auFlags = CINOSMcModuleRes::eResFlgMandatory,
1031 CINCOObject* apObj = 0);
1032 virtual CINOSMcModuleRes* AddResource(const char* apName, inosResName* apValue,
1033 void* apPtr, uint32 auType, uint32 auFlags = CINOSMcModuleRes::eResFlgMandatory,
1034 CINCOObject* apObj = 0);
1035 // get resource
1036 virtual CINOSMcModuleRes* iGetResource(const char* apName);
1037 // get resource
1038 virtual CINOSMcModuleRes* iGetResource(uint32 auNumber);
1039 template <typename F>
1040 void iForEachResource(F&& f) {
1041 m_pRes->ForEach(std::move(f));
1042 }
1043 // enable resource
1044 virtual void EnbResource(char* apName);
1045 // disable resource
1046 virtual void DisResource(char* apName);
1048 virtual CMcResult PutMsg(CINOSTaskExMsg* apMsg, tMsgId aMsgId=0) override;
1049
1050 #ifdef INOS_SAFETY_SUPPORT
1051 virtual void SafetyConfigUpdate();
1052 virtual void iSafetyConfigUpdate(CINOSTaskExMsg* apMsg);
1053 #endif
1054
1055 // protected members
1056 protected :
1058 virtual void AdjTrigger(CINOSTaskExMsg* apMsg, real64 arCmdTime);
1060 virtual void AdjTrigger(CINOSTaskExMsg* apMsg, CINOSBaseAxis* m_pAxis,
1061 real64 arStart, real64 arEnd, const char* apParam);
1062
1064 virtual void iStartup(CINOSTaskExMsg* apMsg) override;
1066 virtual void iStartup(real64 arStage) override;
1068 virtual bool iPostStartup() override;
1071 virtual void iStartupDone();
1073 virtual void iShutdown(CINOSTaskExMsg* apMsg) override;
1075 virtual void iCheckRes(CINOSTaskExMsg* apMsg);
1077 virtual void iLinkDown(CINOSTaskExMsg* apMsg);
1078
1080 #ifdef INOS_MULTICORE
1081 virtual uint32 iSwitchCore(uint8 auCoreId) override;
1082 #endif
1083
1085 virtual void iEmgSet(CINOSTaskExMsg* apMsg);
1087 virtual void iEmgClr(CINOSTaskExMsg* apMsg);
1088
1089 #ifdef INOS_SAFETY_SUPPORT
1091 virtual void iSTOSet(CINOSTaskExMsg* apMsg);
1093 virtual void iSTOClr(CINOSTaskExMsg* apMsg);
1095 virtual void iSTOConfirmSet(CINOSTaskExMsg* apMsg);
1097 virtual void iSTOConfirmClr(CINOSTaskExMsg* apMsg);
1098 #endif
1099
1101 // Implements step support for all commands of type TINOSTaskExCmd.
1102 // It also calls the base pre dispatcher form CINOSTaskEx
1103 virtual bool PreDispatchMsg(CINOSTaskExMsg* apMsg) override;
1104
1106 virtual void PostEmergency();
1108 virtual CMcResult PostEmergencyStopMessage();
1110 virtual void iOn(CINOSTaskExMsg* apMsg);
1112 virtual void iiOn(CINOSTaskExMsg* apMsg);
1114 virtual void irplOn(CINOSTaskExMsg* apMsg, CINOSTaskExMsg* apRpl);
1116 virtual void iOff(CINOSTaskExMsg* apMsg);
1118 virtual void iiOff();
1120 virtual void irplOff(CINOSTaskExMsg* apMsg, CINOSTaskExMsg* apRpl);
1122 virtual void iSafe(CINOSTaskExMsg* apMsg);
1124 virtual void irplSafe(CINOSTaskExMsg* apMsg, CINOSTaskExMsg* apRpl);
1126 virtual void iInit(CINOSTaskExMsg* apMsg);
1128 virtual void irplInit(CINOSTaskExMsg* apMsg, CINOSTaskExMsg* apRpl);
1130 virtual void iHome(CINOSTaskExMsg* apMsg);
1132 virtual void irplHome(CINOSTaskExMsg* apMsg, CINOSTaskExMsg* apRpl);
1134 virtual void iRecover(CINOSTaskExMsg* apMsg);
1136 virtual void irplRecover(CINOSTaskExMsg* apMsg, CINOSTaskExMsg* apRpl);
1138 virtual void iStart(CINOSTaskExMsg* apMsg);
1140 virtual void iStop(CINOSTaskExMsg* apMsg);
1142 virtual void iiStop();
1144 virtual void irplStop(CINOSTaskExMsg* apMsg, CINOSTaskExMsg* apRpl);
1146 virtual void iPause(CINOSTaskExMsg* apMsg);
1148 virtual void irplPause(CINOSTaskExMsg* apMsg, CINOSTaskExMsg* apRpl);
1150 virtual void iResume(CINOSTaskExMsg* apMsg);
1152 virtual void iCancel(CINOSTaskExMsg* apMsg);
1154 virtual void iiCancel(bool abHandleOffRequest = true);
1156 virtual void irplCancel(CINOSTaskExMsg* apMsg, CINOSTaskExMsg* apRpl);
1158 virtual void iRetry(CINOSTaskExMsg* apMsg);
1160 virtual void iConfirm(CINOSTaskExMsg* apMsg);
1162 virtual void iManual(CINOSTaskExMsg* apMsg);
1164 virtual void iPrepare(CINOSTaskExMsg* apMsg);
1166 virtual void iBackup(CINOSTaskExMsg* apMsg);
1168 virtual void iRestore(CINOSTaskExMsg* apMsg);
1170 virtual void irplRestore(CINOSTaskExMsg* apMsg, CINOSTaskExMsg* apRpl);
1172 virtual void iCreateSubModule(CINOSTaskExMsg* apMsg);
1174 virtual uint32 iCreateSubModule(const char* apName, const char* apType, const char* apParam);
1176 virtual void iDestroySubModule(CINOSTaskExMsg* apMsg);
1178 virtual uint32 iDestroySubModule(const char* apName);
1180 virtual void iSetItems(CINOSTaskExMsg* apMsg);
1182 virtual void iCreateData(CINOSTaskExMsg* apMsg);
1184 virtual void iDestroyData(CINOSTaskExMsg* apMsg);
1186 virtual void iMoveData(CINOSTaskExMsg* apMsg);
1188 virtual void iMoveDataInt(CINOSTaskExMsg* apMsg);
1190 virtual void iCreateJob(CINOSTaskExMsg* apMsg);
1192 virtual void iDestroyJob(CINOSTaskExMsg* apMsg);
1194 virtual void iCreateScript(CINOSTaskExMsg* apMsg);
1196 virtual void iDestroyScript(CINOSTaskExMsg* apMsg);
1198 virtual void iRunJob(CINOSTaskExMsg* apMsg);
1200 virtual void irplRunJob(CINOSTaskExMsg* apMsg, CINOSTaskExMsg* apRpl);
1202 virtual void iRunScript(CINOSTaskExMsg* apMsg);
1203 public:
1204 // This methods need to be public because Scripts use 'double dispatch'.
1206 #if defined(INOS_COORDINATOR_SUPPORT)
1207 virtual void iRunCoordJob(CINOSTaskExMsg* apMsg);
1209 virtual void iRunCoordScript(CINOSTaskExMsg* apMsg);
1210 #endif
1212 #if defined(INOS_LUAINTERPRETER)
1213 virtual void iRunLuaJob(CINOSTaskExMsg* apMsg, const char* apFunction);
1215 virtual void iRunLuaScript(CINOSTaskExMsg* apMsg, const char* apFunction);
1216 #endif
1217 protected:
1219 virtual void irplRunScript(CINOSTaskExMsg* apMsg, CINOSTaskExMsg* apRpl);
1221 #if defined(INOS_LUAINTERPRETER)
1222 virtual void iRunRegisteredLuaFunction(CINOSTaskExMsg* apMsg);
1224 virtual void irplRunRegisteredLuaFunction(CINOSTaskExMsg* apMsg, CINOSTaskExMsg* apRpl);
1225 #endif
1227 virtual void iSetMode(CINOSTaskExMsg* apMsg);
1229 virtual void iSetModeAuto(CINOSTaskExMsg* apMsg);
1231 virtual void iSetModeStep(CINOSTaskExMsg* apMsg);
1233 virtual void iSetModeSetup(CINOSTaskExMsg* apMsg);
1235 virtual void iClrModeSetup(CINOSTaskExMsg* apMsg);
1237 virtual void iSetMode(const char* apName);
1239 virtual bool iCheckSetupMode();
1241 virtual void iSetOut(CINOSTaskExMsg* apMsg);
1243 virtual void iGetIO(CINOSTaskExMsg* apMsg);
1245 virtual void iWaitBitEx(CINOSTaskExMsg* apMsg);
1247 virtual void iWaitInp(CINOSTaskExMsg* apMsg);
1249 virtual void iWaitAdc(CINOSTaskExMsg* apMsg);
1251 virtual void iWaitPos(CINOSTaskExMsg* apMsg);
1253 virtual void iWaitAxis(CINOSTaskExMsg* apMsg);
1289 TINOSMcModuleCondHandler aSuccessFunc,
1290 TINOSMcModuleCondHandler aTimeoutFunc,
1291 real64 arTimeout = 0.0,
1292 real64 arSimTimeout = 0.0
1293 );
1296 real64 arTimeout = 0.0);
1297
1299 virtual void ihndlWait(CINOSTaskExMsg* apMyMsg, CINOSTaskExMsg* apNewMsg);
1301 virtual void iWaitTimeout(CINOSTaskExMsg* apMsg);
1303 virtual void iCntInc(CINOSTaskExMsg* apMsg);
1305 virtual void iCntDec(CINOSTaskExMsg* apMsg);
1307 virtual void iCntAdj(CINOSTaskExMsg* apMsg);
1308
1310 virtual void iSetCounter(CINOSTaskExMsg* apMsg);
1311
1313 virtual void iCronEnable(CINOSTaskExMsg* apMsg);
1315 virtual void iCronDisable(CINOSTaskExMsg* apMsg);
1317 virtual void iCronDisableAll();
1319 virtual void iCronTouch(CINOSTaskExMsg* apMsg);
1321 virtual void iCronCount(CINOSTaskExMsg* apMsg);
1322
1324 virtual void iIsActionAllowed(CINOSTaskExMsg* apMsg);
1325
1327 virtual void iValveActivate(CINOSTaskExMsg* apMsg);
1329 virtual void iValveRelease(CINOSTaskExMsg* apMsg);
1330
1332 virtual void iGetResource(CINOSTaskExMsg* apMsg);
1333
1335 virtual void iOnCntSet(CINOSTaskExMsg* apMsg);
1337 virtual void iOnCntInc(CINOSTaskExMsg* apMsg);
1339 virtual void iOnCntDec(CINOSTaskExMsg* apMsg);
1341 virtual void iOnCntSet(uint32 auType, uint32 auNbr, uint32 auVal,
1342 uint64 auTb);
1344 virtual void iSetCntCmd(uint32 auNbr, uint32 auVal);
1345
1347 virtual void iOnMsgSet(CINOSTaskExMsg* apMsg);
1349 virtual void iOnMsgAck(CINOSTaskExMsg* apMsg);
1350
1356 virtual void iOnSimLevelChanged(uint32 auOldLevel, uint32 auNewLevel);
1357
1359 virtual void MsgDone(CINOSTaskExMsg* apMsg, uint32 auResult = 0) override;
1361 virtual void MsgDone(CINOSTaskExMsg* apMsg, ERplId aRplId, uint32 auResult = 0) override;
1363 virtual void iUpdate();
1364
1366 virtual void SetFlag(uint64 auFlag, bool abUpdateState = false) override
1367 {
1368 // call base
1369 CINOSTaskEx::SetFlag(auFlag, abUpdateState);
1370 // update state ?
1371 if (abUpdateState) iUpdate();
1372 };
1374 virtual void ClrFlag(uint64 auFlag, bool abUpdateState = false) override
1375 {
1376 // call base
1377 CINOSTaskEx::ClrFlag(auFlag, abUpdateState);
1378 // update state ?
1379 if (abUpdateState) iUpdate();
1380 };
1381
1383 virtual bool IsModeAllowed(const char* apMode);
1384
1386 virtual void iStepCanceled(CINOSTaskExMsg* apMsg){};
1388 virtual void iStepStopped(CINOSTaskExMsg* apMsg){};
1390 virtual void iStepSkipped(CINOSTaskExMsg* apMsg){};
1391
1393 virtual void iMsgRejected(CINOSTaskExMsg* apMsg){};
1394
1403
1416 virtual ERplId WaitMs(real64 arTime);
1418 virtual ERplId WaitBit(CINOSBit* apBit, uint32 auValue, real64 arTimeout,
1419 real64& arUsed);
1421 virtual ERplId WaitAdc(CINOSAdcChannel* apAdc, ETypWait aeTypWait,
1422 real64 arValue, real64 arTimeout, real64& arUsed);
1424 virtual ERplId WaitPos(CINOSPosChannel* apPos, ETypWait aeTypWait,
1425 int32 aiValue, real64 arTimeout, real64& arUsed);
1427 virtual ERplId WaitPos(CINOSPhysicalAxis* apAxis, ETypWait aeTypWait,
1428 real64 arValue, real64 arTimeout, real64& arUsed);
1430 virtual ERplId WaitVar(CINOSTaskExMsg* apMsg, const char* apName, ETypWait aeTypWait,
1431 real64 arValue, real64 arTimeout, real64& arUsed);
1433 template<class T> ERplId WaitVar(T* apVar, ETypWait aeTypWait, real64 arValue,
1434 real64 arTimeout, real64& arUsed);
1436 virtual bool TestBit(const char* apName);
1438 virtual void SetBit(const char* apName);
1440 virtual void ClrBit(const char* apName);
1441
1445 void SetModuleBase(const char* apAllowedBases);
1450
1452 uint32 CreateModule(const char* apName, const char* apType, const char* apParam);
1454 uint32 DestroyModule(const char* apName);
1455
1458 { return m_pData; };
1459
1460 // job helpers
1461
1462 // increment actual job counter
1463 virtual void JobCounterInc();
1464 // decrement actual job counter
1465 virtual void JobCounterDec();
1466
1472 virtual void iModuleHlpHook();
1474 virtual void OnTargetError();
1475
1476 // private members
1477 private :
1479 void Create();
1481 void AddInp(CINOSMcModuleRes* apInp, const char* apCmdName,
1482 intptr& aiSetId, uint32& auSetSubId, int16& aiSetType, inosName32& apSetParam,
1483 intptr& aiClrId, int16& aiClrType, inosName32& apClrParam);
1485 void ParseResCmd(const char* apSrc, inosName32& aCmd, inosName32& aParam);
1487 void AddResources(const char* apName, uint32 auType);
1489 void RunStream(const char* apName);
1491 void RunStreams();
1492 // ! run lua scripts
1493 #if defined(INOS_LUAINTERPRETER)
1494 bool RunLuaScripts();
1495 #endif
1497 virtual const char* GetModuleScriptName(const char* apCmd);
1498
1500 friend class CINOSMcCron;
1501 bool IsDone(tMsgId aCmdId);
1502
1503 // wait object handling
1504
1506 virtual void iWaitObjReply(ERplId aeReply);
1508 virtual void iWaitObjReply(ERplId aeReply, tMsgId atMsgId,
1509 real64 arTimeout);
1510
1512 void WaitObjReplyAll(ERplId aeReply);
1513
1515 void iWaitObjHook();
1516
1518 void RegisterWaitObjHookLazy();
1519 void UnregisterWaitObjHook();
1520
1522 virtual void RequestScriptMutex()
1523 {
1524 m_ScriptMutex.Request();
1525 }
1527 virtual void ReleaseScriptMutex()
1528 {
1529 m_ScriptMutex.Release();
1530 }
1531
1532 // private members
1533 private :
1535 #if defined(INOS_COORDINATOR_SUPPORT)
1536 CINOSMcCoord* m_pCoord;
1537 #endif
1538
1540 #if defined(INOS_LUAINTERPRETER)
1541 CINOSMcLua* m_pLua;
1542 #endif
1543
1545 #if !defined(INOS_DESKTOP)
1546 CINOSMcFastLoad* m_pFastLoad{};
1547 #endif
1548
1550 CINOSMcGuardian* m_pGuardian;
1551
1553 CINCOObject* m_piRes;
1555 CINCOObject* m_piCounter;
1556
1567
1568 // mutex to protect m_pData
1569 CINOSMutex m_DataMutex;
1570 // mutex to protect m_pScript
1571 CINOSMutex m_ScriptMutex;
1572
1574 bool m_bInpListChanged;
1576 bool m_bOutListChanged;
1578 TINOSDoubleLinkedList<CINOSMcModuleRes>* m_pRes;
1580 TINOSDoubleLinkedList<CINOSMcModuleRes>* m_pInp;
1582 TINOSDoubleLinkedList<CINOSMcModuleRes>* m_pOut;
1584 CListNode* m_pInpNode;
1586 CListNode* m_pOutNode;
1588 tMsgId m_uOnOrgId;
1590 tMsgId m_OnMsgId;
1592 bool m_bOnPending;
1594 bool m_bIgnoreUph[DF_INOS_MCMODULE_MAXCOUNT];
1595
1597 uintid m_uModuleHlpHookId;
1599 bool m_bEmgFirstOn;
1601 bool m_bEmergency;
1603 bool m_bEmergencyOnPurpose;
1605 uint32 m_uEmergencyCnt;
1606
1607 // wait object handling
1608
1610 CINOSSync m_sWaitObj;
1612 ERplId m_eWaitObj;
1614 CINOSMcModuleWaitObj* m_pWaitObj = nullptr;
1616 uintid m_uWaitObjHookId = 0;
1618 tMsgId m_uReplyId = 0;
1620 TINOSDoubleLinkedList<CINCOTable> m_LuaScripts;
1621
1622 // safety
1623
1625 bool iHasEmergency();
1627 bool iIsEmergency();
1629 bool iIsSTO();
1630
1631 // protected members
1632 protected :
1633
1638
1644
1646
1648 nvstring m_cJobName;
1650 nvstring m_cJobParam;
1651
1653 inosName32 m_cMode;
1655 uint32 m_uMode;
1658 nvuint32 m_uSimLevel;
1664 nvreal64 m_rOnDelay;
1666 nvuint32 m_uAutoInit;
1668 uint32 m_uActJobs;
1673
1675
1687 #if defined(INOS_KERNEL_MSGID_64)
1688 nvuint64 m_uActCmdId;
1689 #else
1690 nvuint32 m_uActCmdId;
1691 #endif
1694
1698 nvuint32* m_pCntCmd[DF_INOS_MCMODULE_MAXCOUNT];
1700 nvuint32* m_pCntAct[DF_INOS_MCMODULE_MAXCOUNT];
1702 nvuint32* m_pCntBad[DF_INOS_MCMODULE_MAXCOUNT];
1704 nvuint32* m_pCntUph[DF_INOS_MCMODULE_MAXCOUNT];
1706 nvuint32* m_pCntUphType[DF_INOS_MCMODULE_MAXCOUNT];
1708 nvreal64* m_pCntUphFactor[DF_INOS_MCMODULE_MAXCOUNT];
1710 nvuint32* m_pCntUphStart[DF_INOS_MCMODULE_MAXCOUNT];
1712 nvuint32* m_pCntUphAverage[DF_INOS_MCMODULE_MAXCOUNT];
1714 nvreal64* m_pCntTim[DF_INOS_MCMODULE_MAXCOUNT];
1716 nvreal64* m_pCntLft[DF_INOS_MCMODULE_MAXCOUNT];
1718 uint64* m_pCntTimeBase[DF_INOS_MCMODULE_MAXCOUNT];
1720 uint8 m_uCntTimeBaseIndex[DF_INOS_MCMODULE_MAXCOUNT];
1722 inosName m_cCntUnit[DF_INOS_MCMODULE_MAXCOUNT];
1724 CINOSMcValves* m_pValves;
1726 CINOSMcDataInst* m_pOffDataInst = nullptr;
1727
1728 // link down check
1729
1730 enum {
1731 eLcSoff,
1732 eLcSon,
1733 eLcSdown
1734 } m_eLcState;
1737
1738 // module resources
1739
1744
1745 #ifdef INOS_SAFETY_SUPPORT
1747 CINOSBit* m_pDiSTOConfirm = nullptr;
1748 #endif
1749 uint32 m_uTgtErrorFlags = 0;
1750
1751 // root modules container (called machine for backwards compatibility)
1752 static CINOSContainer<CINOSMcModule>* m_pMachine;
1753 // mutex to protect m_pMachine
1754 static CINOSMutex s_MachineMutex;
1755
1756 static bool s_bRegisterInContainer;
1757
1760};
1761
1762
1763
1764
1765//------------------------------------------------------------------------------
1766//
1767template <class T> void CINOSMcModuleRes::GetResource(T*& apResource)
1768{
1769 // default is NULL
1770 apResource = (T*) NULL;
1771 if (*((uint32*)m_pResPtr)) {
1772 // cast it to the right type
1773 switch (m_uResTyp){
1774 case CINOSMcModuleRes::eResDigInp :
1775 case CINOSMcModuleRes::eResDigOut :
1776 case CINOSMcModuleRes::eResDigFlg :
1777 case CINOSMcModuleRes::eResAnaInp :
1778 case CINOSMcModuleRes::eResAnaOut :
1779 case CINOSMcModuleRes::eResPos : {
1780 // get pointer to resource
1782 apResource = dynamic_cast<T*>(chn);
1783 // thats it
1784 break;
1785 } // end case
1786 case CINOSMcModuleRes::eResAxis : {
1787 // get pointer to resource
1789 apResource = dynamic_cast<T*>(axs);
1790 // thats it
1791 break;
1792 } // end case
1793 case CINOSMcModuleRes::eResControl : {
1794 // get pointer to resource
1795 CINOSControl* ctr = *((CINOSControl**)m_pResPtr);
1796 apResource = dynamic_cast<T*>(ctr);
1797 // thats it
1798 break;
1799 } // end case
1800 case CINOSMcModuleRes::eResSio : {
1801 // get pointer to resource (this is not nice, but because we create
1802 // the resource ourselves, we can be sure that it is of correct type
1803 // -> dynamic_cast is not possible with class CINOSSerialInOut)
1804 apResource = *((T**)m_pResPtr);
1805 // thats it
1806 break;
1807 } // end case
1808 case CINOSMcModuleRes::eResModule : {
1809 // get pointer to resource
1811 apResource = dynamic_cast<T*>(mod);
1812 // thats it
1813 break;
1814 } // end case
1815 } // end switch
1816 } // end if
1817
1818} // end CINOSMcModuleRes::GetResource
1819
1820//------------------------------------------------------------------------------
1821//
1822template <class T> T* CINOSMcModule::GetResource(const char* apName)
1823{
1824 CINOSMcModuleRes* res = iGetResource(apName);
1825 if (res) {
1826 T* s;
1827 res->GetResource(s);
1828 return s;
1829 }
1830 return NULL;
1831
1832} // end CINOSMcModule::GetResourceEx
1833
1834//------------------------------------------------------------------------------
1835// class CINOSMcModuleWaitObj
1836//------------------------------------------------------------------------------
1837
1839{
1840 friend class CINOSMcModule;
1841 friend class CINOSMcModuleWaitBit;
1842 friend class CINOSMcModuleWaitAdc;
1844public:
1846 // init members
1847 m_bSignaled = false;
1848 m_pModule = dynamic_cast<CINOSMcModule*>(ActualTask());
1850 m_pNext = 0;
1851 m_pMsg = NULL;
1852 m_iStart = g_pINOS1ms->GetTickCount();
1853 };
1854 virtual ~CINOSMcModuleWaitObj(){};
1856 virtual void SetMsg(CINOSTaskExMsg* apMsg) {
1857 INOS_CONCURRENCY_CHECK_FREE(apMsg);
1858 m_pMsg = apMsg;
1859 };
1861 virtual void Handle()=0;
1864 // already signaled ?
1865 if (!m_bSignaled) {
1866 // set signaled
1867 m_bSignaled = true;
1868 if(m_pMsg != NULL) {
1869 m_pModule->iWaitObjReply(aeReply, m_pMsg->GetId(), g_pINOS1ms->GetTickDelta(m_iStart));
1870 }
1871 else {
1872 m_pModule->iWaitObjReply(aeReply);
1873 }
1874 } // end if
1875 };
1877 virtual uint32 Complete(CINOSMcModule* apModule, CINOSTaskEx::ERplId& aeReply, real64 arTimeout) {
1878 m_pMsg->AddResult(arTimeout);
1879 return 0;
1880 }
1893};
1894
1895//------------------------------------------------------------------------------
1896// class CINOSMcModuleWaitVar
1897//------------------------------------------------------------------------------
1898
1899template <class T> class CINOSMcModuleWaitVar : public CINOSMcModuleWaitObj
1900{
1901 friend class CINOSMcModule;
1903 CINOSMcModuleWaitVar(T* apVar, uint32 auType, real64 arValue)
1905 // init members
1906 m_pVar = apVar;
1907 m_uType = auType;
1908 m_rValue = arValue;
1909 };
1911 virtual void Handle(){
1912 // check if already signaled
1913 if (m_bSignaled) return;
1914 // locals
1915 real64 rValue = real64(*m_pVar);
1916 // check adc
1917 switch (m_uType) {
1918 // case eTypWaitGt
1919 case 0 : {
1920 // do compare
1921 if (rValue>m_rValue){
1922 // ok -> signal module
1923 Reply(CINOSTaskEx::eRplOk);
1924 // thats it
1925 return;
1926 } // end if
1927 break;
1928 } // end case eTypWaitGt
1929 // case eTypWaitGte
1930 case 1 : {
1931 // do compare
1932 if (rValue>=m_rValue){
1933 // ok -> signal module
1934 Reply(CINOSTaskEx::eRplOk);
1935 // thats it
1936 return;
1937 } // end if
1938 break;
1939 } // end case eTypWaitGte
1940 // case eTypWaitLt
1941 case 2 : {
1942 // do compare
1943 if (rValue<m_rValue){
1944 // ok -> signal module
1945 Reply(CINOSTaskEx::eRplOk);
1946 // thats it
1947 return;
1948 } // end if
1949 break;
1950 } // end case eTypWaitLt
1951 // case eTypWaitLte
1952 case 3 : {
1953 // do compare
1954 if (rValue<=m_rValue){
1955 // ok -> signal module
1956 Reply(CINOSTaskEx::eRplOk);
1957 // thats it
1958 return;
1959 } // end if
1960 break;
1961 } // end case eTypWaitLte
1962 // case eTypWaitEq
1963 case 4 : {
1964 // do compare
1965 if (rValue==m_rValue){
1966 // ok -> signal module
1967 Reply(CINOSTaskEx::eRplOk);
1968 // thats it
1969 return;
1970 } // end if
1971 break;
1972 } // end case eTypWaitLte
1973 } // end switch
1974 };
1976 T* m_pVar;
1978 uint32 m_uType;
1980 real64 m_rValue;
1983};
1985
1986//------------------------------------------------------------------------------
1987//
1988template <class T> CINOSTaskEx::ERplId CINOSMcModule::WaitVar(T* apVal, ETypWait aeTypWait,
1989 real64 arValue, real64 arTimeout, real64& arUsed)
1990{
1991 // check if we have to wait (if no adc pointer is given -> assume ok)
1992 T val = *apVal;
1993 if (((aeTypWait==eTypWaitGt) && (real64(val)>arValue)) ||
1994 ((aeTypWait==eTypWaitGte) && (real64(val)>=arValue)) ||
1995 ((aeTypWait==eTypWaitLt) && (real64(val)<arValue)) ||
1996 ((aeTypWait==eTypWaitLte) && (real64(val)<=arValue)) ||
1997 ((aeTypWait==eTypWaitEq) && (real64(val)==arValue))){
1998 // ok -> set used time
1999 arUsed = REAL64(0.0);
2000 // thats it
2001 return CINOSTaskEx::eRplOk;
2002 } // end if
2003
2004 // cancel pending ?
2005 if (GetRequest(eReqCancel)){
2006 // yes -> return 'canceled'
2007 return eRplCanceled;
2008 }
2009 // stop pending ?
2010 else if (GetRequest(eReqStop)){
2011 // yes -> return 'stopped'
2012 return eRplStopped;
2013 }
2014 // pause pending ?
2015 else if (GetRequest(eReqPause)){
2016 // yes -> return 'paused'
2017 return eRplPaused;
2018 }
2019 // reset sync object
2020 m_sWaitObj.Reset();
2021 m_eWaitObj = eRplError;
2022 // set critical flag 'waitobj'
2023 SetCritical(eCrtWaitObj);
2024 // create wait object
2026 // add it to the list
2027 uint32 uMsr = INOSDisableInterrupts();
2028 obj->m_pNext = m_pWaitObj;
2029 m_pWaitObj = obj;
2031 // ensure wait handler is running
2032 RegisterWaitObjHookLazy();
2033 // get start ticks
2034 int32 iStart = g_pINOS1ms->GetTickCount();
2035 // wait for signal
2036 if (arTimeout!=REAL64(0.0)){
2037 m_sWaitObj.Wait((uint32)(arTimeout*REAL64(1000.0)));
2038 } // end if
2039 else {
2040 m_sWaitObj.Wait(INOS_WAIT_FOREVER);
2041 } // end else
2042 // get delta
2043 arUsed = g_pINOS1ms->GetTickDelta(iStart);
2044 // clear critical flag 'waitobj'
2045 ClrCritical(eCrtWaitObj);
2046 // remove obj from list
2048 // walk through list
2049 CINOSMcModuleWaitObj* mbr = m_pWaitObj;
2051 while (mbr) {
2052 // found ?
2053 if (mbr==obj){
2054 // yes -> remove
2055 if (prv) prv->m_pNext = obj->m_pNext;
2056 else m_pWaitObj = obj->m_pNext;
2057 // thats it
2058 break;
2059 } // end if
2060 // next object
2061 prv = mbr;
2062 mbr = mbr->m_pNext;
2063 } // end while
2065 // and delete it
2066 delete obj;
2067 // return synccall result
2068 return m_eWaitObj;
2069
2070 // end CINOSMcModule::WaitVar
2071}
2072
2073//------------------------------------------------------------------------------
2074// end of file
2075//------------------------------------------------------------------------------
2076
2077#endif // INC_CINOSMCMODULE_H
Short comment.
std::function< uint32()> TINOSMcModuleCondHandler
Definition cinosmcmodule.h:116
std::function< bool()> TINOSMcModuleCondFunc
callback function that checks if a wait condition is fulfilled
Definition cinosmcmodule.h:113
#define DECLARE_DYNAMIC_T(aClass, aT)
Definition cinospartitionmemory.h:330
#define IMPLEMENT_DYNAMIC_T(aClass, aT)
Definition cinospartitionmemory.h:363
Short comment.
The extended task class.
Definition cinosadcchannel.h:53
Provides axis functionality.
Definition cinosbaseaxis.h:676
Definition cinosbit.h:54
Definition cinoscontainer.h:104
Definition cinoscontrol.h:164
Definition cinosdacchannel.h:52
Definition cinosmcmodule.h:126
const char * GetFullName()
get full resource name
Definition cinosmcmodule.h:202
inosName64 m_cFullName
inco name
Definition cinosmcmodule.h:233
uint32 m_uResFlags
resource flags
Definition cinosmcmodule.h:257
uint32 m_uResState
resource state
Definition cinosmcmodule.h:255
bool m_bSet
bit state (only input)
Definition cinosmcmodule.h:261
void DisResource()
disable resource
Definition cinosmcmodule.h:182
uint32 m_uResTyp
resource type
Definition cinosmcmodule.h:251
inosName m_cUnit
resource unit
Definition cinosmcmodule.h:239
uint32 m_uResId
resource id
Definition cinosmcmodule.h:253
void EnbResource()
enable resource
Definition cinosmcmodule.h:179
bool GetIO(real64 &arValue) const
get actual state of an IO
uint32 GetResState()
get state
char * m_pCmdClr
pointer to clear command (if any)
Definition cinosmcmodule.h:243
uint32 GetResId() const
get resource id
Definition cinosmcmodule.h:196
CINCOObject * m_pObj
pointer to my parent inco object
Definition cinosmcmodule.h:279
void RegisterStat(CINCOObject *apParent)
Add statistics registry to given object.
inosName32 m_cClrParam
cleared command param
Definition cinosmcmodule.h:275
void SetOut(real64 arValue)
set output
void SetObj(CINCOObject *apObj)
set pointer to parent object
Definition cinosmcmodule.h:215
CINCOObject * GetObj()
get pointer to parent object
Definition cinosmcmodule.h:218
void SetSetId(int16 aiSetId, const char *apParam=0)
set setid
void SetClrId(int16 aiClrId, const char *apParam=0)
set clrid
void * m_pResPtr
pointer to resource pointer
Definition cinosmcmodule.h:247
intptr m_iClrId
cleared command id and type (only input)
Definition cinosmcmodule.h:268
uint32 GetResType()
get resource type
Definition cinosmcmodule.h:193
bool GetHookInfo(uint8 &aoBusId, uint16 &aoCycleId, uint32 &aoCycleTime) const
get hook info
inosName32 m_cSetParam
set command param
Definition cinosmcmodule.h:273
inosResName m_cName
resource name (including command names)
Definition cinosmcmodule.h:235
void Handle()
handle resource
char * m_pCmdSet
pointer to set command (if any)
Definition cinosmcmodule.h:241
void * m_pDummy
dummy
Definition cinosmcmodule.h:249
const char * GetOrgName()
get original resource name
Definition cinosmcmodule.h:199
DECLARE_DYNAMIC(CINOSMcModuleRes)
dynamic object handling
CINOSMcModuleRes(const char *apName, const inosResName *apValue, void *apPtr, uint32 auType, CINOSMcModule *apModule, uint32 auFlags)
constructor
intptr m_iSetId
set command id and type(only input)
Definition cinosmcmodule.h:263
uint16 m_uIncoIndex
inco name index
Definition cinosmcmodule.h:271
const char * GetIncoName()
get inco resource name
Definition cinosmcmodule.h:205
CINOSMcModule * m_pModule
pointer to module
Definition cinosmcmodule.h:245
bool m_bEnabled
resource enabled (inp command handling)
Definition cinosmcmodule.h:259
const char * GetUnit()
get resource unit
Definition cinosmcmodule.h:208
inosName64 m_cPureName
resource name
Definition cinosmcmodule.h:237
Definition cinosmcmodule.h:1839
CINOSTaskExMsg * m_pMsg
pointer to my message (defined if async handling)
Definition cinosmcmodule.h:1884
CINOSMcModuleWaitObj()
constructor
Definition cinosmcmodule.h:1845
bool m_bSignaled
signaled
Definition cinosmcmodule.h:1888
virtual void SetMsg(CINOSTaskExMsg *apMsg)
Set message.
Definition cinosmcmodule.h:1856
void Reply(CINOSTaskEx::ERplId aeReply)
do reply
Definition cinosmcmodule.h:1863
virtual uint32 Complete(CINOSMcModule *apModule, CINOSTaskEx::ERplId &aeReply, real64 arTimeout)
called before MsgDone, to allow subclasses to modify the result
Definition cinosmcmodule.h:1877
CINOSMcModule * m_pModule
pointer to my module
Definition cinosmcmodule.h:1882
int32 m_iStart
tick count at start
Definition cinosmcmodule.h:1886
CINOSMcModuleWaitObj * m_pNext
pointer to next in chain
Definition cinosmcmodule.h:1890
DECLARE_DYNAMIC(CINOSMcModuleWaitObj)
dynamic object handling
virtual void Handle()=0
handler
Definition cinosmcmodule.h:1900
Definition cinosmcmodule.h:296
virtual void iInit(CINOSTaskExMsg *apMsg)
internal init
virtual uint32 GetSimLevel()
get simlevel
virtual void iUpdate()
update state
virtual void irplRunScript(CINOSTaskExMsg *apMsg, CINOSTaskExMsg *apRpl)
internal run script for coordinator
CINOSMcDataInst * m_pOffDataInst
pointer to off script data instance
Definition cinosmcmodule.h:1726
virtual void iSetModeAuto(CINOSTaskExMsg *apMsg)
internal set auto mode
void iAddOutResource(CINOSTaskExMsg *apMsg)
see AddOutResource
uint32 m_uActJobs
number of actual running scripts/jobs
Definition cinosmcmodule.h:1668
virtual CINOSMcData * GetData(uint32 auNr)
get pointer to data auNr
virtual CMcResult On(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Switch module on.
virtual void iValveActivate(CINOSTaskExMsg *apMsg)
activate a valve
virtual CMcResult Start(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Depending on the current module state this method has different meanings. If the module is in state o...
virtual void iCronDisable(CINOSTaskExMsg *apMsg)
internal disable cron job
virtual void iWaitInp(CINOSTaskExMsg *apMsg)
internal non blocking waitbit
CINOSMcValves * m_pValves
pointer to valves
Definition cinosmcmodule.h:1724
virtual void iOn(CINOSTaskExMsg *apMsg)
internal on
virtual CMcResult WaitBitEx(const char *apName, real64 arValue, real64 arTimeout, real64 arErrorType, real64 arErrorCode, real64 arErrorFlags, const char *apErrorText, real64 arErrorSend, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
waitbit
DECLARE_DYNAMIC(CINOSMcModule)
dynamic object handling
virtual CMcResult CronTouch(const char *apName, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
touch cron job apName
virtual void iSetMode(const char *apName)
internal set mode
nvuint32 m_uActCmdId
paused cmd id
Definition cinosmcmodule.h:1690
virtual void iMoveData(CINOSTaskExMsg *apMsg)
internal move data
virtual bool TestBit(const char *apName)
internal test bit with resource name 'apName'
uint64 * m_pCntTimeBase[8]
timebase of last count
Definition cinosmcmodule.h:1718
virtual void iOnCntSet(uint32 auType, uint32 auNbr, uint32 auVal, uint64 auTb)
counter handler
virtual CMcResult Backup(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Backup current state and call backup of all my chidren.
virtual void iOnCntInc(CINOSTaskExMsg *apMsg)
event handler 'OnCntInc'
nvuint32 * m_pCntCmd[8]
commanded counters
Definition cinosmcmodule.h:1698
virtual void iSetMode(CINOSTaskExMsg *apMsg)
internal run registered lua function
nvreal64 * m_pCntTim[8]
cycle time [ms]
Definition cinosmcmodule.h:1714
uint32 m_uCntNbr
number of counters
Definition cinosmcmodule.h:1696
TINOSTaskExCmdMsg< CINOSMcModule, const char *, bool > SetItems
Sets items (Prop, Act, Res etc.) of a module. Setting items of a sub-module is not allowed.
Definition cinosmcmodule.h:448
uint8 m_uLcMask
bus mask
Definition cinosmcmodule.h:1736
int32 m_iSimLevel
simulation level
Definition cinosmcmodule.h:1657
virtual void iWaitPos(CINOSTaskExMsg *apMsg)
internal non blocking waitbit
uint32 DestroyModule(const char *apName)
destroy module
virtual const char * GetModuleName()
get module name
Definition cinosmcmodule.h:724
virtual void iSetModeStep(CINOSTaskExMsg *apMsg)
internal set step mode
virtual void ihndlWait(CINOSTaskExMsg *apMyMsg, CINOSTaskExMsg *apNewMsg)
handle for deferred wait messages
virtual void iWaitAxis(CINOSTaskExMsg *apMsg)
internal non blocking wait axis
virtual CMcResult WaitAdcNB(const char *apName, uint32 auSlope, real64 arValue, real64 arTimeout, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
waitadc non blocking
virtual void iStepCanceled(CINOSTaskExMsg *apMsg)
step command canceled
Definition cinosmcmodule.h:1386
uint32 m_uMode
actual selected mode
Definition cinosmcmodule.h:1655
static constexpr int GetLastCmd()
return last mcmodule command id
Definition cinosmcmodule.h:787
virtual void iRunScript(CINOSTaskExMsg *apMsg)
internal run script
virtual void irplSafe(CINOSTaskExMsg *apMsg, CINOSTaskExMsg *apRpl)
internal safe reply
virtual void irplOff(CINOSTaskExMsg *apMsg, CINOSTaskExMsg *apRpl)
internal off reply
static CINOSMcModule * GetMachine(uint32 auIndex)
virtual CMcResult SetModeAuto(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
switch module to auto mode
virtual void iCreateData(CINOSTaskExMsg *apMsg)
internal create data
uint32 m_uEmgFilter
emergency filter
Definition cinosmcmodule.h:1672
void iAddAdcResource(CINOSTaskExMsg *apMsg)
see AddAdcResource
virtual CMcResult Prepare(real64 arStage, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Prepare module for given stage. This method only makes sense if its internal implementation is overwr...
virtual CMcResult IsActionAllowed(const char *apScriptName, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
get fastload clearance
virtual CMcResult CronEnable(const char *apName, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
enable cron job apName
nvreal64 m_rSlowMotionSetup
setup slowmotion factor
Definition cinosmcmodule.h:1662
virtual void OnTargetError()
target error handler
virtual CINOSMcBaseJob * GetJob(const char *apName)
get pointer to coordinator
bool m_bUniqueResourceNaming
Definition cinosmcmodule.h:1643
tMsgId m_uActJobId
paused job
Definition cinosmcmodule.h:1693
virtual CINCOObject * GetResObj()
get pointer to 'Res' inco folder
virtual void SetSimLevel(uint32 auSimLevel, bool abNonVolatile)
set simlevel
virtual void iRecover(CINOSTaskExMsg *apMsg)
internal recover
virtual void iStop(CINOSTaskExMsg *apMsg)
internal stop
virtual CINOSMcData * GetData(const char *apPrefix, uint32 auNr)
get pointer to data apPrefix (allows to iterate through a subfolder)
friend class CINOSMcCron
return true if command with id is done (currently just used by cron
Definition cinosmcmodule.h:1500
ERplId WaitVar(T *apVar, ETypWait aeTypWait, real64 arValue, real64 arTimeout, real64 &arUsed)
internal wait for variable and return reply code (eRplOk/Stopped/Canceled/Error)
virtual void iEmgSet(CINOSTaskExMsg *apMsg)
internal switch core
virtual CMcResult RunScript(const char *apName, const char *apData, const char *apParam, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
run script
virtual CMcResult ValveActivate(const char *apName, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
activate a valve
CINOSBit * m_pDiEmergency
pointer to emergency input
Definition cinosmcmodule.h:1743
virtual void AddCommand(CINOSTaskExMsg *apMsg, uint64 aChar, uint16 aKeyLevel, bool abRegisterInco=true) override
add inco command
virtual void SetSlowMotion(real64 arSlowMotion, bool abNonVolatile)
set slowmotion factor
virtual ~CINOSMcModule()
module destructor
virtual void iDestroyScript(CINOSTaskExMsg *apMsg)
internal destroy script
virtual CMcResult Init(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Init module. After a successful init the module is in state ready.
virtual void RemChildCommand(const char *apModuleName, const char *apFunctionName) override
remove child command
virtual CMcResult ClrModeSetup(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
switch setup mode off
virtual CMcResult Stop()
Stop a running production job.
virtual CMcResult PutMsg(CINOSTaskExMsg *apMsg, tMsgId aMsgId=0) override
put message to queue and return command id
virtual bool iCheckSetupMode()
internal check setup mode
virtual void AddCommand(const char *apName, uint32 auCode, CINCOProcedure *apProc) override
add inco command
virtual void irplInit(CINOSTaskExMsg *apMsg, CINOSTaskExMsg *apRpl)
internal init reply
virtual CMcResult DestroyJob(const char *apName, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
destroy Job
virtual void iCronDisableAll()
internal disable all cron job
virtual void iCheckRes(CINOSTaskExMsg *apMsg)
internal check resources
void iAddInpResource(CINOSTaskExMsg *apMsg)
see AddInpResource
virtual CMcResult GetIO(const char *apName, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
virtual CMcResult DestroyScript(const char *apName, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
destroy script
virtual CMcResult DestroyData(const char *apName, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
destroy data (container)
virtual void iGetIO(CINOSTaskExMsg *apMsg)
internal setout
nvstring m_cJobName
module properties
Definition cinosmcmodule.h:1648
uint8 m_uCntTimeBaseIndex[8]
timebase index
Definition cinosmcmodule.h:1720
virtual uint32 GetMode()
get actual mode
Definition cinosmcmodule.h:717
virtual void iManual(CINOSTaskExMsg *apMsg)
internal manual
virtual void RemChildModule(const char *apModuleName) override
remove child module
virtual CMcResult SetCounter(uint32 auType, uint32 auNbr, uint32 auValue, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
set counter
nvuint32 * m_pCntBad[8]
bad counters
Definition cinosmcmodule.h:1702
CINOSMcModule(const char *apName, const char *apParam)
module constructor
virtual CMcResult Restore(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Restore backuped state call restore of all my chidren.
virtual CMcResult Off(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Switch module off.
static CINOSMcModule * GetMachine(const char *apName)
void DisableModuleHlpHook()
disable module helper hook
virtual void iWaitAdc(CINOSTaskExMsg *apMsg)
handle for internal non blocking waitbit
virtual CMcResult CronDisable(const char *apName, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
disable cron job apName
virtual CMcResult Stop(CINOSSync *apSync)
Stop a running production job.
nvuint32 m_uActChecksum
paused checksum
Definition cinosmcmodule.h:1685
virtual real64 GetProp(const char *apName, real64 arDefValue, CINOSTaskExMsg *apMsg)
get module property
virtual CMcResult CntDec(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
decrement actual counter 0
virtual void iStartup(CINOSTaskExMsg *apMsg) override
internal startup task
virtual void iEmgClr(CINOSTaskExMsg *apMsg)
emergency cleared
nvuint32 m_uActJobResult
act job result
Definition cinosmcmodule.h:1681
virtual ERplId WaitBit(CINOSBit *apBit, uint32 auValue, real64 arTimeout, real64 &arUsed)
internal wait for bit and return reply code (eRplOk/Stopped/Canceled/Error)
virtual bool GetEmergency()
get emergency
virtual CMcResult Cancel(const char *apParam)
Cancel everything.
virtual CMcResult CronCount(const char *apName, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
count cron job apName
nvuint32 m_uActJobState
act job state
Definition cinosmcmodule.h:1679
virtual void iSetItems(CINOSTaskExMsg *apMsg)
internal set items
nvreal64 m_rOnDelay
ondelay [ms]
Definition cinosmcmodule.h:1664
virtual bool DispatchCmd(CINOSTaskExMsg *apMsg) override
dispatch command message
virtual CMcResult DestroySubModule(const char *apName, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Destroy requested sub module.
virtual CMcResult Stop(const char *apParam)
Stop a running production job.
virtual void iOnSimLevelChanged(uint32 auOldLevel, uint32 auNewLevel)
event handler 'iOnSimLevelChanged'
virtual void iCntInc(CINOSTaskExMsg *apMsg)
internal inc counter
virtual CINOSMcData * GetData(const char *apPrefix, const char *apName)
get pointer to data apPrefix.apName
nvuint32 m_uAutoInit
auto init [yes/no]
Definition cinosmcmodule.h:1666
virtual ERplId WaitAdc(CINOSAdcChannel *apAdc, ETypWait aeTypWait, real64 arValue, real64 arTimeout, real64 &arUsed)
internal wait for adc and return reply code (eRplOk/Stopped/Canceled/Error)
static uint32 ShutdownRequest()
virtual void SetBit(const char *apName)
internal set bit with resource name 'apName'
tMsgId AddInpResource(const char *apResName, const char *apImageName, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
virtual void irplCancel(CINOSTaskExMsg *apMsg, CINOSTaskExMsg *apRpl)
internal cancel reply
inosName32 m_cMode
actual selected mode
Definition cinosmcmodule.h:1653
virtual void iDestroySubModule(CINOSTaskExMsg *apMsg)
internal destroy sub module
virtual void iDestroyData(CINOSTaskExMsg *apMsg)
internal destroy data
nvstring m_cActJobName
module actuals
Definition cinosmcmodule.h:1677
virtual bool DispatchEvent(CINOSTaskExMsg *apMsg) override
dispatch event message
void AddInp(CINOSMcModuleRes *apInp)
add input
virtual void iSafe(CINOSTaskExMsg *apMsg)
internal safe
virtual ERplId WaitPos(CINOSPhysicalAxis *apAxis, ETypWait aeTypWait, real64 arValue, real64 arTimeout, real64 &arUsed)
internal wait for axis pos and return reply code (eRplOk/Stopped/Canceled/Error)
virtual void iSetCounter(CINOSTaskExMsg *apMsg)
internal set counter
virtual void RemScript(const char *apName)
remove script apName
CINOSMcModule(const char *apName, const char *apType, const char *apParam)
module constructor
virtual ERplId WaitVar(CINOSTaskExMsg *apMsg, const char *apName, ETypWait aeTypWait, real64 arValue, real64 arTimeout, real64 &arUsed)
internal wait for variable and return reply code (eRplOk/Stopped/Canceled/Error)
virtual void AdjTrigger(CINOSTaskExMsg *apMsg, real64 arCmdTime)
adjust trigger
nvstring m_cJobParam
job param
Definition cinosmcmodule.h:1650
virtual void iIsActionAllowed(CINOSTaskExMsg *apMsg)
get clearance to fastload a script
virtual void iClrModeSetup(CINOSTaskExMsg *apMsg)
internal clr setup mode
virtual bool DispatchReply(CINOSTaskExMsg *apReply) override
dispatch reply
virtual CMcResult Pause(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Pause a running production job.
virtual void iPrepare(CINOSTaskExMsg *apMsg)
internal prepare
virtual CMcResult WaitAxis(const char *apName, uint32 auSlope, real64 arValue, real64 arTimeout, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
waitaxis non blocking
virtual void irplPause(CINOSTaskExMsg *apMsg, CINOSTaskExMsg *apRpl)
internal pause reply
virtual CMcResult CntAdj(int32 aiValue, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
adjust actual counter 0 by aiValue
virtual CMcResult Confirm(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Acknowledge the first pending message with the flag INOS_MCMSG_FLAG_CONFIRM.
virtual CMcResult SetModeStep(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
switch module to step mode
static uint32 DestroyMachine(const char *apName)
virtual void iOnSimLevelChanged(CINOSTaskExMsg *apMsg)
event handler 'iOnSimLevelChanged'
virtual void ClrBit(const char *apName)
internal test bit with resource name 'apName'
virtual void iiCancel(bool abHandleOffRequest=true)
internal cancel
virtual CMcResult RunJob(const char *apName, const char *apParam, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
run job
bool m_bResRegistred
resources registred
Definition cinosmcmodule.h:1741
virtual CINOSMcGuardian * GetGuardian() const
get pointer to guardian
static uint32 CreateMachine(CINOSMcModule *&apNewModule, const char *apName, const char *apType, const char *apParam)
nvuint32 * m_pCntUph[8]
uph [units/hour]
Definition cinosmcmodule.h:1704
virtual void iShutdown(CINOSTaskExMsg *apMsg) override
internal shutdown task
virtual void AddChildCommand(const char *apModuleName, const char *apFunctionName, CINOSTaskExMsg *apCmdMsg, bool abRegisterInco=true) override
add child command
virtual CMcResult CreateScript(const char *apName, const char *apType, const char *apParam, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
create script
virtual void MsgDone(CINOSTaskExMsg *apMsg, ERplId aRplId, uint32 auResult=0) override
message done
void iAddDacResource(CINOSTaskExMsg *apMsg)
see AddDacResource
virtual CMcResult SetModeSetup(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
switch setup mode on
virtual bool IsModeAllowed(const char *apMode)
return true if switching to aMode is allowed
uint32 RegisterHook(uintid &aoHookId, const char *apResName, void *apHandler, void *apObject, int32 aiOrder)
Register a hook with the given parameters running in the context of the given resource handler.
virtual void ClrFlag(uint64 auFlag, bool abUpdateState=false) override
clr flag
Definition cinosmcmodule.h:1374
virtual void iStartup(real64 arStage) override
internal startup task
virtual CMcResult Safe(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Put module into a safe state.
nvlstring m_cActScriptName
paused script name
Definition cinosmcmodule.h:1683
virtual CMcResult CntInc(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
increment actual counter 0
virtual CMcResult CreateSubModule(const char *apName, const char *apType, const char *apParam, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Create a sub module, see also Creation.
virtual void MsgDone(CINOSTaskExMsg *apMsg, uint32 auResult=0) override
message done
virtual void RemCommand(const char *apName) override
remove internal command
virtual void irplHome(CINOSTaskExMsg *apMsg, CINOSTaskExMsg *apRpl)
internal home reply
virtual void iHome(CINOSTaskExMsg *apMsg)
internal home
nvreal64 * m_pCntUphFactor[8]
uph factor [*]
Definition cinosmcmodule.h:1708
void WaitCond(TINOSMcModuleCondFunc aFunc, TINOSMcModuleCondHandler aSuccessFunc, TINOSMcModuleCondHandler aTimeoutFunc, real64 arTimeout=0.0, real64 arSimTimeout=0.0)
Wait on arbitrary condition or timeout.
static constexpr int GetLastUsr()
return last mcmodule user id
Definition cinosmcmodule.h:791
virtual CMcResult WaitAxisEx(const char *apName, uint32 auSlope, real64 arValue, real64 arTimeout, uint32 auFlags, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
waitaxis non blocking
virtual void iPause(CINOSTaskExMsg *apMsg)
internal pause
virtual uint32 iDestroySubModule(const char *apName)
internal destroy sub module
tMsgId MsgDeferWait(CINOSTaskExMsg *apMsg, CINOSMcModuleWaitObj *apWaitObj, real64 arTimeout=0.0)
defer message until wait condition fulfilled or timeout [ms] expired
tMsgId m_uSTOMessageId
sto message id
Definition cinosmcmodule.h:1637
virtual void iBackup(CINOSTaskExMsg *apMsg)
internal backup
virtual void iRetry(CINOSTaskExMsg *apMsg)
internal retry
virtual bool iPostStartup() override
internal post startup
virtual void iOnMsgAck(CINOSTaskExMsg *apMsg)
event handler 'OnMsgAck'
inosName m_cCntUnit[8]
unit buffers
Definition cinosmcmodule.h:1722
virtual void iOnSlowMotionChanged(CINOSTaskExMsg *apMsg)
event handler 'iOnSlowMotionChanged'
virtual bool PreDispatchMsg(CINOSTaskExMsg *apMsg) override
Pre dispatcher.
virtual void EmergencyOnPurposeFollows()
set emergency on purpose
nvuint32 * m_pCntUphType[8]
uph type [0-standard, 1-ignore first and last, 2-start/average]
Definition cinosmcmodule.h:1706
virtual void irplRestore(CINOSTaskExMsg *apMsg, CINOSTaskExMsg *apRpl)
internal restore reply
virtual void iCntDec(CINOSTaskExMsg *apMsg)
internal dec counter
virtual real64 GetProp(const char *apName, real64 arDefValue, CINOSMcData *apData)
get data property
virtual void iWaitBitEx(CINOSTaskExMsg *apMsg)
internal waitbit
virtual CMcResult CreateJob(const char *apName, const char *apType, const char *apParam, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
create job
virtual void iStartupDone()
virtual void iSetOut(CINOSTaskExMsg *apMsg)
internal setout
virtual CMcResult Recover(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Recover module from a pending error.
virtual bool DispatchInternal(CINOSTaskExMsg *apMsg) override
dispatch internal message
virtual void irplRecover(CINOSTaskExMsg *apMsg, CINOSTaskExMsg *apRpl)
internal recover reply
virtual ERplId WaitMs(real64 arTime)
Synchronous wait for delay.
virtual real64 GetSlowMotion()
get slowmotion factor
uint32 CreateModule(const char *apName, const char *apType, const char *apParam)
create module
virtual CINOSMcData * GetData(const char *apName)
get pointer to data apName
virtual void iCronTouch(CINOSTaskExMsg *apMsg)
internal touch cron job
virtual void iCancel(CINOSTaskExMsg *apMsg)
internal cancel
virtual uint32 iCreateSubModule(const char *apName, const char *apType, const char *apParam)
internal create sub module
virtual void PostCreate(void *apParent) override
called after creation
virtual CMcResult CreateData(const char *apName, const char *apType, const char *apParam, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
create data (container)
virtual void iStart(CINOSTaskExMsg *apMsg)
internal start
void AddOut(CINOSMcModuleRes *apOut)
add output
virtual void iCreateJob(CINOSTaskExMsg *apMsg)
internal create script
virtual CMcResult SetOut(const char *apName, real64 arValue, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
virtual void iRestore(CINOSTaskExMsg *apMsg)
internal restore
virtual CINOSMcModule * GetModule(const char *apName)
get pointer to child module apName
virtual void AddChildModule(const char *apModuleName) override
add child module
void SetModuleBase(const char *apAllowedBases)
virtual CMcResult ValveRelease(const char *apName, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
release a valve
virtual void iOnCntDec(CINOSTaskExMsg *apMsg)
event handler 'OnCntDec'
virtual CINOSMcModule * FindSubModule(const char *apName)
get pointer to child or sub-module apName (this may be expensive).
virtual void iSetModeSetup(CINOSTaskExMsg *apMsg)
internal set setup mode
virtual CINOSMcBaseScript * GetScript(const char *apName)
get pointer to script apName
tMsgId m_uEmergencyMessageId
emergency message id
Definition cinosmcmodule.h:1635
tMsgId AddDacResource(const char *apResName, const char *apImageName, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
virtual CINOSMcModule * GetModule(uint32 auIndex)
get pointer to child module auIndex
nvuint32 * m_pCntAct[8]
actual counters
Definition cinosmcmodule.h:1700
virtual void iLinkDown(CINOSTaskExMsg *apMsg)
link down
virtual void iWaitTimeout(CINOSTaskExMsg *apMsg)
internal wait timeout
virtual void iMsgRejected(CINOSTaskExMsg *apMsg)
message rejected
Definition cinosmcmodule.h:1393
virtual void iGetResource(CINOSTaskExMsg *apMsg)
internal get resource
virtual uint32 GetEmergencyDelay()
get emergency delay [ms]
virtual void iDestroyJob(CINOSTaskExMsg *apMsg)
internal destroy Job
virtual void AddCommand(const char *apName, uint32 auCode, uint32 auType=eMsgCmd) override
add internal command
virtual CMcResult WaitPosNB(const char *apName, uint32 auSlope, real64 arValue, real64 arTimeout, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
waitpos non blocking
virtual CMcResult Cancel()
Cancel everything.
virtual void SetFlag(uint64 auFlag, bool abUpdateState=false) override
set flag
Definition cinosmcmodule.h:1366
virtual void iCronEnable(CINOSTaskExMsg *apMsg)
internal enable cron job
virtual void iCreateSubModule(CINOSTaskExMsg *apMsg)
internal create sub module
void EnableModuleHlpHook()
enable module helper hook
static CINOSMcModule * FindModule(const char *apName)
get pointer global module apName (this may be expensive).
virtual bool DispatchUser(CINOSTaskExMsg *apMsg) override
dispatch user message
virtual CMcResult Manual(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Acknowledge the first pending message with the flag INOS_MCMSG_FLAG_MANUAL (obsolete)
nvuint32 * m_pCntUphAverage[8]
uph average
Definition cinosmcmodule.h:1712
virtual void iOff(CINOSTaskExMsg *apMsg)
internal off
virtual void iiOn(CINOSTaskExMsg *apMsg)
very internal on
uint32 UnRegisterHook(uintid aoHookId, const char *apResName)
Unregister a hook.
virtual CINOSMcBaseScript * GetScript(uint32 auNr)
get pointer to script auNr
virtual uint32 GetCntValue(uint32 auType, uint32 auNbr)
get counter Value
virtual void GetProp(const char *apName, char *apBuffer, uint32 auLength, CINOSTaskExMsg *apMsg)
get module property
virtual void irplRunJob(CINOSTaskExMsg *apMsg, CINOSTaskExMsg *apRpl)
internal run job reply
virtual CMcResult MoveData(const char *apSrcName, const char *apDstModule, const char *apDstName, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
move data (container)
virtual void iValveRelease(CINOSTaskExMsg *apMsg)
release a valve
virtual void iCronCount(CINOSTaskExMsg *apMsg)
internal count cron job
CINOSContainer< CINOSMcData > * GetDataContainer()
get pointer to data container
Definition cinosmcmodule.h:1457
virtual void AdjTrigger(CINOSTaskExMsg *apMsg, CINOSBaseAxis *m_pAxis, real64 arStart, real64 arEnd, const char *apParam)
adjust trigger
virtual bool DoPostEmergencyMessage()
return true if emergency postmessage requested
Definition cinosmcmodule.h:627
virtual bool DispatchTmd(CINOSTaskExMsg *apMsg) override
dispatch triggered message
virtual void iModuleHlpHook()
module helper hook
virtual void iResume(CINOSTaskExMsg *apMsg)
internal resume
nvreal64 m_rSlowMotion
slowmotion factor
Definition cinosmcmodule.h:1660
virtual void PostEmergency()
post emergency message
virtual void iCntAdj(CINOSTaskExMsg *apMsg)
internal adj counter
virtual bool PreDestroy(bool &bDeleteSelf) override
called before destruction (return false if destruction not allowed)
uint32 m_uEmgDelay
emergency delay
Definition cinosmcmodule.h:1670
virtual bool DoPostSTOMessage()
return true if STO postmessage requested
Definition cinosmcmodule.h:630
virtual ERplId WaitPos(CINOSPosChannel *apPos, ETypWait aeTypWait, int32 aiValue, real64 arTimeout, real64 &arUsed)
internal wait for pos and return reply code (eRplOk/Stopped/Canceled/Error)
virtual CINOSMcModuleRes * AddResource(const char *apName, uint32 auType, uint32 auFlags=CINOSMcModuleRes::eResFlgMandatory, CINCOObject *apObj=0)
add resource
virtual CINOSBit * GetEmergencyInput()
get pointer to emergency input
Definition cinosmcmodule.h:624
virtual CMcResult SetMode(const char *apName, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
switch module to mode 'apName'
virtual void iStepStopped(CINOSTaskExMsg *apMsg)
step command stopped
Definition cinosmcmodule.h:1388
virtual void iiStop()
internal stop
virtual CMcResult PostEmergencyStopMessage()
post emergency stop message
virtual void iiOff()
very internal off
virtual void iCreateScript(CINOSTaskExMsg *apMsg)
internal create script
virtual CMcResult Retry(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Acknowledge the first pending message with the flag INOS_MCMSG_FLAG_RETRY.
virtual CMcResult Cancel(CINOSSync *apSync)
Cancel everything.
nvreal64 * m_pCntLft[8]
left time [sec]
Definition cinosmcmodule.h:1716
tMsgId AddOutResource(const char *apResName, const char *apImageName, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
virtual void iOnMsgSet(CINOSTaskExMsg *apMsg)
event handler 'OnMsgSet'
virtual void GetProp(const char *apName, const char *apDefault, char *apBuffer, uint32 auLength, CINOSMcData *apData)
get data property
virtual void iStepSkipped(CINOSTaskExMsg *apMsg)
step command skipped
Definition cinosmcmodule.h:1390
virtual CMcResult Home(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Bring module into home position.
virtual void iMoveDataInt(CINOSTaskExMsg *apMsg)
internal move data
CINOSMcModule * GetParent() const
get pointer to parent
virtual void iOnCntSet(CINOSTaskExMsg *apMsg)
event handler 'OnCntSet'
tMsgId AddAdcResource(const char *apResName, const char *apImageName, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
virtual CMcResult WaitInp(const char *apName, real64 arValue, real64 arTimeout, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
waitbit non blocking
virtual void irplOn(CINOSTaskExMsg *apMsg, CINOSTaskExMsg *apRpl)
internal on reply
virtual void irplStop(CINOSTaskExMsg *apMsg, CINOSTaskExMsg *apRpl)
internal stop reply
virtual void iConfirm(CINOSTaskExMsg *apMsg)
internal confirm
nvuint32 * m_pCntUphStart[8]
uph start
Definition cinosmcmodule.h:1710
virtual void iSetCntCmd(uint32 auNbr, uint32 auVal)
set cmd counter
virtual void iRunJob(CINOSTaskExMsg *apMsg)
internal runjob
virtual CMcResult Resume(CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
Acknowledge the first pending message with the flag INOS_MCMSG_FLAG_RESUME This method is used to go ...
Definition cinosmcrobot.h:206
Definition cinosmutex.h:36
ICACHE void Release(bool aSuspend=false, uint32 auState=defINOSTaskPureSuspended)
ICACHE uint32 Request(uint32 aTimeout=INOS_WAIT_FOREVER)
Provides physical aka real axis functionality.
Definition cinosphysicalaxis.h:286
Definition cinosposchannel.h:59
Definition cinosprocessimagechannel.h:111
Definition inos_syn.h:67
virtual uint32 Wait(uint32 aTimeout=0xFFFFFFFF)
wait for signaled state for max. aTimeout usec
virtual void Reset()
Reset object state.
Definition cinostaskex.h:396
void AddResult(T, const char *apResultName=NULL)
Definition cinostaskex.h:2499
tMsgId GetId() const
get message id
Definition cinostaskex.h:588
Definition cinostaskex.h:966
virtual const char * GetTreeName()
get requested binary tree name
Definition cinostaskex.h:999
void SetCritical(uint32 auCritical)
set critical
Definition cinostaskex.h:1957
bool GetRequest(uint32 auRequest) const
return true if request set
Definition cinostaskex.h:1055
virtual CMcResult ClrFlag(const char *apName, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
clear flag apName
void ClrCritical(uint32 auCritical)
clr critical
Definition cinostaskex.h:1960
virtual CMcResult SetFlag(const char *apName, CINOSSync *apSync=DF_INOS_SYNCHRONOUS)
set flag apName
ERplId
reply id's
Definition cinostaskex.h:1409
Template class that can be used for methods that take the command message as function argument.
Definition cinostaskextmpl.h:1373
Short comment.
#define g_pINOS1ms
Definition inos_1ms.h:501
CINOSTask * ActualTask()
#define DF_INOS_SYNCHRONOUS
Definition inosmacro.h:332
#define ASSERT_ALWAYS(f)
Definition inosmacro.h:696
int32 tMsgId
Definition inostype.h:186