重庆网站建设公司推荐,学做吃的网站,c2c网站系统,杭州建设厅特种作业证Modbus TCP是一种基于以太网TCP/IP的Modbus协议变种#xff0c;它允许Modbus协议在以太网网络上运行#xff0c;使得设备之间可以通过IP网络交换数据。Modbus由MODICON公司于1979年开发#xff0c;是一种工业现场总线协议标准#xff0c;广泛应用于工业自动化领域。 #regio…Modbus TCP是一种基于以太网TCP/IP的Modbus协议变种它允许Modbus协议在以太网网络上运行使得设备之间可以通过IP网络交换数据。Modbus由MODICON公司于1979年开发是一种工业现场总线协议标准广泛应用于工业自动化领域。 #region ModBusTCP 地址解释 /* 00 01-事务标识符随意指定 00 00-协议标识符Modbus TCP协议标识符为0x0000 00 06-报文长度表示后面的报文长度为6个字节 01-广播地址 03-功能码 0x01 读输出线圈 0x02 读离散输入 0x03 读保持寄存器 0x04 读输入寄存器 0x05 写单个线圈 0x06 写单个保持寄存器 0x0F 写多个线圈 0x10 写多个保持寄存器 00 64 读写地址高八位 低八位 00 01 寄存器数量 */ using System;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Threading.Tasks;namespace ModbusTcpExample
{class Program{static void Main(string[] args){MBTCP mBTCP new MBTCP();mBTCP.MDConnection(192.168.1.2, 502);}}class MBTCP{private bool ConnectionStatus false;NetworkStream stream;//ModBusTCP启动public void MDConnection(string ipAddress, int port){try{TcpClient client new TcpClient(ipAddress, port);stream client.GetStream();ConnectionStatus true;}catch (Exception e){Console.WriteLine(TCP connection failed: e.Message);ConnectionStatus false;}}//读单个D寄存器public int ReadRegister(int address){if (ConnectionStatus){try{#region ModBusTCP 地址解释/* 00 01-事务标识符随意指定00 00-协议标识符Modbus TCP协议标识符为0x000000 06-报文长度表示后面的报文长度为6个字节01-广播地址03-功能码 0x01 读输出线圈0x02 读离散输入0x03 读保持寄存器0x04 读输入寄存器0x05 写单个线圈0x06 写单个保持寄存器0x0F 写多个线圈0x10 写多个保持寄存器00 64 读写地址高八位 低八位00 01 寄存器数量 */#endregionbyte H (byte)((address 8) 0xFF);byte L (byte)(address 0xFF);byte[] request new byte[] { 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x03, H, L, 0x00, 0x01 };stream.WriteAsync(request, 0, request.Length); // 发送请求报文 byte[] response new byte[12]; // 根据实际情况调整长度stream.ReadAsync(response, 0, response.Length);int decimalValue (response[9] 8) | response[10];return decimalValue;}catch (Exception e){Console.WriteLine(TCP connection failed: e.Message);ConnectionStatus false;return 888;}}else{Console.WriteLine(TCP connection failed);return 888;}}//写单个D寄存器public bool WriteRegister(int address, int Wvalue){if (ConnectionStatus){try{byte H (byte)((address 8) 0xFF);byte L (byte)(address 0xFF);byte WH (byte)((Wvalue 8) 0xFF);byte WL (byte)(Wvalue 0xFF);byte[] request new byte[] { 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x06, H, L, WH, WL };stream.WriteAsync(request, 0, request.Length); // 发送请求报文 byte[] response new byte[12]; // 根据实际情况调整长度return false;}catch (Exception e){Console.WriteLine(TCP connection failed: e.Message);ConnectionStatus false;return false;}}else{Console.WriteLine(TCP connection failed);return false;}}//读多个M寄存器public bool[] ReadMixeds(int address, int quantity){bool[] MB new bool[quantity];if (ConnectionStatus){try{byte H (byte)((address 8) 0xFF);byte L (byte)(address 0xFF);byte QH (byte)((quantity 8) 0xFF);byte QL (byte)(quantity 0xFF);byte[] request new byte[] { 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x02, H, L, QH, QL };stream.WriteAsync(request, 0, request.Length); // 发送请求报文 byte[] response new byte[10 quantity / 8]; // 根据实际情况调整长度stream.ReadAsync(response, 0, response.Length);Console.WriteLine(Received response:);foreach (var b in response){Console.Write(b.ToString(X2) );}//bool[] MB new bool[quantity];Console.WriteLine(\nMMMMReceived response:);int MT 0;for (int n 0; n quantity / 8 1; n){for (int i 0; i 8 MT quantity; i){MB[MT] ((response[9 n] i) 0x01) ! 0;//int F MT address;//Console.WriteLine(M{0}.{1}, F, MB[MT]);MT;}}return MB;}catch (Exception e){Console.WriteLine(TCP connection failed: e.Message);ConnectionStatus false;return MB;}}else{Console.WriteLine(TCP connection failed);return MB;}}//写单个M寄存器public bool WriteMixed(int address, bool Wvalue){if (ConnectionStatus){try{byte H (byte)((address 8) 0xFF);byte L (byte)(address 0xFF);byte WByte 0x00;if (Wvalue) { WByte 0x01; }byte[] request new byte[] { 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x05, H, L, 0x00, WByte };stream.WriteAsync(request, 0, request.Length); // 发送请求报文 byte[] response new byte[12]; // 根据实际情况调整长度return true;}catch (Exception e){Console.WriteLine(TCP connection failed: e.Message);ConnectionStatus false;return false;}}else{Console.WriteLine(TCP connection failed);return false;}}}}