{"id":312513,"date":"2020-11-03T21:00:49","date_gmt":"2020-11-03T21:00:49","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=312513"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=312513","title":{"rendered":"ModBus Slave RTU\/ASCII \u0431\u0435\u0437 \u0441\u043c\u0441 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/mj\/u0\/6w\/mju06wdtrkkmlqtotvikzdatilq.png\" alt=\"image\"><\/p>\n<p>  \u0412 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 ModBus Slave \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043d\u043e \u043e\u043d\u0438 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u0441\u043b\u043e\u0436\u043d\u044b \u0432 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0438 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0433\u0440\u0443\u0431\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043f\u043e \u0441\u043a\u0440\u043e\u043c\u043d\u043e\u043c\u0443 \u043c\u043d\u0435\u043d\u0438\u044e \u0430\u0432\u0442\u043e\u0440\u0430, \u043b\u0438\u0448\u0435\u043d\u043d\u0430\u044f \u044d\u0442\u0438\u0445 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432.<br \/>  <a name=\"habracut\"><\/a><br \/>   \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u0421\u0438.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">modbus.h<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ \/\/    \u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 ModBus v2   \/\/ \/\/    \u0410\u0432\u0442\u043e\u0440 - I\u0432\u0430\u043d                                                      \/\/ \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ #ifndef __MODBUS_H #define __MODBUS_H  #include &quot;main.h&quot;  \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ \/\/\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041c\u043e\u0434\u0411\u0430\u0441 \/\/\u0414\u0430\u043d\u043d\u044b\u0435, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u041c\u043e\u0434\u0431\u0430\u0441  #define ModBusUseGlobal (0) \/\/\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u0445\u043e\u0434\u044b\/\u0432\u044b\u0445\u043e\u0434\u044b, \u0432\u0445\u043e\u0434\u043d\u044b\u0435\/\u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \/\/\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u041c\u043e\u0434\u0431\u0430\u0441 #define ModBusUseFunc1  (0) \/\/\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e 1  - \u0447\u0442\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 Coils (\u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0431\u0438\u0442\u043e\u0432) #define ModBusUseFunc2  (0) \/\/\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e 2  - \u0447\u0442\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u0445\u043e\u0434\u043e\u0432 #define ModBusUseFunc3  (1) \/\/\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e 3  - \u0447\u0442\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 #define ModBusUseFunc4  (0) \/\/\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e 4  - \u0447\u0442\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 #define ModBusUseFunc5  (0) \/\/\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e 5  - \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0438\u0442\u0430 #define ModBusUseFunc6  (1) \/\/\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e 6  - \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 #define ModBusUseFunc15 (0) \/\/\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e 15 - \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0431\u0438\u0442\u043e\u0432 #define ModBusUseFunc16 (1) \/\/\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e 16 - \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \/\/\u0410\u0434\u0440\u0435\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 #define ModBusID (1) \/\/\u0410\u0434\u0440\u0435\u0441 \u043d\u0430 \u0448\u0438\u043d\u0435 \u041c\u043e\u0434\u0411\u0430\u0441 #define ModBusID_FF (255) \/\/\u0410\u0434\u0440\u0435\u0441 \u043d\u0430 \u0448\u0438\u043d\u0435 \u041c\u043e\u0434\u0411\u0430\u0441, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \/\/\u0422\u0430\u0439\u043c\u0430\u0443\u0442\u044b #define ModBusMaxPause (5)\/\/\u041f\u0430\u0443\u0437\u0430 \u043c\u0435\u0436\u0434\u0443 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438, \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 [mS],  #define ModBusMaxPauseResp (2) \/\/\u041f\u0430\u0443\u0437\u0430 \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u041c\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u043e\u0442\u0432\u0435\u0442\u043e\u043c \u0421\u043b\u0430\u0439\u0432\u0430 [mS] \/\/\u0414\u043b\u0438\u043d\u043d\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 #define ModBusMaxPaketRX (96)\/\/\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 &lt;127 \/\/\u0414\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0432\u0445\u043e\u0434\u044b #define ModBusMaxInBit (0) \/\/\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u0445\u043e\u0434\u043e\u0432  #define ModBusMaxInBitTX (8) \/\/\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u0445\u043e\u0434\u043e\u0432 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u043f\u0430\u043a\u0435\u0442\u0430  #define ModBusMaxInByte ((ModBusMaxInBit+7)\/8) \/\/\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u0445\u043e\u0434\u043e\u0432 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 \/\/\u0414\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0432\u044b\u0445\u043e\u0434\u044b #define ModBusMaxOutBit (0) \/\/\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 #define ModBusMaxOutByte ((ModBusMaxOutBit+7)\/8) \/\/\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 #define ModBusMaxOutBitTX (8) \/\/\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435  #define ModBusMaxOutBitRX (8) \/\/\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0435 \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043e\u0432\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \/\/\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f #define ModBusMaxInReg (0) \/\/\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 (\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f) #define ModBusMaxInRegTX (24) \/\/\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435  \/\/\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f-\u0437\u0430\u043f\u0438\u0441\u0438 #define ModBusMaxOutReg (48) \/\/\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 #define ModBusMaxOutRegTX (32)\/\/\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435  #define ModBusMaxOutRegRX (32)\/\/\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432  \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0435 \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043e\u0432\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ \/\/\u041e\u043f\u043e\u0440\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0441\u0432\u044f\u0437\u044c \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \/\/\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440, \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u0443\u044e \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0443 #define ModBusSysTimer TimingDelay \/\/\u0417\u0430\u043f\u0438\u0441\u044c \u0431\u0430\u0439\u0442\u0430 \u0432 \u043f\u043e\u0442\u043e\u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430 - void ModBusPUT(unsigned char A) #define ModBusPUT(A) PutFifo0(A)  \/\/\u0427\u0442\u0435\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u0430 \u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430, - unsigned short ModBusGET(void) \/\/\u0415\u0441\u043b\u0438 \u043d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 0\u04450000, \u0438\u043d\u0430\u0447\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 0\u044501\u0425\u0425 #define ModBusGET()  Inkey16Fifo0()  \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/  \/\/\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f  void ModBusIni(void);  \/\/\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043c\u043e\u0434\u0431\u0430\u0441 RTU \/\/\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u043c  \/\/\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043c\u0430\u043a\u0440\u043e\u0441\u044b ModbusPUT(A) ModbusGET() void ModBusRTU(void);  \/\/\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043c\u043e\u0434\u0431\u0430\u0441 ASCII \/\/\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u043c  \/\/\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043c\u0430\u043a\u0440\u043e\u0441\u044b ModbusPUT(A) ModbusGET() void ModBusASCII(void);  \/\/\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0431\u0430\u0441 \/\/\u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u041c\u043e\u0434\u0411\u0430\u0441 void Prg2ModBusOutBit(void); void Prg2ModBusInBit(void); void Prg2ModBusOutReg(void); void Prg2ModBusInReg(void); \/\/\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0431\u0430\u0441 \/\/\u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0411\u0430\u0441 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 void ModBus2PrgOutBit(void); void ModBus2PrgOutReg(void);  #pragma pack(push,1) \/\/\u0422\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u043c\u0438 \u0432\u0445\u043e\u0434\u0430\u043c\u0438\/\u0432\u044b\u0445\u043e\u0434\u0430\u043c\u0438 typedef union   {   unsigned char byte;   struct     {     unsigned char bit0:1;     unsigned char bit1:1;     unsigned char bit2:1;     unsigned char bit3:1;     unsigned char bit4:1;     unsigned char bit5:1;     unsigned char bit6:1;     unsigned char bit7:1;     };   }   ModBusBit_t; #pragma pack(pop)    #ifdef __MODBUS2PRG_C #if ModBusMaxInBit!=0 ModBusBit_t ModBusInBit[ModBusMaxInByte]; \/\/\u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u0445\u043e\u0434\u043e\u0432 #endif #if ModBusMaxOutBit!=0 ModBusBit_t ModBusOutBit[ModBusMaxOutByte]; \/\/\u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 #endif #if ModBusMaxInReg!=0 unsigned short ModBusInReg[ModBusMaxInReg]; \/\/\u043c\u0430\u0441\u0441\u0438\u0432 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 #endif #if ModBusMaxOutReg!=0 unsigned short ModBusOutReg[ModBusMaxOutReg]; \/\/\u043c\u0430\u0441\u0441\u0438\u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 #endif #else  #if ModBusUseGlobal!=0 || defined(__MODBUS_C) #if ModBusMaxInBit!=0 extern ModBusBit_t ModBusInBit[ModBusMaxInByte]; \/\/\u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u0445\u043e\u0434\u043e\u0432 #endif #if ModBusMaxOutBit!=0 extern ModBusBit_t ModBusOutBit[ModBusMaxOutByte]; \/\/\u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 #endif #if ModBusMaxInReg!=0 extern unsigned short ModBusInReg[ModBusMaxInReg]; \/\/\u043c\u0430\u0441\u0441\u0438\u0432 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 #endif #if ModBusMaxOutReg!=0 extern unsigned short ModBusOutReg[ModBusMaxOutReg]; \/\/\u043c\u0430\u0441\u0441\u0438\u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 #endif #endif\/\/#if ModBusUseGlobal!=0 #endif\/\/#ifdef __MODBUS2PRG_C #endif\/\/#ifndef __MODBUS_H <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">modbus.c<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#define __MODBUS_C #include &quot;modbus.h&quot;  static unsigned char PaketRX[ModBusMaxPaketRX];\/\/\u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u0430 static unsigned char UkPaket;\/\/\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435, \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b  static unsigned long TimModbus; \/\/\u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u0442\u0430\u0439\u043c\u0435\u0440\u0443 static unsigned short CRCmodbus;\/\/\u0442\u0435\u043a\u0443\u0449\u0438\u0439 CRC static unsigned char Sost;\/\/\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 0\/1 \u043f\u0440\u0438\u0435\u043c\/\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430  \/\/\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f  void ModBusIni(void)   {   TimModbus=ModBusSysTimer;\/\/\u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0442\u0430\u0439\u043c\u0435\u0440   UkPaket=0;\/\/\u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043f\u0430\u043a\u0435\u0442\u0430   CRCmodbus=0xFFFF; \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CRC   \/\/\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0411\u0430\u0441 #if ModBusMaxOutBit!=0   Prg2ModBusOutBit(); #endif   #if ModBusMaxInBit!=0     Prg2ModBusInBit(); #endif   #if ModBusMaxOutReg!=0     Prg2ModBusOutReg(); #endif   #if ModBusMaxInReg!=0   Prg2ModBusInReg(); #endif     return;   }  \/\/\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f CRC static inline unsigned short CRCfunc(unsigned short inCRC, unsigned char in)   {   inCRC=inCRC^in;   for(int j=0;j&lt;8;j++){if(inCRC&amp;1){inCRC=(inCRC&gt;&gt;1)^0xA001U;}else {inCRC=inCRC&gt;&gt;1;}}   return inCRC;   }  \/\/\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043c\u043e\u0434\u0431\u0430\u0441 void ModBusRTU(void)   {   if(Sost==0)     {\/\/\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u0438\u0435\u043c     while(!0)       {\/\/\u0426\u0438\u043a\u043b \u043f\u0440\u0438\u0435\u043c\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432       unsigned short Tmp=ModBusGET(); \/\/\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u0438\u043c\u0432\u043e\u043b \u0438\u0437 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430       if(Tmp==0) return; \/\/\u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 - \u0432\u043e\u0437\u0432\u0440\u0430\u0442        \/\/\u0441\u0438\u043c\u0432\u043e\u043b \u043f\u0440\u0438\u043d\u044f\u0442       Tmp=Tmp&amp;0xFF;\/\/\u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u043f\u0440\u0438\u0435\u043c\u0430 \u0431\u0430\u0439\u0442\u0430       \/\/\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u043c\u0435\u0436\u0434\u0443 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438       if((ModBusSysTimer-TimModbus)&gt;ModBusMaxPause)         {\/\/\u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d \u0442\u0430\u0439\u043c\u0430\u0443\u0442, \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043f\u0440\u0438\u0435\u043c \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430         PaketRX[0]=Tmp;\/\/\u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0432 \u0431\u0443\u0444\u0435\u0440 \u043f\u0440\u0438\u0435\u043c\u0430         UkPaket=1;\/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043f\u0430\u043a\u0435\u0442\u0430         TimModbus=ModBusSysTimer;\/\/\u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0442\u0430\u0439\u043c\u0435\u0440         \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 CRC         CRCmodbus=CRCfunc(0xFFFF,Tmp);         continue;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u0430         }       else         {\/\/\u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u0443\u0436\u0435 \u043d\u0430\u0447\u0430\u0442\u044b\u0439 \u043f\u0430\u043a\u0435\u0442         TimModbus=ModBusSysTimer;\/\/\u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0442\u0430\u0439\u043c\u0435\u0440         PaketRX[UkPaket]=Tmp;\/\/\u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b         UkPaket++;\/\/\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u043f\u0430\u043a\u0435\u0442\u0430         if(UkPaket==ModBusMaxPaketRX)\/\/\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430 \u0434\u043b\u0438\u043d\u0443 \u043f\u0430\u043a\u0435\u0442\u0430           {\/\/\u0431\u0443\u0444\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0438\u043b\u0441\u044f           UkPaket=0;\/\/\u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043f\u0430\u043a\u0435\u0442\u0430           CRCmodbus=0xFFFF; \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CRC           return;\/\/\u043e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f           }         \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 CRC         CRCmodbus=CRCfunc(CRCmodbus,Tmp);         }       \/\/\u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u043c\u0430\u043b\u043e \u0434\u0430\u043d\u043d\u044b\u0445       if(UkPaket&lt;8) continue; \/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u0430       \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430       if(CRCmodbus==0)          {\/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b         if(PaketRX[1]==15 || PaketRX[1]==16)           {\/\/\u0435\u0441\u043b\u0438 \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b (15,16) , \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c &quot;\u0421\u0447\u0435\u0442\u0447\u0438\u043a \u0431\u0430\u0439\u0442&quot;           if((PaketRX[6]+9)!=UkPaket) continue;           }         break; \/\/\u0423\u0440\u0430! \u041f\u0430\u043a\u0435\u0442 \u043f\u0440\u0438\u043d\u044f\u0442!!!         }       }     \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/     \/\/                         \u0423\u0440\u0430! \u041f\u0430\u043a\u0435\u0442 \u043f\u0440\u0438\u043d\u044f\u0442!!!     \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/     UkPaket=0;\/\/\u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043f\u0430\u043a\u0435\u0442\u0430          \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0430\u0434\u0440\u0435\u0441\u0430     if((PaketRX[0]!=ModBusID)&amp;&amp;(PaketRX[0]!=ModBusID_FF))       {\/\/\u041d\u0435 \u043d\u0430\u0448 \u0430\u0434\u0440\u0435\u0441       CRCmodbus=0xFFFF; \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CRC       return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f       }                \/\/\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043e\u0442\u0432\u0435\u0442\u0430     Sost=!0; #if ModBusMaxPauseResp!=0       return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f #endif      }      \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/    if(Sost!=0  #if ModBusMaxPauseResp!=0           &amp;&amp; (ModBusSysTimer-TimModbus)&gt;=ModBusMaxPauseResp #endif           )     {\/\/\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043e\u0442\u0432\u0435\u0442\u0430     Sost=0;     \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/         \/\/                       \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434                                  \/\/     \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/     \/\/\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 01 - \u0447\u0442\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 Coils (\u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0431\u0438\u0442\u043e\u0432).      \/*\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435-\u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u0438\u0442\u0430 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0438\u0442\u043e\u0432 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f.      \u0411\u0438\u0442\u044b \u043d\u0443\u043c\u0435\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 0.      \u0412 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438-\u043e\u0442\u0432\u0435\u0442\u0435 \u043a\u0430\u0436\u0434\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0431\u0438\u0442\u043e\u043c,     \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u043c \u0431\u0430\u0439\u0442\u0435 \u043f\u0430\u043a\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0442\u0443\u0441 8 \u0431\u0438\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.      \u0415\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0445 \u043d\u0435 \u043a\u0440\u0430\u0442\u043d\u043e \u0432\u043e\u0441\u044c\u043c\u0438, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u0442\u044b \u0432 \u0431\u0430\u0439\u0442\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0443\u043b\u044f\u043c\u0438.      \u0421\u0447\u0435\u0442\u0447\u0438\u043a \u0432\u043c\u0435\u0449\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442 \u0432 \u043f\u043e\u043b\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.     01 \u0427\u0442\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0432\u044b\u0445\u043e\u0434\u043e\u0432            \u041e\u041f\u0418\u0421\u0410\u041d\u0418\u0415            \u0427\u0438\u0442\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 ON\/OFF \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u0432 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u043c.            \u0417\u0410\u041f\u0420\u041e\u0421            \u0417\u0430\u043f\u0440\u043e\u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u0430 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f.            \u0412\u044b\u0445\u043e\u0434\u0430 \u0430\u0434\u0440\u0435\u0441\u0443\u044e\u0442\u0441\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043d\u0443\u043b\u044f: \u0432\u044b\u0445\u043e\u0434\u0430 1-16 \u0430\u0434\u0440\u0435\u0441\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a 0-15.           \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 20-56 \u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 17.            \u0418\u043c\u044f \u043f\u043e\u043b\u044f\t\t\t\t\t\t\u041f\u0440\u0438\u043c\u0435\u0440                                                                   (Hex)            \u0410\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e\t\t\t\t\t11\t0           \u0424\u0443\u043d\u043a\u0446\u0438\u044f\t\t\t\t\t\t01\t1           \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 Hi\t\t\t\t\t00\t2           \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 Lo\t\t\t\t\t13\t3           \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e Hi\t\t\t\t\t\t00\t4           \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e Lo\t\t\t\t\t\t25\t5           \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 (CRC \u0438\u043b\u0438 LRC)\t\t\t--            \u041e\u0422\u0412\u0415\u0422            \u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u0432 \u043e\u0442\u0432\u0435\u0442\u043d\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0434\u0438\u043d \u0432\u044b\u0445\u043e\u0434 \u043d\u0430 \u0431\u0438\u0442.           \u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u043d\u0435 \u043a\u0440\u0430\u0442\u043d\u043e \u0432\u043e\u0441\u044c\u043c\u0438, \u0442\u043e \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0431\u0438\u0442\u044b \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0431\u0430\u0439\u0442\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0432 0.            \u0421\u0447\u0435\u0442\u0447\u0438\u043a \u0431\u0430\u0439\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0432 \u043f\u043e\u043b\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.            \u0418\u043c\u044f \u043f\u043e\u043b\u044f\t\t\t\t\t\t\u041f\u0440\u0438\u043c\u0435\u0440                                                                   (Hex)            \u0410\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e\t\t\t\t\t11\t0           \u0424\u0443\u043d\u043a\u0446\u0438\u044f\t\t\t\t\t\t01\t1           \u0421\u0447\u0435\u0442\u0447\u0438\u043a \u0431\u0430\u0439\u0442\t\t\t\t\t\t05\t2           \u0414\u0430\u043d\u043d\u044b\u0435(\u0412\u044b\u0445\u043e\u0434\u0430 27-20)\t\t\t\t\tCD\t3           \u0414\u0430\u043d\u043d\u044b\u0435(\u0412\u044b\u0445\u043e\u0434\u0430 35-28)\t\t\t\t\t6B\t4           \u0414\u0430\u043d\u043d\u044b\u0435(\u0412\u044b\u0445\u043e\u0434\u0430 43-36)\t\t\t\t\tB2\t5           \u0414\u0430\u043d\u043d\u044b\u0435(\u0412\u044b\u0445\u043e\u0434\u0430 51-44)\t\t\t\t\t0E\t6           \u0414\u0430\u043d\u043d\u044b\u0435(\u0412\u044b\u0445\u043e\u0434\u0430 56-52)\t\t\t\t\t1B\t7           \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 (CRC \u0438\u043b\u0438 LRC)\t\t\t--     *\/ #if ModBusUseFunc1!=0            if(PaketRX[1]==0x01)       {       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0431\u0438\u0442       unsigned short AdresBit=(((((unsigned short)PaketRX[2])&lt;&lt;8)|(PaketRX[3])));       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0431\u0438\u0442       unsigned short KolvoBit=((((unsigned short)PaketRX[4])&lt;&lt;8)|(PaketRX[5]));       \/\/\u0435\u0441\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e       if((AdresBit+KolvoBit)&gt;(ModBusMaxOutBit) || KolvoBit&gt;ModBusMaxOutBitTX || KolvoBit==0)         {\/\/\u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e         CRCmodbus=0xFFFF; \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CRC         return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f         }       Prg2ModBusOutBit();\/\/\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0431\u0430\u0441 (GlobalDate-&gt;ModBus)       \/\/\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u0442\u0432\u0435\u0442\u0430       \/\/\u0430\u0434\u0440\u0435\u0441       ModBusPUT(PaketRX[0]);       CRCmodbus=CRCfunc(0xFFFF,PaketRX[0]);       \/\/\u043a\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b           ModBusPUT(1);       CRCmodbus=CRCfunc(CRCmodbus,1);       \/\/\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u043d\u044b\u0445 \u0431\u0430\u0439\u0442       ModBusPUT((KolvoBit+7)&gt;&gt;3);       CRCmodbus=CRCfunc(CRCmodbus,((KolvoBit+7)&gt;&gt;3));       \/\/\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0438\u0442\u043e\u0432 \u0432 \u043f\u0430\u043a\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u0430       unsigned char TxByte=0;\/\/\u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0431\u0430\u0439\u0442       unsigned char Bit=AdresBit&amp;7;\/\/\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0431\u0438\u0442 \u0432 ModBusOutBit[]       AdresBit=AdresBit&gt;&gt;3;\/\/\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0431\u0430\u0439\u0442 ModBusOutBit[]       \/\/\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 ModBusOutBit[] \u0432 \u043f\u0430\u043a\u0435\u0442       int i=0;       while(!0)         {         if((ModBusOutBit[AdresBit].byte)&amp;(1&lt;&lt;Bit))           {           TxByte=TxByte|(1&lt;&lt;(i&amp;7));           }         \/\/\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0440\u0443\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438          Bit++;         if(Bit==8){Bit=0;AdresBit++;}         i++;         if((i&amp;7)==0)           {           ModBusPUT(TxByte);           CRCmodbus=CRCfunc(CRCmodbus,TxByte);           TxByte=0;           if(i==KolvoBit) break; else continue;           }         if(i==KolvoBit)            {           ModBusPUT(TxByte);           CRCmodbus=CRCfunc(CRCmodbus,TxByte);           break;           }         }       ModBusPUT(CRCmodbus);       ModBusPUT(CRCmodbus&gt;&gt;8);       \/\/\u043a\u043e\u043d\u0435\u0446       CRCmodbus=0xFFFF; \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CRC       return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f        } #endif         \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/     \/\/\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 2 - \u0447\u0442\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u0445\u043e\u0434\u043e\u0432     \/*02 Read Input Status            \u041e\u041f\u0418\u0421\u0410\u041d\u0418\u0415            \u0427\u0442\u0435\u043d\u0438\u0435 ON\/OFF \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u0445\u043e\u0434\u043e\u0432 (\u0441\u0441\u044b\u043b\u043a\u0430 1\u0425) \u0432 \u043f\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u043c.            \u0417\u0410\u041f\u0420\u041e\u0421            \u0417\u0430\u043f\u0440\u043e\u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u043e\u043c\u0435\u0440 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u0430 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0445\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f. \u0412\u0445\u043e\u0434\u0430 \u0430\u0434\u0440\u0435\u0441\u0443\u044e\u0442\u0441\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 0.           \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u043e\u0432 10197-10218 \u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 17.                    \u0417\u0430\u043f\u0440\u043e\u0441            \u0418\u043c\u044f \u043f\u043e\u043b\u044f\t\t\t\t\t\t\u041f\u0440\u0438\u043c\u0435\u0440                                                                   (Hex)            \u0410\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e\t\t\t\t\t11\t0           \u0424\u0443\u043d\u043a\u0446\u0438\u044f\t\t\t\t\t\t02\t1           \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0441\u0442.\t\t\t\t\t00\t2           \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043c\u043b.\t\t\t\t\tC4\t3           \u041a\u043e\u043b-\u0432\u043e \u0432\u0445\u043e\u0434\u043e\u0432 \u0441\u0442.\t\t\t\t\t00\t4           \u041a\u043e\u043b-\u0432\u043e \u0432\u0445\u043e\u0434\u043e\u0432 \u043c\u043b.\t\t\t\t\t16\t5           \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430\t\t\t\t\t--            \u041e\u0422\u0412\u0415\u0422            \u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u0445\u043e\u0434\u043e\u0432 \u0432 \u043e\u0442\u0432\u0435\u0442\u043d\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0434\u0438\u043d \u0432\u044b\u0445\u043e\u0434 \u043d\u0430 \u0431\u0438\u0442.           \u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0445\u043e\u0434\u043e\u0432 \u043d\u0435 \u043a\u0440\u0430\u0442\u043d\u043e \u0432\u043e\u0441\u044c\u043c\u0438, \u0442\u043e \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0431\u0438\u0442\u044b \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0431\u0430\u0439\u0442\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0432 0.            \u0421\u0447\u0435\u0442\u0447\u0438\u043a \u0431\u0430\u0439\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0432 \u043f\u043e\u043b\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.            \u0418\u043c\u044f \u043f\u043e\u043b\u044f\t\t\t\t\t\t\u041f\u0440\u0438\u043c\u0435\u0440                                                                   (Hex)            \u0410\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e\t\t\t\t\t11\t0           \u0424\u0443\u043d\u043a\u0446\u0438\u044f\t\t\t\t\t\t01\t1           \u0421\u0447\u0435\u0442\u0447\u0438\u043a \u0431\u0430\u0439\u0442\t\t\t\t\t\t03\t2           \u0414\u0430\u043d\u043d\u044b\u0435(\u0412\u0445\u043e\u0434\u044b 10204-10197)\t\t\t\tAC\t3           \u0414\u0430\u043d\u043d\u044b\u0435(\u0412\u0445\u043e\u0434\u044b 10212-10205)\t\t\t\tDB\t4           \u0414\u0430\u043d\u043d\u044b\u0435(\u0412\u0445\u043e\u0434\u044b 10218-10213)\t\t\t\t35\t5           \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 (CRC \u0438\u043b\u0438 LRC)\t\t\t--       *\/ #if ModBusUseFunc2!=0          if(PaketRX[1]==0x02)       {       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0431\u0438\u0442       unsigned short AdresBit=(((((unsigned short)PaketRX[2])&lt;&lt;8)|(PaketRX[3])));       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0431\u0438\u0442       unsigned short KolvoBit=((((unsigned short)PaketRX[4])&lt;&lt;8)|(PaketRX[5]));       \/\/\u0435\u0441\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e       if((AdresBit+KolvoBit)&gt;(ModBusMaxInBit) || KolvoBit&gt;ModBusMaxInBitTX || KolvoBit==0)         {\/\/\u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e         CRCmodbus=0xFFFF; \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CRC         return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f         }       Prg2ModBusInBit();\/\/\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0431\u0430\u0441 (GlobalDate-&gt;ModBus)       \/\/\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u0442\u0432\u0435\u0442\u0430       \/\/\u0430\u0434\u0440\u0435\u0441       ModBusPUT(PaketRX[0]);       CRCmodbus=CRCfunc(0xFFFF,PaketRX[0]);       \/\/\u043a\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b           ModBusPUT(2);       CRCmodbus=CRCfunc(CRCmodbus,2);       \/\/\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u043d\u044b\u0445 \u0431\u0430\u0439\u0442       ModBusPUT((KolvoBit+7)&gt;&gt;3);       CRCmodbus=CRCfunc(CRCmodbus,((KolvoBit+7)&gt;&gt;3));       \/\/\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0438\u0442\u043e\u0432 \u0432 \u043f\u0430\u043a\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u0430       unsigned char TxByte=0;\/\/\u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0431\u0430\u0439\u0442       unsigned char Bit=AdresBit&amp;7;\/\/\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0431\u0438\u0442        AdresBit=AdresBit&gt;&gt;3;\/\/\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0431\u0430\u0439\u0442        \/\/\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 ModBusInBit[] \u0432 \u043f\u0430\u043a\u0435\u0442       int i=0;       while(!0)         {         if((ModBusInBit[AdresBit].byte)&amp;(1&lt;&lt;Bit))           {\/\/\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0431\u0438\u0442 \u0432 \u043f\u0430\u043a\u0435\u0442\u0435           TxByte=TxByte|(1&lt;&lt;(i&amp;7));           }         \/\/\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0440\u0443\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438          Bit++;         if(Bit==8){Bit=0;AdresBit++;}         i++;         if((i&amp;7)==0)           {           ModBusPUT(TxByte);           CRCmodbus=CRCfunc(CRCmodbus,TxByte);           TxByte=0;           if(i==KolvoBit) break; else continue;           }         if(i==KolvoBit)           {           ModBusPUT(TxByte);           CRCmodbus=CRCfunc(CRCmodbus,TxByte);           break;           }         }       ModBusPUT(CRCmodbus);       ModBusPUT(CRCmodbus&gt;&gt;8);       \/\/\u043a\u043e\u043d\u0435\u0446       CRCmodbus=0xFFFF; \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CRC       return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f       } #endif         \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/     \/\/\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 03 - \u0447\u0442\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445\/\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432.      \/*\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435-\u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e\/\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 (\u0434\u0432\u0443\u0445\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e),      \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f. \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043d\u0443\u043c\u0435\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 0.     03 Read Holding Registers            \u041e\u041f\u0418\u0421\u0410\u041d\u0418\u0415            \u0427\u0442\u0435\u043d\u0438\u0435 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 (\u0441\u0441\u044b\u043b\u043a\u0430 4\u0425) \u0432 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u043c.            \u0417\u0410\u041f\u0420\u041e\u0421            \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f.            \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0430\u0434\u0440\u0435\u0441\u0443\u044e\u0442\u0441\u044f \u043d\u0430\u0447\u0438\u043d\u0430 \u0441 0: \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b 1-16 \u0430\u0434\u0440\u0435\u0441\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a 0-15.           \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0447\u0442\u0435\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 40108-40110 \u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 17.            \u0417\u0430\u043f\u0440\u043e\u0441            \u0418\u043c\u044f \u043f\u043e\u043b\u044f\t\t\t\t\t\t\u041f\u0440\u0438\u043c\u0435\u0440                                                                   (Hex)            \u0410\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e\t\t\t\t\t11\t0           \u0424\u0443\u043d\u043a\u0446\u0438\u044f\t\t\t\t\t\t03\t1           \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0441\u0442.\t\t\t\t\t00\t2           \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043c\u043b.\t\t\t\t\t6B\t3           \u041a\u043e\u043b-\u0432\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0441\u0442.\t\t\t\t\t00\t4           \u041a\u043e\u043b-\u0432\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043c\u043b.\t\t\t\t\t03\t5           \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430\t\t\t\t\t--            \u041e\u0422\u0412\u0415\u0422            \u0414\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0434\u0432\u0430 \u0431\u0439\u0442\u0430 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440.            \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0430\u0439\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u0430\u0440\u0448\u0438\u0435 \u0431\u0438\u0442\u044b \u0432\u0442\u043e\u0440\u043e\u0439 \u0431\u0430\u0439\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0431\u0438\u0442\u044b.           \u0417\u0430 \u043e\u0434\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f 125 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 984-\u04258\u0425 (984-685 \u0438 \u0442.\u0434.),            \u0438 32 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432. \u041e\u0442\u0432\u0435\u0442 \u0434\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0443\u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u043e\u0432\u0430\u043d\u044b.           \u042d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435:            \u041e\u0442\u0432\u0435\u0442            \u0418\u043c\u044f \u043f\u043e\u043b\u044f\t\t\t\t\t\t\u041f\u0440\u0438\u043c\u0435\u0440                                                                   (Hex)            \u0410\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e\t\t\t\t\t11\t0           \u0424\u0443\u043d\u043a\u0446\u0438\u044f\t\t\t\t\t\t03\t1           \u0421\u0447\u0435\u0442\u0447\u0438\u043a \u0431\u0430\u0439\u0442\t\t\t\t\t\t06\t2           \u0414\u0430\u043d\u043d\u044b\u0435 (\u0440\u0435\u0433\u0438\u0441\u0442\u0440 40108) \u0441\u0442.\t\t\t\t02\t3           \u0414\u0430\u043d\u043d\u044b\u0435 (\u0440\u0435\u0433\u0438\u0441\u0442\u0440 40108) \u043c\u043b.\t\t\t\t2B\t4           \u0414\u0430\u043d\u043d\u044b\u0435 (\u0440\u0435\u0433\u0438\u0441\u0442\u0440 40109) \u0441\u0442.\t\t\t\t00\t5           \u0414\u0430\u043d\u043d\u044b\u0435 (\u0440\u0435\u0433\u0438\u0441\u0442\u0440 40109) \u043c\u043b.\t\t\t\t00\t6           \u0414\u0430\u043d\u043d\u044b\u0435 (\u0440\u0435\u0433\u0438\u0441\u0442\u0440 40110) \u0441\u0442.\t\t\t\t00\t7           \u0414\u0430\u043d\u043d\u044b\u0435 (\u0440\u0435\u0433\u0438\u0441\u0442\u0440 40110) \u043c\u043b.\t\t\t\t64\t8           \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430\t\t\t\t\t--     *\/ #if ModBusUseFunc3!=0           if(PaketRX[1]==0x03)       {       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u043b\u043e\u0432       unsigned short AdresWord=(((((unsigned short)PaketRX[2])&lt;&lt;8)|(PaketRX[3])));       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u043b\u043e\u0432       unsigned short KolvoWord=((((unsigned short)PaketRX[4])&lt;&lt;8)|(PaketRX[5]));        \/\/\u0435\u0441\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e       if(((AdresWord+KolvoWord)&gt;ModBusMaxOutReg) || (KolvoWord&gt;ModBusMaxOutRegTX))         {\/\/\u0442\u0430\u0434\u044b \u043a\u043e\u043d\u0435\u0446         CRCmodbus=0xFFFF;\/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CRC         return;\/\/\u041e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f         }       Prg2ModBusOutReg();\/\/\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0431\u0430\u0441 (GlobalDate-&gt;ModBus)       \/\/\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u0442\u0432\u0435\u0442\u0430       \/\/\u0430\u0434\u0440\u0435\u0441       ModBusPUT(PaketRX[0]);       CRCmodbus=CRCfunc(0xFFFF,PaketRX[0]);       \/\/\u043a\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b           ModBusPUT(3);       CRCmodbus=CRCfunc(CRCmodbus,3);       \/\/\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u043d\u044b\u0445 \u0431\u0430\u0439\u0442       ModBusPUT(KolvoWord&lt;&lt;1);       CRCmodbus=CRCfunc(CRCmodbus,(KolvoWord&lt;&lt;1));       \/\/\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 ModBusOutReg[] \u0432 \u043f\u0430\u043a\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u0430       for(int i=0;i&lt;KolvoWord;i++)         {         ModBusPUT(ModBusOutReg[AdresWord+i]&gt;&gt;8);         CRCmodbus=CRCfunc(CRCmodbus,(ModBusOutReg[AdresWord+i]&gt;&gt;8));         ModBusPUT(ModBusOutReg[AdresWord+i]&gt;&gt;0);         CRCmodbus=CRCfunc(CRCmodbus,(ModBusOutReg[AdresWord+i]&gt;&gt;0));         }       ModBusPUT(CRCmodbus);       ModBusPUT(CRCmodbus&gt;&gt;8);       \/\/\u043a\u043e\u043d\u0435\u0446       CRCmodbus=0xFFFF; \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CRC       return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f       } #endif          \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/     \/\/\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 04 - \u0447\u0442\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432     \/*04 Read Input Registers            \u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u0415            \u0427\u0442\u0435\u043d\u0438\u0435 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 (\u0441\u0441\u044b\u043b\u043a\u0430 3\u0425) \u0432 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u043c.            \u0417\u0410\u041f\u0420\u041e\u0421            \u0417\u0430\u043f\u0440\u043e\u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u043e\u043c\u0435\u0440 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f.           \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 30009 \u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 17.            \u0417\u0430\u043f\u0440\u043e\u0441            \u0418\u043c\u044f \u043f\u043e\u043b\u044f\t\t\t\t\t\t\u041f\u0440\u0438\u043c\u0435\u0440                                                                   (Hex)            \u0410\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e\t\t\t\t\t11\t0           \u0424\u0443\u043d\u043a\u0446\u0438\u044f\t\t\t\t\t\t03\t1           \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0441\u0442.\t\t\t\t\t00\t2           \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043c\u043b.\t\t\t\t\t6B\t3           \u041a\u043e\u043b-\u0432\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0441\u0442.\t\t\t\t\t00\t4           \u041a\u043e\u043b-\u0432\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043c\u043b.\t\t\t\t\t03\t5           \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430\t\t\t\t\t--               \u041e\u0422\u0412\u0415\u0422            \u0414\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0434\u0432\u0430 \u0431\u0439\u0442\u0430 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440.            \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0430\u0439\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u0430\u0440\u0448\u0438\u0435 \u0431\u0438\u0442\u044b \u0432\u0442\u043e\u0440\u043e\u0439 \u0431\u0430\u0439\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0431\u0438\u0442\u044b.           \u0417\u0430 \u043e\u0434\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f 125 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 984-\u04258\u0425 (984-685 \u0438 \u0442.\u0434.),            \u0438 32 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432. \u041e\u0442\u0432\u0435\u0442 \u0434\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0443\u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u043e\u0432\u0430\u043d\u044b.           \u042d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435:            \u041e\u0442\u0432\u0435\u0442            \u0418\u043c\u044f \u043f\u043e\u043b\u044f\t\t\t\t\t\t\u041f\u0440\u0438\u043c\u0435\u0440                                                                   (Hex)            \u0410\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e\t\t\t\t\t11\t0           \u0424\u0443\u043d\u043a\u0446\u0438\u044f\t\t\t\t\t\t03\t1           \u0421\u0447\u0435\u0442\u0447\u0438\u043a \u0431\u0430\u0439\u0442\t\t\t\t\t\t02\t2           \u0414\u0430\u043d\u043d\u044b\u0435 (\u0440\u0435\u0433\u0438\u0441\u0442\u0440 30009) \u0441\u0442.\t\t\t\t00\t3           \u0414\u0430\u043d\u043d\u044b\u0435 (\u0440\u0435\u0433\u0438\u0441\u0442\u0440 30009) \u043c\u043b.\t\t\t\t2A\t4           \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430\t\t\t\t\t--       *\/ #if ModBusUseFunc4!=0          if(PaketRX[1]==0x04)       {       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u043b\u043e\u0432       unsigned short AdresWord=(((((unsigned short)PaketRX[2])&lt;&lt;8)|(PaketRX[3])));       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u043b\u043e\u0432       unsigned short KolvoWord=((((unsigned short)PaketRX[4])&lt;&lt;8)|(PaketRX[5]));        \/\/\u0435\u0441\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e       if(((AdresWord+KolvoWord)&gt;ModBusMaxInReg) || (KolvoWord&gt;ModBusMaxInRegTX))         {\/\/\u0442\u0430\u0434\u044b \u043a\u043e\u043d\u0435\u0446         CRCmodbus=0xFFFF;\/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CRC         return;\/\/\u041e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f         }       Prg2ModBusInReg();\/\/\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0431\u0430\u0441 (GlobalDate-&gt;ModBus)       \/\/\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u0442\u0432\u0435\u0442\u0430       \/\/\u0430\u0434\u0440\u0435\u0441       ModBusPUT(PaketRX[0]);       CRCmodbus=CRCfunc(0xFFFF,(PaketRX[0]));       \/\/\u043a\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b           ModBusPUT(4);       CRCmodbus=CRCfunc(CRCmodbus,4);       \/\/\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u043d\u044b\u0445 \u0431\u0430\u0439\u0442       ModBusPUT(KolvoWord&lt;&lt;1);       CRCmodbus=CRCfunc(CRCmodbus,(KolvoWord&lt;&lt;1));       \/\/\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 ModBusInReg[] \u0432 \u043f\u0430\u043a\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u0430       for(int i=0;i&lt;KolvoWord;i++)         {         ModBusPUT(ModBusInReg[AdresWord+i]&gt;&gt;8);         CRCmodbus=CRCfunc(CRCmodbus,(ModBusInReg[AdresWord+i]&gt;&gt;8));         ModBusPUT(ModBusInReg[AdresWord+i]&gt;&gt;0);         CRCmodbus=CRCfunc(CRCmodbus,(ModBusInReg[AdresWord+i]&gt;&gt;0));         }       ModBusPUT(CRCmodbus);       ModBusPUT(CRCmodbus&gt;&gt;8);       \/\/\u043a\u043e\u043d\u0435\u0446       CRCmodbus=0xFFFF; \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CRC       return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f       } #endif           \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/     \/\/\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 05 - \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e\/\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0431\u0438\u0442\u0430     \/*05 Force Single Coil            \u041e\u041f\u0418\u0421\u0410\u041d\u0418\u0415            \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u0430 (\u0441\u0441\u044b\u043b\u043a\u0430 0\u0425) \u0432 ON \u0438\u043b\u0438 OFF.            \u041f\u0440\u0438 \u0448\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u0432\u044b\u0445\u043e\u0434\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0432\u043e \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445.            \u0417\u0410\u041c\u0415\u0427\u0410\u041d\u0418\u0415 \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u0437\u0430\u0449\u0438\u0442\u044b                           \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0445\u043e\u0434\u043e\u0432.            \u0417\u0410\u041f\u0420\u041e\u0421            \u0417\u0430\u043f\u0440\u043e\u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u043e\u043c\u0435\u0440 \u0432\u044b\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438. \u0412\u044b\u0445\u043e\u0434\u044b \u0430\u0434\u0440\u0435\u0441\u0443\u044e\u0442\u0441\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 0. \u0412\u044b\u0445\u043e\u0434 1 \u0430\u0434\u0440\u0435\u0441\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a 0.           \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u044b\u0445\u043e\u0434 (ON\/OFF) \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.            \u0412\u0435\u043b\u0438\u0447\u0438\u043d\u0430 FF00 Hex - ON. \u0412\u0435\u043b\u0438\u0447\u0438\u043d\u0430 0000 - OFF. \u041b\u044e\u0431\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043d\u0435\u0432\u0435\u0440\u043d\u043e \u0438 \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434.           \u0412 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0445\u043e\u0434 173 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 ON \u0432 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 17.            \u0417\u0430\u043f\u0440\u043e\u0441            \u0418\u043c\u044f \u043f\u043e\u043b\u044f\t\t\t\t\t\t\u041f\u0440\u0438\u043c\u0435\u0440                                                                   (Hex)            \u0410\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e\t\t\t\t\t11\t0           \u0424\u0443\u043d\u043a\u0446\u0438\u044f\t\t\t\t\t\t05\t1           \u0410\u0434\u0440\u0435\u0441 \u0432\u044b\u0445\u043e\u0434\u0430 \u043c\u043b.\t\t\t\t\t00\t2           \u0410\u0434\u0440\u0435\u0441 \u0432\u044b\u0445\u043e\u0434\u0430 \u0441\u0442.\t\t\t\t\tAC\t3           \u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u0442.\t\t\t\t\t\tFF\t4           \u0414\u0430\u043d\u043d\u044b\u0435 \u043c\u043b.\t\t\t\t\t\t00\t5           \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430\t\t\t\t\t--               \u041e\u0422\u0412\u0415\u0422            \u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441.            \u041e\u0442\u0432\u0435\u0442            \u0418\u043c\u044f \u043f\u043e\u043b\u044f\t\t\t\t\t\t\u041f\u0440\u0438\u043c\u0435\u0440                                                                   (Hex)            \u0410\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e\t\t\t\t\t11\t0           \u0424\u0443\u043d\u043a\u0446\u0438\u044f\t\t\t\t\t\t05\t1           \u0410\u0434\u0440\u0435\u0441 \u0432\u044b\u0445\u043e\u0434\u0430 \u043c\u043b.\t\t\t\t\t00\t2           \u0410\u0434\u0440\u0435\u0441 \u0432\u044b\u0445\u043e\u0434\u0430 \u0441\u0442.\t\t\t\t\tAC\t3           \u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u0442.\t\t\t\t\t\tFF\t4           \u0414\u0430\u043d\u043d\u044b\u0435 \u043c\u043b.\t\t\t\t\t\t00\t5           \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430\t\t\t\t\t--       *\/ #if ModBusUseFunc5!=0          if(PaketRX[1]==0x05)       {       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u0430       unsigned short AdresBit=(((((unsigned short)PaketRX[2])&lt;&lt;8)|(PaketRX[3])));       \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0430\u0434\u0440\u0435\u0441         if(AdresBit&gt;=ModBusMaxOutBit)         {\/\/\u0435\u0441\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441         CRCmodbus=0xFFFF; \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CRC         return;\/\/\u041e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f         }       \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u0431\u0440\u043e\u0441 \u0431\u0438\u0442\u0430       switch (((((unsigned short)PaketRX[4])&lt;&lt;8)|(PaketRX[5])))         {         case 0xFF00:         \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0438\u0442\u0430         ModBusOutBit[(AdresBit&gt;&gt;3)].byte|=(1&lt;&lt;(AdresBit&amp;7));         break;         case 0x0000:         \/\/\u0441\u0431\u0440\u043e\u0441 \u0431\u0438\u0442\u0430         ModBusOutBit[(AdresBit&gt;&gt;3)].byte&amp;=(~(1&lt;&lt;(AdresBit&amp;7)));         break;         default:           {\/\/\u043a\u043e\u043d\u0435\u0446           CRCmodbus=0xFFFF; \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CRC           return;\/\/\u041e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f           }          }       \/\/\u041e\u0442\u0432\u0435\u0442       for(int i=0;i&lt;8;i++) ModBusPUT(PaketRX[i]);\/\/\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u0442\u0432\u0435\u0442\u0430       ModBus2PrgOutBit();\/\/\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0431\u0430\u0441 (ModBus-&gt;GlobalDate)       \/\/\u043a\u043e\u043d\u0435\u0446       CRCmodbus=0xFFFF; \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CRC       return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f        } #endif          \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/     \/\/\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 06 - \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e\/\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430.      \/*\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430 05, \u043d\u043e \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 (\u0441\u043b\u043e\u0432\u0430\u043c\u0438).      \u0412 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u043c\u0435\u0440 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e\/\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0438 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.      06 Preset Single Register            \u041e\u041f\u0418\u0421\u0410\u041d\u0418\u0415. \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u0432 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 (\u0441\u0441\u044b\u043b\u043a\u0430 4\u0425).           \u041f\u0440\u0438 \u0449\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u043d\u0430 \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440.            \u0417\u0410\u041c\u0415\u0427\u0410\u041d\u0418\u0415            \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.            \u0417\u0410\u041f\u0420\u041e\u0421            \u0417\u0430\u043f\u0440\u043e\u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c. \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0430\u0434\u0440\u0435\u0441\u0443\u044e\u0442\u0441\u044f \u0441 0.           \u0412\u0435\u043b\u0438\u0447\u0438\u043d\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.            \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b M84 \u0438 484 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 10-\u0442\u0438 \u0431\u0438\u0442\u043d\u0443\u044e \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443, \u0441\u0442\u0430\u0440\u0448\u0438\u0435 \u0448\u0435\u0441\u0442\u044c \u0431\u0438\u0442 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f 0.            \u0412\u0441\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 16 \u0431\u0438\u0442.           \u0412 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 40002 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430 0003 Hex \u0432 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 17.            \u0417\u0430\u043f\u0440\u043e\u0441            \u0418\u043c\u044f \u043f\u043e\u043b\u044f\t\t\t\t\t\t\u041f\u0440\u0438\u043c\u0435\u0440                                                                   (Hex)            \u0410\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e\t\t\t\t\t11\t0           \u0424\u0443\u043d\u043a\u0446\u0438\u044f\t\t\t\t\t\t06\t1           \u0410\u0434\u0440\u0435\u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u043c\u043b.\t\t\t\t\t00\t2           \u0410\u0434\u0440\u0435\u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0441\u0442.\t\t\t\t\t01\t3           \u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u0442.\t\t\t\t\t\t00\t4           \u0414\u0430\u043d\u043d\u044b\u0435 \u043c\u043b.\t\t\t\t\t\t03\t5           \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430\t\t\t\t\t--               \u041e\u0422\u0412\u0415\u0422            \u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441.            \u041e\u0442\u0432\u0435\u0442            \u0418\u043c\u044f \u043f\u043e\u043b\u044f\t\t\t\t\t\t\u041f\u0440\u0438\u043c\u0435\u0440                                                                   (Hex)            \u0410\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e\t\t\t\t\t11\t0           \u0424\u0443\u043d\u043a\u0446\u0438\u044f\t\t\t\t\t\t06\t1           \u0410\u0434\u0440\u0435\u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u043c\u043b.\t\t\t\t\t00\t2           \u0410\u0434\u0440\u0435\u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0441\u0442.\t\t\t\t\t01\t3           \u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u0442.\t\t\t\t\t\t00\t4           \u0414\u0430\u043d\u043d\u044b\u0435 \u043c\u043b.\t\t\t\t\t\t03\t5           \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430\t\t\t\t\t--       *\/ #if ModBusUseFunc6!=0         if(PaketRX[1]==0x06)       {       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u0430       unsigned short AdresWord=(((((unsigned short)PaketRX[2])&lt;&lt;8)|(PaketRX[3])));       \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0430\u0434\u0440\u0435\u0441         if(AdresWord&gt;=(ModBusMaxOutReg))         {\/\/\u0435\u0441\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441         CRCmodbus=0xFFFF; \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CRC         return;\/\/\u041e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f         }       \/\/\u0437\u0430\u043f\u0438\u0441\u044c \u0441\u043b\u043e\u0432\u0430       ModBusOutReg[AdresWord]=(((((unsigned short)PaketRX[4])&lt;&lt;8)|(PaketRX[5])));       \/\/\u041e\u0442\u0432\u0435\u0442       for(int i=0;i&lt;8;i++) ModBusPUT(PaketRX[i]);\/\/\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u0442\u0432\u0435\u0442\u0430       ModBus2PrgOutReg();\/\/\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0431\u0430\u0441 (ModBus-&gt;GlobalDate)       \/\/\u043a\u043e\u043d\u0435\u0446       CRCmodbus=0xFFFF; \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CRC       return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f       } #endif          \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/     \/\/\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 0x0F - \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445\/\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0431\u0438\u0442\u043e\u0432.      \/*\u0412 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0431\u0438\u0442\u0430, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0438\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438, \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0431\u0430\u0439\u0442\u043e\u0432 \u0438 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.      15 (0F Hex) Force Multiple Coils            \u041e\u041f\u0418\u0421\u0410\u041d\u0418\u0415            \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u044b\u0445\u043e\u0434 (\u0441\u0441\u044b\u043b\u043a\u0430 0\u0425) \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u0432 \u043e\u0434\u043d\u043e \u0438\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 ON \u0438\u043b\u0438 OFF.            \u041f\u0440\u0438 \u0448\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0432\u044b\u0445\u043e\u0434\u044b \u043d\u0430 \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u0445.            \u0417\u0410\u041c\u0415\u0427\u0410\u041d\u0418\u0415 \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u0437\u0430\u0449\u0438\u0442\u044b \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0445\u043e\u0434\u043e\u0432.            \u0417\u0410\u041f\u0420\u041e\u0421            \u0417\u0430\u043f\u0440\u043e\u0441 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442 \u0432\u044b\u0445\u043e\u0434\u044b \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438. \u0412\u044b\u0445\u043e\u0434\u044b \u0430\u0434\u0440\u0435\u0441\u0443\u044e\u0442\u0441\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 0.           \u041d\u0438\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 20 (\u0430\u0434\u0440\u0435\u0441\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a 19)            \u0432 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 17.           \u041f\u043e\u043b\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 2 \u0431\u0430\u0439\u0442\u0430: CD 01 Hex (1100 1101 0000 0001 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0435).            \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0431\u0438\u0442\u043e\u0432 \u0438 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0438\u0436\u0435:            \u0411\u0438\u0442:    1  1  0  0  1  1  0  1\t\t0  0  0  0  0  0   0  1            \u0412\u044b\u0445\u043e\u0434: 27 26 25 24 23 22 21 20\t\t-  -  -  -  -  -  29 28            \u0417\u0430\u043f\u0440\u043e\u0441            \u0418\u043c\u044f \u043f\u043e\u043b\u044f\t\t\t\t\t\t\u041f\u0440\u0438\u043c\u0435\u0440                                                                   (Hex)            \u0410\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e\t\t\t\t\t11\t0           \u0424\u0443\u043d\u043a\u0446\u0438\u044f\t\t\t\t\t\t0F\t1           \u0410\u0434\u0440\u0435\u0441 \u0432\u044b\u0445\u043e\u0434\u0430 \u0441\u0442.\t\t\t\t\t00\t2           \u0410\u0434\u0440\u0435\u0441 \u0432\u044b\u0445\u043e\u0434\u0430 \u043c\u043b.\t\t\t\t\t13\t3           \u041a\u043e\u043b-\u0432\u043e \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u0441\u0442.\t\t\t\t\t00\t4           \u041a\u043e\u043b-\u0432\u043e \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u043c\u043b.\t\t\t\t\t0A\t5           \u0421\u0447\u0435\u0442\u0447\u0438\u043a \u0431\u0430\u0439\u0442\t\t\t\t\t\t02\t6           \u0414\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 (\u0412\u044b\u0445\u043e\u0434\u044b 27-20)\t\t\tCD\t7           \u0414\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 (\u0412\u044b\u0445\u043e\u0434\u044b 29-28) \t\t\t01\t8           \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430\t\t\t\t\t--\t9               \u041e\u0422\u0412\u0415\u0422            \u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0430\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e, \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0445\u043e\u0434\u043e\u0432.           \u042d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u0437\u0430\u043f\u0440\u043e\u0441.            \u041e\u0442\u0432\u0435\u0442            \u0418\u043c\u044f \u043f\u043e\u043b\u044f\t\t\t\t\t\t\u041f\u0440\u0438\u043c\u0435\u0440                                                                   (Hex)            \u0410\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e\t\t\t\t\t11\t0           \u0424\u0443\u043d\u043a\u0446\u0438\u044f\t\t\t\t\t\t0F\t1           \u0410\u0434\u0440\u0435\u0441 \u0432\u044b\u0445\u043e\u0434\u0430 \u0441\u0442.\t\t\t\t\t00\t2           \u0410\u0434\u0440\u0435\u0441 \u0432\u044b\u0445\u043e\u0434\u0430 \u043c\u043b.\t\t\t\t\t13\t3           \u041a\u043e\u043b-\u0432\u043e \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u0441\u0442.\t\t\t\t\t00\t4           \u041a\u043e\u043b-\u0432\u043e \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u043c\u043b.\t\t\t\t\t0A\t5           \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430\t\t\t\t\t--     *\/ #if ModBusUseFunc15!=0         if(PaketRX[1]==0x0F)       {       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0431\u0438\u0442       unsigned short AdresBit=(((((unsigned short)PaketRX[2])&lt;&lt;8)|(PaketRX[3])));       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0431\u0438\u0442       unsigned short KolvoBit=(((((unsigned short)PaketRX[4])&lt;&lt;8)|(PaketRX[5])));       \/\/\u0435\u0441\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e       if(((AdresBit+KolvoBit)&gt;ModBusMaxOutBit) || (KolvoBit&gt;ModBusMaxOutBitRX))         {\/\/\u0442\u0430\u0434\u044b \u043a\u043e\u043d\u0435\u0446         CRCmodbus=0xFFFF; \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CRC         return;\/\/\u041e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f         }       \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0438\u0442\u043e\u0432       unsigned char Bit=(AdresBit&amp;7);\/\/\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0431\u0438\u0442 \u0432 ModBusOutBit[]       AdresBit=AdresBit&gt;&gt;3;\/\/\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0431\u0430\u0439\u0442 ModBusOutBit[]       \/\/\u0446\u0438\u043a\u043b \u043f\u043e \u0431\u0438\u0442\u0430\u043c       for(int i=0;i&lt;KolvoBit;i++)         {         if(PaketRX[7+(i&gt;&gt;3)]&amp;(1&lt;&lt;(i&amp;7)))\/\/\u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0431\u0438\u0442 PaketRX \u0440\u0430\u0432\u0435\u043d 1           {\/\/\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0431\u0438\u0442 \u0432 ModBusOutBit[]           ModBusOutBit[AdresBit].byte=(ModBusOutBit[AdresBit].byte)|((unsigned char)(1&lt;&lt;Bit));           }         else           {\/\/\u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0431\u0438\u0442 ModBusOutBit[]           ModBusOutBit[AdresBit].byte=(ModBusOutBit[AdresBit].byte)&amp;((unsigned char)(~(1&lt;&lt;Bit)));           }         \/\/\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0440\u0443\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438          Bit++;if(Bit==8){Bit=0;AdresBit++;}         }                  \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c CRC \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c       CRCmodbus=0xFFFF;       for(int i=0;i&lt;6;i++)         {         ModBusPUT(PaketRX[i]);         CRCmodbus=CRCfunc(CRCmodbus,(PaketRX[i]));         }       ModBusPUT(CRCmodbus);       ModBusPUT(CRCmodbus&gt;&gt;8);                  ModBus2PrgOutBit();\/\/\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0431\u0430\u0441 (ModBus-&gt;GlobalDate)              \/\/\u043a\u043e\u043d\u0435\u0446       CRCmodbus=0xFFFF; \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CRC       return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f       } #endif          \/\/\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 0x10 \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445\/\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432.     \/*16 (10 Hex) Preset Multiple Regs            \u041e\u041f\u0418\u0421\u0410\u041d\u0418\u0415            \u0417\u0430\u043f\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 (\u0441\u0441\u044b\u043b\u043a\u0430 4\u0425).            \u041f\u0440\u0438 \u0448\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435, \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0432\u043e \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445.            \u0417\u0410\u041c\u0415\u0427\u0410\u041d\u0418\u0415            \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.            \u0417\u0410\u041f\u0420\u041e\u0421            \u0417\u0430\u043f\u0440\u043e\u0441 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438. \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0430\u0434\u0440\u0435\u0441\u0443\u044e\u0442\u0441\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 0.           \u0414\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.            \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b M84 \u0438 484 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 10-\u0431\u0438\u0442\u043e\u0432\u0443\u044e \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443, \u0441\u043e \u0441\u0442\u0430\u0440\u0448\u0438\u043c\u0438 \u0448\u0435\u0441\u0442\u044c\u044e \u0431\u0438\u0442\u0430\u043c\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 0.            \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 16 \u0431\u0438\u0442.           \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0434\u0432\u0443\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 40002 \u0432 00 0A \u0438 01 02 Hex,            \u0432 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 17:            \u0417\u0430\u043f\u0440\u043e\u0441            \u0418\u043c\u044f \u043f\u043e\u043b\u044f\t\t\t\t\t\t\u041f\u0440\u0438\u043c\u0435\u0440                                                                   (Hex)            \u0410\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e\t\t\t\t\t11\t0           \u0424\u0443\u043d\u043a\u0446\u0438\u044f\t\t\t\t\t\t10\t1           \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441\t\t\t\t\t00\t2           \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441\t\t\t\t\t01\t3           \u041a\u043e\u043b-\u0432\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0441\u0442.\t\t\t\t\t00\t4           \u041a\u043e\u043b-\u0432\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043c\u043b.\t\t\t\t\t02\t5           \u0421\u0447\u0435\u0442\u0447\u0438\u043a \u0431\u0430\u0439\u0442\t\t\t\t\t\t04\t6           \u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u0442.\t\t\t\t\t\t00\t7           \u0414\u0430\u043d\u043d\u044b\u0435 \u043c\u043b.\t\t\t\t\t\t0A\t8           \u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u0442.\t\t\t\t\t\t01\t9           \u0414\u0430\u043d\u043d\u044b\u0435 \u043c\u043b.\t\t\t\t\t\t02\t10           \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430\t\t\t\t\t--               \u041e\u0422\u0412\u0415\u0422            \u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0430\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e, \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432.      *\/ #if ModBusUseFunc16!=0          if(PaketRX[1]==0x10)       {       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u043b\u043e\u0432       unsigned short b=(((((unsigned short)PaketRX[2])&lt;&lt;8)|(PaketRX[3])));       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u043b\u043e\u0432       unsigned short c=(((((unsigned short)PaketRX[4])&lt;&lt;8)|(PaketRX[5])));       \/\/\u0435\u0441\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e       if(((b+c)&gt;ModBusMaxOutReg) || c&gt;ModBusMaxOutRegRX || c==0)         {\/\/\u0442\u0430\u0434\u044b \u043a\u043e\u043d\u0435\u0446         CRCmodbus=0xFFFF;\/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CRC         return;\/\/\u041e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f         }       \/\/\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 ModBusOutReg[]       for(int i=0;i&lt;c;i++)         {         ModBusOutReg[b+i]=(((unsigned short)PaketRX[7+(i&lt;&lt;1)])&lt;&lt;8)|(PaketRX[8+(i&lt;&lt;1)]);         }       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c CRC \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c       CRCmodbus=0xFFFF;       for(int i=0;i&lt;6;i++)         {         ModBusPUT(PaketRX[i]);         CRCmodbus=CRCfunc(CRCmodbus,(PaketRX[i]));         }       ModBusPUT(CRCmodbus);       ModBusPUT(CRCmodbus&gt;&gt;8);       ModBus2PrgOutReg();\/\/\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0431\u0430\u0441 (ModBus-&gt;GlobalDate)       \/\/\u043a\u043e\u043d\u0435\u0446       CRCmodbus=0xFFFF; \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CRC       return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f        } #endif              \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/     \/\/\u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0435\u0446     CRCmodbus=0xFFFF; \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CRC     return;\/\/\/\/\u041e\u0448\u0438\u0431\u043a\u0430, \u043d\u0435\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f     }   return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f    }  \/\/\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f \u0448\u0435\u0441\u043d\u0430\u0434\u0446\u0430\u0442\u0438\u0440\u0438\u0447\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u0447\u0438\u0441\u043b\u043e static inline unsigned char Hex2Dig(unsigned char h)   {   if((h&gt;='0')&amp;&amp;(h&lt;='9')) return (h -'0');   if((h&gt;='A')&amp;&amp;(h&lt;='F')) return (h -'A'+10);   return 0;   } static unsigned char LRCmodbus;\/\/\u0442\u0443\u043a\u0443\u0449\u0438\u0439 LRC static unsigned char Simvol0;\/\/\u043f\u0440\u0435\u0434\u0438\u0434\u0443\u0449\u0438\u0439 \u043f\u0440\u0438\u043d\u044f\u0442\u0432\u0439 \u0441\u0438\u043c\u0432\u043e\u043b #define ASCII_CR (0x0D)\/\/\u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u043a\u0430\u0440\u0435\u0442\u043a\u0438  #define ASCII_LF (0x0A)\/\/\u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0440\u043e\u043a\u0438 static const unsigned char BCD[]=&quot;0123456789ABCDEF&quot;;\/\/\u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u043b\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0447\u0438\u0441\u043b\u0430 \u0432 \u0441\u0438\u043c\u0432\u043e\u043b  \/\/\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043c\u043e\u0434\u0431\u0430\u0441 ASCII void ModBusASCII(void)   {   if(Sost==0)     {\/\/\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u0438\u0435\u043c     while(!0)       {\/\/\u0426\u0438\u043a\u043b \u043f\u0440\u0438\u0435\u043c\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432       unsigned short Tmp=ModBusGET(); \/\/\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u0438\u043c\u0432\u043e\u043b \u0438\u0437 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430       if(Tmp==0) return; \/\/\u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f        \/\/\u0421\u0438\u043c\u0432\u043e\u043b \u043f\u0440\u0438\u043d\u044f\u0442       Tmp=Tmp&amp;0xFF;\/\/\u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u043f\u0440\u0438\u0435\u043c\u0430 \u0431\u0430\u0439\u0442\u0430       \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u043f\u0430\u043a\u0435\u0442\u0430       if(Tmp==':')         {\/\/\u043d\u0430\u0447\u0430\u043b\u043e \u043f\u0430\u043a\u0435\u0442\u0430         LRCmodbus=0;\/\/\u043e\u0431\u043d\u0443\u043b\u044f\u0435\u043c LRC         UkPaket=0;\/\/\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435, \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b         continue;\/\/\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u0430         }               \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0430\u043b\u0444\u0430\u0432\u0438\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f       if(!(            ((Tmp&gt;='0')&amp;&amp;(Tmp&lt;='9'))||            ((Tmp&gt;='A')&amp;&amp;(Tmp&lt;='F'))||            (Tmp==ASCII_CR)||            (Tmp==ASCII_LF)            ))          {         return;\/\/\u041e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f         }                \/\/\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b       if((UkPaket&amp;1)==0)         {\/\/\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0442\u043d\u044b\u0439 0,2,4,6...         Simvol0=Tmp; \/\/\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u043f\u0430\u043a\u0435\u0442\u0430         UkPaket++; \/\/\u0438\u043a\u0440\u0435\u043c\u0435\u0442\u0438\u0440\u0443\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043f\u0430\u043a\u0435\u0442\u0430         continue;\/\/\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441          }       else          {\/\/\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0439 1,3,5,7...         if(Tmp!=ASCII_LF)           {\/\/\u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u043a\u043e\u043d\u0435\u0446           PaketRX[UkPaket&gt;&gt;1]=(Hex2Dig(Simvol0)&lt;&lt;4)|(Hex2Dig(Tmp));\/\/\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0431\u0430\u0439\u0442 \u043f\u0430\u043a\u0435\u0442\u0430            LRCmodbus=LRCmodbus-PaketRX[UkPaket&gt;&gt;1];\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC           UkPaket++;\/\/\u0438\u043a\u0440\u0435\u043c\u0435\u0442\u0438\u0440\u0443\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043f\u0430\u043a\u0435\u0442\u0430           if(UkPaket&gt;(ModBusMaxPaketRX&lt;&lt;1))\/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435             {\/\/\u0411\u0443\u0444\u0435\u0440 \u043f\u0440\u0438\u0435\u043c\u0430 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0438\u043b\u0441\u044f             UkPaket=0;\/\/\u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043f\u0430\u043a\u0435\u0442\u0430             return;\/\/\u043e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f             }           }         else break;         }       }                \/\/\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 LCR     if(LRCmodbus!=0) return;\/\/\u041e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f          \/\/\u041f\u0440\u043e\u0432\u0435\u043a\u043a\u0430 \u0430\u0434\u0440\u0435\u0441\u0430     if((PaketRX[0]!=ModBusID)&amp;&amp;(PaketRX[0]!=ModBusID_FF))       {\/\/\u041d\u0435 \u043d\u0430\u0448 \u0430\u0434\u0440\u0435\u0441       return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f       }            \/\/\u043f\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430     Sost=!0;     TimModbus=ModBusSysTimer;\/\/\u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0442\u0430\u0439\u043c\u0435\u0440 #if ModBusMaxPauseResp!=0       return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f #endif       }        \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/    if(Sost!=0  #if ModBusMaxPauseResp!=0           &amp;&amp; (ModBusSysTimer-TimModbus)&gt;=ModBusMaxPauseResp #endif           )     {\/\/\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043e\u0442\u0432\u0435\u0442\u0430     Sost=0;     \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/         \/\/                       \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434                                  \/\/     \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ #if ModBusUseFunc1!=0          \/\/01 \u0427\u0442\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0432\u044b\u0445\u043e\u0434\u043e\u0432      if(PaketRX[1]==0x01)       {       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0431\u0438\u0442       unsigned short AdresBit=(((((unsigned short)PaketRX[2])&lt;&lt;8)|(PaketRX[3])));       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0431\u0438\u0442       unsigned short KolvoBit=((((unsigned short)PaketRX[4])&lt;&lt;8)|(PaketRX[5]));       \/\/\u0435\u0441\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e       if((AdresBit+KolvoBit)&gt;(ModBusMaxOutBit) || KolvoBit&gt;ModBusMaxOutBitTX || KolvoBit==0)         {\/\/\u043a\u043e\u043d\u0435\u0446         return;\/\/\u041e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f         }       Prg2ModBusOutBit();\/\/\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0431\u0430\u0441 (GlobalDate-&gt;ModBus)       \/\/\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u0442\u0432\u0435\u0442\u0430       ModBusPUT(':');       \/\/\u0430\u0434\u0440\u0435\u0441       ModBusPUT(BCD[PaketRX[0]&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439        ModBusPUT(BCD[PaketRX[0]&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439       LRCmodbus=0-PaketRX[0];\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC       \/\/\u043a\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b           ModBusPUT(BCD[1&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439        ModBusPUT(BCD[1&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439       LRCmodbus=LRCmodbus-1;\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC       \/\/\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u043d\u044b\u0445 \u0431\u0430\u0439\u0442       ModBusPUT(BCD[((KolvoBit+7)&gt;&gt;3)&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439        ModBusPUT(BCD[((KolvoBit+7)&gt;&gt;3)&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439       LRCmodbus=LRCmodbus-((KolvoBit+7)&gt;&gt;3);\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC       \/\/\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0438\u0442\u043e\u0432 \u0432 \u043f\u0430\u043a\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u0430       unsigned char TxByte=0;\/\/\u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0431\u0430\u0439\u0442       unsigned char Bit=AdresBit&amp;7;\/\/\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0431\u0438\u0442 \u0432 ModBusOutBit[]       AdresBit=AdresBit&gt;&gt;3;\/\/\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0431\u0430\u0439\u0442 ModBusOutBit[]       \/\/\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 ModBusOutBit[] \u0432 \u043f\u0430\u043a\u0435\u0442       int i=0;       while(!0)         {         if((ModBusOutBit[AdresBit].byte)&amp;(1&lt;&lt;Bit))\/\/\u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0431\u0438\u0442 ModBusOutBit[] \u0440\u0430\u0432\u0435\u043d 1           {\/\/\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0431\u0438\u0442 \u0432 \u043f\u0430\u043a\u0435\u0442\u0435           TxByte=TxByte|(1&lt;&lt;(i&amp;7));           }         \/\/\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0440\u0443\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438          Bit++;         if(Bit==8){Bit=0;AdresBit++;}         i++;         if((i&amp;7)==0)           {           ModBusPUT(BCD[TxByte&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439            ModBusPUT(BCD[TxByte&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439           LRCmodbus=LRCmodbus-TxByte;\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC           TxByte=0;           if(i==KolvoBit) break; else continue;           }         if(i==KolvoBit)            {           ModBusPUT(BCD[TxByte&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439            ModBusPUT(BCD[TxByte&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439           LRCmodbus=LRCmodbus-TxByte;\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC           break;           }         }       ModBusPUT(BCD[LRCmodbus&gt;&gt;4]);       ModBusPUT(BCD[LRCmodbus&amp;0x0F]);       ModBusPUT(ASCII_CR);       ModBusPUT(ASCII_LF);       \/\/\u043a\u043e\u043d\u0435\u0446       return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f       } #endif #if ModBusUseFunc2!=0          \/\/02 Read Input Status      if(PaketRX[1]==0x02)       {       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0431\u0438\u0442       unsigned short AdresBit=(((((unsigned short)PaketRX[2])&lt;&lt;8)|(PaketRX[3])));       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0431\u0438\u0442       unsigned short KolvoBit=((((unsigned short)PaketRX[4])&lt;&lt;8)|(PaketRX[5]));       \/\/\u0435\u0441\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e       if((AdresBit+KolvoBit)&gt;(ModBusMaxInBit) || KolvoBit&gt;ModBusMaxInBitTX || KolvoBit==0)         {\/\/\u043a\u043e\u043d\u0435\u0446         return;\/\/\u041e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f         }       Prg2ModBusInBit();\/\/\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0431\u0430\u0441 (GlobalDate-&gt;ModBus)       \/\/\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u0442\u0432\u0435\u0442\u0430       ModBusPUT(':');       \/\/\u0430\u0434\u0440\u0435\u0441       ModBusPUT(BCD[PaketRX[0]&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439        ModBusPUT(BCD[PaketRX[0]&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439       LRCmodbus=0-PaketRX[0];\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC       \/\/\u043a\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b           ModBusPUT(BCD[2&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439        ModBusPUT(BCD[2&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439       LRCmodbus=LRCmodbus-2;\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC       \/\/\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u043d\u044b\u0445 \u0431\u0430\u0439\u0442       ModBusPUT(BCD[((KolvoBit+7)&gt;&gt;3)&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439        ModBusPUT(BCD[((KolvoBit+7)&gt;&gt;3)&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439       LRCmodbus=LRCmodbus-((KolvoBit+7)&gt;&gt;3);\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC       \/\/\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0438\u0442\u043e\u0432 \u0432 \u043f\u0430\u043a\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u0430       unsigned char TxByte=0;\/\/\u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0431\u0430\u0439\u0442       unsigned char Bit=AdresBit&amp;7;\/\/\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0431\u0438\u0442 \u0432 ModBusOutBit[]       AdresBit=AdresBit&gt;&gt;3;\/\/\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0431\u0430\u0439\u0442 ModBusOutBit[]       \/\/\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 ModBusOutBit[] \u0432 \u043f\u0430\u043a\u0435\u0442       int i=0;       while(!0)         {         if((ModBusInBit[AdresBit].byte)&amp;(1&lt;&lt;Bit))\/\/\u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0431\u0438\u0442 ModBusOutBit[] \u0440\u0430\u0432\u0435\u043d 1           {\/\/\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0431\u0438\u0442 \u0432 \u043f\u0430\u043a\u0435\u0442\u0435           TxByte=TxByte|(1&lt;&lt;(i&amp;7));           }         \/\/\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0440\u0443\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438          Bit++;         if(Bit==8){Bit=0;AdresBit++;}         i++;         if((i&amp;7)==0)           {           ModBusPUT(BCD[TxByte&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439            ModBusPUT(BCD[TxByte&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439           LRCmodbus=LRCmodbus-TxByte;\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC           TxByte=0;           if(i==KolvoBit) break; else continue;           }         if(i==KolvoBit)            {           ModBusPUT(BCD[TxByte&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439            ModBusPUT(BCD[TxByte&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439           LRCmodbus=LRCmodbus-TxByte;\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC           break;           }         }       ModBusPUT(BCD[LRCmodbus&gt;&gt;4]);       ModBusPUT(BCD[LRCmodbus&amp;0x0F]);       ModBusPUT(ASCII_CR);       ModBusPUT(ASCII_LF);       \/\/\u043a\u043e\u043d\u0435\u0446       return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f       } #endif #if ModBusUseFunc3!=0          \/\/03 Read Holding Registers      if(PaketRX[1]==0x03)       {       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u043b\u043e\u0432       unsigned short AdresWord=(((((unsigned short)PaketRX[2])&lt;&lt;8)|(PaketRX[3])));       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u043b\u043e\u0432       unsigned short KolvoWord=((((unsigned short)PaketRX[4])&lt;&lt;8)|(PaketRX[5]));        \/\/\u0435\u0441\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e       if(((AdresWord+KolvoWord)&gt;ModBusMaxOutReg) || KolvoWord&gt;ModBusMaxOutRegTX)         {\/\/\u0442\u0430\u0434\u044b \u043a\u043e\u043d\u0435\u0446         return;\/\/\u041e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f         }       Prg2ModBusOutReg();\/\/\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0431\u0430\u0441 (GlobalDate-&gt;ModBus)       \/\/\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u0442\u0432\u0435\u0442\u0430       ModBusPUT(':');       \/\/\u0430\u0434\u0440\u0435\u0441       ModBusPUT(BCD[PaketRX[0]&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439        ModBusPUT(BCD[PaketRX[0]&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439       LRCmodbus=0-PaketRX[0];\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC       \/\/\u043a\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b       ModBusPUT(BCD[3&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439        ModBusPUT(BCD[3&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439       LRCmodbus=LRCmodbus-3;\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC       \/\/\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u043d\u044b\u0445 \u0431\u0430\u0439\u0442       ModBusPUT(BCD[(KolvoWord&lt;&lt;1)&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439        ModBusPUT(BCD[(KolvoWord&lt;&lt;1)&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439       LRCmodbus=LRCmodbus-(KolvoWord&lt;&lt;1);\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC       \/\/\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 ModBusOutReg[] \u0432 \u043f\u0430\u043a\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u0430       for(int i=0;i&lt;KolvoWord;i++)         {         ModBusPUT(BCD[((ModBusOutReg[AdresWord+i])&gt;&gt;8)&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439          ModBusPUT(BCD[((ModBusOutReg[AdresWord+i])&gt;&gt;8)&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439         LRCmodbus=LRCmodbus-((ModBusOutReg[AdresWord+i])&gt;&gt;8);\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC         ModBusPUT(BCD[(((ModBusOutReg[AdresWord+i])&gt;&gt;0)&gt;&gt;4)&amp;0x0F]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439          ModBusPUT(BCD[(((ModBusOutReg[AdresWord+i])&gt;&gt;0)&gt;&gt;0)&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439         LRCmodbus=LRCmodbus-((ModBusOutReg[AdresWord+i])&gt;&gt;0);\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC         }       ModBusPUT(BCD[LRCmodbus&gt;&gt;4]);       ModBusPUT(BCD[LRCmodbus&amp;0x0F]);       ModBusPUT(ASCII_CR);       ModBusPUT(ASCII_LF);       \/\/\u043a\u043e\u043d\u0435\u0446       return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f       } #endif #if ModBusUseFunc4!=0          \/\/04 Read Input Registers      if(PaketRX[1]==0x04)       {       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u043b\u043e\u0432       unsigned short AdresWord=(((((unsigned short)PaketRX[2])&lt;&lt;8)|(PaketRX[3])));       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u043b\u043e\u0432       unsigned short KolvoWord=((((unsigned short)PaketRX[4])&lt;&lt;8)|(PaketRX[5]));        \/\/\u0435\u0441\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e       if(((AdresWord+KolvoWord)&gt;ModBusMaxOutReg) || KolvoWord&gt;ModBusMaxOutRegTX)         {\/\/\u0442\u0430\u0434\u044b \u043a\u043e\u043d\u0435\u0446         return;\/\/\u041e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f         }       Prg2ModBusInReg();\/\/\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0431\u0430\u0441 (GlobalDate-&gt;ModBus)       \/\/\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u0442\u0432\u0435\u0442\u0430       ModBusPUT(':');       \/\/\u0430\u0434\u0440\u0435\u0441       ModBusPUT(BCD[PaketRX[0]&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439        ModBusPUT(BCD[PaketRX[0]&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439       LRCmodbus=0-PaketRX[0];\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC       \/\/\u043a\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b       ModBusPUT(BCD[4&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439        ModBusPUT(BCD[4&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439       LRCmodbus=LRCmodbus-4;\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC       \/\/\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u043d\u044b\u0445 \u0431\u0430\u0439\u0442       ModBusPUT(BCD[(KolvoWord&lt;&lt;1)&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439        ModBusPUT(BCD[(KolvoWord&lt;&lt;1)&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439       LRCmodbus=LRCmodbus-(KolvoWord&lt;&lt;1);\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC       \/\/\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 ModBusOutReg[] \u0432 \u043f\u0430\u043a\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u0430       for(int i=0;i&lt;KolvoWord;i++)         {         ModBusPUT(BCD[((ModBusInReg[AdresWord+i])&gt;&gt;8)&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439          ModBusPUT(BCD[((ModBusInReg[AdresWord+i])&gt;&gt;8)&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439         LRCmodbus=LRCmodbus-((ModBusInReg[AdresWord+i])&gt;&gt;8);\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC         ModBusPUT(BCD[(((ModBusInReg[AdresWord+i])&gt;&gt;0)&gt;&gt;4)&amp;0x0F]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439          ModBusPUT(BCD[(((ModBusInReg[AdresWord+i])&gt;&gt;0)&gt;&gt;0)&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439         LRCmodbus=LRCmodbus-((ModBusInReg[AdresWord+i])&gt;&gt;0);\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC         }       ModBusPUT(BCD[LRCmodbus&gt;&gt;4]);       ModBusPUT(BCD[LRCmodbus&amp;0x0F]);       ModBusPUT(ASCII_CR);       ModBusPUT(ASCII_LF);       \/\/\u043a\u043e\u043d\u0435\u0446       return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f       } #endif #if ModBusUseFunc5!=0          \/\/05 Force Single Coil      if(PaketRX[1]==0x05)       {       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u0430       unsigned short AdresBit=(((((unsigned short)PaketRX[2])&lt;&lt;8)|(PaketRX[3])));       \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0430\u0434\u0440\u0435\u0441         if(AdresBit&gt;=ModBusMaxOutBit)\/\/\u0435\u0441\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441         {\/\/\u0442\u0430\u0434\u044b \u043a\u043e\u043d\u0435\u0446         return;\/\/\u041e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f         }       \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u0431\u0440\u043e\u0441 \u0431\u0438\u0442\u0430       switch (((((unsigned short)PaketRX[4])&lt;&lt;8)|(PaketRX[5])))         {         case 0xFF00:         \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0438\u0442\u0430         ModBusOutBit[(AdresBit&gt;&gt;3)].byte|=(1&lt;&lt;(AdresBit&amp;7));         break;         case 0x0000:         \/\/\u0441\u0431\u0440\u043e\u0441 \u0431\u0438\u0442\u0430         ModBusOutBit[(AdresBit&gt;&gt;3)].byte&amp;=(~(1&lt;&lt;(AdresBit&amp;7)));         break;         default:           { \/\/\u043a\u043e\u043d\u0435\u0446           return;\/\/\u041e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f           }          }                      \/\/\u041e\u0442\u0432\u0435\u0442       ModBusPUT(':');       for(int i=0;i&lt;7;i++)         {         ModBusPUT(BCD[PaketRX[i]&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439          ModBusPUT(BCD[PaketRX[i]&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439         }       ModBusPUT(ASCII_CR);       ModBusPUT(ASCII_LF);                 ModBus2PrgOutBit();\/\/\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0431\u0430\u0441 (ModBus-&gt;GlobalDate)              \/\/\u043a\u043e\u043d\u0435\u0446       return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f        } #endif #if ModBusUseFunc6!=0          \/\/06 Preset Single Register      if(PaketRX[1]==0x06)       {       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u0430       unsigned short AdresWord=(((((unsigned short)PaketRX[2])&lt;&lt;8)|(PaketRX[3])));              \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0430\u0434\u0440\u0435\u0441         if(AdresWord&gt;=(ModBusMaxOutReg))\/\/\u0435\u0441\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441         {\/\/\u0442\u0430\u0434\u044b \u043a\u043e\u043d\u0435\u0446         return;\/\/\u041e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f         }       \/\/\u0437\u0430\u043f\u0438\u0441\u044c \u0441\u043b\u043e\u0432\u0430       ModBusOutReg[AdresWord]=(((((unsigned short)PaketRX[4])&lt;&lt;8)|(PaketRX[5])));              \/\/\u041e\u0442\u0432\u0435\u0442       ModBusPUT(':');       for(int i=0;i&lt;7;i++)         {         ModBusPUT(BCD[PaketRX[i]&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439          ModBusPUT(BCD[PaketRX[i]&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439         }       ModBusPUT(ASCII_CR);       ModBusPUT(ASCII_LF);              ModBus2PrgOutReg();\/\/\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0431\u0430\u0441 (ModBus-&gt;GlobalDate)                \/\/\u043a\u043e\u043d\u0435\u0446       return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f       } #endif #if ModBusUseFunc15!=0           \/\/15 (0F Hex) Force Multiple Coils      if(PaketRX[1]==0x0F)       {       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0431\u0438\u0442       unsigned short AdresBit=(((((unsigned short)PaketRX[2])&lt;&lt;8)|(PaketRX[3])));       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0431\u0438\u0442       unsigned short KolvoBit=(((((unsigned short)PaketRX[4])&lt;&lt;8)|(PaketRX[5])));       \/\/\u0435\u0441\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e       if(((AdresBit+KolvoBit)&gt;ModBusMaxOutBit) || (KolvoBit&gt;ModBusMaxOutBitRX))         {\/\/\u0442\u0430\u0434\u044b \u043a\u043e\u043d\u0435\u0446         return;\/\/\u041e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f         }       \/\/\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0438\u0442\u043e\u0432       unsigned char Bit=(AdresBit&amp;7);\/\/\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0431\u0438\u0442 \u0432 ModBusOutBit[]       AdresBit=AdresBit&gt;&gt;3;\/\/\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0431\u0430\u0439\u0442 ModBusOutBit[]       \/\/\u0446\u0438\u043a\u043b \u043f\u043e \u0431\u0438\u0442\u0430\u043c       for(int i=0;i&lt;KolvoBit;i++)         {         if(PaketRX[7+(i&gt;&gt;3)]&amp;(1&lt;&lt;(i&amp;7)))\/\/\u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0431\u0438\u0442 PaketRX \u0440\u0430\u0432\u0435\u043d 1           {\/\/\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0431\u0438\u0442 \u0432 ModBusOutBit[]           ModBusOutBit[AdresBit].byte=(ModBusOutBit[AdresBit].byte)|((unsigned char)(1&lt;&lt;Bit));           }         else           {\/\/\u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0431\u0438\u0442 ModBusOutBit[]           ModBusOutBit[AdresBit].byte=(ModBusOutBit[AdresBit].byte)&amp;((unsigned char)(~(1&lt;&lt;Bit)));           }         \/\/\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0440\u0443\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438          Bit++;if(Bit==8){Bit=0;AdresBit++;}         }                         \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c LRC \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c       LRCmodbus=0;       ModBusPUT(':');       for(int i=0;i&lt;6;i++)         {         ModBusPUT(BCD[PaketRX[i]&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439          ModBusPUT(BCD[PaketRX[i]&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439         LRCmodbus=LRCmodbus-PaketRX[i];\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC         }       ModBusPUT(BCD[LRCmodbus&gt;&gt;4]);       ModBusPUT(BCD[LRCmodbus&amp;0x0F]);       ModBusPUT(ASCII_CR);       ModBusPUT(ASCII_LF);              ModBus2PrgOutBit();\/\/\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0431\u0430\u0441 (ModBus-&gt;GlobalDate)              \/\/\u043a\u043e\u043d\u0435\u0446       return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f       } #endif #if ModBusUseFunc16!=0             \/\/16 (10 Hex) Preset Multiple Regs      if(PaketRX[1]==0x10)       {       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u043b\u043e\u0432       unsigned short b=(((((unsigned short)PaketRX[2])&lt;&lt;8)|(PaketRX[3])));       \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u043b\u043e\u0432       unsigned short c=(((((unsigned short)PaketRX[4])&lt;&lt;8)|(PaketRX[5])));              \/\/\u0435\u0441\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e       if(((b+c)&gt;ModBusMaxOutReg) || c&gt;ModBusMaxOutRegRX)         {         \/\/\u0442\u0430\u0434\u044b \u043a\u043e\u043d\u0435\u0446         return;\/\/\u041e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f         }       \/\/\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 ModBusOutReg[]       for(int i=0;i&lt;c;i++)         {         ModBusOutReg[b+i]=(((unsigned short)PaketRX[7+(i&lt;&lt;1)])&lt;&lt;8)|(PaketRX[8+(i&lt;&lt;1)]);         }              \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c LRC \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c       LRCmodbus=0;       ModBusPUT(':');       for(int i=0;i&lt;6;i++)         {         ModBusPUT(BCD[PaketRX[i]&gt;&gt;4]);\/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0439          ModBusPUT(BCD[PaketRX[i]&amp;0x0F]);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043b\u0430\u0434\u0448\u0438\u0439         LRCmodbus=LRCmodbus-PaketRX[i];\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c LRC         }       ModBusPUT(BCD[LRCmodbus&gt;&gt;4]);       ModBusPUT(BCD[LRCmodbus&amp;0x0F]);       ModBusPUT(ASCII_CR);       ModBusPUT(ASCII_LF);              ModBus2PrgOutReg();\/\/\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0431\u0430\u0441 (ModBus-&gt;GlobalDate)              \/\/\u043a\u043e\u043d\u0435\u0446       return;\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f        } #endif         }    \/\/\u043a\u043e\u043d\u0435\u0446   return;\/\/\u041e\u0448\u0438\u0431\u043a\u0430, \u043d\u0435\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f   } <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">ModBus2Prg.c<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#define __MODBUS2PRG_C #include &quot;modbus.h&quot;  \/\/\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0431\u0430\u0441 \/\/\u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u041c\u043e\u0434\u0411\u0430\u0441 void Prg2ModBusOutBit(void)   {\/\/\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u044b\u0445\u043e\u0434\u043e\u0432      return;   }  void Prg2ModBusInBit(void)   {\/\/\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u0445\u043e\u0434\u043e\u0432   \/\/ModBusInBit[0].bit0=1;      return;   }  void Prg2ModBusOutReg(void)   {\/\/\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 4\u0425 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438      return;   }  void Prg2ModBusInReg(void)   {\/\/\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u043e\u0432 3\u0425 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f      return;   }  \/\/\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0431\u0430\u0441 \/\/\u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u041c\u043e\u0434\u0411\u0430\u0441 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435  void ModBus2PrgOutBit(void)   {\/\/\u0447\u0442\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u044b\u0445\u043e\u0434\u043e\u0432      return;   }  void ModBus2PrgOutReg(void)   {\/\/\u0447\u0442\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 4\u0425 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438      return;   } <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>   \u0412 \u0444\u0430\u0439\u043b\u0435 modbus.h \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f, \u043e\u043f\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u0447\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b. \u041a\u0440\u0430\u0442\u043a\u043e \u043e\u043f\u0438\u0448\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043e\u043f\u0446\u0438\u0438 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u0447\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b.<br \/>  <b>ModBusUseFunc1 \u2014 ModBusUseFunc15<\/b> \u2013 \u043e\u043f\u0446\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 ModBus. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 ModBus \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430, \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u043e, \u0444\u0443\u043d\u043a\u0446\u0438\u0438 3,6 \u0438 16. \u041d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u043b\u0438\u0448\u043d\u0438\u0439 \u043a\u043e\u0434.<br \/>  <b>ModBusID, ModBusID_FF<\/b> \u2013 \u0410\u0434\u0440\u0435\u0441\u0430 \u043d\u0430 \u0448\u0438\u043d\u0435 ModBus. \u0414\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0430 \u0430\u0434\u0440\u0435\u0441\u0430. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430 \u0432 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0430\u0434\u0440\u0435\u0441 ModBusID \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0430 \u0430\u0434\u0440\u0435\u0441 ModBusID_FF \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0434\u043b\u044f \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<br \/>  <b>ModBusMaxPause<\/b> \u2013 \u041f\u0430\u0443\u0437\u0430 \u043c\u0435\u0436\u0434\u0443 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438, \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0430\u043a\u0435\u0442\u0430, \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u0432\u0430\u043d\u0442\u0430\u0445 ModBusSysTimer. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043a\u0432\u0430\u043d\u0442 ModBusSysTimer \u0440\u0430\u0432\u0435\u043d 1\u043c\u0421. \u0414\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, ModBus Master \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 Win-\u043c\u0430\u0448\u0438\u043d\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0432\u0430\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u0435\u043d\u0435\u0435 1\u043c\u0421 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0435\u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u043c. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u0447\u0442\u043e \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430 ModBusMaxPause \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043a\u0430 5-10\u043c\u0421.<br \/>  <b>ModBusMaxPauseResp<\/b> \u2014 \u041f\u0430\u0443\u0437\u0430 \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c Master \u0438 \u043e\u0442\u0432\u0435\u0442\u043e\u043c Slave. \u041c\u043d\u043e\u0433\u0438\u0435 ModBus Master \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u043c\u0435\u044e\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043d\u0430 \u043f\u0440\u0438\u0435\u043c, \u044d\u0442\u0443 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439.<br \/>  <b>ModBusMaxInBit, ModBusMaxOutBit, ModBusMaxInReg, ModBusMaxOutReg<\/b> \u2014 \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u0445\u043e\u0434\u043e\u0432, \u0432\u044b\u0445\u043e\u0434\u043e\u0432, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438. \u0412 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u0434 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b ModBus. \u0415\u0441\u043b\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0430\u0432\u043d\u043e\u0435 \u043d\u0443\u043b\u044e.<br \/>  <b>ModBusMaxInBitTX, ModBusMaxOutBitTX, ModBusMaxInRegTX, ModBusMaxOutRegTX<\/b> \u2014 \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0432\u0445\u043e\u0434\u043e\u0432, \u0432\u044b\u0445\u043e\u0434\u043e\u0432, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435. \u042d\u0442\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 ModBus Master. <\/p>\n<p>  \u0414\u043b\u044f \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 \u043b\u044e\u0431\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<br \/>  <b>ModBusSysTimer<\/b> \u2014 \u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u044e\u0449\u0430\u044f\u0441\u044f \u043a\u0430\u0436\u0434\u0443\u044e \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c uwTick, \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 HAL STM32, \u0438\u043b\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u044f\u0437\u044b\u043a\u0430 \u0421\u0438 <b>clock()<\/b>. <br \/>  <b>void ModBusPUT(unsigned char A)<\/b> \u2014 \u0417\u0430\u043f\u0438\u0441\u044c \u0431\u0430\u0439\u0442\u0430 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a.<br \/>  <b>unsigned short ModBusGET(void)<\/b> \u2014 \u0427\u0442\u0435\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u0430 \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430. \u0415\u0441\u043b\u0438 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u043d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445, \u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 0, \u0435\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0435\u0441\u0442\u044c, \u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u2014 \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 0\u044501, \u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 \u2014 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p>  \u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0442\u0435\u043b\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 <b>Prg2ModBusOutBit(), Prg2ModBusInBit(), Prg2ModBusOutReg(), Prg2ModBusInReg()<\/b>, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0435 \u0437\u0430 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b ModBus. \u0422\u0430\u043a \u0436\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0442\u0435\u043b\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 <b>ModBus2PrgOutBit(), ModBus2PrgOutReg()<\/b>, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0435 \u0437\u0430 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 ModBus \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0412 \u0442\u0435\u043b\u0435 \u044d\u0442\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<br \/>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<pre><code class=\"cpp\">void Prg2ModBusOutReg(void)   {\/\/\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, 4\u0425 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438   ModBusOutReg[0]=A;   ModBusOutReg[1]=B;   ModBusOutReg[2]=C;   return;   } void ModBus2PrgOutReg(void)   { \/\/\u0447\u0442\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 4\u0425, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438   if(ModBusOutReg[0] &lt; MaxA) A= ModBusOutReg[0];   B=ModBusOutReg[1];   C=ModBusOutReg[2];   return;   } <\/code><\/pre>\n<p>  \u0414\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0442\u0435\u043b\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0430\u0434\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0446\u0438\u044e <b>ModBusUseGlobal<\/b>.<br \/>  \u0414\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 ModBus \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <b>ModBusIni()<\/b>. \u0424\u0443\u043d\u043a\u0446\u0438\u0438 <b>ModBusRTU()<\/b> \u0438\u043b\u0438 <b>ModBusASCII()<\/b> \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430\u043c RTU \u0438 ASCII \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u0418\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b:  <\/p>\n<pre><code class=\"cpp\">ModBusIni(); while(!0)   {   if(ModBusTip==RTU) ModBusRTU(); else ModBusASCII();   } <\/code><\/pre>\n<p>  \u041d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0443 ModBus \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u0441\u044f \u043e\u0431 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 (UART). \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430\/\u0432\u044b\u0432\u043e\u0434\u0430, \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u0438 \u0438\u0445 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0441 OPC \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c Kepware, \u043f\u0430\u043d\u0435\u043b\u044f\u043c\u0438 SIMATIC \u0438 Wientek, \u0442\u0430\u043a\u0436\u0435 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 ModBus Master\u0430\u043c\u0438, \u0432\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 PIC \u0438 STM32, \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430 \u0441\u0432\u043e\u044e 142% \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c. \u041f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043b\u0435\u0433\u043a\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u043f\u043e\u0434 \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u0438\u043f\u044b 8-16-32\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u044b\u0445 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432.<\/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\/post\/526350\/\"> https:\/\/habr.com\/ru\/post\/526350\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/mj\/u0\/6w\/mju06wdtrkkmlqtotvikzdatilq.png\" alt=\"image\"><\/p>\n<p>  \u0412 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 ModBus Slave \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043d\u043e \u043e\u043d\u0438 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u0441\u043b\u043e\u0436\u043d\u044b \u0432 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0438 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0433\u0440\u0443\u0431\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043f\u043e \u0441\u043a\u0440\u043e\u043c\u043d\u043e\u043c\u0443 \u043c\u043d\u0435\u043d\u0438\u044e \u0430\u0432\u0442\u043e\u0440\u0430, \u043b\u0438\u0448\u0435\u043d\u043d\u0430\u044f \u044d\u0442\u0438\u0445 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432.  <\/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-312513","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/312513","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=312513"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/312513\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=312513"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=312513"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=312513"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}