äžè¬ã«ãç§ã¯èªåã®åãéããŠãç¹å®ã®äŸã§ããã¹ãŠãèŠããæ¹ãè¯ããšå€æããŸããã
ãããã£ãŠãèå³ã®ããæ¹ã¯ã©ããã
äœæ¥ã®æ®µéã§ããã€ãã®èšäºãèšç»ãããŠããŸãã
- ããŒã1.ãããžã§ã¯ãã®æ§æãšã·ãã¥ã¬ãŒã¿ãŒã®äœæ
- ããŒã2.ã·ãã¥ã¬ãŒã¿ãŒã®å®è¡
- ããŒã3.管çããã»ã¹ã®äœæ
- ããŒã4.ãããã°ãšããã«äœ¿çšãããããŒã«
- ããŒã5.æ©èœãã¹ãïŒ uniset2-testsuiteã䜿çšïŒ
- ããŒã6.æçµïŒæ®ãã®ãèå°è£ãïŒ
æ®å¿µãªãããå®éã®ãã«ãããŒããããã¯ãŒã¯ãããžã§ã¯ãã®äŸãäœæããããšã¯å°é£ã§ãïŒå°ãªããšããä»®æ³ãã·ã³ã®ãããã¯ãŒã¯ãããã±ãŒãžã®ã€ã³ã¹ããŒã«ãå±éãªã©ãå¿ èŠã§ãïŒã ãããã£ãŠãã³ã³ãã€ã«ããŠããŒã«ã«ã§å®è¡ã§ããç°¡åãªäŸãæ€èšãããã®äžã§ã®åºæ¬çãªãŠãã»ããã®æŠå¿µã®æäœã瀺ããŸãã
äŸãšããŠã次ã®ãç圢ãåé¡ãåãäžããŸãã
ã¬ãã«å¶åŸ¡ã®ããã»ã¹ããã¿ã³ã¯ãã«èšè¿°ããå¿ èŠããããŸã
ããã»ã¹ã¯ã¿ã³ã¯ãæºããïŒãã³ãããªã³ã«ãïŒãã¬ãã«ãæå®ã®äžéãããå€ïŒ95ïŒ ïŒã«éãããšããã«ã³ãã³ãããã³ãã«éä¿¡ããã¿ã³ã¯ã空ã«ããŸãã ã¬ãã«ãäžéãããå€ïŒ5ïŒ ïŒã«éãããšããã«ãåã³æºãããå§ããŸãã ãããŠåã§ã
äœæ¥ã¯ãïŒ1ïŒç¹å¥ãªã³ãã³ããStart Workãã®å°çåŸã«éå§ãããStart Workãã³ãã³ããåé€ããããšãã«å®äºããå¿ èŠããããŸãïŒ0ïŒã
ãªããªã ç§èªèº«ã¯äž»ã«ALTLinuxã§äœæ¥ããŠãããã ããã®OSã§ã¯ãã¹ãŠã®äŸãèæ ®ãããŸãã
ç§ã¯Sisyphusã«åº§ã£ãŠããŸãããäŸã¯P7ãã©ãããã©ãŒã ã§åäœããŸã
ã ãã...
æºåæé -ãããžã§ã¯ãã®äœæãããã±ãŒãžã®ã€ã³ã¹ããŒã«
ã·ã¹ãã ã§ã®äœæ¥ã«å¿ èŠãªããã±ãŒãžãã€ã³ã¹ããŒã«ããŸã
apt-get install libuniset2-devel libuniset2-extensions-devel libuniset2-utils libomniORB-names git gitk git-gui etersoft-build-utils ccache
ããã§ãããžã§ã¯ããã¬ã€ã¢ãŠãã§ããŸã...
éèŠïŒ libuniset2ã«ã¯ãC ++ 11ããµããŒãããã³ã³ãã€ã©ãŒãå¿ èŠã§ãã
èŠãã¿ãããªãããã«ããããã«ã httpïŒ//github.com/Etersoft/uniset2-example masterãã©ã³ããããŠã³ããŒãããã ãã§ãåºç€ããæºåããŸããã
ãããã£ãŠã次ã®ãã£ã¬ã¯ããªæ§é ããããŸãïŒãã¡ãããã©ã®ãããªæ§é ã§ãããŸããŸãããããã®æ§é ã¯åãªããç¿æ £ãã§ãïŒ
/ãŠãŒãã£ãªãã£-ãããžã§ã¯ããéåžžæé·ããããŸããŸãªè£å©ãŠãŒãã£ãªãã£ïŒã¹ã¯ãªããïŒ
/ conf-ãããžã§ã¯ãæ§æãã¡ã€ã«
/ docs-ããã¥ã¡ã³ããŒã·ã§ã³ïŒããã³åªãããããžã§ã¯ãã§ããã䜿çšããªãæ¹æ³ïŒ
/ include-å ±æãããžã§ã¯ãããããŒãã¡ã€ã«ã®å Žæ
/ src-å®éã®ãœãŒã¹ã³ãŒã
/ lib-å ±éãããžã§ã¯ãã©ã€ãã©ãªã®å ŽæïŒå ±éæ©èœã®ã³ãŒãïŒ
configure.ac-ãããžã§ã¯ãããã«ãããããã®å®éã®ãã¡ã€ã«ïŒã¯ããç§ã¯autotoolsã䜿çšããŸãïŒ
autogen.sh-Makefile.inãçæãããã«ããŒã¹ã¯ãªãã
ãããŠããã¡ãããçŸããããããžã§ã¯ãã«ããã¯ãã®ãã¡ã€ã«ã
æã¡äžã
autogen.sh && configure && make
ãšããã§ãç§ã¯jmakeã®äœ¿çšã«æ £ããŠããŸããããã¯ãã·ã¹ãã å ã®ccacheã®ååšãšããã»ããµã®æ°ãèæ ®ããŠã etersoft-build-utilsããã±ãŒãžã®makeã®ã©ãããŒã§ãã
ãã¹ãŠãã³ã³ãã€ã«ãããããããã«å ã«é²ãããšãã§ããŸã...äžè¬ã«ããŸã äœããããŸããã
ã¹ããã1-ãŠãã»ãããããžã§ã¯ãã®æ§æ
ãŠãã»ãããããžã§ã¯ãã§ã¯ãã·ã¹ãã æ§æå šäœãïŒéåžžã¯1ã€ã«ïŒxmlãã¡ã€ã«ã«ä¿åãããŸãã ç¹°ãè¿ãã«ãªããŸãããããã¯configure.xmlãšåŒã°ãããconf /ãã«é 眮ãããŸãã ç§ã¯ãã®ãã¡ã€ã«ã®ãã©ãŒãããããã€ã³ãããŸãããç®æšã¯ãäœããå§ããŠãã§ããã ãæ©ãäœåãèŠããããšã§ããã ããã¥ã¡ã³ãã«ã¯èª¬æããããŸã ...
æ§æãã¡ã€ã«ã®å ¥åãéå§ããã«ã¯ãã¿ã¹ã¯ã®èª¬æããããããžã§ã¯ãã§å¿ èŠãªãã»ã³ãµãŒããç解ããå¿ èŠããããŸãã äžè¬ã«ã次ã®ãªã¹ããååŸããŸãã
- START WORKã³ãã³ã-DIã»ã³ãµãŒ
- çŸåšã®ã¿ã³ã¯ã¬ãã«-AIã»ã³ãµãŒ
- ãå å¡«ãã³ããããªã³ã«ããã³ãã³ã-DOã»ã³ãµãŒ
- ã空ã®ãã³ããããªã³ã«ããã³ãã³ã-DOã»ã³ãµãŒ
ããã¯ãã¹ãŠã ã»ã³ãµãŒã»ã¯ã·ã§ã³ã«å ¥åãããŸãïŒäžæã§ããå Žåãå¿ èŠãªIDãå²ãåœãŠãŸãïŒã
çµæã¯æ¬¡ã®ããã«ãªããŸãã
<sensors name="Sensors" ...> <item id="100" name="OnControl_S" iotype="DI" textname=" (1 - , 0 - )"/> <item id="101" name="Level_AS" iotype="AI" textname=" "/> <item id="102" name="CmdLoad_C" iotype="DO" textname=" ''"/> <item id="103" name="CmdUnload_C" iotype="DO" textname=" ''"/> </sensors>
ã»ã³ãµãŒãå°å ¥ãããšãã«ãããããã«äžæã®èå¥åïŒ id ïŒãäžæã®ååïŒ name ïŒãèšå®ãã textname = ".."ããŸã ããããšãããããŸãããã®ããã¹ãã¯ãåŸã§GUIãŸãã¯ä»ã®ã¢ããªã±ãŒã·ã§ã³ã«äœ¿çšã§ããŸãã
åã»ã³ãµãŒã«ã¯ã4ã€ã®ã¿ã€ãïŒ iotype ïŒã®ããããããããŸãã ããã«ããã¥ã¡ã³ããžã®ãªã³ã¯ããããŸãã
- DI-ããžã¿ã«å ¥å
- DO-ããžã¿ã«åºå
- AI-ã¢ããã°å ¥å
- AO-ã¢ããã°åºå
äžè¬çã«ããã®ãããªã¿ã€ããžã®åå²ã¯å°ãæ¡ä»¶ä»ãã§ãããå®éã®å ¥å/åºåãæ±ãäœæ¥ã¯ãããŸããã ããããã¿ã€ãèªäœã¯ãèšèšãããŠããã·ã¹ãã ã®èŠ³ç¹ããç¹å®ã®ã»ã³ãµãŒãäœã§ãããã決å®ããŸãã ããšã³ããªãã¯ãã·ã¹ãã ã«å ¥ããããåºå£ãã¯ãåºå£ãïŒã€ãŸããã·ã¹ãã ã圢æãããã®ïŒã§ãã
以åã«éžå¥ãããã»ã³ãµãŒã§...
ã¹ããã2-ã·ãã¥ã¬ãŒã¿ãŒãäœæãã
å®éã管çããã»ã¹ã®äœæ¥ããããã°ããã«ã¯ãããå°ãã·ãã¥ã¬ãŒã¿ãŒãäœæããå¿ èŠããããŸãã åºæ¬çã«åã管çããã»ã¹ã§ããå¿ èŠãªæ©åšãã®ã¿ãæš¡å£ããŸãã ãã®ãããããç°¡åãªããã»ã¹ãšããŠå§ããŸãïŒ
ãã®çµæããããžã§ã¯ãã«ã¯ããã«2ã€ã®ã«ã¿ãã°ããããŸã
src /ã¢ã«ãŽãªãºã /ã³ã³ãããŒã©ãŒ -管çããã»ã¹ïŒã¿ã¹ã¯ã®è§£æ±ºïŒ
src / Algorithms / Imitator-å¶åŸ¡ããã»ã¹ã調æŽããããã®ã·ãã¥ã¬ãŒã¿ãŒ
ãŸããããã€ãã®ãµãŒãã¹ãã£ã¬ã¯ããªïŒåŸè¿°ïŒããããããå¥ã®ãµããã£ã¬ã¯ããª"Algorithms"ã§ããã»ã¹ãéžæããŸãã
ã·ãã¥ã¬ãŒã¿ãŒã®ã¿ã¹ã¯ïŒæãåçŽãªããã ããªãã·ã§ã³ïŒïŒ
- ã³ãã³ããfillãã«ãããã¿ã³ã¯ã®å å¡«ãã·ãã¥ã¬ãŒãããŸãïŒã¿ã³ã¯å ã®ã¢ããã°ã¬ãã«ã»ã³ãµãŒã®å€ãå¢ãããŸãïŒã
- ã³ãã³ãã空ãã§ãã¿ã³ã¯ã空ã«ããããšãã·ãã¥ã¬ãŒãããŸãïŒã¿ã³ã¯å ã®ã¢ããã°ã¬ãã«ã»ã³ãµãŒã®å€ãæžãããŸãïŒã
ã·ãã¥ã¬ãŒã¿ãŒãèšè¿°ããxmlãã¡ã€ã«ãäœæãã
1ã€ã®ãã«ããŒã«ã€ããŠèª¬æããŸãããéåžžã«éèŠãªunisetãŠãŒãã£ãªãã£ïŒ uniset2-codegenã§ãã
ããã䜿çšããŠãç¹å¥ãªxmlèšè¿°ã«åºã¥ããŠãäœæ¥ã®ãã«ãŒãã³éšåãå šäœãå«ãããã»ã¹ã®ãã¹ã±ã«ãã³ããçæãããŸãã ãã®åŸãçæãããã¯ã©ã¹ïŒã¹ã±ã«ãã³ïŒãããç¶æ¿ãããå¿ èŠãªæ©èœãå®è£ ïŒä»®æ³é¢æ°ã®åå®çŸ©ïŒããã ãã§ååã§ãã
xml-descriptionãã¡ã€ã«ã¯ããå ¥åããšãåºåããèšè¿°ããåçŽãªxmlãã¡ã€ã«ã§ãã
ãã®ããã»ã¹ã®å ŽåïŒããã©ãã¯ããã¯ã¹ããšèŠãªãå ŽåïŒã 以äžãç解ããããšãéèŠã§ãã
- ãå ¥åããšãåºåãã¯æ¬è³ªçã«ãããã»ã¹ããåä¿¡ãïŒå ¥åïŒãŸãã¯ãã»ãããïŒåºåïŒããã»ã³ãµãŒã§ãã
- ããããã»ã¹ã®ãå ¥åããšã¯äœããå¥ã®ããã»ã¹ã®ãåºåãã§ããå¯èœæ§ããããŸãã
- å ¥å/åºåã¯ã»ã³ãµãŒèªäœã§ã¯ãªããã¯ã©ã¹ãã£ãŒã«ãã§ãããåŸã§ïŒéå§æã«ïŒç¹å®ã®ã»ã³ãµãŒã«æ¥ç¶ãããŸãã
ããããã¹ãŠå®çŸããããã«ãèŠç¹ãç解ããŸãããã ã·ãã¥ã¬ãŒã¿ãŒã«ã¯ã次ã®ãã®ããããŸãã
2ã€ã®å ¥åã¯fill / emptyã³ãã³ãã§ã 1ã€ã®åºåã¯ã¿ã³ã¯å ã®å®éã®ã·ãã¥ã¬ãŒã·ã§ã³ã¬ãã«ã§ãã 次ã«ãå ¥å/åºåãèšè¿°ããxmlãã¡ã€ã«ã®éšåã¯æ¬¡ã®ããã«ãªããŸãã
<smap> <item name="Level_s" vartype="out" iotype="AI" comment=" "> <item name="cmdLoad_c" vartype="in" iotype="DO" comment=" "> <item name="cmdUload_c" vartype="in" iotype="DO" comment=" «»"> </smap>
name-ïŒã¯ã©ã¹ã®ã¹ã±ã«ãã³å ã®ïŒ "å€æ°"ã®ååãèšå®ããŸãã ïŒãã®å ¥å/åºåãæ¥ç¶ãããã»ã³ãµãŒã®IDïŒãå«ãã¯ã©ã¹ãã£ãŒã«ããããã³çŸåšã®å€ãå«ãå€æ°ãããã®ååããçæãããŸãã
vartype-å€æ°ãinputããŸãã¯ãoutputãã®ã¿ã€ããå®çŸ©ããŸãã å ¥åã¯ãèªãããã®ã§ããããåºå£ãã¯ãæžã蟌ãããã®ã§ãã
ã³ã¡ã³ã -doxygenã¹ã¿ã€ã«ã®ã³ã¡ã³ãã«ãªããŸãïŒ/ *ïŒ<xxxxx * /ïŒ
ãããã£ãŠãäžè¬çã«ã¯ããã®åŸããã€ãã®ã·ãã¥ã¬ãŒã¿ãŒãèµ·åã§ããŸããåã·ãã¥ã¬ãŒã¿ãŒã¯ã»ã³ãµãŒã«é¢é£ä»ããããŸã...
詳现ã«èå³ããã人ã®ããã«..
å®å
šãªèª¬æãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸãã
<?xml version="1.0" encoding="utf-8"?> <!-- name - msgcount - sleep_msec - type ==== in - ( ) out - () --> <Imitator> <settings> <set name="class-name" val="Imitator"/> <set name="msg-count" val="30"/> <set name="sleep-msec" val="150"/> </settings> <variables> <item name="stepVal" type="long" const="1" default="6" comment=" ()"/> <item name="stepTime" type="long" const="1" default="500" comment=" , "/> </variables> <smap> <item name="Level_s" vartype="out" iotype="AI" comment=" "/> <item name="cmdLoad_c" vartype="in" iotype="DO" comment=" "/> <item name="cmdUload_c" vartype="in" iotype="DO" comment=" ''"/> </smap> <msgmap> </msgmap> </Imitator>
ã·ãã¥ã¬ãŒã¿ãŒã®ã³ãŒããæžã
å ¥å/åºåã圢æããã ãã¹ã±ã«ãã³ãçæã§ããŸãã 詳现ã«å ¥ãããšãªããããã¯æ¬¡ã®ã³ãã³ãã§å®è¡ãããŸãã
uniset2-codegen -n Imitator --ask --no-main imitator.src.xml
ãã©ã¡ãŒã¿ãŒ--ask-å€æŽéç¥ã«åºã¥ããŠããã»ã¹ãçæããããã«æ瀺ããŸãïŒã»ã³ãµãŒã®é åºä»ãïŒ
ãã©ã¡ãŒã¿ãŒ--no-main-main.ccãçæããªãããã«æ瀺ããŸã ç¬èªã«äœæããŸãã
-nãªãã·ã§ã³ã¯ãã¹ã±ã«ãã³ãçæãããã¯ã©ã¹ã®ååã§ãã
äžè¬ã«ããã®ã³ãã³ãã¯ã«è¿œå ãããŸã
Makefile.am
bin_PROGRAMS = imitator BUILT_SOURCES = Imitator_SK.h Imitator_SK.h imitator_LDADD = $(top_builddir)/lib/libUniSetExample.la #imitator_CPPFLAGS = imitator_SOURCES = Imitator_SK.cc Imitator.cc imitator-main.cc Imitator_SK.h Imitator_SK.cc: imitator.src.xml @UNISET_CODEGEN@ -n Imitator --topdir $(top_builddir)/ --ask --no-main imitator.src.xml clean-local: rm -rf *_SK.cc *_SK.h *.log
ãã®çµæã2ã€ã®ãã¡ã€ã«ãçæãããŸãã
Imitator_SK.h-ããããŒ
Imitator_SK.cc-å®è£
ãããã¯ããã§è¡ãããŠããããšãç 究ããããã®éåžžã«èå³æ·±ããã¡ã€ã«ã§ãããä»ã®ãšããç§ãã¡ã¯ãããã«ä»»ããŠããŸãã...
ãããã£ãŠãå®éã®å®è£ ãè¡ããŸãã äœæ¥ã®ããžãã¯ãå®è£ ãã2ã€ã®ãã¡ã€ã«ãäœæããŸãã
Imitator.h
Imitator.cc
Imitator.hãããã«è©³ããèŠãŠã¿ãŸãããã
Imitator.h
#ifndef Imitator_H_ #define Imitator_H_ // ----------------------------------------------------------------------------- #include <string> #include "Imitator_SK.h" // ----------------------------------------------------------------------------- /*! \page_Imitator ( ) - \ref sec_imitator_Common \section sec_loadproc_Common ""(cmdLoad_c) ( ). ""(cmdUnload_c) ( ). */ class Imitator: public Imitator_SK { public: Imitator( UniSetTypes::ObjectId id, xmlNode* cnode, const std::string& prefix = "" ); virtual ~Imitator(); enum Timers { tmStep }; protected: virtual void sensorInfo( const UniSetTypes::SensorMessage* sm ) override; virtual void timerInfo( const UniSetTypes::TimerMessage* tm ) override; private: }; // ----------------------------------------------------------------------------- #endif // Imitator_H_
ãŠãã»ããã·ã¹ãã ã§ã¯ãã»ã³ãµãŒã«é¢ããéç¥ãåä¿¡ããäžè¬ã«äœããã®æ¹æ³ã§å€éšãšããåããããã¹ãŠã®ãªããžã§ã¯ãã«ã¯ãã·ã¹ãã å ã§äžæã®èå¥åãå¿ èŠã§ãã ããã«å ããŠãããã»ã¹ã¯å ¥å/åºåãç¹å®ã®ã»ã³ãµãŒã«æ¥ç¶ããå¿ èŠããããŸãããã®ãããconfigure.xmlã§ã¯ãåããã»ã¹ã«ç¬èªã®æ§æã»ã¯ã·ã§ã³ããããŸãã
ãã®çµæãã³ã³ã¹ãã©ã¯ã¿ãŒã§ã¯ããªããžã§ã¯ãã®èå¥åãšããã®ããã»ã¹ã®èšå®ãæã€ç¹å®ã®xml-nodeãžã®ãã€ã³ã¿ãŒãæž¡ããŸãã ããã«ããã¬ãã£ãã¯ã¹ããããŸãïŒããã¯ã³ãã³ãã©ã€ã³åŒæ°ãåŠçããããã®ãã®ã§ããåŸã§äœ¿çšããæ¹æ³ã瀺ããŸãïŒã
ã·ãã¥ã¬ãŒã¿ãŒã®èª¬æã«åºã¥ããŠãã³ãã³ãåŠçïŒå ¥åïŒãšã¿ã€ããŒã䜿çšããŠãæéã®å å¡«/æåºãå®è£ ããå¿ èŠããããŸãã ãããè¡ãã«ã¯ã2ã€ã®é¢æ°ã®ã¿ãå®çŸ©ïŒåå®çŸ©ïŒããŸãã
// : virtual void sensorInfo( const UniSetTypes::SensorMessage* sm ) override; // : virtual void timerInfo( const UniSetTypes::TimerMessage* tm ) override;
ãŸããsensorInfoïŒïŒã®å®è£ ã詳ããèŠãŠã¿ãŸãããã
void Imitator::sensorInfo( const UniSetTypes::SensorMessage* sm ) { if( sm->id == cmdLoad_c ) { if( sm->value ) { myinfo << myname << "(sensorInfo): ''..." << endl; askTimer(tmStep,stepTime); // } } else if( sm->id == cmdUnload_c ) { if( sm->value ) { myinfo << myname << "(sensorInfo): ''..." << endl; askTimer(tmStep,stepTime); // } } }
ããã§ã¯ãã¹ãŠãåçŽã§ã...ãfillãã³ãã³ããæ¥ãŸããïŒcmdLoad_c = 1ïŒ-ã¿ã€ããŒãéå§ããŸã...ïŒä»¥åã¯ããããŸããã§ããïŒã
ã空ã®ãã³ãã³ããæ¥ãŸããïŒcmdUnload_c = 1ïŒ-ã¿ã€ããŒãéå§ããŸãã ãã¹ãŠã®ããžãã¯ã¯ã¿ã€ããŒã«å«ãŸããŠããŸãã
ïŒãã¡ãããããããã¹ãŠå¥ã®æ¹æ³ã§å®è£ ããããšãã§ããŸã...ã¿ã€ããŒãã©ã®ããã«äœ¿çšããããã©ãã«ãããŠç€ºãå¿ èŠããããŸã:)ïŒ
timerInfoïŒïŒã®å®è£ ãèŠãŠã¿ãŸãããã
void Imitator::timerInfo( const UniSetTypes::TimerMessage* tm ) { if( tm->id == tmStep ) { if( in_cmdLoad_c ) // .. { out_Level_s += stepVal; if( out_Level_s >= maxLevel ) { out_Level_s = maxLevel; askTimer(tmStep,0); // ( ) } return; } if( in_cmdUnload_c ) // { out_Level_s -= stepVal; if( out_Level_s <= minLevel ) { out_Level_s = minLevel; askTimer(tmStep,0); // ( ) } return; } } }
tmStepã¿ã€ããŒãããªã¬ãŒããããšãïŒã¿ã€ããŒã¯ããã€ã§ãæ§ããŸããïŒã ããŒã ãçŸåšãä¿æãããŠããããšã確èªãããæºããããŠãããå ŽåïŒ in_cmdLoad_c = 1 ïŒã out_Level_sãå¢åã¹ãããïŒ stepVal ïŒ å¢ãã ãã空ã«ãããå Žåã out_Level_sãstepValæžãããŸãã åæã«ãæ倧ãšæå°ã確èªããŸãã
ãããŠä»ããã®ãããã³å šäœã®ã¡ãã£ãšããåæ...
ãã©ãã§ãin_cmdLoad_cãin_cmdUnload_cãout_Level_sãã£ãŒã«ããã¯ã©ã¹ã«çŸããŸããã
å®éã«ã¯ã¹ã±ã«ãã³ã§çæãããŸãã
ãã¹ãŠã®ãå ¥åãïŒ vartype = "in" xmlèšè¿°ãã¡ã€ã«ãåç §ïŒã«ã€ããŠã次ã®ãã£ãŒã«ããã¹ã±ã«ãã³ã«çæãããŸã
name-ãã®ãå ¥åããé¢é£ä»ããããŠããã»ã³ãµãŒã®èå¥åãå«ããã£ãŒã«ã
in_name-çŸåšã®ã»ã³ãµãŒå€ãå«ããã£ãŒã«ã
ãã¹ãŠã®ãçµäºãïŒ vartype = "out" xmlèšè¿°ãã¡ã€ã«ãåç §ïŒã«ã€ããŠã次ã®ãã£ãŒã«ããã¹ã±ã«ãã³ã«çæãããŸã
name-ãã®ãåºåããé¢é£ä»ããããŠããã»ã³ãµãŒã®èå¥åãå«ããã£ãŒã«ã
out_name-ã»ã³ãµãŒãèšå®ããããã®ãã£ãŒã«ãã
ã¿ã€ããŒã¯ã©ã®ããã«æ©èœããŸãã
åãã¹ã±ã«ãã³ã«ã¯ãç¹å¥ãªé¢æ°askTimerïŒtimerIdãmsecãcountïŒããããŸã
timerId-ã¿ã€ããŒIDïŒããã¯äœããã®çš®é¡ã®çªå·ã§ãããããã¿ã€ããŒãåºå¥ã§ããŸãïŒ
msec- ãã³ããã³ã°ã¿ã€ããŒãã®ããªç§åäœã®æéã 0ã«èšå®ãããšãã¿ã€ããŒã¯ç¡å¹ã«ãªããŸãã
count-ã¿ã€ããŒãããªã¬ãŒããåæ°ã®ãªãã·ã§ã³ã®ãã©ã¡ãŒã¿ãŒïŒããã©ã«ãã§ã¯ãåæ¢ãããŸã§ããªç§ããšã«çºçããŸãïŒã
ã¿ã€ããŒããéå§ãããããšã msecããªç§ããšã«ã timerInfoé¢æ°ãåŒã³åºããïŒconst UniSetTypes :: TimerMessage * tmïŒ ãã¢ã¯ãã£ãåãããã¿ã€ããŒã®èå¥åãå«ãTimerMessageæ§é äœãæž¡ãããŸãã
éèŠ ïŒ
- ãŸã ãªã¢ã«ã¿ã€ã ã§ã¯ãªããããã¿ã€ããŒã¯æå®ãããæéããããæ©ããåäœããªãããšãä¿èšŒããã ãã§ãã
- ãããã£ãŠãã¿ã€ããŒã¯éåæã§ã¯ãããŸããïŒïŒïŒã ã¡ãã»ãŒãžã¯é çªã«åŠçãããŸãã äœããã®ãã³ãã©ãŒïŒxxxïŒãåŒã³åºãããšã§ãã³ãã©ãŒã®ã©ããïŒäŸãã°sensorInfo ïŒã§ã¹ã¿ãã¯ããå Žåãã¿ã€ããŒã¯ãã®æéãåŸ æ©ãããŸãã
- ã¿ã€ããŒã¯ããã©ã¡ãŒã¿ã®xml-fileã§æå®ãããæéã®æå°ãéåãïŒã¹ãããïŒã®åæ°ã§ãªããã°ãªããŸãã
<set name="sleep-msec" val="150"/>
ãããã®è©³çŽ°ã«æ³šæãæããªãããšããå§ãããŸããããããã«ã€ããŠã¯åŸã§...
sensorInfoã®ä»çµã¿
sensorInfoïŒïŒé¢æ°ã¯ãå ¥åã®å€ãå€æŽããããã³ã«åŒã³åºãããŸãã å®éãã»ã³ãµãŒã®å€æŽã«é¢ããéç¥ã¯SharedMemoryããéä¿¡ãããŸã ïŒããã»ã¹ãéç¥ã§å®è¡ãããå ŽåïŒã
ããžãã¯ã決å®ããŸããã å®éã«mainïŒïŒãèšè¿°ããå¿ èŠããããŸãã
ã³ãŒãã衚瀺ããã³ã¡ã³ãããã ãã§ã...
é¢æ°ã¡ã€ã³ïŒïŒ
main.cc
#include <UniSetActivator.h> #include "UniSetExampleConfiguration.h" #include "Imitator.h" // ----------------------------------------------------------------------------- using namespace UniSetTypes; using namespace std; // ----------------------------------------------------------------------------- int main( int argc, const char** argv ) { try { auto conf = uniset_init(argc, argv); auto act = UniSetActivator::Instance(); auto im = UniSetExample::make_object<Imitator>("Imitator1", "Imitator"); act->add(im); SystemMessage sm(SystemMessage::StartUp); act->broadcast( sm.transport_msg() ); act->run(false); return 0; } catch( const Exception& ex ) { cerr << "(imitator): " << ex << endl; } catch( const std::exception& ex ) { cerr << "(imitator): " << ex.what() << endl; } catch(...) { cerr << "(imitator): catch(...)" << endl; } return 1; } // -----------------------------------------------------------------------------
ãŸãããããžã§ã¯ãã®æ§æãããŠã³ããŒãããlibunisetãæ©èœããããã«å¿ èŠãªãã¹ãŠãåæåããå¿ èŠããããŸãã ããã¯ãã¹ãŠããã¹ãŠã®ããŒãºã«å¯ŸããŠã°ããŒãã«ãã€ã³ã¿ãŒïŒshared_ptrïŒconfïŒæ§æïŒãè¿ãé¢æ°uniset_initïŒargcãargvïŒã§è¡ãããŸãã ãŸããããã°ã©ã ã®ã©ãããã§ãå ¥æã§ããŸãã
auto conf = uniset_conf();
ãã®äŸã§ã¯ã䜿çšããŠããŸããïŒæ瀺çã«ã§ãããå®éã«ã¯make_objectã䜿çšããŠããŸã ïŒã
uniset_initïŒïŒã§ãconfigure.xmlãã¡ã€ã«ãããŒããããŸãïŒåãååã®ãã¡ã€ã«ã¯ããã©ã«ãã§ããŒãããããšããŠããŸãïŒã ã«3çªç®ã®åŒæ°ãæž¡ãããšã§åå®çŸ©ã§ããŸã
uniset_init(argc,argc,"myconfigure.xml")
ããŸãã¯ã³ãã³ãã©ã€ã³ã§--confile myconfile.xmlãã©ã¡ãŒã¿ãŒãèšå®ããŸãã
ãã¹ãŠã®ãŠãã»ãããªããžã§ã¯ãããã¢ã¯ãã£ãåãããå¿ èŠããããŸãããã®åŸããããã¯éç¥ãåä¿¡ããäžè¬ã«å€éšãšå¯Ÿè©±ã§ããããã«ãªããŸãã ãã®ããã«ãã·ã¹ãã ã«ã¯UniSetActivatorããããŸãïŒã³ãŒããããããããã«ãããã¯singletonã§ã ïŒã ã¢ã¯ãã£ããŒã·ã§ã³ããã»ã¹ã¯ç°¡åã§ãã ãªããžã§ã¯ããäœæããŠã¢ã¯ãã£ããŒã¿ãŒã«è¿œå ããŸã ïŒããæ£ç¢ºã«ã¯ããªããžã§ã¯ãããšã«shared_ptrïŒã
äžèšã®ããã«ã Imitatorã¯ã©ã¹ã®ãªããžã§ã¯ããäœæããã«ã¯ããã®äžæã®èå¥åãšãèšå®ãå«ãxml-nodeãžã®ãã€ã³ã¿ãŒãæž¡ãå¿ èŠããããŸãã ããããããããããã«ããã³ãã¬ãŒãé¢æ°make_object <>ãUniSetExampleConfigurationã§å®£èšããããªããžã§ã¯ãã®ããã¹ãåïŒconfigure.xmlã®ã»ã¯ã·ã§ã³å ã®ååïŒãšconfigure.xmlã®ãã®ãªããžã§ã¯ãã®æ§æããŒã<XXXNodeName name = "ObectName />ã®ååãæž¡ã ãŸã ã make_object <>é¢æ°ã¯ããããã®ãã©ã¡ãŒã¿ãŒã䜿çšããŠObjectIdãªããžã§ã¯ããååŸãã configure.xml㧠xmlNode *ãèŠã€ãããšãããéæ³ãããã¹ãŠé ããŠããŸã ã ãã®äŸã¯ã configure.xmlã« ãImitator1ããšããååã®ãªããžã§ã¯ãïŒèå¥åïŒãšæ§æã»ã¯ã·ã§ã³<Imitator name = "Imitator1" ... />ãå¿ èŠã§ããããšã瀺ããŠããŸã
ããã¯configure.xmlã§ã®èŠãç®ã§ã
<objects name="Objects" section="Objects"> ... <item id="20001" name="Imitator1"/> ... </objects>
ãããŠãéåžžã¯èšå®ã»ã¯ã·ã§ã³ã§äœæããããã¥ãŒãã³ã°ã»ã¯ã·ã§ã³
<settings> <Imitator name="Imitator1"/> ... </settings>
ããã«ãããã·ãã¥ã¬ãŒã¿ã®ã³ãŒãã£ã³ã°ãçµäºããŸããã
ã·ãã¥ã¬ãŒã¿ãŒæ§æ
æ§æããã»ã¹èªäœã¯ã configure.xmlãèšå®ã ãã»ã³ãµãŒãããã»ã¹ã®å ¥åãšåºåã«ãã€ã³ãããããšã§æ§æãããŸãã ãã®åé¡ã解決ããããã«ãç¹å¥ãªãŠãŒãã£ãªãã£uniset-linkeditorããããŸãã ããã¯ãã€ã³ãã£ã³ã°ãšãã£ã¿ã§ãããã°ã©ãã£ã«ã«ã«ãã€ã³ãã£ã³ã°ãäœæããããxmlèšè¿°ãã¡ã€ã«ã§å®£èšãããŠããä»ã®ãã©ã¡ãŒã¿ãç·šéãããã§ããŸãã Uniset-linkeditorèªäœã¯ python ã§æžãããŠããŸãã å¥ã®ããã±ãŒãžãšããŠã€ã³ã¹ããŒã«ãããŸãã æåã«ã€ã³ã¹ããŒã«ããå¿ èŠããããŸã
apt-get install uniset-configurator
src / Algorithms / Imitator ãã£ã¬ã¯ããªã«ã¯ããã€ã³ãã£ã³ã°ãšãã£ã¿ãŒãèµ·åããç¹å¥ãªã¹ã¯ãªããedit_imitator.shãå«ãŸããŠããŸãã å®éã«ã¯ãã³ãã³ãïŒ å ¥å ïŒãCmdLoad_Cããã³CmdUnload_Cã»ã³ãµãŒã« é¢é£ä»ã ãã¿ã³ã¯å ã®ã¬ãã«ïŒ ã·ãã¥ã¬ãŒã¿ãŒã®åºå ïŒãLevel_ASã»ã³ãµãŒã«ã¢ã¿ããããå¿ èŠããããŸãã ããã¯æåã§è¡ãããšãã§ããè€éãªããšã¯ãããŸãã...çµæãšããŠãã·ãã¥ã¬ãŒã¿ãŒã®æ§æã»ã¯ã·ã§ã³ïŒ configure.xmlãããžã§ã¯ããã¡ã€ã«å ïŒã¯æ¬¡ã®åœ¢åŒã«ãªããŸãã
<Imitator name="Imitator1" Level_s="Level_AS" cmdLoad_c="CmdLoad_C" cmdUnload_c="CmdUnload_C"/>
ã芧ã®ãšããããã€ã³ãã£ã³ã°ã¯ç°¡åã«äœæã§ããŸãã åå ¥åãŸãã¯åºåã¯ãã·ã¹ãã å ã®ã»ã³ãµãŒã«é¢é£ä»ããããŠããŸãã
å°èš
ãå€ãã®æçŽãããã£ããšããäºå®ã«ãããããããå®éãç§ãã¡ã¯ã»ãšãã©äœãããŸããã§ãã
- configure.xmlãããžã§ã¯ããã¡ã€ã«ãäœæïŒå ¥åïŒããŸãã
- ã·ãã¥ã¬ãŒã¿ãŒimitator.src.xmlãèšè¿°ãããã¡ã€ã«ãäœæããããããã¯ã©ã¹ã®ãã¹ã±ã«ãã³ããçæããŸãã
- ããžãã¯ã®å®è£ ãäœæããŸããïŒ 2ã€ã®é¢æ°ã®ã¿ ïŒ
- WroteïŒ ã»ãŒå®åæ ïŒ mainïŒïŒ
- ã·ãã¥ã¬ãŒã¿ãŒãæ§æããŸããïŒ ç¹å®ã®ã»ã³ãµãŒãçµã³ä»ããŸãã ïŒ
ããã ãã§ã...
å®è¡ããããšããã®ã¯ä»ã®ãŸãŸã§ãã
次ã®éšåã«ãªããŸã...
èå³ã®ããæ¹ãžïŒ