{"id":448504,"date":"2025-02-17T03:01:06","date_gmt":"2025-02-17T03:01:06","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=448504"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=448504","title":{"rendered":"<span>Chint PD7777 8S + RS-485<\/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<p>\u0414\u0435\u043d\u044c \u0434\u043e\u0431\u0440\u044b\u0439, \u0445\u043e\u0447\u0443 \u043f\u043e\u0432\u0435\u0434\u0430\u0442\u044c \u0432\u0430\u043c \u043a\u0430\u043a \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u043e\u043f\u0440\u043e\u0441 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 ChintPD7777 8s \u043f\u043e rs-485 \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u043b \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0441 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0435\u0451 \u0436\u0435 \u043d\u0430 \u0412\u0435\u0431\u043c\u043e\u0440\u0434\u0443.<\/p>\n<p>\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435: \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0435\u0441\u0442\u044c \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0434\u043b\u044f \u043e\u043f\u0440\u043e\u0441\u0430. \u041d\u041e \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043a\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0443 \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u043f\u043e\u0434\u043d\u044f\u0442\u0438\u044f Web \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439. <\/p>\n<ol>\n<li>\n<p><strong>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f<\/strong><\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0435 \u0435\u0441\u0442\u044c \u043a\u043b\u0435\u043c\u044b 58 \u0438 59 \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0446\u0435\u043f\u043b\u044f\u0435\u043c\u0441\u044f. \u0414\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c MOXA 5130 \u0438\u043b\u0438 \u0430\u043d\u0430\u043b\u043e\u0433 \u043d\u0435 \u0441\u0443\u0442\u044c \u0432\u0430\u0436\u043d\u043e. \u0412\u0430\u0436\u043d\u043e \u0447\u0442\u043e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e RTU OVER TCP.<\/p>\n<p>\u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c menu -&gt; \u043f\u0440\u043e\u0441\u0438\u0442 \u043f\u0430\u0440\u043e\u043b\u044c (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 701) -&gt; conn<\/p>\n<ol>\n<li>\n<p>prot &#8212; \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043c\u043d\u0435 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434 \u044d\u0442\u0438\u043c \u043c\u0435\u043d\u044e, \u044f \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e n.2<\/p>\n<\/li>\n<li>\n<p>bAud &#8212; \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, \u0442\u0443\u0442 \u043e\u043f\u044f\u0442\u044c \u0442\u0430\u043a\u0438 \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043d\u0435 \u0441\u043b\u043e\u0432\u0430, \u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0435\u043d\u044e \u043f\u0440\u043e\u0441\u0442\u043e \u0446\u0438\u0444\u0440\u044b \u043e\u0442 1 \u0434\u043e 5,  \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043f\u0440\u043e\u0431 \u044f \u0432\u044b\u0431\u0440\u0430\u043b 3, \u0447\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 9600<\/p>\n<\/li>\n<li>\n<p>addr &#8212; \u0430\u0434\u0440\u0435\u0441 slave \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 1<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<li>\n<p><strong>\u041f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0441\u0447\u0438\u0442\u0430\u0442\u044c <\/strong><\/p>\n<p>\u0420\u0430\u0437\u043d\u044b\u0435 &#171;\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a\u0438&#187; rs485 to ethernet , \u0438\u043c\u0435\u044f \u0440\u0430\u0437\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0447\u0442\u043e \u0442\u043e \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043f\u043e rs 485 \u0438\u043b\u0438 \u043d\u0435\u0442.  \u0422\u0430\u043a \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0432 Web-\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0435 &#171;\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a\u0430&#187; \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0440\u0430\u043d\u0435\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0435. \u041d\u0430 \u043c\u043e\u0435\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f DieWU \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a: <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ff5\/176\/8d3\/ff51768d335512b69daed045a485bb52.png\" width=\"1115\" height=\"460\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ff5\/176\/8d3\/ff51768d335512b69daed045a485bb52.png\"\/><\/figure>\n<p>  \u041a\u0430\u0447\u0430\u0435\u043c <a href=\"https:\/\/www.modbustools.com\/modbus_poll.html\" rel=\"noopener noreferrer nofollow\">ModBusPOOL<\/a> \u0438 \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 &#171;\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a\u0443&#187;.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fc4\/b45\/a45\/fc4b45a45ebcc24ff3846bcd8b1f9d87.png\" width=\"423\" height=\"396\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fc4\/b45\/a45\/fc4b45a45ebcc24ff3846bcd8b1f9d87.png\"\/><\/figure>\n<p>\u041f\u0440\u0438 \u0443\u0441\u043f\u0435\u0445\u0435 \u043e\u043a\u043e\u0448\u043a\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/329\/73a\/6be\/32973a6be81c3bfcd6a6677e79b7f750.png\" width=\"675\" height=\"530\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/329\/73a\/6be\/32973a6be81c3bfcd6a6677e79b7f750.png\"\/><\/figure>\n<\/li>\n<\/ol>\n<p>\u041d\u0430\u0436\u0430\u0432 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c, \u044f \u0434\u0443\u043c\u0430\u044e, \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441 2000H. \u0412 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043e\u043d\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 16-\u0440\u0438\u0447\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0431\u0435\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0431\u0443\u043a\u0432\u044b &#171;H&#187;. \u0422\u043e \u0435\u0441\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u0430 \u043a\u0430\u043a  2044H, \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0432 10-\u0447\u043d\u0443\u044e \u043b\u044e\u0431\u044b\u043c \u043e\u043d\u043b\u0430\u0439\u043d-\u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u043c  &#8212; \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 2060. &#171;H&#187; \u0437\u043d\u0430\u0447\u0438\u0442 \u0447\u0442\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0447\u0435\u0440\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u044e 04 Read Input Registers (3x), \u0447\u0442\u043e \u043d\u0438\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u043d\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Read Holding Registers.<\/p>\n<p>3.<strong> \u041f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433<\/strong><\/p>\n<p> \u041f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430 python + mysql. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 &#171;pymodbus&#187;.<\/p>\n<pre><code class=\"python\">import asyncio from pymodbus.client import ModbusTcpClient from pymodbus import (     FramerType,     ModbusException,     pymodbus_apply_logging_config, ) import struct import mysql.connector  # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f host = '192.168.8.254'  # IP-\u0430\u0434\u0440\u0435\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 port = 23                # \u041f\u043e\u0440\u0442 \u0434\u043b\u044f RTU over TCP (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)  db_host = 'localhost' db_user = 'bduser' db_password = 'bdpassword' db_name = 'bdname'  # \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430   async def read_and_store_registers():     while True:         client = ModbusTcpClient(host, port=port, framer=FramerType.RTU,retries=100)         # \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443         if client.connect():                           # \u0421\u043f\u0438\u0441\u043e\u043a \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c             register_addresses = [8192]              for address in register_addresses:                 # \u0427\u0442\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, count \u044d\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0438\u0442\u043e\u0432, slave - \u0430\u0434\u0440\u0435\u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430                 response = client.read_holding_registers(address=address, count=70, slave=1)                  if response.isError():                     print(f\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 {address}.\")                 else:                         value8192 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[0], response.registers[1]))[0]                         value8194 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[2], response.registers[3]))[0]                         value8196 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[4], response.registers[5]))[0]                         value8198 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[6], response.registers[7]))[0]                         value8200 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[8], response.registers[9]))[0]                         value8202 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[10], response.registers[11]))[0]                         value8204 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[12], response.registers[12]))[0]                         value8206 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[14], response.registers[13]))[0]                         value8208 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[16], response.registers[15]))[0]                         value8212 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[18], response.registers[17]))[0]                         value8214 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[22], response.registers[21]))[0]                         value8216 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[24], response.registers[23]))[0]                         value8220 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[28], response.registers[27]))[0]                         value8222 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[30], response.registers[29]))[0]                         value8224 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[32], response.registers[31]))[0]                         value8248 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[56], response.registers[55]))[0]                         value8250 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[58], response.registers[57]))[0]                         value8252 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[60], response.registers[59]))[0]                         value8254 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[62], response.registers[61]))[0]                         value8256 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[64], response.registers[63]))[0]                         value8258 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[66], response.registers[65]))[0]                         value8260 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[68], response.registers[67]))[0]                      # \u0412\u044b\u0432\u043e\u0434 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430                         if value8192 is not None:                             conn = mysql.connector.connect(                                 host=db_host,                                 user=db_user,                                 password=db_password,                                 database=db_name                                 )                             cursor = conn.cursor()                             table_name = f\"{address}\"  # \u0417\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u043d\u0430 \u0438\u043c\u044f \u0432\u0430\u0448\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b                             column_name = \"val\"  # \u0417\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u043d\u0430 \u0438\u043c\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430                         data_tuple = (value8260)                         # \u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443                         insert_query = f\"INSERT INTO `8192` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8192}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8194` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8194}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8196` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8196}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8198` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8198}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8200` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8200}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8202` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8202}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8204` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8204}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8206` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8206}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8208` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8208}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8212` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8212}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8214` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8214}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8216` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8216}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8220` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8220}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8222` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8222}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8224` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8224}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8248` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8248}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8250` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8250}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8252` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8252}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8254` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8254}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8256` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8256}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8258` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8258}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8260` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8260}, NULL);\"                         cursor.execute(insert_query, data_tuple)                                                  conn.commit()                         cursor.close()              # \u0417\u0430\u043a\u0440\u044b\u0442\u0438\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f             client.close()         else:             print(\"\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c.\")          # \u0416\u0434\u0435\u043c 0.5 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043f\u0435\u0440\u0435\u0434 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0435\u0439         await asyncio.sleep(0.5)  # \u0417\u0430\u043f\u0443\u0441\u043a \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f asyncio.run(read_and_store_registers()) <\/code><\/pre>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u0441\u043b\u043e\u0436\u043d\u043e\u0438 \u00ab\u0438\u043d\u0434\u0443\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u00bb, \u0430\u00a0\u043d\u0435\u00a0\u0441\u0442\u0430\u043b \u0446\u0438\u043a\u043b\u043e\u043c \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b? \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0442\u0430\u043a \u0438 \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u0438 \u0441\u0434\u0435\u043b\u0430\u043b \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0437\u00a0\u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043d\u0443\u0436\u043d\u044b\u0445 \u043c\u043d\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438. \u041d\u043e\u00a0\u043f\u043e\u0441\u043b\u0435 \u0441\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430 \u0441\u00a0\u043f\u0435\u0440\u0438\u043e\u0434\u043e\u043c \u043e\u043f\u0440\u043e\u0441\u0430 0,5\u00a0\u0441\u0435\u043a( \u0447\u0442\u043e\u00a0\u0431\u044b \u0432\u0438\u0434\u0435\u0442\u044c \u0440\u0435\u0437\u043a\u0438\u0435 \u0441\u043a\u0430\u0447\u043a\u0438 \u043d\u0430\u00a0\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435 ), \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u043e\u00a0rs-485\u00a0\u043d\u0435\u00a0\u0443\u0441\u043f\u0435\u0432\u0430\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u043f\u0430\u0434\u0430\u043b\u0438 \u0432\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439. \u0412\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0432\u0435\u043b \u044f \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0435\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u0422\u0430\u043a \u043a\u0430\u043a\u00a0\u043c\u044b \u0431\u0435\u0440\u0435\u043c 70\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0432\u00a0\u043c\u0430\u0441\u0441\u0438\u0432 \u0438 \u0442\u043e\u0447\u0435\u0447\u043d\u043e \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u043c \u043f\u043e 2\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0441\u00a0\u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u043d\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<p>4. <strong>\u0412\u044b\u0432\u043e\u0434 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u043d\u0430 \u00ab\u0412\u0435\u0431\u043c\u043e\u0440\u0434\u0443\u00bb<\/strong><\/p>\n<p> \u0414\u0430\u043b\u044c\u0448\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0441 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 \u0437\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<br \/><strong>index.php<\/strong><\/p>\n<pre><code class=\"php\">&lt;!DOCTYPE html&gt; &lt;html lang=\"en\"&gt; &lt;head&gt;     &lt;!-- \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0442\u0438\u043f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0438 \u044f\u0437\u044b\u043a --&gt;          &lt;meta charset=\"UTF-8\"&gt;     &lt;!-- \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432 UTF-8 --&gt;      &lt;title&gt;Form Post Request&lt;\/title&gt;     &lt;!-- \u0417\u0430\u0434\u0430\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0434\u043b\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b --&gt;      &lt;style&gt;         body {             font-family: Arial, sans-serif;             \/* \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0448\u0440\u0438\u0444\u0442 \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 *\/              background-color: #f4f4f9;             \/* \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u0446\u0432\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b *\/              margin: 0;             padding: 20px;             \/* \u0423\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u044b \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 *\/         }          h1 {             text-align: center;             color: #333;             \/* \u0426\u0435\u043d\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0438 \u0437\u0430\u0434\u0430\u0435\u043c \u0446\u0432\u0435\u0442 *\/          }          form {             max-width: 600px;             margin: 0 auto;             background-color: #fff;             padding: 20px;             border-radius: 8px;             box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);             \/* \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0444\u043e\u0440\u043c\u0443 \u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0448\u0438\u0440\u0438\u043d\u043e\u0439 \u0438 \u0446\u0435\u043d\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0435\u0435 *\/          }          label {             display: block;             margin-bottom: 5px;             color: #666;             \/* \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c \u043c\u0435\u0442\u043a\u0443 \u043a\u0430\u043a \u0431\u043b\u043e\u043a, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0442\u0441\u0442\u0443\u043f\u044b \u0438 \u0437\u0430\u0434\u0430\u0435\u043c \u0446\u0432\u0435\u0442 *\/          }          input[type=\"datetime-local\"], select {             width: 100%;             padding: 8px;             margin-bottom: 20px;             border: 1px solid #ccc;             border-radius: 4px;             font-size: 16px;             \/* \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u0442\u0438\u043b\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0435\u0439 \u0432\u0432\u043e\u0434\u0430 \u0438 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0432 *\/          }          button {             background-color: #28a745;             color: white;             padding: 10px 20px;             border: none;             border-radius: 4px;             cursor: pointer;             font-size: 16px;             \/* \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u0442\u0438\u043b\u0438 \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043e\u043a *\/          }          button:hover {             background-color: #218838;             \/* \u0418\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0446\u0432\u0435\u0442 \u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 *\/          }     &lt;\/style&gt; &lt;\/head&gt;  &lt;body&gt;     &lt;h1&gt;\u0422\u041f 5 \u042d\u041d\u0415\u0420\u0413\u041e\u0426\u0415\u041d\u0422\u0420&lt;\/h1&gt;     &lt;!-- \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b --&gt;      &lt;form action=\"\/index_f.php\" method=\"get\"&gt;         &lt;!-- \u0424\u043e\u0440\u043c\u0430 \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c GET, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 URL --&gt;                  &lt;label for=\"option\"&gt;Option:&lt;\/label&gt;         &lt;select name=\"option\" id=\"option\"&gt;         &lt;option value='8192'&gt;\u041c\u0435\u0436\u0444\u0430\u0437\u043d\u043e\u0435 \u043d\u0430\u0440\u044f\u0436\u0435\u043d\u0438\u0435 AB&lt;\/option&gt; &lt;option value='8194'&gt;\u041c\u0435\u0436\u0444\u0430\u0437\u043d\u043e\u0435 \u043d\u0430\u0440\u044f\u0436\u0435\u043d\u0438\u0435 BC&lt;\/option&gt; &lt;option value='8196'&gt;\u041c\u0435\u0436\u0444\u0430\u0437\u043d\u043e\u0435 \u043d\u0430\u0440\u044f\u0436\u0435\u043d\u0438\u0435 CA&lt;\/option&gt; &lt;option value='8198'&gt;\u041d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0424\u0410\u0417\u0410 \u0410&lt;\/option&gt; &lt;option value='8200'&gt;\u041d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0424\u0410\u0417\u0410 B&lt;\/option&gt; &lt;option value='8202'&gt;\u041d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0424\u0410\u0417\u0410 C&lt;\/option&gt; &lt;option value='8204'&gt;\u0422\u043e\u043a \u0444\u0430\u0437\u0430 \u0410&lt;\/option&gt; &lt;option value='8206'&gt;\u0422\u043e\u043a \u0444\u0430\u0437\u0430 B&lt;\/option&gt; &lt;option value='8208'&gt;\u0422\u043e\u043a \u0444\u0430\u0437\u0430 C&lt;\/option&gt; &lt;option value='8212'&gt;\u0410\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u0444\u0430\u0437\u044b \u0410&lt;\/option&gt; &lt;option value='8214'&gt;\u0410\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u0444\u0430\u0437\u044b B&lt;\/option&gt; &lt;option value='8216'&gt;\u0410\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u0444\u0430\u0437\u044b C&lt;\/option&gt; &lt;option value='8220'&gt;\u0420\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u0444\u0430\u0437\u044b \u0410&lt;\/option&gt; &lt;option value='8222'&gt;\u0420\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u0444\u0430\u0437\u044b \u0412&lt;\/option&gt; &lt;option value='8224'&gt;\u0420\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u0444\u0430\u0437\u044b \u0421&lt;\/option&gt; &lt;option value='8248'&gt;\u041f\u0440\u043e\u0446\u0435\u043d\u0442 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u043a\u0438 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u0444\u0430\u0437\u044b A&lt;\/option&gt; &lt;option value='8250'&gt;\u041f\u0440\u043e\u0446\u0435\u043d\u0442 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u043a\u0438 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u0444\u0430\u0437\u044b B&lt;\/option&gt; &lt;option value='8252'&gt;\u041f\u0440\u043e\u0446\u0435\u043d\u0442 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u043a\u0438 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u0444\u0430\u0437\u044b \u0421&lt;\/option&gt; &lt;option value='8254'&gt;\u041f\u0440\u043e\u0446\u0435\u043d\u0442 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u043a\u0438 \u0442\u043e\u043a\u0430 \u0444\u0430\u0437\u044b \u0410&lt;\/option&gt; &lt;option value='8256'&gt;\u041f\u0440\u043e\u0446\u0435\u043d\u0442 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u043a\u0438 \u0442\u043e\u043a\u0430 \u0444\u0430\u0437\u044b \u0412&lt;\/option&gt; &lt;option value='8258'&gt;\u041f\u0440\u043e\u0446\u0435\u043d\u0442 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u043a\u0438 \u0442\u043e\u043a\u0430 \u0444\u0430\u0437\u044b C&lt;\/option&gt; &lt;option value='8260'&gt;\u0427\u0430\u0441\u0442\u043e\u0442\u0430&lt;\/option&gt; &lt;option value='8262'&gt;\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043f\u0435\u0440\u0435\u043a\u043e\u0441\u0430&lt;\/option&gt;     &lt;\/select&gt;&lt;br&gt;&lt;br&gt;          &lt;label for=\"from\"&gt;\u041e\u0442 (\u0414\u0430\u0442\u0430 \u0438 \u0412\u0440\u0435\u043c\u044f):&lt;\/label&gt;         &lt;input type=\"datetime-local\" name=\"from\" id=\"from\"&gt;&lt;br&gt;&lt;br&gt;         &lt;!-- \u041f\u043e\u043b\u0435 \u0432\u0432\u043e\u0434\u0430 \u0434\u043b\u044f \u0434\u0430\u0442\u044b \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u0447\u0430\u043b\u0430 --&gt;          &lt;label for=\"to\"&gt;\u0414\u043e (\u0414\u0430\u0442\u0430 \u0438 \u0412\u0440\u0435\u043c\u044f):&lt;\/label&gt;         &lt;input type=\"datetime-local\" name=\"to\" id=\"to\"&gt;&lt;br&gt;&lt;br&gt;         &lt;!-- \u041f\u043e\u043b\u0435 \u0432\u0432\u043e\u0434\u0430 \u0434\u043b\u044f \u0434\u0430\u0442\u044b \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f --&gt;          &lt;button type=\"submit\"&gt;\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0417\u0430\u043f\u0440\u043e\u0441&lt;\/button&gt;     &lt;\/form&gt; &lt;\/body&gt;  &lt;\/html&gt;<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043a\u0440\u043e\u043c\u0435 \u043e\u0434\u043d\u043e\u0433\u043e &#8212; \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u043b\u0441\u044f \u043f\u0435\u0440\u0435\u043a\u043e\u0441 \u0444\u0430\u0437 \u0438 \u043e\u043f\u0446\u0438\u044f 8262 \u0435\u0441\u043b\u0438 \u0435\u0451 \u043d\u0435\u0442 \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u042d\u0442\u043e \u0443\u0436\u0435 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0430\u044f \u0437\u0430\u0434\u0443\u043c\u043a\u0430 \u043f\u043e \u0432\u044b\u0432\u043e\u0434\u0443 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 3-\u0451\u0445 \u0444\u0430\u0437 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0432 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 <strong>index_f.php<\/strong><\/p>\n<pre><code class=\"php\">&lt;!DOCTYPE html&gt; &lt;html lang=\"en\"&gt; &lt;head&gt;     &lt;!-- \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0442\u0438\u043f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0438 \u044f\u0437\u044b\u043a --&gt;          &lt;meta charset=\"UTF-8\"&gt;     &lt;!-- \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432 UTF-8 --&gt;      &lt;title&gt;MySQL Data with Chart.js&lt;\/title&gt;     &lt;!-- \u0417\u0430\u0434\u0430\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0434\u043b\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b --&gt;      &lt;script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js\"&gt;&lt;\/script&gt;     &lt;!-- \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 Chart.js \u0438\u0437 CDN --&gt;          &lt;script type=\"text\/javascript\" charset=\"utf-8\"&gt;         document.addEventListener('DOMContentLoaded', function() { \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b             var option = new URLSearchParams(window.location.search).get(\"option\"); \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 'option' \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430             var from = new URLSearchParams(window.location.search).get(\"from\"); \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 'from' \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430             var to = new URLSearchParams(window.location.search).get(\"to\"); \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 'to' \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430              if (option === null || from === null || to === null) { \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u044b                 console.log('Missing parameters');                 return; \/\/ \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430             }              var kef = (option === '8262') ? 3 : 10; \/\/ \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 'option'                          fetch('fetch_data.php', { \/\/ \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445                 method: 'POST',                 headers: {                     'Content-Type': 'application\/x-www-form-urlencoded' \/\/ \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0442\u0438\u043f \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430                 },                 body: `option=${encodeURIComponent(option)}&amp;from=${encodeURIComponent(from)}&amp;to=${encodeURIComponent(to)}` \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u0435\u043b\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438             })                 .then(response =&gt; response.json()) \/\/ \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u043e\u0442\u0432\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 JSON                 .then(data =&gt; { \/\/ \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435                     console.log(data); \/\/ \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438                      var ctx = document.getElementById('myChart').getContext('2d'); \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 canvas \u0441 ID 'myChart'                     var myChart; \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 Chart.js                      if (option === '8262') { \/\/ \u0415\u0441\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 'option' \u0440\u0430\u0432\u0435\u043d '8262'                         const valuesData1 = data.data1.map(item =&gt; item.val \/ 3); \/\/ \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0444\u0430\u0437\u044b A                         const valuesData2 = data.data2.map(item =&gt; item.val \/ 3); \/\/ \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0444\u0430\u0437\u044b B                         const valuesData3 = data.data3.map(item =&gt; item.val \/ 3); \/\/ \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0444\u0430\u0437\u044b C                         const generatedLabels = data.data1.map(item =&gt; item.time); \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043c\u0435\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438                          myChart = new Chart(ctx, { \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 Chart.js                             type: 'line',                             data: {                                 labels: generatedLabels,                                 datasets: [                                     {                                         label: '\u0424\u0430\u0437\u0430 A',                                         data: valuesData1,                                         backgroundColor: 'rgba(75, 192, 192, 0.2)',                                         borderColor: 'rgba(75, 192, 192, 1)',                                         borderWidth: 1, pointStyle: false, tension: 0.1                                     },                                     {                                         label: '\u0424\u0430\u0437\u0430 B',                                         data: valuesData2,                                         backgroundColor: 'rgba(54, 162, 235, 0.2)',                                         borderColor: 'rgba(54, 162, 235, 1)',                                         borderWidth: 1, pointStyle: false, tension: 0.1                                     },                                     {                                         label: '\u0424\u0430\u0437\u0430 C',                                         data: valuesData3,                                         backgroundColor: 'rgba(255, 99, 132, 0.2)',                                         borderColor: 'rgba(255, 99, 132, 1)',                                         borderWidth: 1, pointStyle: false, tension: 0.1                                     }                                 ]                             },                             options: {                                 scales: {                                     y: {                                         beginAtZero: true                                     }                                 }                             }                         });                     } else { \/\/ \u0415\u0441\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 'option' \u043d\u0435 \u0440\u0430\u0432\u0435\u043d '8262'                         var labels = data.map(item =&gt; item.time); \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043c\u0435\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438                         var values = data.map(item =&gt; item.val); \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445                         var values10 = values.map(number =&gt; number \/ kef); \/\/ \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430                          myChart = new Chart(ctx, {                             type: 'line',                             data: {                                 labels: labels,                                 datasets: [{                                     pointStyle: false,                                     data: values10,                                     backgroundColor: 'rgba(255, 99, 132, 0.2)',                                     borderColor: 'rgba(255, 99, 132, 1)',                                     borderWidth: 1                                 }]                             },                             options: {                                 scales: {                                     y: {                                         beginAtZero: true                                     }                                 }                             }                         });                     }                      \/\/ \u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b                     document.getElementById('title').textContent = `\u0414\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 ${option}`;                 })                 .catch(error =&gt; { \/\/ \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430                     console.error('Error:', error);                 });         });     &lt;\/script&gt; &lt;\/head&gt; &lt;body&gt;     &lt;h1 id=\"title\"&gt;\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b&lt;\/h1&gt; &lt;!-- \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 'option' --&gt;     &lt;canvas id=\"myChart\"&gt;&lt;\/canvas&gt; &lt;!-- \u042d\u043b\u0435\u043c\u0435\u043d\u0442 canvas \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u0430 --&gt; &lt;\/body&gt; &lt;\/html&gt;<\/code><\/pre>\n<p>\u0414\u043b\u044f\u00a0\u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Chart.js. \u041f\u0440\u043e\u0448\u0443 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 26-\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u043d\u0430\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u00abkef\u00bb. \u0422\u0430\u043a \u043a\u0430\u043a\u00a0chint \u043e\u0442\u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u00bb \u041e\u0434\u0438\u043d\u0430\u0440\u043d\u0430\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439\u00bb \u0438 \u00bb \u0412\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438, \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u0443\u044e \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 (\u044d\u043d\u0435\u0440\u0433\u0438\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0430, \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d) \u00bb \u043d\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u044d\u0442\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u0422\u0430\u043a \u043a\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0430\u0441\u0442\u043e\u0442\u0443 50\u00a0\u043e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u0430\u043a \u00ab5000.0\u00bb, \u0430\u00a0\u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0440\u043e\u0432 (\u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u044e\u0442\u0441\u044f) \u0443\u00a0\u0432\u0441\u0435\u0445 \u0440\u0430\u0437\u043d\u044b\u0435. \u0412\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u0445 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u00a0\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043d\u0435\u00a0\u0441\u0442\u0430\u043b, \u0442\u0430\u043a \u043a\u0430\u043a, \u0437\u0430\u043c\u0435\u043d\u0430 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0440\u043e\u0432 \u0434\u0435\u043b\u043e \u043d\u0435\u00a0\u0447\u0430\u0441\u0442\u043e\u0435. \u041d\u0443 \u0438 \u00ab\u043a\u043e\u043b\u0445\u043e\u0437\u0438\u043d\u0433\u00bb \u0441 8262\u00a0\u2014 \u043f\u0435\u0440\u0435\u043a\u043e\u0441\u043e\u043c \u0444\u0430\u0437. \u042d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u0435\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u00a0\u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c. <\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u043c\u044b \u0431\u0435\u0440\u0435\u043c \u0438\u0437\u00a0MySQL \u0431\u0430\u0437\u044b (\u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u043c\u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e \u0441\u00a0\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c), \u0444\u0430\u0439\u043b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f fletch_data.php<\/p>\n<pre><code class=\"php\">&lt;?php  $option = $_POST['option'] ?? ''; $from = $_POST['from'] ?? ''; $to = $_POST['to'] ?? '';  if (empty($option) || empty($from) || empty($to)) {     die(\"\u041d\u0435 \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u044b\"); }  $host = 'localhost'; $dbname = 'bdname'; $username = 'bduser'; $password = 'bdpassword';  try {     $pdo = new PDO(\"mysql:host=$host;dbname=$dbname\", $username, $password);     $pdo-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  if ($option == '8262') {     \/\/ \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432     $sql1 = \"SELECT * FROM `8204` WHERE `time` BETWEEN :from AND :to ORDER BY id DESC\";     $stmt1 = $pdo-&gt;prepare($sql1);  $sql2 = \"SELECT * FROM `8206` WHERE `time` BETWEEN :from AND :to ORDER BY id DESC\";     $stmt2 = $pdo-&gt;prepare($sql2);  $sql3 = \"SELECT * FROM `8208` WHERE `time` BETWEEN :from AND :to ORDER BY id DESC\";     $stmt3 = $pdo-&gt;prepare($sql3);      \/\/ \u041f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c     $stmt1-&gt;bindParam(':from', $from, PDO::PARAM_STR);     $stmt1-&gt;bindParam(':to', $to, PDO::PARAM_STR); $stmt2-&gt;bindParam(':from', $from, PDO::PARAM_STR);     $stmt2-&gt;bindParam(':to', $to, PDO::PARAM_STR); $stmt3-&gt;bindParam(':from', $from, PDO::PARAM_STR);     $stmt3-&gt;bindParam(':to', $to, PDO::PARAM_STR);       $stmt1-&gt;execute(); $stmt2-&gt;execute(); $stmt3-&gt;execute();      $data1 = $stmt1-&gt;fetchAll(PDO::FETCH_ASSOC); $data2 = $stmt2-&gt;fetchAll(PDO::FETCH_ASSOC); $data3 = $stmt3-&gt;fetchAll(PDO::FETCH_ASSOC);  $response = [     'data1' =&gt; $data1,     'data2' =&gt; $data2, 'data3' =&gt; $data3 ]; header('Content-Type: application\/json'); echo json_encode($response); } else {      \/\/ \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432     $sql = \"SELECT * FROM `$option` WHERE `time` BETWEEN :from AND :to ORDER BY id DESC\";     $stmt = $pdo-&gt;prepare($sql);          \/\/ \u041f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c     $stmt-&gt;bindParam(':from', $from, PDO::PARAM_STR);     $stmt-&gt;bindParam(':to', $to, PDO::PARAM_STR);      $stmt-&gt;execute();      $data = $stmt-&gt;fetchAll(PDO::FETCH_ASSOC);     echo json_encode($data); }   } catch (PDOException $e) {     die(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445: \" . $e-&gt;getMessage()); } ?&gt;<\/code><\/pre>\n<p>\u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432.\u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/84e\/0e0\/195\/84e0e01950006954418084f1968dfd46.png\" width=\"199\" height=\"623\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/84e\/0e0\/195\/84e0e01950006954418084f1968dfd46.png\"\/><\/figure>\n<p>\u0421 \u0442\u0430\u043a\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c02\/0c3\/1ab\/c020c31ab12ab4f0338e08638b6efa28.png\" width=\"1115\" height=\"156\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c02\/0c3\/1ab\/c020c31ab12ab4f0338e08638b6efa28.png\"\/><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, python \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0435 0,5 \u0441\u0435\u043a \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c chint \u0438 \u0437\u0430\u043d\u043e\u0441\u0438\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. <\/p>\n<p>\u0412\u0438\u0434 index.php<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d39\/183\/add\/d39183addd735329031af245122a94d6.png\" width=\"1898\" height=\"951\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d39\/183\/add\/d39183addd735329031af245122a94d6.png\"\/><\/figure>\n<p>\u0412\u0438\u0434 index_f.php<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5f0\/4bc\/dbc\/5f04bcdbc4ef86ea9e242e8e83a48c17.png\" width=\"1453\" height=\"1012\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5f0\/4bc\/dbc\/5f04bcdbc4ef86ea9e242e8e83a48c17.png\"\/><\/figure>\n<p>P.S. \u0421\u0440\u0430\u0437\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u044e\u0441\u044c \u044f \u043d\u0435 \u0410\u0421\u0423\u0448\u043d\u0438\u043a \u0438 \u043d\u0435 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u043a, \u0434\u0430\u0436\u0435 \u043d\u0435 \u044d\u043d\u0435\u0440\u0433\u0435\u0442\u0438\u043a. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u044f \u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440. \u041f\u0440\u043e\u0448\u0443 \u0441\u0438\u043b\u044c\u043d\u043e \u043d\u0435 \u0440\u0443\u0433\u0430\u0442\u044c, \u0432\u044b\u043b\u043e\u0436\u0438\u043b \u0441\u0435\u0439 \u043e\u043f\u0443\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0430\u043d\u0443\u0430\u043b\u0430 \u0438 \u043a\u0430\u043a\u043e\u0439 \u043b\u0438\u0431\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043a \u044d\u0442\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435(\u043a\u0440\u043e\u043c\u0435 \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432). \u0412\u0434\u0440\u0443\u0433 \u043a\u043e\u043c\u0443 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \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\/882812\/\"> https:\/\/habr.com\/ru\/articles\/882812\/<\/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<p>\u0414\u0435\u043d\u044c \u0434\u043e\u0431\u0440\u044b\u0439, \u0445\u043e\u0447\u0443 \u043f\u043e\u0432\u0435\u0434\u0430\u0442\u044c \u0432\u0430\u043c \u043a\u0430\u043a \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u043e\u043f\u0440\u043e\u0441 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 ChintPD7777 8s \u043f\u043e rs-485 \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u043b \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0441 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0435\u0451 \u0436\u0435 \u043d\u0430 \u0412\u0435\u0431\u043c\u043e\u0440\u0434\u0443.<\/p>\n<p>\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435: \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0435\u0441\u0442\u044c \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0434\u043b\u044f \u043e\u043f\u0440\u043e\u0441\u0430. \u041d\u041e \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043a\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0443 \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u043f\u043e\u0434\u043d\u044f\u0442\u0438\u044f Web \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439. <\/p>\n<ol>\n<li>\n<p><strong>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f<\/strong><\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0435 \u0435\u0441\u0442\u044c \u043a\u043b\u0435\u043c\u044b 58 \u0438 59 \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0446\u0435\u043f\u043b\u044f\u0435\u043c\u0441\u044f. \u0414\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c MOXA 5130 \u0438\u043b\u0438 \u0430\u043d\u0430\u043b\u043e\u0433 \u043d\u0435 \u0441\u0443\u0442\u044c \u0432\u0430\u0436\u043d\u043e. \u0412\u0430\u0436\u043d\u043e \u0447\u0442\u043e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e RTU OVER TCP.<\/p>\n<p>\u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c menu -&gt; \u043f\u0440\u043e\u0441\u0438\u0442 \u043f\u0430\u0440\u043e\u043b\u044c (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 701) -&gt; conn<\/p>\n<ol>\n<li>\n<p>prot &#8212; \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043c\u043d\u0435 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434 \u044d\u0442\u0438\u043c \u043c\u0435\u043d\u044e, \u044f \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e n.2<\/p>\n<\/li>\n<li>\n<p>bAud &#8212; \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, \u0442\u0443\u0442 \u043e\u043f\u044f\u0442\u044c \u0442\u0430\u043a\u0438 \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043d\u0435 \u0441\u043b\u043e\u0432\u0430, \u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0435\u043d\u044e \u043f\u0440\u043e\u0441\u0442\u043e \u0446\u0438\u0444\u0440\u044b \u043e\u0442 1 \u0434\u043e 5,  \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043f\u0440\u043e\u0431 \u044f \u0432\u044b\u0431\u0440\u0430\u043b 3, \u0447\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 9600<\/p>\n<\/li>\n<li>\n<p>addr &#8212; \u0430\u0434\u0440\u0435\u0441 slave \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 1<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<li>\n<p><strong>\u041f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0441\u0447\u0438\u0442\u0430\u0442\u044c <\/strong><\/p>\n<p>\u0420\u0430\u0437\u043d\u044b\u0435 &#171;\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a\u0438&#187; rs485 to ethernet , \u0438\u043c\u0435\u044f \u0440\u0430\u0437\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0447\u0442\u043e \u0442\u043e \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043f\u043e rs 485 \u0438\u043b\u0438 \u043d\u0435\u0442.  \u0422\u0430\u043a \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0432 Web-\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0435 &#171;\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a\u0430&#187; \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0440\u0430\u043d\u0435\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0435. \u041d\u0430 \u043c\u043e\u0435\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f DieWU \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a: <\/p>\n<figure class=\"full-width\"><\/figure>\n<p>  \u041a\u0430\u0447\u0430\u0435\u043c <a href=\"https:\/\/www.modbustools.com\/modbus_poll.html\" rel=\"noopener noreferrer nofollow\">ModBusPOOL<\/a> \u0438 \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 &#171;\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a\u0443&#187;.<\/p>\n<figure class=\"\"><\/figure>\n<p>\u041f\u0440\u0438 \u0443\u0441\u043f\u0435\u0445\u0435 \u043e\u043a\u043e\u0448\u043a\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><\/figure>\n<\/li>\n<\/ol>\n<p>\u041d\u0430\u0436\u0430\u0432 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c, \u044f \u0434\u0443\u043c\u0430\u044e, \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441 2000H. \u0412 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043e\u043d\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 16-\u0440\u0438\u0447\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0431\u0435\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0431\u0443\u043a\u0432\u044b &#171;H&#187;. \u0422\u043e \u0435\u0441\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u0430 \u043a\u0430\u043a  2044H, \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0432 10-\u0447\u043d\u0443\u044e \u043b\u044e\u0431\u044b\u043c \u043e\u043d\u043b\u0430\u0439\u043d-\u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u043c  &#8212; \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 2060. &#171;H&#187; \u0437\u043d\u0430\u0447\u0438\u0442 \u0447\u0442\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0447\u0435\u0440\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u044e 04 Read Input Registers (3x), \u0447\u0442\u043e \u043d\u0438\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u043d\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Read Holding Registers.<\/p>\n<p>3.<strong> \u041f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433<\/strong><\/p>\n<p> \u041f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430 python + mysql. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 &#171;pymodbus&#187;.<\/p>\n<pre><code class=\"python\">import asyncio from pymodbus.client import ModbusTcpClient from pymodbus import (     FramerType,     ModbusException,     pymodbus_apply_logging_config, ) import struct import mysql.connector  # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f host = '192.168.8.254'  # IP-\u0430\u0434\u0440\u0435\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 port = 23                # \u041f\u043e\u0440\u0442 \u0434\u043b\u044f RTU over TCP (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)  db_host = 'localhost' db_user = 'bduser' db_password = 'bdpassword' db_name = 'bdname'  # \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430   async def read_and_store_registers():     while True:         client = ModbusTcpClient(host, port=port, framer=FramerType.RTU,retries=100)         # \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443         if client.connect():                           # \u0421\u043f\u0438\u0441\u043e\u043a \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c             register_addresses = [8192]              for address in register_addresses:                 # \u0427\u0442\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, count \u044d\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0438\u0442\u043e\u0432, slave - \u0430\u0434\u0440\u0435\u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430                 response = client.read_holding_registers(address=address, count=70, slave=1)                  if response.isError():                     print(f\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 {address}.\")                 else:                         value8192 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[0], response.registers[1]))[0]                         value8194 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[2], response.registers[3]))[0]                         value8196 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[4], response.registers[5]))[0]                         value8198 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[6], response.registers[7]))[0]                         value8200 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[8], response.registers[9]))[0]                         value8202 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[10], response.registers[11]))[0]                         value8204 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[12], response.registers[12]))[0]                         value8206 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[14], response.registers[13]))[0]                         value8208 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[16], response.registers[15]))[0]                         value8212 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[18], response.registers[17]))[0]                         value8214 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[22], response.registers[21]))[0]                         value8216 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[24], response.registers[23]))[0]                         value8220 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[28], response.registers[27]))[0]                         value8222 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[30], response.registers[29]))[0]                         value8224 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[32], response.registers[31]))[0]                         value8248 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[56], response.registers[55]))[0]                         value8250 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[58], response.registers[57]))[0]                         value8252 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[60], response.registers[59]))[0]                         value8254 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[62], response.registers[61]))[0]                         value8256 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[64], response.registers[63]))[0]                         value8258 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[66], response.registers[65]))[0]                         value8260 = struct.unpack('&gt;f', struct.pack('&gt;HH', response.registers[68], response.registers[67]))[0]                      # \u0412\u044b\u0432\u043e\u0434 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430                         if value8192 is not None:                             conn = mysql.connector.connect(                                 host=db_host,                                 user=db_user,                                 password=db_password,                                 database=db_name                                 )                             cursor = conn.cursor()                             table_name = f\"{address}\"  # \u0417\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u043d\u0430 \u0438\u043c\u044f \u0432\u0430\u0448\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b                             column_name = \"val\"  # \u0417\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u043d\u0430 \u0438\u043c\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430                         data_tuple = (value8260)                         # \u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443                         insert_query = f\"INSERT INTO `8192` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8192}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8194` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8194}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8196` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8196}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8198` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8198}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8200` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8200}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8202` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8202}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8204` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8204}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8206` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8206}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8208` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8208}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8212` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8212}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8214` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8214}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8216` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8216}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8220` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8220}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8222` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8222}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8224` (`id`, `time`, `val`, `comm`) VALUES (NULL, current_timestamp(), {value8224}, NULL);\"                         cursor.execute(insert_query, data_tuple)                         insert_query = f\"INSERT INTO `8248` (`id`, `time`, `val`, `comm`) VALUES (NULL,<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-448504","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/448504","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=448504"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/448504\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=448504"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=448504"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=448504"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}