{"id":1733,"date":"2019-06-30T20:23:38","date_gmt":"2019-06-30T11:23:38","guid":{"rendered":"https:\/\/www.kdel.org\/wp\/?p=1733"},"modified":"2019-07-03T07:43:32","modified_gmt":"2019-07-02T22:43:32","slug":"new-refbox","status":"publish","type":"post","link":"https:\/\/www.kdel.org\/wp\/?p=1733","title":{"rendered":"New RefBox"},"content":{"rendered":"<p>RoboCup2019 \u306b\u5408\u308f\u305b\u3066\uff0cRefBox \u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304c1.1.0\u306b\u5909\u308f\u308a\u307e\u3057\u305f\uff0e<br \/>\n\u5927\u304d\u306a\u5909\u66f4\u70b9\u306f\uff0cRefBox <=> MPS \u306e\u901a\u4fe1\u304cModbus\/TCP \u304b\u3089 OPCUA\u306b\u306a\u3063\u305f\u3053\u3068\u3067\u3059\uff0e<\/p>\n<p>\u3053\u308c\u306b\u5408\u308f\u305b\u3066\uff0cMPS \u306e\u7a2e\u985e\u3068\u3057\u3066\uff0c\u4ee5\u4e0b\u306e3\u3064\u304c\u6307\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e<\/p>\n<ul>\n<li>plc<\/li>\n<li>simluation<\/li>\n<li>mockup<\/li>\n<\/ul>\n<p>\u3053\u308c\u306f\uff0cconfig.yaml \u3067\u6307\u5b9a\u3057\u305f\u5024\u3092 \/rcll-refbox\/src\/refbox\/refbox.cpp \u3067\uff0cconnection_mode \u3068\u3057\u3066\u53d7\u3051\u53d6\u3063\u3066\u3044\u307e\u3059\uff0e<\/p>\n<p>\u3055\u3066\uff0cmockup \u304cdummyMPS \u3068\u3057\u3066\u4f7f\u3048\u308b\u306e\u304b\u3069\u3046\u304b\uff0csimulation\u3068\u306e\u9055\u3044\u306f\u4f55\u304b\u3000\u3092\u8abf\u3079\u307e\u3059\uff0e<\/p>\n<p>\u3053\u308c\u3089\u306e\u5024\u306f\uff0c\u4ee5\u4e0b\u3067\u5229\u7528\u3055\u308c\u3066\u3044\u307e\u3059\uff0e<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nwataru@ubuntu:~\/rcll-refbox\/src\/libs\/mps_comm$ grep MOCKUP *\r\nmachine.cpp:        if (connection_mode_ == MOCKUP) {\r\nmachine.cpp:  if (connection_mode_ == MOCKUP) {\r\nmachine.cpp:  if (connection_mode_ == MOCKUP) {\r\nmachine.h:  enum ConnectionMode { MOCKUP, SIMULATION, PLC, };\r\n<\/pre>\n<p>\u3068\u308a\u3042\u3048\u305a\uff0c\u3053\u306e\u90e8\u5206\u3092\u8aad\u307f\u9032\u3081\u307e\u3059\uff0e<\/p>\n<p>\u4e0a\u8a18\u304c\u51fa\u3066\u304f\u308b\u306e\u306f\uff0csend_command \u306e\u95a2\u6570\u3067\u3059\uff0e<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nvoid Machine::send_command(unsigned short command, unsigned short payload1, unsigned short payload2, int timeout, unsigned char status, unsigned char error) {\r\n        std::function&lt;void(void)&gt; call = &#x5B;this, command, payload1, payload2, status, error] {\r\n<\/pre>\n<p>\u305f\u3076\u3093\uff0cOPCUA \u306e\u4ed5\u69d8\u306b\u5f93\u3063\u3066\uff0c\u901a\u4fe1\u30c7\u30fc\u30bf\u3092\u9001\u4fe1\u3059\u308b\u3068\u3053\u308d\u306a\u306e\u304b\u306a\u3041\u3068\u601d\u3044\u307e\u3059\uff0e<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n        if (connection_mode_ == MOCKUP) {\r\n          if (command &gt; 100) {\r\n            mock_callback(OpcUtils::MPSRegister::STATUS_BUSY_IN, true);\r\n            std::this_thread::sleep_for(mock_busy_duration_);\r\n            mock_callback(OpcUtils::MPSRegister::STATUS_BUSY_IN, false);\r\n            mock_callback(OpcUtils::MPSRegister::STATUS_READY_IN, true);\r\n            std::this_thread::sleep_for(mock_ready_duration_);\r\n            mock_callback(OpcUtils::MPSRegister::STATUS_READY_IN, false);\r\n          }\r\n          return;\r\n        }\r\n<\/pre>\n<p>\u3068\u308a\u3042\u3048\u305a\uff0cMOCKUP \u3060\u3063\u305f\u3089\uff0cmock_callback\u3063\u3066\u306e\u3092\u547c\u3073\u51fa\u3057\u3066\u3044\u308b\u3063\u307d\u3044\u3067\u3059\uff0e<br \/>\nmock_callback \u306f\uff0c\u7b2c\u4e00\u5f15\u6570\u304c\u30ec\u30b8\u30b9\u30bf\u306e\u540d\u524d\u3067\uff0c\u7b2c\u4e8c\u5f15\u6570\u304c\u623b\u308a\u5024\u3063\u307d\u3044\u3067\u3059\uff0e<br \/>\n\u3064\u307e\u308a\uff0c\u76f8\u624b\u5148\u3068\u901a\u4fe1\u305b\u305a\u306b\uff0c\u540c\u3058\u52d5\u4f5c\u7d50\u679c\u3092\u8fd4\u3057\u3066\u3044\u308b\u3000\u3063\u3066\u611f\u3058\u3067\u3057\u3087\u3046\u304b\uff0e<br \/>\nsimulation \u3068\u306e\u9055\u3044\u304c\u308f\u304b\u308a\u307e\u305b\u3093\u304c\u2026\uff0e<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nvoid Machine::mock_callback(OpcUtils::MPSRegister reg, OpcUtils::ReturnValue *ret)\r\n{\r\n        for (auto &amp;cb : callbacks_) {\r\n                if (std::get&lt;1&gt;(cb) == reg) {\r\n                        SubscriptionClient::ReturnValueCallback fct = std::get&lt;0&gt;(cb);\r\n                        fct(ret);\r\n                }\r\n        }\r\n}\r\n<\/pre>\n<p>MOCKUP\u95a2\u4fc2\u306b\u5bfe\u5fdc\u3059\u308b\u5b9f\u6a5f\u4ed5\u69d8\u306f\uff0c\u4ee5\u4e0b\u3067\u3059\uff0e<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n                                OpcUtils::MPSRegister registerOffset;\r\n                                if (command &lt; Station::STATION_BASE)\r\n                                        registerOffset = OpcUtils::MPSRegister::ACTION_ID_BASIC;\r\n                                else\r\n                                        registerOffset = OpcUtils::MPSRegister::ACTION_ID_IN;\r\n\r\n                                bool                  statusBit = (bool)(status &amp; Status::STATUS_BUSY);\r\n                                OpcUtils::MPSRegister reg;\r\n                                reg = registerOffset + OpcUtils::MPSRegister::ACTION_ID_IN;\r\n                                setNodeValue(registerNodes&#x5B;reg], (uint16_t)command, reg);\r\n                                reg = registerOffset + OpcUtils::MPSRegister::DATA_IN;\r\n                                setNodeValue(registerNodes&#x5B;reg].GetChildren()&#x5B;0], (uint16_t)payload1, reg);\r\n                                reg = registerOffset + OpcUtils::MPSRegister::DATA_IN;\r\n                                setNodeValue(registerNodes&#x5B;reg].GetChildren()&#x5B;1], (uint16_t)payload2, reg);\r\n                                reg = registerOffset + OpcUtils::MPSRegister::STATUS_ENABLE_IN;\r\n                                setNodeValue(registerNodes&#x5B;reg], statusBit, reg);\r\n                                reg = registerOffset + OpcUtils::MPSRegister::ERROR_IN;\r\n                                setNodeValue(registerNodes&#x5B;reg], (uint8_t)error, reg);\r\n                                success = true;\r\n                        } catch (std::runtime_error &amp;e) {\r\n                                logger-&gt;warn(&quot;Failed to send command to {}, reconnecting&quot;, name_);\r\n                                subscriptions.clear();\r\n                                connect_PLC();\r\n                                success = false;\r\n                        }\r\n                } while (!success);\r\n<\/pre>\n<p>simulation\u3067grep \u3057\u3066\u307f\u305f\u3089\uff0c\u8272\u3005\u547c\u3073\u51fa\u3059\u3068\u3053\u308d\u306e\u5f15\u6570\u306b\u542b\u307e\u308c\u3066\u3044\u308b\u306e\u3067\uff0c\u63a5\u7d9a\u306a\u3069\u3082\u884c\u308f\u306a\u3044\u3068\u3044\u3046\u611f\u3058\u3067\u3059\uff0e<br \/>\n\u3068\u3059\u308b\u3068\uff0cmockup \u306f\uff0c\u63a5\u7d9a\u81ea\u8eab\u306f\u8a66\u307f\u308b\u306e\u3067\u3057\u3087\u3046\u304b\uff1f<\/p>\n<p>\u8a66\u3057\u306b\uff0c\u4e00\u3064mockup\u304b\u3089simulation\u306b\u5909\u3048\u3066\u307f\u305f\u3068\u3053\u308d\uff0c<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nNew logging session started\r\n&#x5B;2019-06-30 05:18:39.909] &#x5B;C-BS] &#x5B;info] Connecting to: opc.tcp:\/\/192.168.2.27:4840\/\r\n&#x5B;2019-06-30 05:18:39.910] &#x5B;C-BS] &#x5B;error] OPC UA connection error: regex_error (@\/home\/wataru\/vega\/lab\/btr2019\/sydney\/rcll-refbox\/\r\nsrc\/libs\/mps_comm\/machine.cpp:255)\r\nConfig: C-CS1  prefix \/llsfrb\/mps\/stations\/C-CS1\/\r\n&#x5B;2019-06-30 05:18:39.911] &#x5B;C-CS1] &#x5B;info]\r\n<\/pre>\n<p>\u3068\u306e\u30a8\u30e9\u30fc\u304c\uff0e\u306a\u3093\u304b\uff0c\u3064\u306a\u304e\u306b\u884c\u3063\u3066\u308b\u6c17\u304c\u3059\u308b\u305e\u2026\uff0e<br \/>\nsimulation\u3068mockup \u306e\u4f4d\u7f6e\u3065\u3051\u304c\u9006\u306e\u3088\u3046\u306b\u601d\u3048\u307e\u3059\u2026\uff0e<br \/>\n\u3082\u3057\u304f\u306f\uff0csimulation \u306b\u3057\u3066\u3044\u305f\u3089\uff0cgazebo \u306e\u65b9\u306b\u3064\u306a\u304e\u306b\u3044\u3053\u3046\u3068\u3059\u308b\u306e\u304b\u306a\u3041\uff0e<\/p>\n<p>\u3058\u3083\u3042\uff0c\u3084\u3063\u3071\u308aMPS\u5074\u306b\u8f09\u305b\u305f\u6a5f\u5668\u3067\u985e\u4f3c\u3057\u305f\u52d5\u304d\u3092\u3057\u305f\u304b\u3063\u305f\u3089\uff0copc\u306b\u3057\u3066\uff0c\u901a\u4fe1\u90e8\u5206\u306e\u30c0\u30df\u30fc\u304c\u5fc5\u8981\u304b\u306a\u3041\uff0e<\/p>\n","protected":false},"excerpt":{"rendered":"<p>RoboCup2019 \u306b\u5408\u308f\u305b\u3066\uff0cRefBox \u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304c1.1.0\u306b\u5909\u308f &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"more-link\" href=\"https:\/\/www.kdel.org\/wp\/?p=1733\"> <span class=\"screen-reader-text\">New RefBox<\/span> \u7d9a\u304d\u3092\u8aad\u3080 &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","footnotes":""},"categories":[3,2,6,8],"tags":[],"class_list":["post-1733","post","type-post","status-publish","format-standard","hentry","category-logistics-league","category-robocup","category-setting","category-ubuntu"],"_links":{"self":[{"href":"https:\/\/www.kdel.org\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1733","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kdel.org\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kdel.org\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kdel.org\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kdel.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1733"}],"version-history":[{"count":12,"href":"https:\/\/www.kdel.org\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1733\/revisions"}],"predecessor-version":[{"id":1735,"href":"https:\/\/www.kdel.org\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1733\/revisions\/1735"}],"wp:attachment":[{"href":"https:\/\/www.kdel.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1733"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kdel.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1733"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kdel.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1733"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}