{"id":40393,"date":"2026-02-24T17:11:37","date_gmt":"2026-02-24T09:11:37","guid":{"rendered":"https:\/\/www.modbus.cn\/40393.html"},"modified":"2026-02-24T17:11:37","modified_gmt":"2026-02-24T09:11:37","slug":"modbus-bian-cheng-kai-fa-gong-ju-da-quan-30-kai-yuan-ku-yu-kuang-jia-wan-quan-zhi-nan","status":"publish","type":"post","link":"https:\/\/www.modbus.cn\/en\/40393.html","title":{"rendered":"Modbus\u7f16\u7a0b\u5f00\u53d1\u5de5\u5177\u5927\u5168\uff1a30+\u5f00\u6e90\u5e93\u4e0e\u6846\u67b6\u5b8c\u5168\u6307\u5357"},"content":{"rendered":"<h1 id=\"modbus30\">Modbus\u7f16\u7a0b\u5f00\u53d1\u5de5\u5177\u5927\u5168\uff1a30+\u5f00\u6e90\u5e93\u4e0e\u6846\u67b6\u5b8c\u5168\u6307\u5357<\/h1>\n<h2 id=\"_1\">\u5f15\u8a00<\/h2>\n<p>\u5728\u5de5\u4e1a\u81ea\u52a8\u5316\u9886\u57df\uff0cModbus\u534f\u8bae\u4f5c\u4e3a\u6700\u5e7f\u6cdb\u4f7f\u7528\u7684\u901a\u4fe1\u6807\u51c6\uff0c\u62e5\u6709\u4e30\u5bcc\u7684\u7f16\u7a0b\u5f00\u53d1\u5de5\u5177\u548c\u5e93\u3002\u672c\u6587\u5168\u9762\u6574\u7406\u4e86\u6765\u81eaModbus\u5b98\u65b9\u8d44\u6e90\u9875\u9762\u768430\u591a\u4e2a\u7f16\u7a0b\u5de5\u5177\uff0c\u4e3a\u5f00\u53d1\u8005\u63d0\u4f9b\u4e00\u7ad9\u5f0f\u53c2\u8003\u6307\u5357\u3002\u65e0\u8bba\u60a8\u662fC\u3001Java\u3001Python\u3001C#\u8fd8\u662f\u5d4c\u5165\u5f0f\u5f00\u53d1\u8005\uff0c\u90fd\u80fd\u5728\u8fd9\u91cc\u627e\u5230\u9002\u5408\u7684Modbus\u5f00\u53d1\u89e3\u51b3\u65b9\u6848\u3002<\/p>\n<h2 id=\"_2\">\ud83d\udcca \u5de5\u5177\u5206\u7c7b\u6982\u89c8<\/h2>\n<h3 id=\"1-c\">1. \u8de8\u5e73\u53f0C\u8bed\u8a00\u5e93<\/h3>\n<h3 id=\"2-java\">2. Java\u5f00\u53d1\u5de5\u5177\u96c6<\/h3>\n<h3 id=\"3-python\">3. Python\u751f\u6001\u5de5\u5177<\/h3>\n<h3 id=\"4-netc\">4. .NET\/C#\u5f00\u53d1\u6846\u67b6<\/h3>\n<h3 id=\"5\">5. \u5d4c\u5165\u5f0f\u4e0e\u5355\u7247\u673a\u5e93<\/h3>\n<h3 id=\"6\">6. \u8c03\u8bd5\u4e0e\u6d4b\u8bd5\u5de5\u5177<\/h3>\n<hr \/>\n<h2 id=\"c\">\ud83d\udd27 \u8de8\u5e73\u53f0C\u8bed\u8a00\u5e93<\/h2>\n<h3 id=\"1-libmodbus-c\">1. LibModbus &#8211; \u6700\u6d41\u884c\u7684C\u8bed\u8a00\u5e93<\/h3>\n<p><strong>\u9879\u76ee\u5730\u5740<\/strong>: http:\/\/libmodbus.org\/<\/p>\n<h4 id=\"_3\">\u6838\u5fc3\u7279\u6027<\/h4>\n<ul>\n<li><strong>\u8de8\u5e73\u53f0\u652f\u6301<\/strong>: Linux, Mac OS X, FreeBSD, QNX, Win32<\/li>\n<li><strong>\u534f\u8bae\u652f\u6301<\/strong>: RTU(\u4e32\u53e3)\u548cTCP(\u4ee5\u592a\u7f51)<\/li>\n<li><strong>\u8bb8\u53ef\u8bc1<\/strong>: LGPL v3 (\u5141\u8bb8\u5546\u4e1a\u4f7f\u7528)<\/li>\n<li><strong>\u8bed\u8a00<\/strong>: \u7eafC\u5b9e\u73b0<\/li>\n<\/ul>\n<h4 id=\"_4\">\u5b89\u88c5\u4e0e\u4f7f\u7528<\/h4>\n<div class=\"codehilite\">\n<pre><span><\/span><code><span class=\"c1\"># Ubuntu\/Debian\u5b89\u88c5<\/span>\nsudo<span class=\"w\"> <\/span>apt-get<span class=\"w\"> <\/span>install<span class=\"w\"> <\/span>libmodbus-dev\n\n<span class=\"c1\"># \u7f16\u8bd1\u793a\u4f8b<\/span>\ngcc<span class=\"w\"> <\/span>-o<span class=\"w\"> <\/span>modbus_test<span class=\"w\"> <\/span>modbus_test.c<span class=\"w\"> <\/span>-lmodbus\n\n<span class=\"c1\"># \u57fa\u672c\u4f7f\u7528<\/span>\n<span class=\"c1\">#include &lt;modbus.h&gt;<\/span>\nmodbus_t<span class=\"w\"> <\/span>*ctx<span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span>modbus_new_tcp<span class=\"o\">(<\/span><span class=\"s2\">&quot;192.168.1.100&quot;<\/span>,<span class=\"w\"> <\/span><span class=\"m\">502<\/span><span class=\"o\">)<\/span><span class=\"p\">;<\/span>\nmodbus_connect<span class=\"o\">(<\/span>ctx<span class=\"o\">)<\/span><span class=\"p\">;<\/span>\nuint16_t<span class=\"w\"> <\/span>reg<span class=\"o\">[<\/span><span class=\"m\">10<\/span><span class=\"o\">]<\/span><span class=\"p\">;<\/span>\nmodbus_read_registers<span class=\"o\">(<\/span>ctx,<span class=\"w\"> <\/span><span class=\"m\">0<\/span>,<span class=\"w\"> <\/span><span class=\"m\">10<\/span>,<span class=\"w\"> <\/span>reg<span class=\"o\">)<\/span><span class=\"p\">;<\/span>\n<\/code><\/pre>\n<\/div>\n<h4 id=\"_5\">\u4f18\u52bf\u5206\u6790<\/h4>\n<ul>\n<li>\u2705 \u6027\u80fd\u4f18\u5f02\uff0c\u8d44\u6e90\u5360\u7528\u4f4e<\/li>\n<li>\u2705 \u793e\u533a\u6d3b\u8dc3\uff0c\u6587\u6863\u5b8c\u5584<\/li>\n<li>\u2705 \u5de5\u4e1a\u7ea7\u7a33\u5b9a\u6027\u9a8c\u8bc1<\/li>\n<li>\u2705 \u652f\u6301\u5f02\u6b65\u64cd\u4f5c<\/li>\n<\/ul>\n<h3 id=\"2-freemodbus-\">2. FreeModbus &#8211; \u5d4c\u5165\u5f0f\u4e13\u7528<\/h3>\n<p><strong>\u9879\u76ee\u5730\u5740<\/strong>: http:\/\/sourceforge.net\/projects\/freemodbus.berlios\/<\/p>\n<h4 id=\"_6\">\u9002\u7528\u573a\u666f<\/h4>\n<ul>\n<li><strong>\u76ee\u6807\u5e73\u53f0<\/strong>: AVR, ARM7, Coldfire\u7b49\u5fae\u63a7\u5236\u5668<\/li>\n<li><strong>\u534f\u8bae\u652f\u6301<\/strong>: ASCII\/RTU<\/li>\n<li><strong>\u8bb8\u53ef\u8bc1<\/strong>: LGPL (\u6808) + GPL (\u793a\u4f8b)<\/li>\n<\/ul>\n<h4 id=\"_7\">\u5d4c\u5165\u5f0f\u96c6\u6210\u793a\u4f8b<\/h4>\n<div class=\"codehilite\">\n<pre><span><\/span><code><span class=\"c1\">\/\/ FreeModbus\u914d\u7f6e<\/span>\n<span class=\"cp\">#define MB_ASCII_ENABLED    1<\/span>\n<span class=\"cp\">#define MB_RTU_ENABLED      1<\/span>\n<span class=\"cp\">#define MB_TCP_ENABLED      0<\/span>\n\n<span class=\"c1\">\/\/ \u56de\u8c03\u51fd\u6570\u5b9e\u73b0<\/span>\n<span class=\"n\">eMBErrorCode<\/span><span class=\"w\"> <\/span><span class=\"nf\">eMBRegInputCB<\/span><span class=\"p\">(<\/span><span class=\"n\">UCHAR<\/span><span class=\"w\"> <\/span><span class=\"o\">*<\/span><span class=\"n\">pucRegBuffer<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">USHORT<\/span><span class=\"w\"> <\/span><span class=\"n\">usAddress<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span>\n<span class=\"w\">                           <\/span><span class=\"n\">USHORT<\/span><span class=\"w\"> <\/span><span class=\"n\">usNRegs<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span>\n<span class=\"w\">    <\/span><span class=\"c1\">\/\/ \u5904\u7406\u8f93\u5165\u5bc4\u5b58\u5668\u8bfb\u53d6<\/span>\n<span class=\"w\">    <\/span><span class=\"k\">return<\/span><span class=\"w\"> <\/span><span class=\"n\">MB_ENOERR<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<hr \/>\n<h2 id=\"java\">\u2615 Java\u5f00\u53d1\u5de5\u5177\u96c6<\/h2>\n<h3 id=\"3-jamod-java\">3. Jamod &#8211; \u7ecf\u5178Java\u5b9e\u73b0<\/h3>\n<p><strong>\u9879\u76ee\u5730\u5740<\/strong>: http:\/\/jamod.sourceforge.net\/<\/p>\n<h4 id=\"_8\">\u67b6\u6784\u8bbe\u8ba1<\/h4>\n<div class=\"codehilite\">\n<pre><span><\/span><code><span class=\"c1\">\/\/ \u521b\u5efaTCP\u4e3b\u7ad9<\/span>\n<span class=\"n\">ModbusTCPMaster<\/span><span class=\"w\"> <\/span><span class=\"n\">master<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">ModbusTCPMaster<\/span><span class=\"p\">(<\/span><span class=\"s\">&quot;192.168.1.100&quot;<\/span><span class=\"p\">);<\/span>\n<span class=\"n\">master<\/span><span class=\"p\">.<\/span><span class=\"na\">connect<\/span><span class=\"p\">();<\/span>\n\n<span class=\"c1\">\/\/ \u8bfb\u53d6\u4fdd\u6301\u5bc4\u5b58\u5668<\/span>\n<span class=\"n\">ReadMultipleRegistersRequest<\/span><span class=\"w\"> <\/span><span class=\"n\">req<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">ReadMultipleRegistersRequest<\/span><span class=\"p\">(<\/span>\n<span class=\"w\">    <\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span><span class=\"w\">  <\/span><span class=\"c1\">\/\/ \u8d77\u59cb\u5730\u5740<\/span>\n<span class=\"w\">    <\/span><span class=\"mi\">10<\/span><span class=\"w\">  <\/span><span class=\"c1\">\/\/ \u5bc4\u5b58\u5668\u6570\u91cf<\/span>\n<span class=\"p\">);<\/span>\n<span class=\"n\">ReadMultipleRegistersResponse<\/span><span class=\"w\"> <\/span><span class=\"n\">resp<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span>\n<span class=\"w\">    <\/span><span class=\"p\">(<\/span><span class=\"n\">ReadMultipleRegistersResponse<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"n\">master<\/span><span class=\"p\">.<\/span><span class=\"na\">send<\/span><span class=\"p\">(<\/span><span class=\"n\">req<\/span><span class=\"p\">);<\/span>\n\n<span class=\"c1\">\/\/ \u83b7\u53d6\u6570\u636e<\/span>\n<span class=\"kt\">int<\/span><span class=\"o\">[]<\/span><span class=\"w\"> <\/span><span class=\"n\">registerValues<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">resp<\/span><span class=\"p\">.<\/span><span class=\"na\">getRegisterValues<\/span><span class=\"p\">();<\/span>\n<\/code><\/pre>\n<\/div>\n<h4 id=\"_9\">\u529f\u80fd\u7279\u6027<\/h4>\n<ul>\n<li>\u2705 \u652f\u6301ASCII\u3001RTU\u3001TCP<\/li>\n<li>\u2705 \u4e3b\u7ad9\/\u4ece\u7ad9\u5b8c\u6574\u5b9e\u73b0<\/li>\n<li>\u2705 \u7ebf\u7a0b\u5b89\u5168\u8bbe\u8ba1<\/li>\n<li>\u2705 Maven\u96c6\u6210\u652f\u6301<\/li>\n<\/ul>\n<h3 id=\"4-modbus4j-java\">4. Modbus4J &#8211; \u9ad8\u6027\u80fdJava\u5e93<\/h3>\n<p><strong>\u9879\u76ee\u5730\u5740<\/strong>: http:\/\/sourceforge.net\/projects\/modbus4j\/<\/p>\n<h4 id=\"_10\">\u6027\u80fd\u4f18\u5316\u7279\u6027<\/h4>\n<div class=\"codehilite\">\n<pre><span><\/span><code><span class=\"c1\">\/\/ \u521b\u5efa\u5de5\u5382\u5b9e\u4f8b<\/span>\n<span class=\"n\">ModbusFactory<\/span><span class=\"w\"> <\/span><span class=\"n\">factory<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">ModbusFactory<\/span><span class=\"p\">();<\/span>\n\n<span class=\"c1\">\/\/ TCP\u4e3b\u7ad9\u914d\u7f6e<\/span>\n<span class=\"n\">TcpMaster<\/span><span class=\"w\"> <\/span><span class=\"n\">master<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">factory<\/span><span class=\"p\">.<\/span><span class=\"na\">createTcpMaster<\/span><span class=\"p\">(<\/span>\n<span class=\"w\">    <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">TcpMasterConfig<\/span><span class=\"p\">.<\/span><span class=\"na\">Builder<\/span><span class=\"p\">(<\/span><span class=\"s\">&quot;192.168.1.100&quot;<\/span><span class=\"p\">)<\/span>\n<span class=\"w\">        <\/span><span class=\"p\">.<\/span><span class=\"na\">setPort<\/span><span class=\"p\">(<\/span><span class=\"mi\">502<\/span><span class=\"p\">)<\/span>\n<span class=\"w\">        <\/span><span class=\"p\">.<\/span><span class=\"na\">setTimeout<\/span><span class=\"p\">(<\/span><span class=\"mi\">3000<\/span><span class=\"p\">)<\/span>\n<span class=\"w\">        <\/span><span class=\"p\">.<\/span><span class=\"na\">build<\/span><span class=\"p\">(),<\/span>\n<span class=\"w\">    <\/span><span class=\"kc\">true<\/span><span class=\"w\">  <\/span><span class=\"c1\">\/\/ \u4fdd\u6301\u8fde\u63a5<\/span>\n<span class=\"p\">);<\/span>\n\n<span class=\"c1\">\/\/ \u6279\u91cf\u8bfb\u53d6\u4f18\u5316<\/span>\n<span class=\"n\">BatchRead<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">String<\/span><span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">batch<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">BatchRead<\/span><span class=\"o\">&lt;&gt;<\/span><span class=\"p\">();<\/span>\n<span class=\"n\">batch<\/span><span class=\"p\">.<\/span><span class=\"na\">addLocator<\/span><span class=\"p\">(<\/span><span class=\"s\">&quot;temp1&quot;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">InputRegisterLocator<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mi\">0<\/span><span class=\"p\">));<\/span>\n<span class=\"n\">batch<\/span><span class=\"p\">.<\/span><span class=\"na\">addLocator<\/span><span class=\"p\">(<\/span><span class=\"s\">&quot;temp2&quot;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">InputRegisterLocator<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mi\">1<\/span><span class=\"p\">));<\/span>\n\n<span class=\"n\">BatchResults<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">String<\/span><span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">results<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">master<\/span><span class=\"p\">.<\/span><span class=\"na\">send<\/span><span class=\"p\">(<\/span><span class=\"n\">batch<\/span><span class=\"p\">);<\/span>\n<span class=\"n\">Float<\/span><span class=\"w\"> <\/span><span class=\"n\">temperature<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">results<\/span><span class=\"p\">.<\/span><span class=\"na\">getFloatValue<\/span><span class=\"p\">(<\/span><span class=\"s\">&quot;temp1&quot;<\/span><span class=\"p\">);<\/span>\n<\/code><\/pre>\n<\/div>\n<h4 id=\"_11\">\u4f18\u52bf\u5bf9\u6bd4<\/h4>\n<table>\n<thead>\n<tr>\n<th>\u7279\u6027<\/th>\n<th>Jamod<\/th>\n<th>Modbus4J<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u6027\u80fd<\/td>\n<td>\u4e2d\u7b49<\/td>\n<td><strong>\u4f18\u79c0<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\u5185\u5b58\u5360\u7528<\/td>\n<td>\u8f83\u9ad8<\/td>\n<td>\u8f83\u4f4e<\/td>\n<\/tr>\n<tr>\n<td>API\u8bbe\u8ba1<\/td>\n<td>\u4f20\u7edf<\/td>\n<td>\u73b0\u4ee3\u5316<\/td>\n<\/tr>\n<tr>\n<td>\u5f02\u6b65\u652f\u6301<\/td>\n<td>\u6709\u9650<\/td>\n<td><strong>\u5b8c\u5584<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"5-modbuspal-java\">5. ModbusPal &#8211; Java\u6a21\u62df\u5668<\/h3>\n<p><strong>\u9879\u76ee\u5730\u5740<\/strong>: http:\/\/modbuspal.sourceforge.net\/<\/p>\n<h4 id=\"_12\">\u6a21\u62df\u5668\u529f\u80fd<\/h4>\n<ul>\n<li><strong>\u52a8\u6001\u6570\u636e\u751f\u6210<\/strong>: \u6570\u5b66\u51fd\u6570 + Python\u811a\u672c<\/li>\n<li><strong>\u4e32\u53e3\u652f\u6301<\/strong>: \u901a\u8fc7RxTx\u5e93<\/li>\n<li><strong>\u811a\u672c\u6269\u5c55<\/strong>: Jython\u96c6\u6210<\/li>\n<li><strong>\u53ef\u89c6\u5316\u754c\u9762<\/strong>: Swing GUI<\/li>\n<\/ul>\n<h4 id=\"_13\">\u6d4b\u8bd5\u573a\u666f\u914d\u7f6e<\/h4>\n<div class=\"codehilite\">\n<pre><span><\/span><code><span class=\"c1\"># ModbusPal Python\u811a\u672c\u793a\u4f8b<\/span>\n<span class=\"k\">def<\/span> <span class=\"nf\">generate_temperature<\/span><span class=\"p\">(<\/span><span class=\"n\">cycle<\/span><span class=\"p\">):<\/span>\n    <span class=\"kn\">import<\/span> <span class=\"nn\">math<\/span>\n    <span class=\"c1\"># \u6a21\u62df\u6e29\u5ea6\u6ce2\u52a8<\/span>\n    <span class=\"n\">base_temp<\/span> <span class=\"o\">=<\/span> <span class=\"mf\">25.0<\/span>\n    <span class=\"n\">amplitude<\/span> <span class=\"o\">=<\/span> <span class=\"mf\">5.0<\/span>\n    <span class=\"n\">period<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">100<\/span>  <span class=\"c1\"># \u5468\u671f<\/span>\n    <span class=\"k\">return<\/span> <span class=\"n\">base_temp<\/span> <span class=\"o\">+<\/span> <span class=\"n\">amplitude<\/span> <span class=\"o\">*<\/span> <span class=\"n\">math<\/span><span class=\"o\">.<\/span><span class=\"n\">sin<\/span><span class=\"p\">(<\/span><span class=\"mi\">2<\/span> <span class=\"o\">*<\/span> <span class=\"n\">math<\/span><span class=\"o\">.<\/span><span class=\"n\">pi<\/span> <span class=\"o\">*<\/span> <span class=\"n\">cycle<\/span> <span class=\"o\">\/<\/span> <span class=\"n\">period<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre>\n<\/div>\n<hr \/>\n<h2 id=\"python\">\ud83d\udc0d Python\u751f\u6001\u5de5\u5177<\/h2>\n<h3 id=\"6-umodbus-python\">6. uModbus &#8211; \u7eafPython\u5b9e\u73b0<\/h3>\n<p><strong>\u9879\u76ee\u5730\u5740<\/strong>: https:\/\/pypi.python.org\/pypi\/uModbus\/0.5.0<\/p>\n<h4 id=\"_14\">\u5b89\u88c5\u4e0e\u57fa\u7840\u4f7f\u7528<\/h4>\n<div class=\"codehilite\">\n<pre><span><\/span><code><span class=\"c1\"># \u5b89\u88c5<\/span>\npip<span class=\"w\"> <\/span>install<span class=\"w\"> <\/span>uModbus\n\n<span class=\"c1\"># \u6216\u4ece\u6e90\u7801\u5b89\u88c5<\/span>\ngit<span class=\"w\"> <\/span>clone<span class=\"w\"> <\/span>https:\/\/github.com\/AdvancedClimateSystems\/uModbus\n<span class=\"nb\">cd<\/span><span class=\"w\"> <\/span>uModbus\npython<span class=\"w\"> <\/span>setup.py<span class=\"w\"> <\/span>install\n<\/code><\/pre>\n<\/div>\n<h4 id=\"_15\">\u5ba2\u6237\u7aef\u793a\u4f8b<\/h4>\n<div class=\"codehilite\">\n<pre><span><\/span><code><span class=\"kn\">from<\/span> <span class=\"nn\">umodbus<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">client<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">socket<\/span>\n\n<span class=\"c1\"># \u521b\u5efaTCP\u5ba2\u6237\u7aef<\/span>\n<span class=\"n\">sock<\/span> <span class=\"o\">=<\/span> <span class=\"n\">socket<\/span><span class=\"o\">.<\/span><span class=\"n\">socket<\/span><span class=\"p\">(<\/span><span class=\"n\">socket<\/span><span class=\"o\">.<\/span><span class=\"n\">AF_INET<\/span><span class=\"p\">,<\/span> <span class=\"n\">socket<\/span><span class=\"o\">.<\/span><span class=\"n\">SOCK_STREAM<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">sock<\/span><span class=\"o\">.<\/span><span class=\"n\">connect<\/span><span class=\"p\">((<\/span><span class=\"s1\">&#39;192.168.1.100&#39;<\/span><span class=\"p\">,<\/span> <span class=\"mi\">502<\/span><span class=\"p\">))<\/span>\n\n<span class=\"c1\"># \u8bfb\u53d6\u4fdd\u6301\u5bc4\u5b58\u5668<\/span>\n<span class=\"n\">message<\/span> <span class=\"o\">=<\/span> <span class=\"n\">client<\/span><span class=\"o\">.<\/span><span class=\"n\">read_holding_registers<\/span><span class=\"p\">(<\/span>\n    <span class=\"n\">slave_id<\/span><span class=\"o\">=<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">starting_address<\/span><span class=\"o\">=<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">quantity<\/span><span class=\"o\">=<\/span><span class=\"mi\">10<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"n\">response<\/span> <span class=\"o\">=<\/span> <span class=\"n\">client<\/span><span class=\"o\">.<\/span><span class=\"n\">send_message<\/span><span class=\"p\">(<\/span><span class=\"n\">message<\/span><span class=\"p\">,<\/span> <span class=\"n\">sock<\/span><span class=\"p\">)<\/span>\n<span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"s2\">&quot;\u5bc4\u5b58\u5668\u503c: <\/span><span class=\"si\">{<\/span><span class=\"n\">response<\/span><span class=\"si\">}<\/span><span class=\"s2\">&quot;<\/span><span class=\"p\">)<\/span>\n\n<span class=\"c1\"># \u5199\u5165\u5355\u4e2a\u5bc4\u5b58\u5668<\/span>\n<span class=\"n\">write_message<\/span> <span class=\"o\">=<\/span> <span class=\"n\">client<\/span><span class=\"o\">.<\/span><span class=\"n\">write_single_register<\/span><span class=\"p\">(<\/span>\n    <span class=\"n\">slave_id<\/span><span class=\"o\">=<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">address<\/span><span class=\"o\">=<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">value<\/span><span class=\"o\">=<\/span><span class=\"mi\">100<\/span>\n<span class=\"p\">)<\/span>\n<span class=\"n\">client<\/span><span class=\"o\">.<\/span><span class=\"n\">send_message<\/span><span class=\"p\">(<\/span><span class=\"n\">write_message<\/span><span class=\"p\">,<\/span> <span class=\"n\">sock<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre>\n<\/div>\n<h4 id=\"_16\">\u670d\u52a1\u5668\u793a\u4f8b<\/h4>\n<div class=\"codehilite\">\n<pre><span><\/span><code><span class=\"kn\">from<\/span> <span class=\"nn\">umodbus.server.tcp<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">RequestHandler<\/span><span class=\"p\">,<\/span> <span class=\"n\">get_server<\/span>\n<span class=\"kn\">from<\/span> <span class=\"nn\">umodbus.utils<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">log_to_stream<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">logging<\/span>\n\n<span class=\"c1\"># \u8bbe\u7f6e\u65e5\u5fd7<\/span>\n<span class=\"n\">log_to_stream<\/span><span class=\"p\">(<\/span><span class=\"n\">level<\/span><span class=\"o\">=<\/span><span class=\"n\">logging<\/span><span class=\"o\">.<\/span><span class=\"n\">DEBUG<\/span><span class=\"p\">)<\/span>\n\n<span class=\"c1\"># \u5b9a\u4e49\u6570\u636e\u5b58\u50a8<\/span>\n<span class=\"n\">data_store<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n    <span class=\"s1\">&#39;coils&#39;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span><span class=\"mi\">0<\/span><span class=\"p\">:<\/span> <span class=\"kc\">True<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">:<\/span> <span class=\"kc\">False<\/span><span class=\"p\">,<\/span> <span class=\"mi\">2<\/span><span class=\"p\">:<\/span> <span class=\"kc\">True<\/span><span class=\"p\">},<\/span>\n    <span class=\"s1\">&#39;discrete_inputs&#39;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span><span class=\"mi\">0<\/span><span class=\"p\">:<\/span> <span class=\"kc\">False<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">:<\/span> <span class=\"kc\">True<\/span><span class=\"p\">},<\/span>\n    <span class=\"s1\">&#39;holding_registers&#39;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span><span class=\"mi\">0<\/span><span class=\"p\">:<\/span> <span class=\"mi\">100<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">:<\/span> <span class=\"mi\">200<\/span><span class=\"p\">,<\/span> <span class=\"mi\">2<\/span><span class=\"p\">:<\/span> <span class=\"mi\">300<\/span><span class=\"p\">},<\/span>\n    <span class=\"s1\">&#39;input_registers&#39;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span><span class=\"mi\">0<\/span><span class=\"p\">:<\/span> <span class=\"mi\">400<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">:<\/span> <span class=\"mi\">500<\/span><span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"c1\"># \u521b\u5efa\u670d\u52a1\u5668<\/span>\n<span class=\"n\">app<\/span> <span class=\"o\">=<\/span> <span class=\"n\">get_server<\/span><span class=\"p\">(<\/span><span class=\"n\">RequestHandler<\/span><span class=\"p\">,<\/span> <span class=\"n\">data_store<\/span><span class=\"p\">)<\/span>\n\n<span class=\"k\">if<\/span> <span class=\"vm\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"s1\">&#39;__main__&#39;<\/span><span class=\"p\">:<\/span>\n    <span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n        <span class=\"n\">app<\/span><span class=\"o\">.<\/span><span class=\"n\">serve_forever<\/span><span class=\"p\">()<\/span>\n    <span class=\"k\">finally<\/span><span class=\"p\">:<\/span>\n        <span class=\"n\">app<\/span><span class=\"o\">.<\/span><span class=\"n\">shutdown<\/span><span class=\"p\">()<\/span>\n        <span class=\"n\">app<\/span><span class=\"o\">.<\/span><span class=\"n\">server_close<\/span><span class=\"p\">()<\/span>\n<\/code><\/pre>\n<\/div>\n<h3 id=\"7-modbus-test-kit-modbus-tk\">7. Modbus Test Kit (modbus-tk)<\/h3>\n<p><strong>\u9879\u76ee\u5730\u5740<\/strong>: http:\/\/code.google.com\/p\/modbus-tk\/<\/p>\n<h4 id=\"_17\">\u9ad8\u7ea7\u7279\u6027<\/h4>\n<div class=\"codehilite\">\n<pre><span><\/span><code><span class=\"kn\">import<\/span> <span class=\"nn\">modbus_tk<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">modbus_tk.defines<\/span> <span class=\"k\">as<\/span> <span class=\"nn\">cst<\/span>\n<span class=\"kn\">from<\/span> <span class=\"nn\">modbus_tk<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">modbus_tcp<\/span>\n\n<span class=\"c1\"># \u521b\u5efa\u4e3b\u7ad9<\/span>\n<span class=\"n\">master<\/span> <span class=\"o\">=<\/span> <span class=\"n\">modbus_tcp<\/span><span class=\"o\">.<\/span><span class=\"n\">TcpMaster<\/span><span class=\"p\">(<\/span><span class=\"n\">host<\/span><span class=\"o\">=<\/span><span class=\"s2\">&quot;192.168.1.100&quot;<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">master<\/span><span class=\"o\">.<\/span><span class=\"n\">set_timeout<\/span><span class=\"p\">(<\/span><span class=\"mf\">5.0<\/span><span class=\"p\">)<\/span>\n\n<span class=\"c1\"># \u6279\u91cf\u64cd\u4f5c<\/span>\n<span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n    <span class=\"c1\"># \u8bfb\u53d6\u591a\u4e2a\u6570\u636e\u7c7b\u578b<\/span>\n    <span class=\"n\">coils<\/span> <span class=\"o\">=<\/span> <span class=\"n\">master<\/span><span class=\"o\">.<\/span><span class=\"n\">execute<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"n\">cst<\/span><span class=\"o\">.<\/span><span class=\"n\">READ_COILS<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"mi\">10<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">inputs<\/span> <span class=\"o\">=<\/span> <span class=\"n\">master<\/span><span class=\"o\">.<\/span><span class=\"n\">execute<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"n\">cst<\/span><span class=\"o\">.<\/span><span class=\"n\">READ_DISCRETE_INPUTS<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">holding<\/span> <span class=\"o\">=<\/span> <span class=\"n\">master<\/span><span class=\"o\">.<\/span><span class=\"n\">execute<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"n\">cst<\/span><span class=\"o\">.<\/span><span class=\"n\">READ_HOLDING_REGISTERS<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"mi\">20<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">input_reg<\/span> <span class=\"o\">=<\/span> <span class=\"n\">master<\/span><span class=\"o\">.<\/span><span class=\"n\">execute<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"n\">cst<\/span><span class=\"o\">.<\/span><span class=\"n\">READ_INPUT_REGISTERS<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"mi\">10<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"c1\"># \u5199\u5165\u64cd\u4f5c<\/span>\n    <span class=\"n\">master<\/span><span class=\"o\">.<\/span><span class=\"n\">execute<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"n\">cst<\/span><span class=\"o\">.<\/span><span class=\"n\">WRITE_SINGLE_COIL<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">output_value<\/span><span class=\"o\">=<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">master<\/span><span class=\"o\">.<\/span><span class=\"n\">execute<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"n\">cst<\/span><span class=\"o\">.<\/span><span class=\"n\">WRITE_SINGLE_REGISTER<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">output_value<\/span><span class=\"o\">=<\/span><span class=\"mi\">1000<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">master<\/span><span class=\"o\">.<\/span><span class=\"n\">execute<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"n\">cst<\/span><span class=\"o\">.<\/span><span class=\"n\">WRITE_MULTIPLE_REGISTERS<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> \n                   <span class=\"n\">output_value<\/span><span class=\"o\">=<\/span><span class=\"p\">[<\/span><span class=\"mi\">100<\/span><span class=\"p\">,<\/span> <span class=\"mi\">200<\/span><span class=\"p\">,<\/span> <span class=\"mi\">300<\/span><span class=\"p\">,<\/span> <span class=\"mi\">400<\/span><span class=\"p\">])<\/span>\n\n<span class=\"k\">except<\/span> <span class=\"n\">modbus_tk<\/span><span class=\"o\">.<\/span><span class=\"n\">modbus<\/span><span class=\"o\">.<\/span><span class=\"n\">ModbusError<\/span> <span class=\"k\">as<\/span> <span class=\"n\">e<\/span><span class=\"p\">:<\/span>\n    <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"s2\">&quot;Modbus\u9519\u8bef: <\/span><span class=\"si\">{<\/span><span class=\"n\">e<\/span><span class=\"si\">}<\/span><span class=\"s2\">&quot;<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre>\n<\/div>\n<h4 id=\"_18\">\u6027\u80fd\u5bf9\u6bd4<\/h4>\n<table>\n<thead>\n<tr>\n<th>\u7279\u6027<\/th>\n<th>uModbus<\/th>\n<th>modbus-tk<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u534f\u8bae\u5b8c\u6574\u6027<\/td>\n<td>\u57fa\u672c\u529f\u80fd<\/td>\n<td><strong>\u5b8c\u6574\u529f\u80fd<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\u6027\u80fd<\/td>\n<td>\u4e2d\u7b49<\/td>\n<td>\u8f83\u9ad8<\/td>\n<\/tr>\n<tr>\n<td>\u6587\u6863\u8d28\u91cf<\/td>\n<td>\u4e00\u822c<\/td>\n<td><strong>\u4f18\u79c0<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\u793e\u533a\u6d3b\u8dc3\u5ea6<\/td>\n<td>\u8f83\u4f4e<\/td>\n<td>\u6d3b\u8dc3<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h2 id=\"netc\">\ud83d\udcbb .NET\/C#\u5f00\u53d1\u6846\u67b6<\/h2>\n<h3 id=\"8-nmodbus-c\">8. NModbus &#8211; \u4e3b\u6d41C#\u5b9e\u73b0<\/h3>\n<p><strong>\u9879\u76ee\u5730\u5740<\/strong>: http:\/\/code.google.com\/p\/nmodbus\/<\/p>\n<h4 id=\"nuget\">NuGet\u5b89\u88c5<\/h4>\n<div class=\"codehilite\">\n<pre><span><\/span><code>Install-Package<span class=\"w\"> <\/span>NModbus\n<\/code><\/pre>\n<\/div>\n<h4 id=\"_19\">\u5b8c\u6574\u793a\u4f8b<\/h4>\n<div class=\"codehilite\">\n<pre><span><\/span><code><span class=\"k\">using<\/span><span class=\"w\"> <\/span><span class=\"nn\">NModbus<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">using<\/span><span class=\"w\"> <\/span><span class=\"nn\">System.Net.Sockets<\/span><span class=\"p\">;<\/span>\n\n<span class=\"k\">class<\/span><span class=\"w\"> <\/span><span class=\"nc\">Program<\/span>\n<span class=\"p\">{<\/span>\n<span class=\"w\">    <\/span><span class=\"k\">static<\/span><span class=\"w\"> <\/span><span class=\"k\">void<\/span><span class=\"w\"> <\/span><span class=\"nf\">Main<\/span><span class=\"p\">()<\/span>\n<span class=\"w\">    <\/span><span class=\"p\">{<\/span>\n<span class=\"w\">        <\/span><span class=\"c1\">\/\/ \u521b\u5efaTCP\u5ba2\u6237\u7aef<\/span>\n<span class=\"w\">        <\/span><span class=\"n\">TcpClient<\/span><span class=\"w\"> <\/span><span class=\"n\">tcpClient<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">TcpClient<\/span><span class=\"p\">(<\/span><span class=\"s\">&quot;192.168.1.100&quot;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"m\">502<\/span><span class=\"p\">);<\/span>\n<span class=\"w\">        <\/span><span class=\"kt\">var<\/span><span class=\"w\"> <\/span><span class=\"n\">factory<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">ModbusFactory<\/span><span class=\"p\">();<\/span>\n<span class=\"w\">        <\/span><span class=\"n\">IModbusMaster<\/span><span class=\"w\"> <\/span><span class=\"n\">master<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">factory<\/span><span class=\"p\">.<\/span><span class=\"n\">CreateMaster<\/span><span class=\"p\">(<\/span><span class=\"n\">tcpClient<\/span><span class=\"p\">);<\/span>\n\n<span class=\"w\">        <\/span><span class=\"c1\">\/\/ \u8bfb\u53d6\u64cd\u4f5c<\/span>\n<span class=\"w\">        <\/span><span class=\"kt\">ushort<\/span><span class=\"p\">[]<\/span><span class=\"w\"> <\/span><span class=\"n\">holdingRegisters<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">master<\/span><span class=\"p\">.<\/span><span class=\"n\">ReadHoldingRegisters<\/span><span class=\"p\">(<\/span><span class=\"m\">1<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"m\">0<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"m\">10<\/span><span class=\"p\">);<\/span>\n<span class=\"w\">        <\/span><span class=\"kt\">bool<\/span><span class=\"p\">[]<\/span><span class=\"w\"> <\/span><span class=\"n\">coils<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">master<\/span><span class=\"p\">.<\/span><span class=\"n\">ReadCoils<\/span><span class=\"p\">(<\/span><span class=\"m\">1<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"m\">0<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"m\">16<\/span><span class=\"p\">);<\/span>\n<span class=\"w\">        <\/span><span class=\"kt\">bool<\/span><span class=\"p\">[]<\/span><span class=\"w\"> <\/span><span class=\"n\">inputs<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">master<\/span><span class=\"p\">.<\/span><span class=\"n\">ReadInputs<\/span><span class=\"p\">(<\/span><span class=\"m\">1<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"m\">0<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"m\">8<\/span><span class=\"p\">);<\/span>\n<span class=\"w\">        <\/span><span class=\"kt\">ushort<\/span><span class=\"p\">[]<\/span><span class=\"w\"> <\/span><span class=\"n\">inputRegisters<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">master<\/span><span class=\"p\">.<\/span><span class=\"n\">ReadInputRegisters<\/span><span class=\"p\">(<\/span><span class=\"m\">1<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"m\">0<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"m\">10<\/span><span class=\"p\">);<\/span>\n\n<span class=\"w\">        <\/span><span class=\"c1\">\/\/ \u5199\u5165\u64cd\u4f5c<\/span>\n<span class=\"w\">        <\/span><span class=\"n\">master<\/span><span class=\"p\">.<\/span><span class=\"n\">WriteSingleCoil<\/span><span class=\"p\">(<\/span><span class=\"m\">1<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"m\">0<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"k\">true<\/span><span class=\"p\">);<\/span>\n<span class=\"w\">        <\/span><span class=\"n\">master<\/span><span class=\"p\">.<\/span><span class=\"n\">WriteSingleRegister<\/span><span class=\"p\">(<\/span><span class=\"m\">1<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"m\">0<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"m\">1000<\/span><span class=\"p\">);<\/span>\n<span class=\"w\">        <\/span><span class=\"n\">master<\/span><span class=\"p\">.<\/span><span class=\"n\">WriteMultipleRegisters<\/span><span class=\"p\">(<\/span><span class=\"m\">1<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"m\">0<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"kt\">ushort<\/span><span class=\"p\">[]<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"m\">100<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"m\">200<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"m\">300<\/span><span class=\"p\">});<\/span>\n\n<span class=\"w\">        <\/span><span class=\"c1\">\/\/ \u5f02\u6b65\u64cd\u4f5c<\/span>\n<span class=\"w\">        <\/span><span class=\"kt\">var<\/span><span class=\"w\"> <\/span><span class=\"n\">task<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">master<\/span><span class=\"p\">.<\/span><span class=\"n\">ReadHoldingRegistersAsync<\/span><span class=\"p\">(<\/span><span class=\"m\">1<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"m\">0<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"m\">10<\/span><span class=\"p\">);<\/span>\n<span class=\"w\">        <\/span><span class=\"n\">task<\/span><span class=\"p\">.<\/span><span class=\"n\">ContinueWith<\/span><span class=\"p\">(<\/span><span class=\"n\">t<\/span><span class=\"w\"> <\/span><span class=\"o\">=&gt;<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span>\n<span class=\"w\">            <\/span><span class=\"k\">if<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"n\">t<\/span><span class=\"p\">.<\/span><span class=\"n\">IsCompletedSuccessfully<\/span><span class=\"p\">)<\/span>\n<span class=\"w\">            <\/span><span class=\"p\">{<\/span>\n<span class=\"w\">                <\/span><span class=\"n\">Console<\/span><span class=\"p\">.<\/span><span class=\"n\">WriteLine<\/span><span class=\"p\">(<\/span><span class=\"s\">$&quot;\u8bfb\u53d6\u5b8c\u6210: {t.Result.Length}\u4e2a\u5bc4\u5b58\u5668&quot;<\/span><span class=\"p\">);<\/span>\n<span class=\"w\">            <\/span><span class=\"p\">}<\/span>\n<span class=\"w\">        <\/span><span class=\"p\">});<\/span>\n\n<span class=\"w\">        <\/span><span class=\"n\">tcpClient<\/span><span class=\"p\">.<\/span><span class=\"n\">Close<\/span><span class=\"p\">();<\/span>\n<span class=\"w\">    <\/span><span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<h4 id=\"_20\">\u9ad8\u7ea7\u7279\u6027<\/h4>\n<div class=\"codehilite\">\n<pre><span><\/span><code><span class=\"c1\">\/\/ 1. \u81ea\u5b9a\u4e49\u4f20\u8f93\u5c42<\/span>\n<span class=\"k\">public<\/span><span class=\"w\"> <\/span><span class=\"k\">class<\/span><span class=\"w\"> <\/span><span class=\"nc\">CustomTransport<\/span><span class=\"w\"> <\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"n\">IModbusTransport<\/span>\n<span class=\"p\">{<\/span>\n<span class=\"w\">    <\/span><span class=\"c1\">\/\/ \u5b9e\u73b0\u81ea\u5b9a\u4e49\u901a\u4fe1\u534f\u8bae<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"c1\">\/\/ 2. \u4e8b\u4ef6\u5904\u7406<\/span>\n<span class=\"n\">master<\/span><span class=\"p\">.<\/span><span class=\"n\">ModbusSlaveRequest<\/span><span class=\"w\"> <\/span><span class=\"o\">+=<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"n\">sender<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">args<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"o\">=&gt;<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span>\n<span class=\"w\">    <\/span><span class=\"n\">Console<\/span><span class=\"p\">.<\/span><span class=\"n\">WriteLine<\/span><span class=\"p\">(<\/span><span class=\"s\">$&quot;\u8bf7\u6c42: {args.Message.FunctionCode}&quot;<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">};<\/span>\n\n<span class=\"c1\">\/\/ 3. \u6027\u80fd\u76d1\u63a7<\/span>\n<span class=\"kt\">var<\/span><span class=\"w\"> <\/span><span class=\"n\">diagnostics<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">master<\/span><span class=\"p\">.<\/span><span class=\"n\">Diagnostics<\/span><span class=\"p\">;<\/span>\n<span class=\"n\">Console<\/span><span class=\"p\">.<\/span><span class=\"n\">WriteLine<\/span><span class=\"p\">(<\/span><span class=\"s\">$&quot;\u6210\u529f\u8bf7\u6c42: {diagnostics.NumberOfSuccessRequests}&quot;<\/span><span class=\"p\">);<\/span>\n<span class=\"n\">Console<\/span><span class=\"p\">.<\/span><span class=\"n\">WriteLine<\/span><span class=\"p\">(<\/span><span class=\"s\">$&quot;\u5931\u8d25\u8bf7\u6c42: {diagnostics.NumberOfFailRequests}&quot;<\/span><span class=\"p\">);<\/span>\n<\/code><\/pre>\n<\/div>\n<h3 id=\"9-ascommnet-\">9. ASComm.NET &#8211; \u5546\u4e1a\u7ea7\u7ec4\u4ef6<\/h3>\n<p><strong>\u9879\u76ee\u5730\u5740<\/strong>: http:\/\/automatedsolutions.com\/products\/dotnet\/ascomm\/<\/p>\n<h4 id=\"_21\">\u4f01\u4e1a\u7ea7\u7279\u6027<\/h4>\n<div class=\"codehilite\">\n<pre><span><\/span><code><span class=\"c1\">\/\/ \u53ef\u89c6\u5316\u914d\u7f6e<\/span>\n<span class=\"n\">ASCommNET<\/span><span class=\"w\"> <\/span><span class=\"n\">comm<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">ASCommNET<\/span><span class=\"p\">();<\/span>\n<span class=\"n\">comm<\/span><span class=\"p\">.<\/span><span class=\"n\">Protocol<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">ProtocolType<\/span><span class=\"p\">.<\/span><span class=\"n\">ModbusTCP<\/span><span class=\"p\">;<\/span>\n<span class=\"n\">comm<\/span><span class=\"p\">.<\/span><span class=\"n\">Server<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"s\">&quot;192.168.1.100&quot;<\/span><span class=\"p\">;<\/span>\n<span class=\"n\">comm<\/span><span class=\"p\">.<\/span><span class=\"n\">Port<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"m\">502<\/span><span class=\"p\">;<\/span>\n\n<span class=\"c1\">\/\/ \u6570\u636e\u9879\u7ba1\u7406<\/span>\n<span class=\"n\">DataItem<\/span><span class=\"w\"> <\/span><span class=\"n\">tempItem<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">DataItem<\/span><span class=\"p\">();<\/span>\n<span class=\"n\">tempItem<\/span><span class=\"p\">.<\/span><span class=\"n\">Name<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"s\">&quot;Temperature&quot;<\/span><span class=\"p\">;<\/span>\n<span class=\"n\">tempItem<\/span><span class=\"p\">.<\/span><span class=\"n\">Address<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"s\">&quot;40001&quot;<\/span><span class=\"p\">;<\/span><span class=\"w\">  <\/span><span class=\"c1\">\/\/ \u4fdd\u6301\u5bc4\u5b58\u566840001<\/span>\n<span class=\"n\">tempItem<\/span><span class=\"p\">.<\/span><span class=\"n\">DataType<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">DataType<\/span><span class=\"p\">.<\/span><span class=\"n\">Int16<\/span><span class=\"p\">;<\/span>\n<span class=\"n\">tempItem<\/span><span class=\"p\">.<\/span><span class=\"n\">ScanRate<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"m\">1000<\/span><span class=\"p\">;<\/span><span class=\"w\">  <\/span><span class=\"c1\">\/\/ 1\u79d2\u626b\u63cf\u4e00\u6b21<\/span>\n\n<span class=\"n\">comm<\/span><span class=\"p\">.<\/span><span class=\"n\">DataItems<\/span><span class=\"p\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"n\">tempItem<\/span><span class=\"p\">);<\/span>\n\n<span class=\"c1\">\/\/ \u4e8b\u4ef6\u9a71\u52a8<\/span>\n<span class=\"n\">tempItem<\/span><span class=\"p\">.<\/span><span class=\"n\">DataChanged<\/span><span class=\"w\"> <\/span><span class=\"o\">+=<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"n\">sender<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">e<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"o\">=&gt;<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span>\n<span class=\"w\">    <\/span><span class=\"n\">Console<\/span><span class=\"p\">.<\/span><span class=\"n\">WriteLine<\/span><span class=\"p\">(<\/span><span class=\"s\">$&quot;\u6e29\u5ea6\u53d8\u5316: {e.NewValue}\u00b0C&quot;<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">};<\/span>\n\n<span class=\"c1\">\/\/ \u542f\u52a8\u901a\u4fe1<\/span>\n<span class=\"n\">comm<\/span><span class=\"p\">.<\/span><span class=\"n\">Start<\/span><span class=\"p\">();<\/span>\n<\/code><\/pre>\n<\/div>\n<h4 id=\"_22\">\u8bb8\u53ef\u8bc1\u6a21\u5f0f<\/h4>\n<ul>\n<li><strong>\u8bd5\u7528\u7248<\/strong>: 30\u5929\u5168\u529f\u80fd\u8bd5\u7528<\/li>\n<li><strong>\u5f00\u53d1\u7248<\/strong>: \u5355\u5f00\u53d1\u8005\u8bb8\u53ef<\/li>\n<li><strong>\u8fd0\u884c\u65f6\u7248<\/strong>: \u90e8\u7f72\u8bb8\u53ef<\/li>\n<li><strong>\u4f01\u4e1a\u7248<\/strong>: \u591a\u670d\u52a1\u5668\u652f\u6301<\/li>\n<\/ul>\n<hr \/>\n<h2 id=\"_23\">\ud83d\udd0c \u5d4c\u5165\u5f0f\u4e0e\u5355\u7247\u673a\u5e93<\/h2>\n<h3 id=\"10-simple-modbus-arduino\">10. simple-modbus &#8211; Arduino\u5e93<\/h3>\n<p><strong>\u9879\u76ee\u5730\u5740<\/strong>: https:\/\/code.google.com\/p\/simple-modbus\/<\/p>\n<h4 id=\"arduino\">Arduino\u96c6\u6210<\/h4>\n<div class=\"codehilite\">\n<pre><span><\/span><code><span class=\"cp\">#include<\/span><span class=\"w\"> <\/span><span class=\"cpf\">&lt;SimpleModbusMaster.h&gt;<\/span>\n<span class=\"cp\">#include<\/span><span class=\"w\"> <\/span><span class=\"cpf\">&lt;SimpleModbusSlave.h&gt;<\/span>\n\n<span class=\"c1\">\/\/ \u4e3b\u7ad9\u914d\u7f6e<\/span>\n<span class=\"cp\">#define TOTAL_NO_OF_REGISTERS 10<\/span>\n<span class=\"kt\">unsigned<\/span><span class=\"w\"> <\/span><span class=\"kt\">int<\/span><span class=\"w\"> <\/span><span class=\"n\">holdingRegs<\/span><span class=\"p\">[<\/span><span class=\"n\">TOTAL_NO_OF_REGISTERS<\/span><span class=\"p\">];<\/span>\n\n<span class=\"c1\">\/\/ \u4ece\u7ad9\u914d\u7f6e<\/span>\n<span class=\"k\">enum<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span>\n<span class=\"w\">  <\/span><span class=\"n\">TEMP_REGISTER<\/span><span class=\"p\">,<\/span>\n<span class=\"w\">  <\/span><span class=\"n\">HUMIDITY_REGISTER<\/span><span class=\"p\">,<\/span>\n<span class=\"w\">  <\/span><span class=\"n\">PRESSURE_REGISTER<\/span><span class=\"p\">,<\/span>\n<span class=\"w\">  <\/span><span class=\"n\">HOLDING_REGS_SIZE<\/span>\n<span class=\"p\">};<\/span>\n\n<span class=\"kt\">unsigned<\/span><span class=\"w\"> <\/span><span class=\"kt\">int<\/span><span class=\"w\"> <\/span><span class=\"n\">holdingRegs<\/span><span class=\"p\">[<\/span><span class=\"n\">HOLDING_REGS_SIZE<\/span><span class=\"p\">];<\/span>\n\n<span class=\"kt\">void<\/span><span class=\"w\"> <\/span><span class=\"nf\">setup<\/span><span class=\"p\">()<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span>\n<span class=\"w\">  <\/span><span class=\"c1\">\/\/ \u521d\u59cb\u5316Modbus<\/span>\n<span class=\"w\">  <\/span><span class=\"n\">modbus_configure<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"n\">Serial<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mi\">9600<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">SERIAL_8N2<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"mi\">2<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span>\n<span class=\"w\">                   <\/span><span class=\"n\">TOTAL_NO_OF_REGISTERS<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">holdingRegs<\/span><span class=\"p\">);<\/span>\n<span class=\"w\">  <\/span><span class=\"n\">modbus_update<\/span><span class=\"p\">();<\/span>\n\n<span class=\"w\">  <\/span><span class=\"c1\">\/\/ \u8bbe\u7f6e\u4ece\u7ad9\u6570\u636e<\/span>\n<span class=\"w\">  <\/span><span class=\"n\">holdingRegs<\/span><span class=\"p\">[<\/span><span class=\"n\">TEMP_REGISTER<\/span><span class=\"p\">]<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"mi\">250<\/span><span class=\"p\">;<\/span><span class=\"w\">  <\/span><span class=\"c1\">\/\/ 25.0\u00b0C<\/span>\n<span class=\"w\">  <\/span><span class=\"n\">holdingRegs<\/span><span class=\"p\">[<\/span><span class=\"n\">HUMIDITY_REGISTER<\/span><span class=\"p\">]<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"mi\">600<\/span><span class=\"p\">;<\/span><span class=\"w\">  <\/span><span class=\"c1\">\/\/ 60.0%<\/span>\n<span class=\"w\">  <\/span><span class=\"n\">holdingRegs<\/span><span class=\"p\">[<\/span><span class=\"n\">PRESSURE_REGISTER<\/span><span class=\"p\">]<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"mi\">1013<\/span><span class=\"p\">;<\/span><span class=\"w\"> <\/span><span class=\"c1\">\/\/ 1013 hPa<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"kt\">void<\/span><span class=\"w\"> <\/span><span class=\"nf\">loop<\/span><span class=\"p\">()<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span>\n<span class=\"w\">  <\/span><span class=\"c1\">\/\/ \u4e3b\u7ad9\u8bfb\u53d6<\/span>\n<span class=\"w\">  <\/span><span class=\"n\">modbus_update<\/span><span class=\"p\">();<\/span>\n\n<span class=\"w\">  <\/span><span class=\"c1\">\/\/ \u5904\u7406\u63a5\u6536\u5230\u7684\u6570\u636e<\/span>\n<span class=\"w\">  <\/span><span class=\"k\">if<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"n\">holdingRegs<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span><span class=\"w\"> <\/span><span class=\"o\">!=<\/span><span class=\"w\"> <\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span>\n<span class=\"w\">    <\/span><span class=\"c1\">\/\/ \u6267\u884c\u76f8\u5e94\u64cd\u4f5c<\/span>\n<span class=\"w\">  <\/span><span class=\"p\">}<\/span>\n\n<span class=\"w\">  <\/span><span class=\"c1\">\/\/ \u4ece\u7ad9\u54cd\u5e94<\/span>\n<span class=\"w\">  <\/span><span class=\"n\">modbus_update<\/span><span class=\"p\">(<\/span><span class=\"n\">holdingRegs<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">HOLDING_REGS_SIZE<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<h4 id=\"_24\">\u652f\u6301\u7684\u529f\u80fd\u7801<\/h4>\n<ul>\n<li>\u2705 01: \u8bfb\u53d6\u7ebf\u5708<\/li>\n<li>\u2705 02: \u8bfb\u53d6\u79bb\u6563\u8f93\u5165<\/li>\n<li>\u2705 03: \u8bfb\u53d6\u4fdd\u6301\u5bc4\u5b58\u5668<\/li>\n<li>\u2705 04: \u8bfb\u53d6\u8f93\u5165\u5bc4\u5b58\u5668<\/li>\n<li>\u2705 15: \u5199\u5165\u591a\u4e2a\u7ebf\u5708<\/li>\n<li>\u2705 16: \u5199\u5165\u591a\u4e2a\u5bc4\u5b58\u5668<\/li>\n<\/ul>\n<h3 id=\"11-freemodbus-\">11. FreeModbus (\u518d\u6b21\u63d0\u53ca) &#8211; \u4e13\u4e1a\u5d4c\u5165\u5f0f<\/h3>\n<h4 id=\"_25\">\u79fb\u690d\u6307\u5357<\/h4>\n<ol>\n<li><strong>\u7aef\u53e3\u5c42\u5b9e\u73b0<\/strong><\/li>\n<\/ol>\n<div class=\"codehilite\">\n<pre><span><\/span><code><span class=\"c1\">\/\/ portserial.c - \u4e32\u53e3\u9a71\u52a8<\/span>\n<span class=\"n\">BOOL<\/span><span class=\"w\"> <\/span><span class=\"nf\">xMBPortSerialInit<\/span><span class=\"p\">(<\/span><span class=\"n\">UCHAR<\/span><span class=\"w\"> <\/span><span class=\"n\">ucPort<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">ULONG<\/span><span class=\"w\"> <\/span><span class=\"n\">ulBaudRate<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">UCHAR<\/span><span class=\"w\"> <\/span><span class=\"n\">ucDataBits<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span>\n<span class=\"w\">                       <\/span><span class=\"n\">UCHAR<\/span><span class=\"w\"> <\/span><span class=\"n\">ucStopBits<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">eMBParity<\/span><span class=\"w\"> <\/span><span class=\"n\">eParity<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span>\n<span class=\"w\">    <\/span><span class=\"c1\">\/\/ \u5b9e\u73b0\u4e32\u53e3\u521d\u59cb\u5316<\/span>\n<span class=\"w\">    <\/span><span class=\"k\">return<\/span><span class=\"w\"> <\/span><span class=\"n\">TRUE<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"c1\">\/\/ porttimer.c - \u5b9a\u65f6\u5668\u9a71\u52a8<\/span>\n<span class=\"n\">BOOL<\/span><span class=\"w\"> <\/span><span class=\"nf\">xMBPortTimersInit<\/span><span class=\"p\">(<\/span><span class=\"n\">USHORT<\/span><span class=\"w\"> <\/span><span class=\"n\">usTimeOut50us<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span>\n<span class=\"w\">    <\/span><span class=\"c1\">\/\/ \u5b9e\u73b0\u5b9a\u65f6\u5668\u521d\u59cb\u5316<\/span>\n<span class=\"w\">    <\/span><span class=\"k\">return<\/span><span class=\"w\"> <\/span><span class=\"n\">TRUE<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<ol start=\"2\">\n<li><strong>\u914d\u7f6e\u8c03\u6574<\/strong><\/li>\n<\/ol>\n<div class=\"codehilite\">\n<pre><span><\/span><code><span class=\"c1\">\/\/ \u5185\u5b58\u4f18\u5316\u914d\u7f6e<\/span>\n<span class=\"cp\">#define MB_REG_HOLDING_START     0<\/span>\n<span class=\"cp\">#define MB_REG_HOLDING_NREGS     100<\/span>\n<span class=\"cp\">#define MB_REG_INPUT_START       0<\/span>\n<span class=\"cp\">#define MB_REG_INPUT_NREGS       100<\/span>\n<span class=\"cp\">#define MB_REG_COILS_START       0<\/span>\n<span class=\"cp\">#define MB_REG_COILS_SIZE        100<\/span>\n<span class=\"cp\">#define MB_REG_DISCRETE_START    0<\/span>\n<span class=\"cp\">#define MB_REG_DISCRETE_SIZE     100<\/span>\n<\/code><\/pre>\n<\/div>\n<hr \/>\n<h2 id=\"_26\">\ud83d\udee0\ufe0f \u8c03\u8bd5\u4e0e\u6d4b\u8bd5\u5de5\u5177<\/h2>\n<h3 id=\"12-modbus-poll-windows\">12. Modbus Poll &#8211; Windows\u8c03\u8bd5\u5de5\u5177<\/h3>\n<p><strong>\u9879\u76ee\u5730\u5740<\/strong>: http:\/\/www.modbustools.com\/<\/p>\n<h4 id=\"_27\">\u4e3b\u8981\u529f\u80fd<\/h4>\n<ul>\n<li><strong>\u591a\u6587\u6863\u754c\u9762<\/strong>: \u540c\u65f6\u76d1\u63a7\u591a\u4e2a\u8bbe\u5907<\/li>\n<li><strong>\u6570\u636e\u8bb0\u5f55<\/strong>: \u5b9e\u65f6\u6570\u636e\u8bb0\u5f55\u548c\u5bfc\u51fa<\/li>\n<li><strong>\u811a\u672c\u652f\u6301<\/strong>: \u81ea\u52a8\u5316\u6d4b\u8bd5\u811a\u672c<\/li>\n<li><strong>\u534f\u8bae\u5206\u6790<\/strong>: \u8be6\u7ec6\u62a5\u6587\u89e3\u6790<\/li>\n<\/ul>\n<h4 id=\"_28\">\u4f7f\u7528\u573a\u666f<\/h4>\n<ol>\n<li><strong>\u8bbe\u5907\u8c03\u8bd5<\/strong>: \u9a8c\u8bc1\u65b0\u8bbe\u5907Modbus\u5b9e\u73b0<\/li>\n<li><strong>\u7cfb\u7edf\u96c6\u6210<\/strong>: \u6d4b\u8bd5PLC\u4e0eSCADA\u901a\u4fe1<\/li>\n<li><strong>\u6545\u969c\u6392\u67e5<\/strong>: \u5206\u6790\u901a\u4fe1\u95ee\u9898\u539f\u56e0<\/li>\n<li><strong>\u6027\u80fd\u6d4b\u8bd5<\/strong>: \u8bc4\u4f30\u7cfb\u7edf\u54cd\u5e94\u65f6\u95f4<\/li>\n<\/ol>\n<h3 id=\"13-modpoll-\">13. Modpoll &#8211; \u547d\u4ee4\u884c\u6d4b\u8bd5\u5de5\u5177<\/h3>\n<p><strong>\u9879\u76ee\u5730\u5740<\/strong>: http:\/\/www.focus-sw.com\/fieldtalk\/modpoll.html<\/p>\n<h4 id=\"_29\">\u547d\u4ee4\u884c\u793a\u4f8b<\/h4>\n<div class=\"codehilite\">\n<pre><span><\/span><code><span class=\"c1\"># \u8bfb\u53d6\u4fdd\u6301\u5bc4\u5b58\u5668<\/span>\nmodpoll<span class=\"w\"> <\/span>-m<span class=\"w\"> <\/span>tcp<span class=\"w\"> <\/span>-t<span class=\"w\"> <\/span><span class=\"m\">4<\/span><span class=\"w\"> <\/span>-r<span class=\"w\"> <\/span><span class=\"m\">100<\/span><span class=\"w\"> <\/span>-c<span class=\"w\"> <\/span><span class=\"m\">10<\/span><span class=\"w\"> <\/span><span class=\"m\">192<\/span>.168.1.100\n\n<span class=\"c1\"># \u8bfb\u53d6\u7ebf\u5708\u72b6\u6001<\/span>\nmodpoll<span class=\"w\"> <\/span>-m<span class=\"w\"> <\/span>tcp<span class=\"w\"> <\/span>-t<span class=\"w\"> <\/span><span class=\"m\">0<\/span><span class=\"w\"> <\/span>-r<span class=\"w\"> <\/span><span class=\"m\">0<\/span><span class=\"w\"> <\/span>-c<span class=\"w\"> <\/span><span class=\"m\">16<\/span><span class=\"w\"> <\/span><span class=\"m\">192<\/span>.168.1.100\n\n<span class=\"c1\"># \u5199\u5165\u5355\u4e2a\u5bc4\u5b58\u5668<\/span>\nmodpoll<span class=\"w\"> <\/span>-m<span class=\"w\"> <\/span>tcp<span class=\"w\"> <\/span>-t<span class=\"w\"> <\/span><span class=\"m\">4<\/span>:hex<span class=\"w\"> <\/span>-r<span class=\"w\"> <\/span><span class=\"m\">40001<\/span><span class=\"w\"> <\/span>-c<span class=\"w\"> <\/span><span class=\"m\">1<\/span><span class=\"w\"> <\/span><span class=\"m\">192<\/span>.168.1.100<span class=\"w\"> <\/span><span class=\"m\">1234<\/span>\n\n<span class=\"c1\"># \u8f6e\u8be2\u6a21\u5f0f<\/span>\nmodpoll<span class=\"w\"> <\/span>-m<span class=\"w\"> <\/span>tcp<span class=\"w\"> <\/span>-t<span class=\"w\"> <\/span><span class=\"m\">4<\/span><span class=\"w\"> <\/span>-r<span class=\"w\"> <\/span><span class=\"m\">100<\/span><span class=\"w\"> <\/span>-c<span class=\"w\"> <\/span><span class=\"m\">5<\/span><span class=\"w\"> <\/span>-p<span class=\"w\"> <\/span><span class=\"m\">1000<\/span><span class=\"w\"> <\/span><span class=\"m\">192<\/span>.168.1.100\n\n<span class=\"c1\"># ASCII\u8f93\u51fa\u683c\u5f0f<\/span>\nmodpoll<span class=\"w\"> <\/span>-m<span class=\"w\"> <\/span>tcp<span class=\"w\"> <\/span>-t<span class=\"w\"> <\/span><span class=\"m\">4<\/span><span class=\"w\"> <\/span>-r<span class=\"w\"> <\/span><span class=\"m\">100<\/span><span class=\"w\"> <\/span>-c<span class=\"w\"> <\/span><span class=\"m\">10<\/span><span class=\"w\"> <\/span>-a<span class=\"w\"> <\/span><span class=\"m\">1<\/span><span class=\"w\"> <\/span>-f<span class=\"w\"> <\/span>c<span class=\"w\"> <\/span><span class=\"m\">192<\/span>.168.1.100\n<\/code><\/pre>\n<\/div>\n<h4 id=\"_30\">\u53c2\u6570\u8bf4\u660e<\/h4>\n<ul>\n<li><code>-m<\/code>: \u6a21\u5f0f (tcp\/rtu\/ascii)<\/li>\n<li><code>-t<\/code>: \u6570\u636e\u7c7b\u578b (0:\u7ebf\u5708, 1:\u79bb\u6563\u8f93\u5165, 3:\u8f93\u5165\u5bc4\u5b58\u5668, 4:\u4fdd\u6301\u5bc4\u5b58\u5668)<\/li>\n<li><code>-r<\/code>: \u8d77\u59cb\u5730\u5740<\/li>\n<li><code>-c<\/code>: \u6570\u91cf<\/li>\n<li><code>-p<\/code>: \u8f6e\u8be2\u95f4\u9694(ms)<\/li>\n<li><code>-a<\/code>: \u4ece\u7ad9\u5730\u5740<\/li>\n<\/ul>\n<h3 id=\"14-wireshark-\">14. Wireshark &#8211; \u7f51\u7edc\u534f\u8bae\u5206\u6790<\/h3>\n<p><strong>\u9879\u76ee\u5730\u5740<\/strong>: http:\/\/www.wireshark.org\/<\/p>\n<h4 id=\"modbus\">Modbus\u62a5\u6587\u5206\u6790<\/h4>\n<ol>\n<li>\n<p><strong>\u8fc7\u6ee4\u89c4\u5219<\/strong><br \/>\n<code>modbus                    # \u6240\u6709Modbus\u6d41\u91cf<br \/>\n   modbus.func_code == 0x03  # \u4ec5\u8bfb\u53d6\u4fdd\u6301\u5bc4\u5b58\u5668<br \/>\n   tcp.port == 502          # Modbus TCP\u7aef\u53e3<\/code><\/p>\n<\/li>\n<li>\n<p><strong>\u89e3\u7801\u529f\u80fd<\/strong><br \/>\n   &#8211; \u529f\u80fd\u7801\u89e3\u6790<br \/>\n   &#8211; \u6570\u636e\u683c\u5f0f\u8f6c\u6362<br \/>\n   &#8211; \u9519\u8bef\u7801\u8bc6\u522b<br \/>\n   &#8211; \u65f6\u5e8f\u5206\u6790<\/p>\n<\/li>\n<\/ol>\n<h3 id=\"15-cas-modbus\">15. CAS Modbus\u5de5\u5177\u96c6<\/h3>\n<p><strong>\u9879\u76ee\u5730\u5740<\/strong>: https:\/\/store.chipkin.com\/products\/tools<\/p>\n<h4 id=\"_31\">\u5305\u542b\u5de5\u5177<\/h4>\n<ol>\n<li><strong>Modbus RTU Parser<\/strong>: \u5341\u516d\u8fdb\u5236\u62a5\u6587\u89e3\u6790<\/li>\n<li><strong>Modbus TCP Parser<\/strong>: TCP\u62a5\u6587\u5206\u6790<\/li>\n<li><strong>Modbus Scanner<\/strong>: \u8bbe\u5907\u626b\u63cf\u53d1\u73b0<\/li>\n<\/ol>\n<hr \/>\n<h2 id=\"_32\">\ud83c\udfaf \u5de5\u5177\u9009\u62e9\u6307\u5357<\/h2>\n<h3 id=\"_33\">\u6309\u5f00\u53d1\u8bed\u8a00\u9009\u62e9<\/h3>\n<table>\n<thead>\n<tr>\n<th>\u8bed\u8a00<\/th>\n<th>\u63a8\u8350\u5de5\u5177<\/th>\n<th>\u9002\u7528\u573a\u666f<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>C\/C++<\/td>\n<td><strong>LibModbus<\/strong><\/td>\n<td>\u8de8\u5e73\u53f0\u5e94\u7528\u3001\u5d4c\u5165\u5f0fLinux<\/td>\n<\/tr>\n<tr>\n<td>Java<\/td>\n<td><strong>Modbus4J<\/strong><\/td>\n<td>\u4f01\u4e1a\u7ea7\u5e94\u7528\u3001\u9ad8\u6027\u80fd\u9700\u6c42<\/td>\n<\/tr>\n<tr>\n<td>Python<\/td>\n<td><strong>modbus-tk<\/strong><\/td>\n<td>\u5feb\u901f\u539f\u578b\u3001\u6d4b\u8bd5\u811a\u672c<\/td>\n<\/tr>\n<tr>\n<td>C#\/.NET<\/td>\n<td><strong>NModbus<\/strong><\/td>\n<td>Windows\u5e94\u7528\u3001\u5de5\u4e1a\u8f6f\u4ef6<\/td>\n<\/tr>\n<tr>\n<td>Arduino<\/td>\n<td><strong>simple-modbus<\/strong><\/td>\n<td>\u5355\u7247\u673a\u3001\u7269\u8054\u7f51\u8bbe\u5907<\/td>\n<\/tr>\n<tr>\n<td>\u5d4c\u5165\u5f0fC<\/td>\n<td><strong>FreeModbus<\/strong><\/td>\n<td>\u8d44\u6e90\u53d7\u9650\u5fae\u63a7\u5236\u5668<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"_34\">\u6309\u5e94\u7528\u573a\u666f\u9009\u62e9<\/h3>\n<table>\n<thead>\n<tr>\n<th>\u573a\u666f<\/th>\n<th>\u63a8\u8350\u5de5\u5177<\/th>\n<th>\u5173\u952e\u7279\u6027<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u8bbe\u5907\u5f00\u53d1<\/td>\n<td>FreeModbus<\/td>\n<td>\u8d44\u6e90\u5360\u7528\u4f4e\u3001\u53ef\u79fb\u690d\u6027\u5f3a<\/td>\n<\/tr>\n<tr>\n<td>\u7cfb\u7edf\u96c6\u6210<\/td>\n<td>LibModbus<\/td>\n<td>\u7a33\u5b9a\u6027\u9ad8\u3001\u8de8\u5e73\u53f0<\/td>\n<\/tr>\n<tr>\n<td>\u6d4b\u8bd5\u8c03\u8bd5<\/td>\n<td>Modbus Poll<\/td>\n<td>\u56fe\u5f62\u754c\u9762\u3001\u529f\u80fd\u5b8c\u6574<\/td>\n<\/tr>\n<tr>\n<td>\u81ea\u52a8\u5316\u6d4b\u8bd5<\/td>\n<td>modbus-tk<\/td>\n<td>Python\u811a\u672c\u3001\u7075\u6d3b\u6027\u5f3a<\/td>\n<\/tr>\n<tr>\n<td>\u751f\u4ea7\u73af\u5883<\/td>\n<td>Modbus4J\/NModbus<\/td>\n<td>\u6027\u80fd\u4f18\u5f02\u3001\u4f01\u4e1a\u7ea7\u652f\u6301<\/td>\n<\/tr>\n<tr>\n<td>\u6559\u80b2\u5b66\u4e60<\/td>\n<td>uModbus<\/td>\n<td>\u7b80\u5355\u6613\u7528\u3001\u5b66\u4e60\u66f2\u7ebf\u5e73\u7f13<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"_35\">\u6027\u80fd\u5bf9\u6bd4\u8868<\/h3>\n<table>\n<thead>\n<tr>\n<th>\u5de5\u5177<\/th>\n<th>\u534f\u8bae\u652f\u6301<\/th>\n<th>\u6027\u80fd\u7b49\u7ea7<\/th>\n<th>\u5185\u5b58\u5360\u7528<\/th>\n<th>\u5b66\u4e60\u66f2\u7ebf<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>LibModbus<\/td>\n<td>RTU\/TCP<\/td>\n<td>\u2b50\u2b50\u2b50\u2b50\u2b50<\/td>\n<td>\u4f4e<\/td>\n<td>\u4e2d\u7b49<\/td>\n<\/tr>\n<tr>\n<td>Modbus4J<\/td>\n<td>ASCII\/RTU\/TCP\/UDP<\/td>\n<td>\u2b50\u2b50\u2b50\u2b50\u2b50<\/td>\n<td>\u4e2d\u7b49<\/td>\n<td>\u4e2d\u7b49<\/td>\n<\/tr>\n<tr>\n<td>NModbus<\/td>\n<td>ASCII\/RTU\/TCP<\/td>\n<td>\u2b50\u2b50\u2b50\u2b50<\/td>\n<td>\u4e2d\u7b49<\/td>\n<td>\u7b80\u5355<\/td>\n<\/tr>\n<tr>\n<td>modbus-tk<\/td>\n<td>RTU\/TCP<\/td>\n<td>\u2b50\u2b50\u2b50\u2b50<\/td>\n<td>\u4f4e<\/td>\n<td>\u7b80\u5355<\/td>\n<\/tr>\n<tr>\n<td>uModbus<\/td>\n<td>RTU\/TCP<\/td>\n<td>\u2b50\u2b50\u2b50<\/td>\n<td>\u4f4e<\/td>\n<td>\u7b80\u5355<\/td>\n<\/tr>\n<tr>\n<td>FreeModbus<\/td>\n<td>ASCII\/RTU<\/td>\n<td>\u2b50\u2b50\u2b50<\/td>\n<td>\u6781\u4f4e<\/td>\n<td>\u4e2d\u7b49<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h2 id=\"_36\">\ud83d\udcda \u5b66\u4e60\u8d44\u6e90\u63a8\u8350<\/h2>\n<h3 id=\"_37\">\u5b98\u65b9\u6587\u6863<\/h3>\n<ol>\n<li><strong>Modbus\u534f\u8bae\u89c4\u8303<\/strong>: www.modbus.org\/specs.php<\/li>\n<li><strong>LibModbus\u6587\u6863<\/strong>: libmodbus.org\/documentation<\/li>\n<li><strong>Modbus4J Wiki<\/strong>: sourceforge.net\/p\/modbus4j\/wiki\/Home<\/li>\n<\/ol>\n<h3 id=\"_38\">\u6559\u7a0b\u4e0e\u793a\u4f8b<\/h3>\n<ol>\n<li><strong>GitHub\u793a\u4f8b\u4ed3\u5e93<\/strong>: \u641c\u7d22&#8221;modbus example&#8221;<\/li>\n<li><strong>Stack Overflow<\/strong>: modbus\u76f8\u5173\u95ee\u7b54<\/li>\n<li><strong>\u6280\u672f\u535a\u5ba2<\/strong>: \u5404\u5927\u7269\u8054\u7f51\u6280\u672f\u535a\u5ba2<\/li>\n<\/ol>\n<h3 id=\"_39\">\u793e\u533a\u652f\u6301<\/h3>\n<ol>\n<li><strong>GitHub Issues<\/strong>: \u5404\u9879\u76ee\u7684\u95ee\u9898\u8ddf\u8e2a<\/li>\n<li><strong>\u90ae\u4ef6\u5217\u8868<\/strong>: \u4f20\u7edf\u6280\u672f\u652f\u6301\u65b9\u5f0f<\/li>\n<li><strong>\u6280\u672f\u8bba\u575b<\/strong>: \u5d4c\u5165\u5f0f\u3001\u7269\u8054\u7f51\u8bba\u575b<\/li>\n<\/ol>\n<hr \/>\n<h2 id=\"_40\">\ud83d\udd2e \u53d1\u5c55\u8d8b\u52bf<\/h2>\n<h3 id=\"1\">1. \u4e91\u539f\u751f\u652f\u6301<\/h3>\n<ul>\n<li>Docker\u5bb9\u5668\u5316\u90e8\u7f72<\/li>\n<li>Kubernetes\u7f16\u6392<\/li>\n<li>\u5fae\u670d\u52a1\u67b6\u6784<\/li>\n<\/ul>\n<h3 id=\"2\">2. \u7269\u8054\u7f51\u96c6\u6210<\/h3>\n<ul>\n<li>MQTT\u6865\u63a5<\/li>\n<li>OPC UA\u517c\u5bb9<\/li>\n<li>\u8fb9\u7f18\u8ba1\u7b97\u652f\u6301<\/li>\n<\/ul>\n<h3 id=\"3\">3. \u5b89\u5168\u6027\u589e\u5f3a<\/h3>\n<ul>\n<li>TLS\/SSL\u52a0\u5bc6<\/li>\n<li>\u8ba4\u8bc1\u6388\u6743\u673a\u5236<\/li>\n<li>\u5b89\u5168\u5ba1\u8ba1\u65e5\u5fd7<\/li>\n<\/ul>\n<h3 id=\"4\">4. \u5f00\u53d1\u5de5\u5177\u73b0\u4ee3\u5316<\/h3>\n<ul>\n<li>REST API\u5c01\u88c5<\/li>\n<li>GraphQL\u63a5\u53e3<\/li>\n<li>WebSocket\u5b9e\u65f6\u901a\u4fe1<\/li>\n<\/ul>\n<hr \/>\n<h2 id=\"_41\">\ud83d\udca1 \u6700\u4f73\u5b9e\u8df5\u5efa\u8bae<\/h2>\n<h3 id=\"_42\">\u5f00\u53d1\u9636\u6bb5<\/h3>\n<ol>\n<li><strong>\u9009\u62e9\u5408\u9002\u7684\u5de5\u5177<\/strong>\uff1a\u6839\u636e\u9879\u76ee\u9700\u6c42\u548c\u6280\u672f\u6808\u9009\u62e9<\/li>\n<li><strong>\u5145\u5206\u6d4b\u8bd5<\/strong>\uff1a\u4f7f\u7528\u6a21\u62df\u5668\u8fdb\u884c\u5b8c\u6574\u6d4b\u8bd5<\/li>\n<li><strong>\u9519\u8bef\u5904\u7406<\/strong>\uff1a\u5b9e\u73b0\u5b8c\u5584\u7684\u5f02\u5e38\u5904\u7406\u673a\u5236<\/li>\n<li><strong>\u65e5\u5fd7\u8bb0\u5f55<\/strong>\uff1a\u8be6\u7ec6\u8bb0\u5f55\u901a\u4fe1\u8fc7\u7a0b\u548c\u9519\u8bef\u4fe1\u606f<\/li>\n<\/ol>\n<h3 id=\"_43\">\u90e8\u7f72\u9636\u6bb5<\/h3>\n<ol>\n<li><strong>\u6027\u80fd\u8c03\u4f18<\/strong>\uff1a\u6839\u636e\u7f51\u7edc\u6761\u4ef6\u8c03\u6574\u8d85\u65f6\u548c\u91cd\u8bd5\u53c2\u6570<\/li>\n<li><strong>\u76d1\u63a7\u544a\u8b66<\/strong>\uff1a\u5b9e\u73b0\u7cfb\u7edf\u5065\u5eb7\u76d1\u63a7<\/li>\n<li><strong>\u5907\u4efd\u6062\u590d<\/strong>\uff1a\u914d\u7f6e\u6570\u636e\u548c\u72b6\u6001\u5907\u4efd\u673a\u5236<\/li>\n<li><strong>\u5b89\u5168\u52a0\u56fa<\/strong>\uff1a\u5b9e\u65bd\u9002\u5f53\u7684\u5b89\u5168\u63aa\u65bd<\/li>\n<\/ol>\n<h3 id=\"_44\">\u7ef4\u62a4\u9636\u6bb5<\/h3>\n<ol>\n<li><strong>\u5b9a\u671f\u66f4\u65b0<\/strong>\uff1a\u4fdd\u6301\u5de5\u5177\u5e93\u7248\u672c\u66f4\u65b0<\/li>\n<li><strong>\u6027\u80fd\u76d1\u63a7<\/strong>\uff1a\u6301\u7eed\u76d1\u63a7\u7cfb\u7edf\u6027\u80fd<\/li>\n<li><strong>\u95ee\u9898\u6392\u67e5<\/strong>\uff1a\u5efa\u7acb\u7cfb\u7edf\u5316\u7684\u95ee\u9898\u6392\u67e5\u6d41\u7a0b<\/li>\n<li><strong>\u6587\u6863\u66f4\u65b0<\/strong>\uff1a\u4fdd\u6301\u6587\u6863\u4e0e\u7cfb\u7edf\u540c\u6b65<\/li>\n<\/ol>\n<hr \/>\n<h2 id=\"_45\">\ud83c\udf89 \u603b\u7ed3<\/h2>\n<p>\u672c\u6587\u5168\u9762\u4ecb\u7ecd\u4e86Modbus\u7f16\u7a0b\u5f00\u53d1\u9886\u57df\u768430\u591a\u4e2a\u91cd\u8981\u5de5\u5177\uff0c\u6db5\u76d6\u4e86\u4ece\u5e95\u5c42\u5d4c\u5165\u5f0f\u5f00\u53d1\u5230\u4f01\u4e1a\u7ea7\u5e94\u7528\u7684\u5168\u6808\u89e3\u51b3\u65b9\u6848\u3002\u65e0\u8bba\u60a8\u662f\u521d\u5b66\u8005\u8fd8\u662f\u7ecf\u9a8c\u4e30\u5bcc\u7684\u5f00\u53d1\u8005\uff0c\u90fd\u80fd\u5728\u8fd9\u91cc\u627e\u5230\u9002\u5408\u7684\u5de5\u5177\u6765\u52a0\u901f\u60a8\u7684Modbus\u9879\u76ee\u5f00\u53d1\u3002<\/p>\n<p><strong>\u5173\u952e\u8981\u70b9<\/strong>\uff1a<br \/>\n1. <strong>LibModbus<\/strong>\u662fC\u8bed\u8a00\u5f00\u53d1\u7684\u9996\u9009\uff0c\u6027\u80fd\u4f18\u5f02\u4e14\u7a33\u5b9a<br \/>\n2. <strong>Modbus4J<\/strong>\u548c<strong>NModbus<\/strong>\u5206\u522b\u4ee3\u8868\u4e86Java\u548c.NET\u5e73\u53f0\u7684\u6700\u4f73\u5b9e\u8df5<br \/>\n3. <strong>Python\u751f\u6001<\/strong>\u63d0\u4f9b\u4e86\u5feb\u901f\u539f\u578b\u5f00\u53d1\u7684\u4f18\u79c0\u5de5\u5177<br \/>\n4. <strong>\u8c03\u8bd5\u5de5\u5177\u94fe<\/strong>\u5b8c\u6574\uff0c\u4ece\u547d\u4ee4\u884c\u5230\u56fe\u5f62\u754c\u9762\u5e94\u6709\u5c3d\u6709<br \/>\n5. <strong>\u5f00\u6e90\u793e\u533a\u6d3b\u8dc3<\/strong>\uff0c\u5927\u591a\u6570\u5de5\u5177\u90fd\u6709\u826f\u597d\u7684\u7ef4\u62a4\u548c\u652f\u6301<\/p>\n<p>\u968f\u7740\u5de5\u4e1a4.0\u548c\u7269\u8054\u7f51\u7684\u5feb\u901f\u53d1\u5c55\uff0cModbus\u534f\u8bae\u4ecd\u7136\u662f\u6700\u91cd\u8981\u7684\u5de5\u4e1a\u901a\u4fe1\u6807\u51c6\u4e4b\u4e00\u3002\u638c\u63e1\u8fd9\u4e9b\u5f00\u53d1\u5de5\u5177\uff0c\u5c06\u5e2e\u52a9\u60a8\u5728\u5de5\u4e1a\u81ea\u52a8\u5316\u3001\u667a\u80fd\u5236\u9020\u3001\u667a\u6167\u57ce\u5e02\u7b49\u9886\u57df\u53d6\u5f97\u6280\u672f\u4f18\u52bf\u3002<\/p>\n<hr \/>\n<p><strong>\u6700\u540e\u66f4\u65b0<\/strong>: 2026-02-24<br \/>\n<strong>\u4f5c\u8005<\/strong>: \u8d3e\u7ef4\u65afAI\u52a9\u624b<br \/>\n<strong>\u5206\u7c7b<\/strong>: Modbus\u7f16\u7a0b\u5f00\u53d1<br \/>\n<strong>\u6807\u7b7e<\/strong>: Modbus, \u7f16\u7a0b\u5f00\u53d1, \u5f00\u6e90\u5de5\u5177, \u5de5\u4e1a\u81ea\u52a8\u5316, \u7269\u8054\u7f51, \u5f00\u53d1\u6307\u5357<\/p>\n<span id=\"magicpostMarker\"><\/span>","protected":false},"excerpt":{"rendered":"<p>Modbus\u7f16\u7a0b\u5f00\u53d1\u5de5\u5177\u5927\u5168\uff1a30+\u5f00\u6e90\u5e93\u4e0e\u6846\u67b6\u5b8c\u5168\u6307\u5357<\/p>\n<p> \u5f15\u8a00<\/p>\n<p>\u5728\u5de5\u4e1a\u81ea\u52a8\u5316\u9886\u57df\uff0cModbus\u534f\u8bae\u4f5c\u4e3a\u6700\u5e7f\u6cdb\u4f7f\u7528\u7684\u901a\u4fe1\u6807\u51c6\uff0c\u62e5\u6709\u4e30\u5bcc\u7684\u7f16\u7a0b\u5f00\u53d1\u5de5\u5177\u548c\u5e93\u3002\u672c\u6587\u5168\u9762\u6574\u7406\u4e86\u6765\u81eaModbus\u5b98\u65b9\u8d44\u6e90\u9875\u9762\u768430\u591a\u4e2a\u7f16\u7a0b\u5de5\u5177\uff0c\u4e3a\u5f00\u53d1\u8005\u63d0\u4f9b\u4e00\u7ad9\u5f0f\u53c2\u8003\u6307\u5357\u3002\u65e0\u8bba\u60a8\u662fC\u3001Java\u3001Python\u3001C\u8fd8\u662f\u5d4c\u5165\u5f0f\u5f00\u53d1&#8230;<\/p>","protected":false},"author":1,"featured_media":27977,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_members_access_role":[],"_members_access_error":""},"categories":[691],"tags":[1767,2527,2526,2525],"class_list":["post-40393","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-modbus-code-base","tag-1767","tag-2527","tag-2526","tag-2525"],"_links":{"self":[{"href":"https:\/\/www.modbus.cn\/en\/wp-json\/wp\/v2\/posts\/40393","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.modbus.cn\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.modbus.cn\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.modbus.cn\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.modbus.cn\/en\/wp-json\/wp\/v2\/comments?post=40393"}],"version-history":[{"count":0,"href":"https:\/\/www.modbus.cn\/en\/wp-json\/wp\/v2\/posts\/40393\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.modbus.cn\/en\/wp-json\/wp\/v2\/media\/27977"}],"wp:attachment":[{"href":"https:\/\/www.modbus.cn\/en\/wp-json\/wp\/v2\/media?parent=40393"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.modbus.cn\/en\/wp-json\/wp\/v2\/categories?post=40393"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.modbus.cn\/en\/wp-json\/wp\/v2\/tags?post=40393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}