"# Modbus\u7f16\u7a0b\u5f00\u53d1\u5de5\u5177\u5927\u5168\uff1a30+\u5f00\u6e90\u5e93\u4e0e\u6846\u67b6\u5b8c\u5168\u6307\u5357\n\n> 2026-02-24 | 2026-02-24\n> https:\/\/www.modbus.cn\/en\/40393.html\n\n**Modbus\u7f16\u7a0b\u5f00\u53d1**\n\n---\n\nModbus\u7f16\u7a0b\u5f00\u53d1\u5de5\u5177\u5927\u5168\uff1a30+\u5f00\u6e90\u5e93\u4e0e\u6846\u67b6\u5b8c\u5168\u6307\u5357\n\n## \u5f15\u8a00\n\n\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\n\n## \ud83d\udcca \u5de5\u5177\u5206\u7c7b\u6982\u89c8\n\n### 1. \u8de8\u5e73\u53f0C\u8bed\u8a00\u5e93\n\n### 2. Java\u5f00\u53d1\u5de5\u5177\u96c6\n\n### 3. Python\u751f\u6001\u5de5\u5177\n\n### 4. .NET\/C#\u5f00\u53d1\u6846\u67b6\n\n### 5. \u5d4c\u5165\u5f0f\u4e0e\u5355\u7247\u673a\u5e93\n\n### 6. \u8c03\u8bd5\u4e0e\u6d4b\u8bd5\u5de5\u5177\n\n## \ud83d\udd27 \u8de8\u5e73\u53f0C\u8bed\u8a00\u5e93\n\n### 1. LibModbus - \u6700\u6d41\u884c\u7684C\u8bed\u8a00\u5e93\n\n**\u9879\u76ee\u5730\u5740**: http:\/\/libmodbus.org\/\n\n#### \u6838\u5fc3\u7279\u6027\n\n- **\u8de8\u5e73\u53f0\u652f\u6301**: Linux, Mac OS X, FreeBSD, QNX, Win32\n- **\u534f\u8bae\u652f\u6301**: RTU(\u4e32\u53e3)\u548cTCP(\u4ee5\u592a\u7f51)\n- **\u8bb8\u53ef\u8bc1**: LGPL v3 (\u5141\u8bb8\u5546\u4e1a\u4f7f\u7528)\n- **\u8bed\u8a00**: \u7eafC\u5b9e\u73b0\n\n#### \u5b89\u88c5\u4e0e\u4f7f\u7528\n\n```\n# Ubuntu\/Debian\u5b89\u88c5\nsudo apt-get install libmodbus-dev\n\n# \u7f16\u8bd1\u793a\u4f8b\ngcc -o modbus_test modbus_test.c -lmodbus\n\n# \u57fa\u672c\u4f7f\u7528\n#include &lt;modbus.h&gt;\nmodbus_t *ctx = modbus_new_tcp(&quot;192.168.1.100&quot;, 502);\nmodbus_connect(ctx);\nuint16_t reg[10];\nmodbus_read_registers(ctx, 0, 10, reg);\n\n```\n\n#### \u4f18\u52bf\u5206\u6790\n\n- \u2705 \u6027\u80fd\u4f18\u5f02\uff0c\u8d44\u6e90\u5360\u7528\u4f4e\n- \u2705 \u793e\u533a\u6d3b\u8dc3\uff0c\u6587\u6863\u5b8c\u5584\n- \u2705 \u5de5\u4e1a\u7ea7\u7a33\u5b9a\u6027\u9a8c\u8bc1\n- \u2705 \u652f\u6301\u5f02\u6b65\u64cd\u4f5c\n\n### 2. FreeModbus - \u5d4c\u5165\u5f0f\u4e13\u7528\n\n**\u9879\u76ee\u5730\u5740**: http:\/\/sourceforge.net\/projects\/freemodbus.berlios\/\n\n#### \u9002\u7528\u573a\u666f\n\n- **\u76ee\u6807\u5e73\u53f0**: AVR, ARM7, Coldfire\u7b49\u5fae\u63a7\u5236\u5668\n- **\u534f\u8bae\u652f\u6301**: ASCII\/RTU\n- **\u8bb8\u53ef\u8bc1**: LGPL (\u6808) + GPL (\u793a\u4f8b)\n\n#### \u5d4c\u5165\u5f0f\u96c6\u6210\u793a\u4f8b\n\n```\n\/\/ FreeModbus\u914d\u7f6e\n#define MB_ASCII_ENABLED    1\n#define MB_RTU_ENABLED      1\n#define MB_TCP_ENABLED      0\n\n\/\/ \u56de\u8c03\u51fd\u6570\u5b9e\u73b0\neMBErrorCode eMBRegInputCB(UCHAR *pucRegBuffer, USHORT usAddress, \n                           USHORT usNRegs) {\n    \/\/ \u5904\u7406\u8f93\u5165\u5bc4\u5b58\u5668\u8bfb\u53d6\n    return MB_ENOERR;\n}\n\n```\n\n## \u2615 Java\u5f00\u53d1\u5de5\u5177\u96c6\n\n### 3. Jamod - \u7ecf\u5178Java\u5b9e\u73b0\n\n**\u9879\u76ee\u5730\u5740**: http:\/\/jamod.sourceforge.net\/\n\n#### \u67b6\u6784\u8bbe\u8ba1\n\n```\n\/\/ \u521b\u5efaTCP\u4e3b\u7ad9\nModbusTCPMaster master = new ModbusTCPMaster(&quot;192.168.1.100&quot;);\nmaster.connect();\n\n\/\/ \u8bfb\u53d6\u4fdd\u6301\u5bc4\u5b58\u5668\nReadMultipleRegistersRequest req = new ReadMultipleRegistersRequest(\n    0,  \/\/ \u8d77\u59cb\u5730\u5740\n    10  \/\/ \u5bc4\u5b58\u5668\u6570\u91cf\n);\nReadMultipleRegistersResponse resp = \n    (ReadMultipleRegistersResponse) master.send(req);\n\n\/\/ \u83b7\u53d6\u6570\u636e\nint[] registerValues = resp.getRegisterValues();\n\n```\n\n#### \u529f\u80fd\u7279\u6027\n\n- \u2705 \u652f\u6301ASCII\u3001RTU\u3001TCP\n- \u2705 \u4e3b\u7ad9\/\u4ece\u7ad9\u5b8c\u6574\u5b9e\u73b0\n- \u2705 \u7ebf\u7a0b\u5b89\u5168\u8bbe\u8ba1\n- \u2705 Maven\u96c6\u6210\u652f\u6301\n\n### 4. Modbus4J - \u9ad8\u6027\u80fdJava\u5e93\n\n**\u9879\u76ee\u5730\u5740**: http:\/\/sourceforge.net\/projects\/modbus4j\/\n\n#### \u6027\u80fd\u4f18\u5316\u7279\u6027\n\n```\n\/\/ \u521b\u5efa\u5de5\u5382\u5b9e\u4f8b\nModbusFactory factory = new ModbusFactory();\n\n\/\/ TCP\u4e3b\u7ad9\u914d\u7f6e\nTcpMaster master = factory.createTcpMaster(\n    new TcpMasterConfig.Builder(&quot;192.168.1.100&quot;)\n        .setPort(502)\n        .setTimeout(3000)\n        .build(),\n    true  \/\/ \u4fdd\u6301\u8fde\u63a5\n);\n\n\/\/ \u6279\u91cf\u8bfb\u53d6\u4f18\u5316\nBatchRead&lt;String&gt; batch = new BatchRead&lt;&gt;();\nbatch.addLocator(&quot;temp1&quot;, new InputRegisterLocator(1, 0));\nbatch.addLocator(&quot;temp2&quot;, new InputRegisterLocator(1, 1));\n\nBatchResults&lt;String&gt; results = master.send(batch);\nFloat temperature = results.getFloatValue(&quot;temp1&quot;);\n\n```\n\n#### \u4f18\u52bf\u5bf9\u6bd4\n\n\u7279\u6027\nJamod\nModbus4J\n\n\u6027\u80fd\n\u4e2d\u7b49\n**\u4f18\u79c0**\n\n\u5185\u5b58\u5360\u7528\n\u8f83\u9ad8\n\u8f83\u4f4e\n\nAPI\u8bbe\u8ba1\n\u4f20\u7edf\n\u73b0\u4ee3\u5316\n\n\u5f02\u6b65\u652f\u6301\n\u6709\u9650\n**\u5b8c\u5584**\n\n### 5. ModbusPal - Java\u6a21\u62df\u5668\n\n**\u9879\u76ee\u5730\u5740**: http:\/\/modbuspal.sourceforge.net\/\n\n#### \u6a21\u62df\u5668\u529f\u80fd\n\n- **\u52a8\u6001\u6570\u636e\u751f\u6210**: \u6570\u5b66\u51fd\u6570 + Python\u811a\u672c\n- **\u4e32\u53e3\u652f\u6301**: \u901a\u8fc7RxTx\u5e93\n- **\u811a\u672c\u6269\u5c55**: Jython\u96c6\u6210\n- **\u53ef\u89c6\u5316\u754c\u9762**: Swing GUI\n\n#### \u6d4b\u8bd5\u573a\u666f\u914d\u7f6e\n\n```\n# ModbusPal Python\u811a\u672c\u793a\u4f8b\ndef generate_temperature(cycle):\n    import math\n    # \u6a21\u62df\u6e29\u5ea6\u6ce2\u52a8\n    base_temp = 25.0\n    amplitude = 5.0\n    period = 100  # \u5468\u671f\n    return base_temp + amplitude * math.sin(2 * math.pi * cycle \/ period)\n\n```\n\n## \ud83d\udc0d Python\u751f\u6001\u5de5\u5177\n\n### 6. uModbus - \u7eafPython\u5b9e\u73b0\n\n**\u9879\u76ee\u5730\u5740**: https:\/\/pypi.python.org\/pypi\/uModbus\/0.5.0\n\n#### \u5b89\u88c5\u4e0e\u57fa\u7840\u4f7f\u7528\n\n```\n# \u5b89\u88c5\npip install uModbus\n\n# \u6216\u4ece\u6e90\u7801\u5b89\u88c5\ngit clone https:\/\/github.com\/AdvancedClimateSystems\/uModbus\ncd uModbus\npython setup.py install\n\n```\n\n#### \u5ba2\u6237\u7aef\u793a\u4f8b\n\n```\nfrom umodbus import client\nimport socket\n\n# \u521b\u5efaTCP\u5ba2\u6237\u7aef\nsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\nsock.connect((&#39;192.168.1.100&#39;, 502))\n\n# \u8bfb\u53d6\u4fdd\u6301\u5bc4\u5b58\u5668\nmessage = client.read_holding_registers(\n    slave_id=1,\n    starting_address=0,\n    quantity=10\n)\n\nresponse = client.send_message(message, sock)\nprint(f&quot;\u5bc4\u5b58\u5668\u503c: {response}&quot;)\n\n# \u5199\u5165\u5355\u4e2a\u5bc4\u5b58\u5668\nwrite_message = client.write_single_register(\n    slave_id=1,\n    address=0,\n    value=100\n)\nclient.send_message(write_message, sock)\n\n```\n\n#### \u670d\u52a1\u5668\u793a\u4f8b\n\n```\nfrom umodbus.server.tcp import RequestHandler, get_server\nfrom umodbus.utils import log_to_stream\nimport logging\n\n# \u8bbe\u7f6e\u65e5\u5fd7\nlog_to_stream(level=logging.DEBUG)\n\n# \u5b9a\u4e49\u6570\u636e\u5b58\u50a8\ndata_store = {\n    &#39;coils&#39;: {0: True, 1: False, 2: True},\n    &#39;discrete_inputs&#39;: {0: False, 1: True},\n    &#39;holding_registers&#39;: {0: 100, 1: 200, 2: 300},\n    &#39;input_registers&#39;: {0: 400, 1: 500}\n}\n\n# \u521b\u5efa\u670d\u52a1\u5668\napp = get_server(RequestHandler, data_store)\n\nif __name__ == &#39;__main__&#39;:\n    try:\n        app.serve_forever()\n    finally:\n        app.shutdown()\n        app.server_close()\n\n```\n\n### 7. Modbus Test Kit (modbus-tk)\n\n**\u9879\u76ee\u5730\u5740**: http:\/\/code.google.com\/p\/modbus-tk\/\n\n#### \u9ad8\u7ea7\u7279\u6027\n\n```\nimport modbus_tk\nimport modbus_tk.defines as cst\nfrom modbus_tk import modbus_tcp\n\n# \u521b\u5efa\u4e3b\u7ad9\nmaster = modbus_tcp.TcpMaster(host=&quot;192.168.1.100&quot;)\nmaster.set_timeout(5.0)\n\n# \u6279\u91cf\u64cd\u4f5c\ntry:\n    # \u8bfb\u53d6\u591a\u4e2a\u6570\u636e\u7c7b\u578b\n    coils = master.execute(1, cst.READ_COILS, 0, 10)\n    inputs = master.execute(1, cst.READ_DISCRETE_INPUTS, 0, 8)\n    holding = master.execute(1, cst.READ_HOLDING_REGISTERS, 0, 20)\n    input_reg = master.execute(1, cst.READ_INPUT_REGISTERS, 0, 10)\n\n    # \u5199\u5165\u64cd\u4f5c\n    master.execute(1, cst.WRITE_SINGLE_COIL, 0, output_value=1)\n    master.execute(1, cst.WRITE_SINGLE_REGISTER, 0, output_value=1000)\n    master.execute(1, cst.WRITE_MULTIPLE_REGISTERS, 0, \n                   output_value=[100, 200, 300, 400])\n\nexcept modbus_tk.modbus.ModbusError as e:\n    print(f&quot;Modbus\u9519\u8bef: {e}&quot;)\n\n```\n\n#### \u6027\u80fd\u5bf9\u6bd4\n\n\u7279\u6027\nuModbus\nmodbus-tk\n\n\u534f\u8bae\u5b8c\u6574\u6027\n\u57fa\u672c\u529f\u80fd\n**\u5b8c\u6574\u529f\u80fd**\n\n\u6027\u80fd\n\u4e2d\u7b49\n\u8f83\u9ad8\n\n\u6587\u6863\u8d28\u91cf\n\u4e00\u822c\n**\u4f18\u79c0**\n\n\u793e\u533a\u6d3b\u8dc3\u5ea6\n\u8f83\u4f4e\n\u6d3b\u8dc3\n\n## \ud83d\udcbb .NET\/C#\u5f00\u53d1\u6846\u67b6\n\n### 8. NModbus - \u4e3b\u6d41C#\u5b9e\u73b0\n\n**\u9879\u76ee\u5730\u5740**: http:\/\/code.google.com\/p\/nmodbus\/\n\n#### NuGet\u5b89\u88c5\n\n```\nInstall-Package NModbus\n\n```\n\n#### \u5b8c\u6574\u793a\u4f8b\n\n```\nusing NModbus;\nusing System.Net.Sockets;\n\nclass Program\n{\n    static void Main()\n    {\n        \/\/ \u521b\u5efaTCP\u5ba2\u6237\u7aef\n        TcpClient tcpClient = new TcpClient(&quot;192.168.1.100&quot;, 502);\n        var factory = new ModbusFactory();\n        IModbusMaster master = factory.CreateMaster(tcpClient);\n\n        \/\/ \u8bfb\u53d6\u64cd\u4f5c\n        ushort[] holdingRegisters = master.ReadHoldingRegisters(1, 0, 10);\n        bool[] coils = master.ReadCoils(1, 0, 16);\n        bool[] inputs = master.ReadInputs(1, 0, 8);\n        ushort[] inputRegisters = master.ReadInputRegisters(1, 0, 10);\n\n        \/\/ \u5199\u5165\u64cd\u4f5c\n        master.WriteSingleCoil(1, 0, true);\n        master.WriteSingleRegister(1, 0, 1000);\n        master.WriteMultipleRegisters(1, 0, new ushort[] {100, 200, 300});\n\n        \/\/ \u5f02\u6b65\u64cd\u4f5c\n        var task = master.ReadHoldingRegistersAsync(1, 0, 10);\n        task.ContinueWith(t =&gt; {\n            if (t.IsCompletedSuccessfully)\n            {\n                Console.WriteLine($&quot;\u8bfb\u53d6\u5b8c\u6210: {t.Result.Length}\u4e2a\u5bc4\u5b58\u5668&quot;);\n            }\n        });\n\n        tcpClient.Close();\n    }\n}\n\n```\n\n#### \u9ad8\u7ea7\u7279\u6027\n\n```\n\/\/ 1. \u81ea\u5b9a\u4e49\u4f20\u8f93\u5c42\npublic class CustomTransport : IModbusTransport\n{\n    \/\/ \u5b9e\u73b0\u81ea\u5b9a\u4e49\u901a\u4fe1\u534f\u8bae\n}\n\n\/\/ 2. \u4e8b\u4ef6\u5904\u7406\nmaster.ModbusSlaveRequest += (sender, args) =&gt; {\n    Console.WriteLine($&quot;\u8bf7\u6c42: {args.Message.FunctionCode}&quot;);\n};\n\n\/\/ 3. \u6027\u80fd\u76d1\u63a7\nvar diagnostics = master.Diagnostics;\nConsole.WriteLine($&quot;\u6210\u529f\u8bf7\u6c42: {diagnostics.NumberOfSuccessRequests}&quot;);\nConsole.WriteLine($&quot;\u5931\u8d25\u8bf7\u6c42: {diagnostics.NumberOfFailRequests}&quot;);\n\n```\n\n### 9. ASComm.NET - \u5546\u4e1a\u7ea7\u7ec4\u4ef6\n\n**\u9879\u76ee\u5730\u5740**: http:\/\/automatedsolutions.com\/products\/dotnet\/ascomm\/\n\n#### \u4f01\u4e1a\u7ea7\u7279\u6027\n\n```\n\/\/ \u53ef\u89c6\u5316\u914d\u7f6e\nASCommNET comm = new ASCommNET();\ncomm.Protocol = ProtocolType.ModbusTCP;\ncomm.Server = &quot;192.168.1.100&quot;;\ncomm.Port = 502;\n\n\/\/ \u6570\u636e\u9879\u7ba1\u7406\nDataItem tempItem = new DataItem();\ntempItem.Name = &quot;Temperature&quot;;\ntempItem.Address = &quot;40001&quot;;  \/\/ \u4fdd\u6301\u5bc4\u5b58\u566840001\ntempItem.DataType = DataType.Int16;\ntempItem.ScanRate = 1000;  \/\/ 1\u79d2\u626b\u63cf\u4e00\u6b21\n\ncomm.DataItems.Add(tempItem);\n\n\/\/ \u4e8b\u4ef6\u9a71\u52a8\ntempItem.DataChanged += (sender, e) =&gt; {\n    Console.WriteLine($&quot;\u6e29\u5ea6\u53d8\u5316: {e.NewValue}\u00b0C&quot;);\n};\n\n\/\/ \u542f\u52a8\u901a\u4fe1\ncomm.Start();\n\n```\n\n#### \u8bb8\u53ef\u8bc1\u6a21\u5f0f\n\n- **\u8bd5\u7528\u7248**: 30\u5929\u5168\u529f\u80fd\u8bd5\u7528\n- **\u5f00\u53d1\u7248**: \u5355\u5f00\u53d1\u8005\u8bb8\u53ef\n- **\u8fd0\u884c\u65f6\u7248**: \u90e8\u7f72\u8bb8\u53ef\n- **\u4f01\u4e1a\u7248**: \u591a\u670d\u52a1\u5668\u652f\u6301\n\n## \ud83d\udd0c \u5d4c\u5165\u5f0f\u4e0e\u5355\u7247\u673a\u5e93\n\n### 10. simple-modbus - Arduino\u5e93\n\n**\u9879\u76ee\u5730\u5740**: https:\/\/code.google.com\/p\/simple-modbus\/\n\n#### Arduino\u96c6\u6210\n\n```\n#include &lt;SimpleModbusMaster.h&gt;\n#include &lt;SimpleModbusSlave.h&gt;\n\n\/\/ \u4e3b\u7ad9\u914d\u7f6e\n#define TOTAL_NO_OF_REGISTERS 10\nunsigned int holdingRegs[TOTAL_NO_OF_REGISTERS];\n\n\/\/ \u4ece\u7ad9\u914d\u7f6e\nenum {\n  TEMP_REGISTER,\n  HUMIDITY_REGISTER,\n  PRESSURE_REGISTER,\n  HOLDING_REGS_SIZE\n};\n\nunsigned int holdingRegs[HOLDING_REGS_SIZE];\n\nvoid setup() {\n  \/\/ \u521d\u59cb\u5316Modbus\n  modbus_configure(&amp;Serial, 9600, SERIAL_8N2, 1, 2, \n                   TOTAL_NO_OF_REGISTERS, holdingRegs);\n  modbus_update();\n\n  \/\/ \u8bbe\u7f6e\u4ece\u7ad9\u6570\u636e\n  holdingRegs[TEMP_REGISTER] = 250;  \/\/ 25.0\u00b0C\n  holdingRegs[HUMIDITY_REGISTER] = 600;  \/\/ 60.0%\n  holdingRegs[PRESSURE_REGISTER] = 1013; \/\/ 1013 hPa\n}\n\nvoid loop() {\n  \/\/ \u4e3b\u7ad9\u8bfb\u53d6\n  modbus_update();\n\n  \/\/ \u5904\u7406\u63a5\u6536\u5230\u7684\u6570\u636e\n  if (holdingRegs[0] != 0) {\n    \/\/ \u6267\u884c\u76f8\u5e94\u64cd\u4f5c\n  }\n\n  \/\/ \u4ece\u7ad9\u54cd\u5e94\n  modbus_update(holdingRegs, HOLDING_REGS_SIZE);\n}\n\n```\n\n#### \u652f\u6301\u7684\u529f\u80fd\u7801\n\n- \u2705 01: \u8bfb\u53d6\u7ebf\u5708\n- \u2705 02: \u8bfb\u53d6\u79bb\u6563\u8f93\u5165\n- \u2705 03: \u8bfb\u53d6\u4fdd\u6301\u5bc4\u5b58\u5668\n- \u2705 04: \u8bfb\u53d6\u8f93\u5165\u5bc4\u5b58\u5668\n- \u2705 15: \u5199\u5165\u591a\u4e2a\u7ebf\u5708\n- \u2705 16: \u5199\u5165\u591a\u4e2a\u5bc4\u5b58\u5668\n\n### 11. FreeModbus (\u518d\u6b21\u63d0\u53ca) - \u4e13\u4e1a\u5d4c\u5165\u5f0f\n\n#### \u79fb\u690d\u6307\u5357\n\n- **\u7aef\u53e3\u5c42\u5b9e\u73b0**\n\n```\n\/\/ portserial.c - \u4e32\u53e3\u9a71\u52a8\nBOOL xMBPortSerialInit(UCHAR ucPort, ULONG ulBaudRate, UCHAR ucDataBits, \n                       UCHAR ucStopBits, eMBParity eParity) {\n    \/\/ \u5b9e\u73b0\u4e32\u53e3\u521d\u59cb\u5316\n    return TRUE;\n}\n\n\/\/ porttimer.c - \u5b9a\u65f6\u5668\u9a71\u52a8\nBOOL xMBPortTimersInit(USHORT usTimeOut50us) {\n    \/\/ \u5b9e\u73b0\u5b9a\u65f6\u5668\u521d\u59cb\u5316\n    return TRUE;\n}\n\n```\n\n- **\u914d\u7f6e\u8c03\u6574**\n\n```\n\/\/ \u5185\u5b58\u4f18\u5316\u914d\u7f6e\n#define MB_REG_HOLDING_START     0\n#define MB_REG_HOLDING_NREGS     100\n#define MB_REG_INPUT_START       0\n#define MB_REG_INPUT_NREGS       100\n#define MB_REG_COILS_START       0\n#define MB_REG_COILS_SIZE        100\n#define MB_REG_DISCRETE_START    0\n#define MB_REG_DISCRETE_SIZE     100\n\n```\n\n## \ud83d\udee0\ufe0f \u8c03\u8bd5\u4e0e\u6d4b\u8bd5\u5de5\u5177\n\n### 12. Modbus Poll - Windows\u8c03\u8bd5\u5de5\u5177\n\n**\u9879\u76ee\u5730\u5740**: http:\/\/www.modbustools.com\/\n\n#### \u4e3b\u8981\u529f\u80fd\n\n- **\u591a\u6587\u6863\u754c\u9762**: \u540c\u65f6\u76d1\u63a7\u591a\u4e2a\u8bbe\u5907\n- **\u6570\u636e\u8bb0\u5f55**: \u5b9e\u65f6\u6570\u636e\u8bb0\u5f55\u548c\u5bfc\u51fa\n- **\u811a\u672c\u652f\u6301**: \u81ea\u52a8\u5316\u6d4b\u8bd5\u811a\u672c\n- **\u534f\u8bae\u5206\u6790**: \u8be6\u7ec6\u62a5\u6587\u89e3\u6790\n\n#### \u4f7f\u7528\u573a\u666f\n\n- **\u8bbe\u5907\u8c03\u8bd5**: \u9a8c\u8bc1\u65b0\u8bbe\u5907Modbus\u5b9e\u73b0\n- **\u7cfb\u7edf\u96c6\u6210**: \u6d4b\u8bd5PLC\u4e0eSCADA\u901a\u4fe1\n- **\u6545\u969c\u6392\u67e5**: \u5206\u6790\u901a\u4fe1\u95ee\u9898\u539f\u56e0\n- **\u6027\u80fd\u6d4b\u8bd5**: \u8bc4\u4f30\u7cfb\u7edf\u54cd\u5e94\u65f6\u95f4\n\n### 13. Modpoll - \u547d\u4ee4\u884c\u6d4b\u8bd5\u5de5\u5177\n\n**\u9879\u76ee\u5730\u5740**: http:\/\/www.focus-sw.com\/fieldtalk\/modpoll.html\n\n#### \u547d\u4ee4\u884c\u793a\u4f8b\n\n```\n# \u8bfb\u53d6\u4fdd\u6301\u5bc4\u5b58\u5668\nmodpoll -m tcp -t 4 -r 100 -c 10 192.168.1.100\n\n# \u8bfb\u53d6\u7ebf\u5708\u72b6\u6001\nmodpoll -m tcp -t 0 -r 0 -c 16 192.168.1.100\n\n# \u5199\u5165\u5355\u4e2a\u5bc4\u5b58\u5668\nmodpoll -m tcp -t 4:hex -r 40001 -c 1 192.168.1.100 1234\n\n# \u8f6e\u8be2\u6a21\u5f0f\nmodpoll -m tcp -t 4 -r 100 -c 5 -p 1000 192.168.1.100\n\n# ASCII\u8f93\u51fa\u683c\u5f0f\nmodpoll -m tcp -t 4 -r 100 -c 10 -a 1 -f c 192.168.1.100\n\n```\n\n#### \u53c2\u6570\u8bf4\u660e\n\n- `-m`: \u6a21\u5f0f (tcp\/rtu\/ascii)\n- `-t`: \u6570\u636e\u7c7b\u578b (0:\u7ebf\u5708, 1:\u79bb\u6563\u8f93\u5165, 3:\u8f93\u5165\u5bc4\u5b58\u5668, 4:\u4fdd\u6301\u5bc4\u5b58\u5668)\n- `-r`: \u8d77\u59cb\u5730\u5740\n- `-c`: \u6570\u91cf\n- `-p`: \u8f6e\u8be2\u95f4\u9694(ms)\n- `-a`: \u4ece\u7ad9\u5730\u5740\n\n### 14. Wireshark - \u7f51\u7edc\u534f\u8bae\u5206\u6790\n\n**\u9879\u76ee\u5730\u5740**: http:\/\/www.wireshark.org\/\n\n#### Modbus\u62a5\u6587\u5206\u6790\n\n**\u8fc7\u6ee4\u89c4\u5219**\n\nmodbus                    # \u6240\u6709Modbus\u6d41\u91cf\n   modbus.func_code == 0x03  # \u4ec5\u8bfb\u53d6\u4fdd\u6301\u5bc4\u5b58\u5668\n   tcp.port == 502          # Modbus TCP\u7aef\u53e3\n\n**\u89e3\u7801\u529f\u80fd**\n\n   - \u529f\u80fd\u7801\u89e3\u6790\n\n   - \u6570\u636e\u683c\u5f0f\u8f6c\u6362\n\n   - \u9519\u8bef\u7801\u8bc6\u522b\n\n   - \u65f6\u5e8f\u5206\u6790\n\n### 15. CAS Modbus\u5de5\u5177\u96c6\n\n**\u9879\u76ee\u5730\u5740**: https:\/\/store.chipkin.com\/products\/tools\n\n#### \u5305\u542b\u5de5\u5177\n\n- **Modbus RTU Parser**: \u5341\u516d\u8fdb\u5236\u62a5\u6587\u89e3\u6790\n- **Modbus TCP Parser**: TCP\u62a5\u6587\u5206\u6790\n- **Modbus Scanner**: \u8bbe\u5907\u626b\u63cf\u53d1\u73b0\n\n## \ud83c\udfaf \u5de5\u5177\u9009\u62e9\u6307\u5357\n\n### \u6309\u5f00\u53d1\u8bed\u8a00\u9009\u62e9\n\n\u8bed\u8a00\n\u63a8\u8350\u5de5\u5177\n\u9002\u7528\u573a\u666f\n\nC\/C++\n**LibModbus**\n\u8de8\u5e73\u53f0\u5e94\u7528\u3001\u5d4c\u5165\u5f0fLinux\n\nJava\n**Modbus4J**\n\u4f01\u4e1a\u7ea7\u5e94\u7528\u3001\u9ad8\u6027\u80fd\u9700\u6c42\n\nPython\n**modbus-tk**\n\u5feb\u901f\u539f\u578b\u3001\u6d4b\u8bd5\u811a\u672c\n\nC#\/.NET\n**NModbus**\nWindows\u5e94\u7528\u3001\u5de5\u4e1a\u8f6f\u4ef6\n\nArduino\n**simple-modbus**\n\u5355\u7247\u673a\u3001\u7269\u8054\u7f51\u8bbe\u5907\n\n\u5d4c\u5165\u5f0fC\n**FreeModbus**\n\u8d44\u6e90\u53d7\u9650\u5fae\u63a7\u5236\u5668\n\n### \u6309\u5e94\u7528\u573a\u666f\u9009\u62e9\n\n\u573a\u666f\n\u63a8\u8350\u5de5\u5177\n\u5173\u952e\u7279\u6027\n\n\u8bbe\u5907\u5f00\u53d1\nFreeModbus\n\u8d44\u6e90\u5360\u7528\u4f4e\u3001\u53ef\u79fb\u690d\u6027\u5f3a\n\n\u7cfb\u7edf\u96c6\u6210\nLibModbus\n\u7a33\u5b9a\u6027\u9ad8\u3001\u8de8\u5e73\u53f0\n\n\u6d4b\u8bd5\u8c03\u8bd5\nModbus Poll\n\u56fe\u5f62\u754c\u9762\u3001\u529f\u80fd\u5b8c\u6574\n\n\u81ea\u52a8\u5316\u6d4b\u8bd5\nmodbus-tk\nPython\u811a\u672c\u3001\u7075\u6d3b\u6027\u5f3a\n\n\u751f\u4ea7\u73af\u5883\nModbus4J\/NModbus\n\u6027\u80fd\u4f18\u5f02\u3001\u4f01\u4e1a\u7ea7\u652f\u6301\n\n\u6559\u80b2\u5b66\u4e60\nuModbus\n\u7b80\u5355\u6613\u7528\u3001\u5b66\u4e60\u66f2\u7ebf\u5e73\u7f13\n\n### \u6027\u80fd\u5bf9\u6bd4\u8868\n\n\u5de5\u5177\n\u534f\u8bae\u652f\u6301\n\u6027\u80fd\u7b49\u7ea7\n\u5185\u5b58\u5360\u7528\n\u5b66\u4e60\u66f2\u7ebf\n\nLibModbus\nRTU\/TCP\n\u2b50\u2b50\u2b50\u2b50\u2b50\n\u4f4e\n\u4e2d\u7b49\n\nModbus4J\nASCII\/RTU\/TCP\/UDP\n\u2b50\u2b50\u2b50\u2b50\u2b50\n\u4e2d\u7b49\n\u4e2d\u7b49\n\nNModbus\nASCII\/RTU\/TCP\n\u2b50\u2b50\u2b50\u2b50\n\u4e2d\u7b49\n\u7b80\u5355\n\nmodbus-tk\nRTU\/TCP\n\u2b50\u2b50\u2b50\u2b50\n\u4f4e\n\u7b80\u5355\n\nuModbus\nRTU\/TCP\n\u2b50\u2b50\u2b50\n\u4f4e\n\u7b80\u5355\n\nFreeModbus\nASCII\/RTU\n\u2b50\u2b50\u2b50\n\u6781\u4f4e\n\u4e2d\u7b49\n\n## \ud83d\udcda \u5b66\u4e60\u8d44\u6e90\u63a8\u8350\n\n### \u5b98\u65b9\u6587\u6863\n\n- **Modbus\u534f\u8bae\u89c4\u8303**: www.modbus.org\/specs.php\n- **LibModbus\u6587\u6863**: libmodbus.org\/documentation\n- **Modbus4J Wiki**: sourceforge.net\/p\/modbus4j\/wiki\/Home\n\n### \u6559\u7a0b\u4e0e\u793a\u4f8b\n\n- **GitHub\u793a\u4f8b\u4ed3\u5e93**: \u641c\u7d22\"modbus example\"\n- **Stack Overflow**: modbus\u76f8\u5173\u95ee\u7b54\n- **\u6280\u672f\u535a\u5ba2**: \u5404\u5927\u7269\u8054\u7f51\u6280\u672f\u535a\u5ba2\n\n### \u793e\u533a\u652f\u6301\n\n- **GitHub Issues**: \u5404\u9879\u76ee\u7684\u95ee\u9898\u8ddf\u8e2a\n- **\u90ae\u4ef6\u5217\u8868**: \u4f20\u7edf\u6280\u672f\u652f\u6301\u65b9\u5f0f\n- **\u6280\u672f\u8bba\u575b**: \u5d4c\u5165\u5f0f\u3001\u7269\u8054\u7f51\u8bba\u575b\n\n## \ud83d\udd2e \u53d1\u5c55\u8d8b\u52bf\n\n### 1. \u4e91\u539f\u751f\u652f\u6301\n\n- Docker\u5bb9\u5668\u5316\u90e8\u7f72\n- Kubernetes\u7f16\u6392\n- \u5fae\u670d\u52a1\u67b6\u6784\n\n### 2. \u7269\u8054\u7f51\u96c6\u6210\n\n- MQTT\u6865\u63a5\n- OPC UA\u517c\u5bb9\n- \u8fb9\u7f18\u8ba1\u7b97\u652f\u6301\n\n### 3. \u5b89\u5168\u6027\u589e\u5f3a\n\n- TLS\/SSL\u52a0\u5bc6\n- \u8ba4\u8bc1\u6388\u6743\u673a\u5236\n- \u5b89\u5168\u5ba1\u8ba1\u65e5\u5fd7\n\n### 4. \u5f00\u53d1\u5de5\u5177\u73b0\u4ee3\u5316\n\n- REST API\u5c01\u88c5\n- GraphQL\u63a5\u53e3\n- WebSocket\u5b9e\u65f6\u901a\u4fe1\n\n## \ud83d\udca1 \u6700\u4f73\u5b9e\u8df5\u5efa\u8bae\n\n### \u5f00\u53d1\u9636\u6bb5\n\n- **\u9009\u62e9\u5408\u9002\u7684\u5de5\u5177**\uff1a\u6839\u636e\u9879\u76ee\u9700\u6c42\u548c\u6280\u672f\u6808\u9009\u62e9\n- **\u5145\u5206\u6d4b\u8bd5**\uff1a\u4f7f\u7528\u6a21\u62df\u5668\u8fdb\u884c\u5b8c\u6574\u6d4b\u8bd5\n- **\u9519\u8bef\u5904\u7406**\uff1a\u5b9e\u73b0\u5b8c\u5584\u7684\u5f02\u5e38\u5904\u7406\u673a\u5236\n- **\u65e5\u5fd7\u8bb0\u5f55**\uff1a\u8be6\u7ec6\u8bb0\u5f55\u901a\u4fe1\u8fc7\u7a0b\u548c\u9519\u8bef\u4fe1\u606f\n\n### \u90e8\u7f72\u9636\u6bb5\n\n- **\u6027\u80fd\u8c03\u4f18**\uff1a\u6839\u636e\u7f51\u7edc\u6761\u4ef6\u8c03\u6574\u8d85\u65f6\u548c\u91cd\u8bd5\u53c2\u6570\n- **\u76d1\u63a7\u544a\u8b66**\uff1a\u5b9e\u73b0\u7cfb\u7edf\u5065\u5eb7\u76d1\u63a7\n- **\u5907\u4efd\u6062\u590d**\uff1a\u914d\u7f6e\u6570\u636e\u548c\u72b6\u6001\u5907\u4efd\u673a\u5236\n- **\u5b89\u5168\u52a0\u56fa**\uff1a\u5b9e\u65bd\u9002\u5f53\u7684\u5b89\u5168\u63aa\u65bd\n\n### \u7ef4\u62a4\u9636\u6bb5\n\n- **\u5b9a\u671f\u66f4\u65b0**\uff1a\u4fdd\u6301\u5de5\u5177\u5e93\u7248\u672c\u66f4\u65b0\n- **\u6027\u80fd\u76d1\u63a7**\uff1a\u6301\u7eed\u76d1\u63a7\u7cfb\u7edf\u6027\u80fd\n- **\u95ee\u9898\u6392\u67e5**\uff1a\u5efa\u7acb\u7cfb\u7edf\u5316\u7684\u95ee\u9898\u6392\u67e5\u6d41\u7a0b\n- **\u6587\u6863\u66f4\u65b0**\uff1a\u4fdd\u6301\u6587\u6863\u4e0e\u7cfb\u7edf\u540c\u6b65\n\n## \ud83c\udf89 \u603b\u7ed3\n\n\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\n\n**\u5173\u952e\u8981\u70b9**\uff1a\n\n1. **LibModbus**\u662fC\u8bed\u8a00\u5f00\u53d1\u7684\u9996\u9009\uff0c\u6027\u80fd\u4f18\u5f02\u4e14\u7a33\u5b9a\n\n2. **Modbus4J**\u548c**NModbus**\u5206\u522b\u4ee3\u8868\u4e86Java\u548c.NET\u5e73\u53f0\u7684\u6700\u4f73\u5b9e\u8df5\n\n3. **Python\u751f\u6001**\u63d0\u4f9b\u4e86\u5feb\u901f\u539f\u578b\u5f00\u53d1\u7684\u4f18\u79c0\u5de5\u5177\n\n4. **\u8c03\u8bd5\u5de5\u5177\u94fe**\u5b8c\u6574\uff0c\u4ece\u547d\u4ee4\u884c\u5230\u56fe\u5f62\u754c\u9762\u5e94\u6709\u5c3d\u6709\n\n5. **\u5f00\u6e90\u793e\u533a\u6d3b\u8dc3**\uff0c\u5927\u591a\u6570\u5de5\u5177\u90fd\u6709\u826f\u597d\u7684\u7ef4\u62a4\u548c\u652f\u6301\n\n\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\n\n**\u6700\u540e\u66f4\u65b0**: 2026-02-24\n\n**\u4f5c\u8005**: \u8d3e\u7ef4\u65afAI\u52a9\u624b\n\n**\u5206\u7c7b**: Modbus\u7f16\u7a0b\u5f00\u53d1\n\n**\u6807\u7b7e**: Modbus, \u7f16\u7a0b\u5f00\u53d1, \u5f00\u6e90\u5de5\u5177, \u5de5\u4e1a\u81ea\u52a8\u5316, \u7269\u8054\u7f51, \u5f00\u53d1\u6307\u5357\n\n---\n*modbus.cn*\n"