ããã... ...ç§ã¯
ãlibunisetã®ç¥ãåã-ACSãäœæããããã®ã©ã€ãã©ãªããšããèšäºãæžããŸããããç¶ããæžãèšç»ããããŸããããããŸããããŸããã§ããã ãã以æ¥ãã©ã€ãã©ãªã¯å€§å¹
ã«æé·ããããŒãžã§ã³2.0ããã§ã«ãªãªãŒã¹ãããŸãããå€ãã®æ°æ©èœãç»å ŽããŸããããã°ãšããã°ã©ã 倿°ã®ãªã¢ãŒã衚瀺ãããŸããŸãªäŸ¿å©ãªãããã³ã«ãšããŒã¿ããŒã¹ã®ãµããŒãããã¿ã€ã ãã·ã³ãããããŸãããããã«é¢ããŠã¯...
äžè¬ã«ãç§ã¯èªåã®åãéããŠãç¹å®ã®äŸã§ããã¹ãŠãèŠããæ¹ãè¯ããšå€æããŸããã
ãããã£ãŠãèå³ã®ããæ¹ã¯ã©ããã
äœæ¥ã®æ®µéã§ããã€ãã®èšäºãèšç»ãããŠããŸãã
æ®å¿µãªãããå®éã®ãã«ãããŒããããã¯ãŒã¯ãããžã§ã¯ãã®äŸãäœæããããšã¯å°é£ã§ãïŒå°ãªããšããä»®æ³ãã·ã³ã®ãããã¯ãŒã¯ãããã±ãŒãžã®ã€ã³ã¹ããŒã«ãå±éãªã©ãå¿
èŠã§ãïŒã ãããã£ãŠãã³ã³ãã€ã«ããŠããŒã«ã«ã§å®è¡ã§ããç°¡åãªäŸãæ€èšãããã®äžã§ã®åºæ¬çãªãŠãã»ããã®æŠå¿µã®æäœã瀺ããŸãã
äŸãšããŠã次ã®ãç圢ãåé¡ãåãäžããŸãã
ã¬ãã«å¶åŸ¡ã®ããã»ã¹ããã¿ã³ã¯ãã«èšè¿°ããå¿
èŠããããŸã
ããã»ã¹ã¯ã¿ã³ã¯ãæºããïŒãã³ãããªã³ã«ãïŒãã¬ãã«ãæå®ã®äžéãããå€ïŒ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-ã·ãã¥ã¬ãŒã¿ãŒãäœæãã
å®éã管çããã»ã¹ã®äœæ¥ããããã°ããã«ã¯ãããå°ãã·ãã¥ã¬ãŒã¿ãŒãäœæããå¿
èŠããããŸãã åºæ¬çã«åã管çããã»ã¹ã§ããå¿
èŠãªæ©åšãã®ã¿ãæš¡å£ããŸãã ãã®ãããããç°¡åãªããã»ã¹ãšããŠå§ããŸãïŒ
äžæ°ã«TDDã®ãã¡ã³ã§ãããšæ³å®ããŸãïŒã
ãã®çµæããããžã§ã¯ãã«ã¯ããã«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"?> <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
ãã®çµæã2ã€ã®ãã¡ã€ã«ãçæãããŸãã
Imitator_SK.h-ããããŒ
Imitator_SK.cc-å®è£
ãããã¯ããã§è¡ãããŠããããšãç ç©¶ããããã®éåžžã«è峿·±ããã¡ã€ã«ã§ãããä»ã®ãšããç§ãã¡ã¯ãããã«ä»»ããŠããŸãã...
ãããã£ãŠãå®éã®å®è£
ãè¡ããŸãã äœæ¥ã®ããžãã¯ãå®è£
ãã2ã€ã®ãã¡ã€ã«ãäœæããŸãã
Imitator.hImitator.ccImitator.hãããã«è©³ããèŠãŠã¿ãŸãããã
Imitator.h #ifndef Imitator_H_ #define Imitator_H_
ãŠãã»ããã·ã¹ãã ã§ã¯ãã»ã³ãµãŒã«é¢ããéç¥ãåä¿¡ããäžè¬ã«äœããã®æ¹æ³ã§å€éšãšããåããããã¹ãŠã®ãªããžã§ã¯ãã«ã¯ãã·ã¹ãã å
ã§äžæã®èå¥åãå¿
èŠã§ãã ããã«å ããŠãããã»ã¹ã¯å
¥å/åºåãç¹å®ã®ã»ã³ãµãŒã«æ¥ç¶ããå¿
èŠããããŸãããã®ãããconfigure.xmlã§ã¯ãåããã»ã¹ã«ç¬èªã®æ§æã»ã¯ã·ã§ã³ããããŸãã
ãã®çµæãã³ã³ã¹ãã©ã¯ã¿ãŒã§ã¯ããªããžã§ã¯ãã®èå¥åãšããã®ããã»ã¹ã®èšå®ãæã€ç¹å®ã®xml-nodeãžã®ãã€ã³ã¿ãŒãæž¡ããŸãã ããã«ããã¬ãã£ãã¯ã¹ããããŸãïŒããã¯ã³ãã³ãã©ã€ã³åŒæ°ãåŠçããããã®ãã®ã§ããåŸã§äœ¿çšããæ¹æ³ã瀺ããŸãïŒã
ã·ãã¥ã¬ãŒã¿ãŒã®èª¬æã«åºã¥ããŠãã³ãã³ãåŠçïŒå
¥åïŒãšã¿ã€ããŒã䜿çšããŠãæéã®å
å¡«/æåºãå®è£
ããå¿
èŠããããŸãã ãããè¡ãã«ã¯ã2ã€ã®é¢æ°ã®ã¿ãå®çŸ©ïŒåå®çŸ©ïŒããŸãã
ãŸããsensorInfoïŒïŒã®å®è£
ã詳ããèŠãŠã¿ãŸãããã
void Imitator::sensorInfo( const UniSetTypes::SensorMessage* sm ) { if( sm->id == cmdLoad_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 )
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"/>
ã€ãŸã ããã§150ããªç§ã瀺ãããŠããå Žåã50ããªç§ã¿ã€ããŒã¯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ïŒïŒ
- ã·ãã¥ã¬ãŒã¿ãŒãæ§æããŸããïŒ ç¹å®ã®ã»ã³ãµãŒãçµã³ä»ããŸãã ïŒ
ããã ãã§ã...
å®è¡ããããšããã®ã¯ä»ã®ãŸãŸã§ãã
次ã®éšåã«ãªããŸã...èå³ã®ããæ¹ãžïŒ