"# \u4f7f\u7528.NET\u8fdb\u884c\u00a0MODBUS\u00a0TCP\u901a\u8baf\u793a\u4f8b\u4ee3\u7801\n\n> 2022-03-18 | 2022-03-18\n> https:\/\/www.modbus.cn\/en\/6781.html\n\n**Modbus\u7f16\u7a0b\u5f00\u53d1**\n\n---\n\nModbus RTU\u4e3b\u7ad9\u7b80\u5355\u8bfb\u5199\u64cd\u4f5c\n\n```\nusing System;\r\nusing EasyModbus;\r\n \r\nnamespace ModbusRS485Master\r\n{\r\n\tclass Program\r\n\t{\r\n\t\tpublic static void Main(string&#91;] args)\r\n\t\t{\r\n\t\t\tModbusClient modbusClient = new ModbusClient(\"COM1\");\r\n\t\t\t\/\/modbusClient.UnitIdentifier = 1; Not necessary since default slaveID = 1;\r\n\t\t\t\/\/modbusClient.Baudrate = 9600;\t\/\/ Not necessary since default baudrate = 9600\r\n\t\t\t\/\/modbusClient.Parity = System.IO.Ports.Parity.None;\r\n\t\t\t\/\/modbusClient.StopBits = System.IO.Ports.StopBits.Two;\r\n\t\t\t\/\/modbusClient.ConnectionTimeout = 500;\t\t\t\r\n\t\t\tmodbusClient.Connect();\r\n\t\t\t\r\n\t\t\tConsole.WriteLine(\"Value of Discr. Input #1: \"+modbusClient.ReadDiscreteInputs(0,1)&#91;0].ToString());\t\/\/Reads Discrete Input #1\r\n\t\t\tConsole.WriteLine(\"Value of Input Reg. #10: \"+modbusClient.ReadInputRegisters(9,1)&#91;0].ToString());\t\/\/Reads Inp. Reg. #10\r\n\t\t\t\r\n\t\t\tmodbusClient.WriteSingleCoil(4,true);\t\t\/\/Writes Coil #5\r\n\t\t\tmodbusClient.WriteSingleRegister(19,4711);\t\/\/Writes Holding Reg. #20\r\n\t\t\t\r\n\t\t\tConsole.WriteLine(\"Value of Coil #5: \"+modbusClient.ReadCoils(4,1)&#91;0].ToString());\t\/\/Reads Discrete Input #1\r\n\t\t\tConsole.WriteLine(\"Value of Holding Reg.. #20: \"+modbusClient.ReadHoldingRegisters(19,1)&#91;0].ToString());\t\/\/Reads Inp. Reg. #10\r\n\t\t\tmodbusClient.WriteMultipleRegisters(49, new int&#91;10] {1,2,3,4,5,6,7,8,9,10});\r\n\t\t\tmodbusClient.WriteMultipleCoils(29, new bool&#91;10] {true,true,true,true,true,true,true,true,true,true,});\r\n\t\t\t\r\n\t\t\tConsole.Write(\"Press any key to continue . . . \");\r\n\t\t\tConsole.ReadKey(true);\r\n\t\t}\r\n\t}\r\n}\n```\n\nModbus-TCP Client \u7b80\u5355\u8bfb\u5199\u64cd\u4f5c\n\n```\nnamespace ModbusClientApplication\r\n{\r\n    class Program\r\n    {\r\n        public static void Main(string&#91;] args)\r\n        {\r\n            ModbusClient modbusClient = new ModbusClient(\"190.201.100.100\", 502);    \/\/Ip-Address and Port of Modbus-TCP-Server\r\n            modbusClient.Connect();                                                    \/\/Connect to Server\r\n            modbusClient.WriteMultipleCoils(4, new bool&#91;] {true, true, true, true, true, true, true, true, true, true});    \/\/Write Coils starting with Address 5\r\n            bool&#91;] readCoils = modbusClient.ReadCoils(9,10);                        \/\/Read 10 Coils from Server, starting with address 10\r\n            int&#91;] readHoldingRegisters = modbusClient.ReadHoldingRegisters(0,10);    \/\/Read 10 Holding Registers from Server, starting with Address 1\r\n\r\n            \/\/ Console Output\r\n            for (int i = 0; i &lt; readCoils.Length; i++)\r\n                Console.WriteLine(\"Value of Coil \" + (9 + i + 1) + \" \" + readCoils&#91;i].ToString());\r\n                        \r\n            for (int i = 0; i &lt; readHoldingRegisters.Length; i++)\r\n                Console.WriteLine(\"Value of HoldingRegister \" + (i + 1) + \" \"+ readHoldingRegisters&#91;i].ToString());            \r\n            modbusClient.Disconnect();                                                \/\/Disconnect from Server\r\n            Console.Write(\"Press any key to continue . . . \");\r\n            Console.ReadKey(true);\r\n        }\r\n    }\r\n}\n```\n\n\u4eceModus-Serve\u8bfb\u53d6\u503c\uff0c\u5e76\u5c06\u503c\u53d1\u5e03\u5230MQTT\u4ee3\u7406\n\n```\n class Program\r\n    {\r\n        static void Main(string&#91;] args)\r\n        {\r\n            EasyModbus.ModbusClient modbusClient = new EasyModbus.ModbusClient(\"127.0.0.1\", 502);\r\n            \/\/Increase the Connection Timeout to 5 seconds\r\n            modbusClient.ConnectionTimeout = 5000;\r\n            \/\/We create a Log File. This will also active the Event logging \r\n            modbusClient.LogFileFilename = \"test.txt\";\r\n            \/\/The Messages sent to the MQTT-Broker will be retained in the Broker. After subscribtion, the client will automatically\r\n            \/\/receive the last retained message. By default the Retain-Flag is FALSE -> Messages will not be retained\r\n            modbusClient.MqttRetainMessages = true;\r\n            \/\/Connect to the ModbusTCP Server\r\n            modbusClient.Connect();\r\n            while (true)\r\n            {\r\n                \/\/ We read two registers from the Server, and Publish them to the MQTT-Broker. By default Values will be published\r\n                \/\/ on change By default we publish to the Topic 'easymodbusclient\/' and the the address e.g. ''easymodbusclient\/holdingregister1'\r\n                \/\/ The propery \"Password\" and \"Username\" can be used to connect to a Broker which require User and Password. By default the \r\n                \/\/MQTT-Broker port is 1883\r\n                int&#91;] holdingRegister = modbusClient.ReadHoldingRegisters(60, 2, \"www.mqtt-dashboard.com\");\r\n                System.Threading.Thread.Sleep(1000);\r\n            }\r\n            modbusClient.Disconnect();\r\n            Console.ReadKey();\r\n        }\r\n    }\n```\n\n\u4eceModus-Server\u81ea\u52a8\u8f6e\u8be2\u503c\u5e76\u5c06\u5176\u53d1\u5e03\u5230MQTT\u4ee3\u7406\n\n```\n        static void Main(string&#91;] args)\r\n        {\r\n            EasyModbus.EasyModbus2Mqtt easyModbus2Mqtt= new EasyModbus.EasyModbus2Mqtt();\r\n            \/\/easyModbus2Mqtt.AutomaticReconnect = false;\r\n            easyModbus2Mqtt.MqttUserName = \"sr555\";\r\n            easyModbus2Mqtt.MqttPassword = \"******************\";\r\n            easyModbus2Mqtt.MqttBrokerPort = 18972;\r\n            \/\/easyModbus2Mqtt.MqttBrokerAddress = \"broker.hivemq.com\";\r\n            \/\/easyModbus2Mqtt.MqttBrokerAddress = \"192.168.178.101\";\r\n            easyModbus2Mqtt.MqttBrokerAddress = \"m21.cloudmqtt.com\";\r\n            easyModbus2Mqtt.ModbusIPAddress = \"127.0.0.1\";\r\n            easyModbus2Mqtt.AddReadOrder(EasyModbus.FunctionCode.ReadCoils, 2, 0, 200, new string&#91;] { \"easymodbusclient\/customtopic1\", \"easymodbusclient\/customtopic2\" });\r\n            easyModbus2Mqtt.AddReadOrder(EasyModbus.FunctionCode.ReadInputRegisters, 2, 0, 200);\r\n            EasyModbus.ReadOrder readOrder = new EasyModbus.ReadOrder();\r\n            readOrder.Hysteresis = new int&#91;10] { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 };\r\n            readOrder.Unit = new string&#91;10] {\"\u00b0C\", \"\u00b0C\", \"\u00b0C\", \"\u00b0C\", \"\u00b0C\", \"\u00b0C\", \"\u00b0C\", \"\u00b0C\", \"\u00b0C\", \"\u00b0C\"};\r\n            readOrder.Scale = new float&#91;10] { 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f, 0.1f };\r\n            readOrder.Quantity = 10;\r\n            readOrder.StartingAddress = 10;\r\n            readOrder.FunctionCode = EasyModbus.FunctionCode.ReadHoldingRegisters;          \r\n            easyModbus2Mqtt.AddReadOrder(readOrder);\r\n            easyModbus2Mqtt.start();\r\n        }\n```\n\nModbus TCP Server\u5c06\u66f4\u6539\u65f6\u7684\u503c\u53d1\u5e03\u5230MQTT\u4ee3\u7406\n\n```\n   class Program\r\n    {\r\n        static void Main(string&#91;] args)\r\n        {\r\n            Program application = new Program();\r\n            application.startServer();\r\n\r\n        }\r\n\r\n        public void startServer()\r\n        {\r\n            EasyModbus.ModbusServer modbusServer = new EasyModbus.ModbusServer();\r\n            modbusServer.MqttRootTopic = \"examplemodbusserver\";\r\n            modbusServer.MqttBrokerAddress = \"www.mqtt-dashboard.com\";\r\n            modbusServer.Listen();\r\n            modbusServer.holdingRegistersChanged += new EasyModbus.ModbusServer.HoldingRegistersChanged(holdingRegistersChanged);\r\n            Console.ReadKey();\r\n            \r\n            modbusServer.StopListening();\r\n        }\r\n\r\n        public void holdingRegistersChanged(int startingAddress, int quantity)\r\n        {\r\n            Console.WriteLine(startingAddress);\r\n            Console.WriteLine(quantity);\r\n        }\r\n    }\n```\n\n---\n*modbus.cn*\n"