{"id":378720,"date":"2024-06-12T15:02:59","date_gmt":"2024-06-12T15:02:59","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=378720"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=378720","title":{"rendered":"<span>Open source Modbus TCP \u2014 RTU \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u043e\u0440<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/6f8\/0af\/5a3\/6f80af5a31349ac5d20331e909f98eb0.jpg\" width=\"3221\" height=\"2181\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6f8\/0af\/5a3\/6f80af5a31349ac5d20331e909f98eb0.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c \u043a\u043e\u043b\u043b\u0435\u0433\u0438, \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u043c \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u043e\u0440\u0435 Modbus TCP \u0432 Modbus RTU.<\/p>\n<p>\u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0447\u0442\u043e \u0432\u044b\u0431\u043e\u0440 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0442 \u043d\u0430\u0448\u0438\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044f\u043c. <\/p>\n<p>\u041c\u044b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 <a href=\"https:\/\/antexcloud.ru\/\" rel=\"noopener noreferrer nofollow\">AntexGate<\/a> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 Modbus tcp \u2013 Modbus rtu \u2013 can \u2013 profitnet \u2013 bacnet \u2013 mqtt \u2013 http \u2013 opc UA \u2013 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0441\u0432\u044f\u0437\u043a\u0443 Modbus TCP \u2013 Modbus RTU, \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0441\u0430\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 AntexGate \u043b\u0438\u0431\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0441 linux\/windows \u043d\u0430 \u0431\u043e\u0440\u0442\u0443 \u0438 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0435\u0439 RS485.<\/p>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u2013 \u044d\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 <a href=\"https:\/\/nodered.org\/docs\/getting-started\/raspberrypi\" rel=\"noopener noreferrer nofollow\">Node-Red<\/a>, \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c:<\/p>\n<blockquote>\n<p>bash &lt;(curl -sL https:\/\/raw.githubusercontent.com\/node-red\/linux-installers\/master\/deb\/update-nodejs-and-nodered)<\/p>\n<\/blockquote>\n<p>\u0421\u0434\u0435\u043b\u0430\u0442\u044c Node-red \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c:<\/p>\n<blockquote>\n<p><code>sudo systemctl enable nodered.service<\/code><\/p>\n<\/blockquote>\n<p>\u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0436\u0435\u043b\u0435\u0437\u044f\u043a\u0443: <\/p>\n<blockquote>\n<p>sudo reboot<\/p>\n<\/blockquote>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u043c \u0432 \u0441\u0440\u0435\u0434\u0443 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u043e\u0440\u0430 Node-red \u0447\u0435\u0440\u0435\u0437 web \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 ip \u0448\u043b\u044e\u0437\u0430:1880<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0441\u044b\u043b\u043a\u0443 Modbus TCP \u0432 RTU, \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442 \u0432 RS485 \u043f\u043e\u0440\u0442, \u0436\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 \u0438 \u0442\u0443\u0442 \u0436\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 Modbus TCP.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/faf\/3f6\/475\/faf3f64757ce344aff4fbdce791bac02.JPG\" width=\"1359\" height=\"553\"\/><\/figure>\n<p>\u0417\u0430\u0445\u043e\u0434\u0438\u043c \u0432 &#171;\u043c\u0435\u043d\u044e&#187; > &#171;\u0438\u043c\u043f\u043e\u0440\u0442&#187;<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u043e\u0435\u043a\u0442 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u043e\u0440\u0430 Modbus TCP &lt;> RTU<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>[     {         \"id\": \"22ff3060.54da6\",         \"type\": \"function\",         \"z\": \"de082ac2.4b8bf8\",         \"name\": \"Convert TCP to RTU\",         \"func\": \"var MBAPHeader = [5];\\nvar crc = 0xFFFF;\\n\\nMBAPHeader[0]= msg.payload[0];\\nMBAPHeader[1]= msg.payload[1];\\nMBAPHeader[2]= msg.payload[2];\\nMBAPHeader[3]= msg.payload[3];\\nMBAPHeader[4]= msg.payload[4];\\nflow.set('MBAP_HEADER', MBAPHeader);\\n\\nvar ReqLen = msg.payload[5];\\nvar MBLen = (msg.payload.length)-ReqLen;\\nvar MBReq = [MBLen];\\n\\nfor (let x=0; x &lt; MBLen;x++){\\n  MBReq[x] = msg.payload[x+ReqLen];\\n}\\n\\nfor (var req = 0; req &lt; ReqLen; req++) {\\n  crc ^= MBReq[req];          \/\/ XOR byte into least sig. byte of crc\\n  \\n  for (var i = 8; i !== 0; i--) {    \/\/ Loop over each bit\\n    if ((crc &amp; 0x0001) !== 0) {      \/\/ If the LSB is set\\n        crc >>= 1;                   \/\/ Shift right and XOR 0xA001\\n        crc ^= 0xA001;\\n    } else {                          \/\/ Else LSB is not set\\n      crc >>= 1;                     \/\/ Just shift right\\n    }\\n  }\\n}\\n\\nvar MyCRC = crc.toString(16);\\nMBReq[MBLen+1] = parseInt(MyCRC.substring(0,2),16);\\nMBReq[MBLen] = parseInt(MyCRC.substring(2,4),16);\\n\\nvar buf = new Buffer(MBReq);\\nmsg.payload = buf;\\nreturn msg;\",         \"outputs\": 1,         \"noerr\": 0,         \"initialize\": \"\",         \"finalize\": \"\",         \"libs\": [],         \"x\": 300,         \"y\": 100,         \"wires\": [             [                 \"7e62bbbc.bd8ea4\"             ]         ],         \"outputLabels\": [             \"XO\"         ]     },     {         \"id\": \"7e62bbbc.bd8ea4\",         \"type\": \"serial request\",         \"z\": \"de082ac2.4b8bf8\",         \"name\": \"\",         \"serial\": \"27dabad398437b7e\",         \"x\": 490,         \"y\": 100,         \"wires\": [             [                 \"db79ee80.1d792\",                 \"9e53f02d0a4e04fb\"             ]         ]     },     {         \"id\": \"db79ee80.1d792\",         \"type\": \"function\",         \"z\": \"de082ac2.4b8bf8\",         \"name\": \"Convert RTU to TCP\",         \"func\": \"if (msg.payload.length > 0) {\\n  var resLen = msg.payload.length - 2;\\n  var respond = [];\\n  respond[0] = flow.get('MBAP_HEADER')[0];\\n  respond[1] = flow.get('MBAP_HEADER')[1];\\n  respond[2] = flow.get('MBAP_HEADER')[2];\\n  respond[3] = flow.get('MBAP_HEADER')[3];\\n  respond[4] = flow.get('MBAP_HEADER')[4];\\n  respond[5] = resLen;\\n\\n  for (let req = 6; req &lt; resLen+6; req++) {\\n    respond[req]= msg.payload[req-6];\\n  }\\n  msg.payload = new Buffer(respond);\\n  return msg;\\n} else {\\n   return null;\\n}\\n\",         \"outputs\": 1,         \"noerr\": 0,         \"initialize\": \"\",         \"finalize\": \"\",         \"libs\": [],         \"x\": 640,         \"y\": 60,         \"wires\": [             [                 \"2622a1e893f52bed\",                 \"140a62f5366490d9\"             ]         ]     },     {         \"id\": \"55423964225fa869\",         \"type\": \"comment\",         \"z\": \"de082ac2.4b8bf8\",         \"name\": \"Convert Modbus TCP to Modbus RTU\",         \"info\": \"\",         \"x\": 170,         \"y\": 40,         \"wires\": []     },     {         \"id\": \"cbd6e86861af643d\",         \"type\": \"tcp in\",         \"z\": \"de082ac2.4b8bf8\",         \"name\": \"Modbus TCP - IN\",         \"server\": \"server\",         \"host\": \"\",         \"port\": \"5002\",         \"datamode\": \"stream\",         \"datatype\": \"buffer\",         \"newline\": \"\",         \"topic\": \"\",         \"trim\": false,         \"base64\": false,         \"tls\": \"\",         \"x\": 100,         \"y\": 100,         \"wires\": [             [                 \"22ff3060.54da6\",                 \"48471bdeae3a1d30\"             ]         ]     },     {         \"id\": \"2622a1e893f52bed\",         \"type\": \"tcp out\",         \"z\": \"de082ac2.4b8bf8\",         \"name\": \"Modbus TCP - OUT\",         \"host\": \"127.0.0.1\",         \"port\": \"502\",         \"beserver\": \"reply\",         \"base64\": false,         \"end\": false,         \"x\": 850,         \"y\": 100,         \"wires\": []     },     {         \"id\": \"9e53f02d0a4e04fb\",         \"type\": \"debug\",         \"z\": \"de082ac2.4b8bf8\",         \"name\": \"debug 17\",         \"active\": true,         \"tosidebar\": true,         \"console\": false,         \"tostatus\": false,         \"complete\": \"false\",         \"statusVal\": \"\",         \"statusType\": \"auto\",         \"x\": 640,         \"y\": 220,         \"wires\": []     },     {         \"id\": \"140a62f5366490d9\",         \"type\": \"debug\",         \"z\": \"de082ac2.4b8bf8\",         \"name\": \"debug 18\",         \"active\": true,         \"tosidebar\": true,         \"console\": false,         \"tostatus\": false,         \"complete\": \"false\",         \"statusVal\": \"\",         \"statusType\": \"auto\",         \"x\": 820,         \"y\": 200,         \"wires\": []     },     {         \"id\": \"48471bdeae3a1d30\",         \"type\": \"debug\",         \"z\": \"de082ac2.4b8bf8\",         \"name\": \"debug 19\",         \"active\": true,         \"tosidebar\": true,         \"console\": false,         \"tostatus\": false,         \"complete\": \"false\",         \"statusVal\": \"\",         \"statusType\": \"auto\",         \"x\": 260,         \"y\": 200,         \"wires\": []     },     {         \"id\": \"27dabad398437b7e\",         \"type\": \"serial-port\",         \"serialport\": \"\/dev\/ttyUSB0\",         \"serialbaud\": \"115200\",         \"databits\": \"8\",         \"parity\": \"none\",         \"stopbits\": \"1\",         \"waitfor\": \"\",         \"dtr\": \"none\",         \"rts\": \"none\",         \"cts\": \"none\",         \"dsr\": \"none\",         \"newline\": \"5\",         \"bin\": \"bin\",         \"out\": \"time\",         \"addchar\": \"\",         \"responsetimeout\": \"1000\"     } ] <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ff3\/b29\/dc8\/ff3b29dc87e6ee4ac82697262a2eb119.JPG\" width=\"676\" height=\"598\"\/><\/figure>\n<p>\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442, \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c &#171;\u0418\u043c\u043f\u043e\u0440\u0442&#187; <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7a3\/26b\/3b5\/7a326b3b53b58535d0921d1abd325492.JPG\" width=\"869\" height=\"503\"\/><\/figure>\n<p>\u00a0<\/p>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u0440\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0443\u0448\u043a\u0438 \u0432 \u0443\u0437\u043b\u0435 Modbus TCP IN, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 502, \u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 \u0431\u043e\u043b\u0435\u0435 1024, \u0434\u043b\u044f \u043d\u0438\u0445 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432 Linux. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bc8\/937\/6e3\/bc89376e39f68442650b76b60e2f7528.JPG\" width=\"869\" height=\"543\"\/><\/figure>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 RS485\/232 \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0436\u0435\u043b\u0435\u0437\u0430, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b Modbus RTU.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f49\/6f2\/c96\/f496f2c965b9b93a905c64164bc42686.JPG\" width=\"1362\" height=\"563\"\/><\/figure>\n<p>\u0416\u043c\u0435\u043c &#171;\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c&#187; \u0438 \u0441\u043f\u0443\u0441\u0442\u044f 20 \u043c\u0438\u043d\u0443\u0442 \u043d\u0430\u0448 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u0433\u043e\u0442\u043e\u0432!<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a61\/d70\/229\/a61d702292223c017963aad6f5189bd0.JPG\" width=\"1328\" height=\"599\"\/><\/figure>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0412\u0430\u0448 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 Modbus TCP OPC \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e: ip_\u0430\u0434\u0440\u0435_ \u0448\u043b\u044e\u0437\u0430:5002:id_RTU_\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fd8\/100\/f2d\/fd8100f2db31dc2cc655e9e910ba8717.JPG\" width=\"1323\" height=\"670\"\/><\/figure>\n<p>\u0412\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e &#8212; \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c! \u041f\u043e\u0441\u044b\u043b\u043a\u0438 \u043a\u0430\u043a \u0432\u0438\u0434\u0438\u043c \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u0438 \u043e\u0442\u0432\u0435\u0442\u043e\u043c 100-200\u043c\u0441, \u0447\u0442\u043e \u0440\u0430\u0432\u043d\u043e \u043f\u0438\u043d\u0433\u0443. \u0423\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u0448\u043b\u044e\u0437 AntexGate \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u043c LTE \u043c\u043e\u0434\u0435\u043c\u0435. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ee5\/e10\/97b\/ee5e1097bcbd0da6c8cb7334d8816b4f.JPG\" alt=\"\u0417\u0430\u043c\u0435\u0440 \u043f\u0438\u043d\u0433\u0430 \u0434\u043e \u0448\u043b\u044e\u0437\u0430, \u0434\u043e\u0441\u0442\u0443\u043f \u0447\u0435\u0440\u0435\u0437 VPN WireGuard.\" title=\"\u0417\u0430\u043c\u0435\u0440 \u043f\u0438\u043d\u0433\u0430 \u0434\u043e \u0448\u043b\u044e\u0437\u0430, \u0434\u043e\u0441\u0442\u0443\u043f \u0447\u0435\u0440\u0435\u0437 VPN WireGuard.\" width=\"979\" height=\"355\"\/><\/p>\n<div><figcaption>\u0417\u0430\u043c\u0435\u0440 \u043f\u0438\u043d\u0433\u0430 \u0434\u043e \u0448\u043b\u044e\u0437\u0430, \u0434\u043e\u0441\u0442\u0443\u043f \u0447\u0435\u0440\u0435\u0437 VPN WireGuard.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/46d\/b3e\/bfe\/46db3ebfe8caf85db68fc8f5eddb8eaf.JPG\" width=\"1354\" height=\"604\"\/><\/figure>\n<p>\u0411\u043e\u043d\u0443\u0441\u043e\u043c, \u0434\u043b\u044f \u0442\u0435\u0445, \u0443 \u043a\u043e\u0433\u043e \u0441\u043e\u0444\u0442 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e Modbus RTU \u043f\u043e\u0432\u0435\u0440\u0445 TCP \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bb1\/d12\/dd2\/bb1d12dd28cd3ae710cf675d882e7bba.JPG\" width=\"1303\" height=\"517\"\/><\/figure>\n<p>\u0412 Node-Red \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u043c \u043f\u043e\u0442\u043e\u043a \u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 RTU TCP \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0438 \u043d\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 Node-Red \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u043a\u043e\u0434\u0430.<\/p>\n<p>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 AntexGate \u0432 \u0441\u0432\u044f\u0437\u043a\u0435 \u0441 Node-red \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u043c \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0438 \u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u043e\u0448\u0443 \u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0437\u0430 \u0440\u0435\u043a\u043b\u0430\u043c\u0443, \u043e\u0434\u043d\u0430\u043a\u043e \u0432\u044b\u0448\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u0438 \u043b\u044e\u0431\u043e\u0439 \u041e\u0421.<\/p>\n<p>\u041f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0439\u0442\u0435\u0441\u044c \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0443 \u0432 <a href=\"https:\/\/t.me\/Antexgate\" rel=\"noopener noreferrer nofollow\">Telegram<\/a><\/p>\n<p>\u0416\u0435\u043b\u0435\u0437\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430 \u0442\u0435\u0441\u0442\u044b, \u043f\u0438\u0448\u0438\u0442\u0435 \u043d\u0430 \u043f\u043e\u0447\u0442\u0443: <a href=\"mailto:info@antexcloud.ru\" rel=\"noopener noreferrer nofollow\">info@antexcloud.ru<\/a> (\u043d\u0430 \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430 \u0434\u043b\u044f \u042e\u0420 \u043b\u0438\u0446 \u0438 \u0418\u041f)<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><\/p>\n<div class=\"tm-article-poll-container\"><!--[--><\/p>\n<div class=\"tm-article-poll tm-article-poll_variant-bordered\">\n<div class=\"tm-notice tm-notice_positive tm-article-poll__notice\"><!----><\/p>\n<div class=\"tm-notice__inner\"><!----><\/p>\n<div class=\"tm-notice__content\" data-test-id=\"notice-content\"><!--[--><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/articles\/820281\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><!--]--><\/div>\n<\/div>\n<\/div>\n<p><!--[--><\/p>\n<div class=\"tm-article-poll__header\">\u041a\u0430\u043a\u043e\u0439 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u0432\u044b \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435?<\/div>\n<div class=\"tm-article-poll__answers\"><!--[--><\/p>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">12.5% <\/span><span class=\"tm-article-poll__answer-label\">Modbus TCP \u2014 Modbus RTU<\/span><span class=\"tm-article-poll__answer-votes\">1<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 12.5%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">25% <\/span><span class=\"tm-article-poll__answer-label\">Modbus \u2014 MQTT<\/span><span class=\"tm-article-poll__answer-votes\">2<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 25%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">12.5% <\/span><span class=\"tm-article-poll__answer-label\">CAN \u2014 TCP<\/span><span class=\"tm-article-poll__answer-votes\">1<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 12.5%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">0% <\/span><span class=\"tm-article-poll__answer-label\">Modbus \u2014 Profinet<\/span><span class=\"tm-article-poll__answer-votes\">0<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 0%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">12.5% <\/span><span class=\"tm-article-poll__answer-label\">Modbus \u2014 BacNet<\/span><span class=\"tm-article-poll__answer-votes\">1<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 12.5%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">50% <\/span><span class=\"tm-article-poll__answer-label\">\u0414\u0440\u0443\u0433\u043e\u0439<\/span><span class=\"tm-article-poll__answer-votes\">4<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width: 50%\"><\/div>\n<\/div>\n<\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll__stats\"> \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 8 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.   \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0438\u0441\u044c 5 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. <\/div>\n<p><!--]--><\/div>\n<p><!--]--><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/820281\/\"> https:\/\/habr.com\/ru\/articles\/820281\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><\/figure>\n<p>\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c \u043a\u043e\u043b\u043b\u0435\u0433\u0438, \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u043c \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u043e\u0440\u0435 Modbus TCP \u0432 Modbus RTU.<\/p>\n<p>\u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0447\u0442\u043e \u0432\u044b\u0431\u043e\u0440 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0442 \u043d\u0430\u0448\u0438\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044f\u043c. <\/p>\n<p>\u041c\u044b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 <a href=\"https:\/\/antexcloud.ru\/\" rel=\"noopener noreferrer nofollow\">AntexGate<\/a> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 Modbus tcp \u2013 Modbus rtu \u2013 can \u2013 profitnet \u2013 bacnet \u2013 mqtt \u2013 http \u2013 opc UA \u2013 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0441\u0432\u044f\u0437\u043a\u0443 Modbus TCP \u2013 Modbus RTU, \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0441\u0430\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 AntexGate \u043b\u0438\u0431\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0441 linux\/windows \u043d\u0430 \u0431\u043e\u0440\u0442\u0443 \u0438 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0435\u0439 RS485.<\/p>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u2013 \u044d\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 <a href=\"https:\/\/nodered.org\/docs\/getting-started\/raspberrypi\" rel=\"noopener noreferrer nofollow\">Node-Red<\/a>, \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c:<\/p>\n<blockquote>\n<p>bash &lt;(curl -sL https:\/\/raw.githubusercontent.com\/node-red\/linux-installers\/master\/deb\/update-nodejs-and-nodered)<\/p>\n<\/blockquote>\n<p>\u0421\u0434\u0435\u043b\u0430\u0442\u044c Node-red \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c:<\/p>\n<blockquote>\n<p><code>sudo systemctl enable nodered.service<\/code><\/p>\n<\/blockquote>\n<p>\u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0436\u0435\u043b\u0435\u0437\u044f\u043a\u0443: <\/p>\n<blockquote>\n<p>sudo reboot<\/p>\n<\/blockquote>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u043c \u0432 \u0441\u0440\u0435\u0434\u0443 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u043e\u0440\u0430 Node-red \u0447\u0435\u0440\u0435\u0437 web \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 ip \u0448\u043b\u044e\u0437\u0430:1880<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0441\u044b\u043b\u043a\u0443 Modbus TCP \u0432 RTU, \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442 \u0432 RS485 \u043f\u043e\u0440\u0442, \u0436\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 \u0438 \u0442\u0443\u0442 \u0436\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 Modbus TCP.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0417\u0430\u0445\u043e\u0434\u0438\u043c \u0432 &#171;\u043c\u0435\u043d\u044e&#187; > &#171;\u0438\u043c\u043f\u043e\u0440\u0442&#187;<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u043e\u0435\u043a\u0442 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u043e\u0440\u0430 Modbus TCP &lt;> RTU<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>[     {         \"id\": \"22ff3060.54da6\",         \"type\": \"function\",         \"z\": \"de082ac2.4b8bf8\",         \"name\": \"Convert TCP to RTU\",         \"func\": \"var MBAPHeader = [5];\\nvar crc = 0xFFFF;\\n\\nMBAPHeader[0]= msg.payload[0];\\nMBAPHeader[1]= msg.payload[1];\\nMBAPHeader[2]= msg.payload[2];\\nMBAPHeader[3]= msg.payload[3];\\nMBAPHeader[4]= msg.payload[4];\\nflow.set('MBAP_HEADER', MBAPHeader);\\n\\nvar ReqLen = msg.payload[5];\\nvar MBLen = (msg.payload.length)-ReqLen;\\nvar MBReq = [MBLen];\\n\\nfor (let x=0; x &lt; MBLen;x++){\\n  MBReq[x] = msg.payload[x+ReqLen];\\n}\\n\\nfor (var req = 0; req &lt; ReqLen; req++) {\\n  crc ^= MBReq[req];          \/\/ XOR byte into least sig. byte of crc\\n  \\n  for (var i = 8; i !== 0; i--) {    \/\/ Loop over each bit\\n    if ((crc &amp; 0x0001) !== 0) {      \/\/ If the LSB is set\\n        crc >>= 1;                   \/\/ Shift right and XOR 0xA001\\n        crc ^= 0xA001;\\n    } else {                          \/\/ Else LSB is not set\\n      crc >>= 1;                     \/\/ Just shift right\\n    }\\n  }\\n}\\n\\nvar MyCRC = crc.toString(16);\\nMBReq[MBLen+1] = parseInt(MyCRC.substring(0,2),16);\\nMBReq[MBLen] = parseInt(MyCRC.substring(2,4),16);\\n\\nvar buf = new Buffer(MBReq);\\nmsg.payload = buf;\\nreturn msg;\",         \"outputs\": 1,         \"noerr\": 0,         \"initialize\": \"\",         \"finalize\": \"\",         \"libs\": [],         \"x\": 300,         \"y\": 100,         \"wires\": [             [                 \"7e62bbbc.bd8ea4\"             ]         ],         \"outputLabels\": [             \"XO\"         ]     },     {         \"id\": \"7e62bbbc.bd8ea4\",         \"type\": \"serial request\",         \"z\": \"de082ac2.4b8bf8\",         \"name\": \"\",         \"serial\": \"27dabad398437b7e\",         \"x\": 490,         \"y\": 100,         \"wires\": [             [                 \"db79ee80.1d792\",                 \"9e53f02d0a4e04fb\"             ]         ]     },     {         \"id\": \"db79ee80.1d792\",         \"type\": \"function\",         \"z\": \"de082ac2.4b8bf8\",         \"name\": \"Convert RTU to TCP\",         \"func\": \"if (msg.payload.length > 0) {\\n  var resLen = msg.payload.length - 2;\\n  var respond = [];\\n  respond[0] = flow.get('MBAP_HEADER')[0];\\n  respond[1] = flow.get('MBAP_HEADER')[1];\\n  respond[2] = flow.get('MBAP_HEADER')[2];\\n  respond[3] = flow.get('MBAP_HEADER')[3];\\n  respond[4] = flow.get('MBAP_HEADER')[4];\\n  respond[5] = resLen;\\n\\n  for (let req = 6; req &lt; resLen+6; req++) {\\n    respond[req]= msg.payload[req-6];\\n  }\\n  msg.payload = new Buffer(respond);\\n  return msg;\\n} else {\\n   return null;\\n}\\n\",         \"outputs\": 1,         \"noerr\": 0,         \"initialize\": \"\",         \"finalize\": \"\",         \"libs\": [],         \"x\": 640,         \"y\": 60,         \"wires\": [             [                 \"2622a1e893f52bed\",                 \"140a62f5366490d9\"             ]         ]     },     {         \"id\": \"55423964225fa869\",         \"type\": \"comment\",         \"z\": \"de082ac2.4b8bf8\",         \"name\": \"Convert Modbus TCP to Modbus RTU\",         \"info\": \"\",         \"x\": 170,         \"y\": 40,         \"wires\": []     },     {         \"id\": \"cbd6e86861af643d\",         \"type\": \"tcp in\",         \"z\": \"de082ac2.4b8bf8\",         \"name\": \"Modbus TCP - IN\",         \"server\": \"server\",         \"host\": \"\",         \"port\": \"5002\",         \"datamode\": \"stream\",         \"datatype\": \"buffer\",         \"newline\": \"\",         \"topic\": \"\",         \"trim\": false,         \"base64\": false,         \"tls\": \"\",         \"x\": 100,         \"y\": 100,         \"wires\": [             [                 \"22ff3060.54da6\",                 \"48471bdeae3a1d30\"             ]         ]     },     {         \"id\": \"2622a1e893f52bed\",         \"type\": \"tcp out\",         \"z\": \"de082ac2.4b8bf8\",         \"name\": \"Modbus TCP - OUT\",         \"host\": \"127.0.0.1\",         \"port\": \"502\",         \"beserver\": \"reply\",         \"base64\": false,         \"end\": false,         \"x\": 850,         \"y\": 100,         \"wires\": []     },     {         \"id\": \"9e53f02d0a4e04fb\",         \"type\": \"debug\",         \"z\": \"de082ac2.4b8bf8\",         \"name\": \"debug 17\",         \"active\": true,         \"tosidebar\": true,         \"console\": false,         \"tostatus\": false,         \"complete\": \"false\",         \"statusVal\": \"\",         \"statusType\": \"auto\",         \"x\": 640,         \"y\": 220,         \"wires\": []     },     {         \"id\": \"140a62f5366490d9\",         \"type\": \"debug\",         \"z\": \"de082ac2.4b8bf8\",         \"name\": \"debug 18\",         \"active\": true,         \"tosidebar\": true,         \"console\": false,         \"tostatus\": false,         \"complete\": \"false\",         \"statusVal\": \"\",         \"statusType\": \"auto\",         \"x\": 820,         \"y\": 200,         \"wires\": []     },     {         \"id\": \"48471bdeae3a1d30\",         \"type\": \"debug\",         \"z\": \"de082ac2.4b8bf8\",         \"name\": \"debug 19\",         \"active\": true,         \"tosidebar\": true,         \"console\": false,         \"tostatus\": false,         \"complete\": \"false\",         \"statusVal\": \"\",         \"statusType\": \"auto\",         \"x\": 260,         \"y\": 200,         \"wires\": []     },     {         \"id\": \"27dabad398437b7e\",         \"type\": \"serial-port\",         \"serialport\": \"\/dev\/ttyUSB0\",         \"serialbaud\": \"115200\",         \"databits\": \"8\",         \"parity\": \"none\",         \"stopbits\": \"1\",         \"waitfor\": \"\",         \"dtr\": \"none\",         \"rts\": \"none\",         \"cts\": \"none\",         \"dsr\": \"none\",         \"newline\": \"5\",         \"bin\": \"bin\",         \"out\": \"time\",         \"addchar\": \"\",         \"responsetimeout\": \"1000\"     } ] <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<figure class=\"full-width\"><\/figure>\n<p>\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442, \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c &#171;\u0418\u043c\u043f\u043e\u0440\u0442&#187; <\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u00a0<\/p>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u0440\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0443\u0448\u043a\u0438 \u0432 \u0443\u0437\u043b\u0435 Modbus TCP IN, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 502, \u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 \u0431\u043e\u043b\u0435\u0435 1024, \u0434\u043b\u044f \u043d\u0438\u0445 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432 Linux. <\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 RS485\/232 \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0436\u0435\u043b\u0435\u0437\u0430, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b Modbus RTU.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0416\u043c\u0435\u043c &#171;\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c&#187; \u0438 \u0441\u043f\u0443\u0441\u0442\u044f 20 \u043c\u0438\u043d\u0443\u0442 \u043d\u0430\u0448 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u0433\u043e\u0442\u043e\u0432!<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0412\u0430\u0448 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 Modbus TCP OPC \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e: ip_\u0430\u0434\u0440\u0435_ \u0448\u043b\u044e\u0437\u0430:5002:id_RTU_\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0412\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e &#8212; \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c! \u041f\u043e\u0441\u044b\u043b\u043a\u0438 \u043a\u0430\u043a \u0432\u0438\u0434\u0438\u043c \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u0438 \u043e\u0442\u0432\u0435\u0442\u043e\u043c 100-200\u043c\u0441, \u0447\u0442\u043e \u0440\u0430\u0432\u043d\u043e \u043f\u0438\u043d\u0433\u0443. \u0423\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u0448\u043b\u044e\u0437 AntexGate \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u043c LTE \u043c\u043e\u0434\u0435\u043c\u0435. <\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0417\u0430\u043c\u0435\u0440 \u043f\u0438\u043d\u0433\u0430 \u0434\u043e \u0448\u043b\u044e\u0437\u0430, \u0434\u043e\u0441\u0442\u0443\u043f \u0447\u0435\u0440\u0435\u0437 VPN WireGuard.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><\/figure>\n<p>\u0411\u043e\u043d\u0443\u0441\u043e\u043c, \u0434\u043b\u044f \u0442\u0435\u0445, \u0443 \u043a\u043e\u0433\u043e \u0441\u043e\u0444\u0442 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e Modbus RTU \u043f\u043e\u0432\u0435\u0440\u0445 TCP \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0412 Node-Red \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u043c \u043f\u043e\u0442\u043e\u043a \u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 RTU TCP \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0438 \u043d\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 Node-Red \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u043a\u043e\u0434\u0430.<\/p>\n<p>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 AntexGate \u0432 \u0441\u0432\u044f\u0437\u043a\u0435 \u0441 Node-red \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u043c \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0438 \u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u043e\u0448\u0443 \u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0437\u0430 \u0440\u0435\u043a\u043b\u0430\u043c\u0443, \u043e\u0434\u043d\u0430\u043a\u043e \u0432\u044b\u0448\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u0438 \u043b\u044e\u0431\u043e\u0439 \u041e\u0421.<\/p>\n<p>\u041f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0439\u0442\u0435\u0441\u044c \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0443 \u0432 <a href=\"https:\/\/t.me\/Antexgate\" rel=\"noopener noreferrer nofollow\">Telegram<\/a><\/p>\n<p>\u0416\u0435\u043b\u0435\u0437\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430 \u0442\u0435\u0441\u0442\u044b, \u043f\u0438\u0448\u0438\u0442\u0435 \u043d\u0430 \u043f\u043e\u0447\u0442\u0443: <a href=\"mailto:info@antexcloud.ru\" rel=\"noopener noreferrer nofollow\">info@antexcloud.ru<\/a> (\u043d\u0430 \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430 \u0434\u043b\u044f \u042e\u0420 \u043b\u0438\u0446 \u0438 \u0418\u041f)<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><\/p>\n<div class=\"tm-article-poll-container\"><!--[--><\/p>\n<div class=\"tm-article-poll tm-article-poll_variant-bordered\">\n<div class=\"tm-notice tm-notice_positive tm-article-poll__notice\"><!----><\/p>\n<div class=\"tm-notice__inner\"><!----><\/p>\n<div class=\"tm-notice__content\" data-test-id=\"notice-content\"><!--[--><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/articles\/820281\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><!--]--><\/div>\n<\/div>\n<\/div>\n<p><!--[--><\/p>\n<div class=\"tm-article-poll__header\">\u041a\u0430\u043a\u043e\u0439 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u0432\u044b \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435?<\/div>\n<div class=\"tm-article-poll__answers\"><!--[--><\/p>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">12.5% <\/span><span class=\"tm-article-poll__answer-label\">Modbus TCP \u2014 Modbus RTU<\/span><span class=\"tm-article-poll__answer-votes\">1<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 12.5%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">25% <\/span><span class=\"tm-article-poll__answer-label\">Modbus \u2014 MQTT<\/span><span class=\"tm-article-poll__answer-votes\">2<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 25%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">12.5% <\/span><span class=\"tm-article-poll__answer-label\">CAN \u2014 TCP<\/span><span class=\"tm-article-poll__answer-votes\">1<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 12.5%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">0% <\/span><span class=\"tm-article-poll__answer-label\">Modbus \u2014 Profinet<\/span><span class=\"tm-article-poll__answer-votes\">0<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 0%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">12.5% <\/span><span class=\"tm-article-poll__answer-label\">Modbus \u2014 BacNet<\/span><span class=\"tm-article-poll__answer-votes\">1<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 12.5%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">50% <\/span><span class=\"tm-article-poll__answer-label\">\u0414\u0440\u0443\u0433\u043e\u0439<\/span><span class=\"tm-article-poll__answer-votes\">4<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width: 50%\"><\/div>\n<\/div>\n<\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll__stats\"> \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 8 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.   \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0438\u0441\u044c 5 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. <\/div>\n<p><!--]--><\/div>\n<p><!--]--><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/820281\/\"> https:\/\/habr.com\/ru\/articles\/820281\/<\/a><br \/><\/br><\/br><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-378720","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/378720","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=378720"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/378720\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=378720"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=378720"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=378720"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}