c#中的Modbus库,用于生成数据包并转换响应

c#中的Modbus库,用于生成数据包并转换响应,c#,modbus,C#,Modbus,是否有任何Modbus库可用于从SlaveAddress、StartingRegister和numberofRegister等生成Ascii数据包 字符串AsciiPacket=等待生成包(松弛地址、启动寄存器、编号寄存器) 或 字节[]AsciiBytes=等待生成数据包(SlaveAddress、StartingRegister、numberofRegister) 一旦收到响应,就需要转换回人类可读的格式 字符串humanReadableFormat=Wait ConvertResponse

是否有任何Modbus库可用于从SlaveAddress、StartingRegister和numberofRegister等生成Ascii数据包

字符串AsciiPacket=等待生成包(松弛地址、启动寄存器、编号寄存器)

字节[]AsciiBytes=等待生成数据包(SlaveAddress、StartingRegister、numberofRegister)

一旦收到响应,就需要转换回人类可读的格式

字符串humanReadableFormat=Wait ConvertResponse(数组字节)

请建议是否有任何NuGet软件包可用于此


谢谢

您可以使用System.Net.Sockets

或者你可以使用EasyModbus

NET:Modbus TCP客户端简单的读写操作

        ModbusClient modbusClient = new ModbusClient("190.201.100.100", 502);    //Ip-Address and Port of Modbus-TCP-Server
        modbusClient.Connect();                                                    //Connect to Server
        modbusClient.WriteMultipleCoils(4, new bool[] {true, true, true, true, true, true, true, true, true, true});    //Write Coils starting with Address 5
        bool[] readCoils = modbusClient.ReadCoils(9,10);                        //Read 10 Coils from Server, starting with address 10
        int[] readHoldingRegisters = modbusClient.ReadHoldingRegisters(0,10);    //Read 10 Holding Registers from Server, starting with Address 1

        // Console Output
        for (int i = 0; i < readCoils.Length; i++)
            Console.WriteLine("Value of Coil " + (9 + i + 1) + " " + readCoils[i].ToString());
                    
        for (int i = 0; i < readHoldingRegisters.Length; i++)
            Console.WriteLine("Value of HoldingRegister " + (i + 1) + " "+ readHoldingRegisters[i].ToString());            
        modbusClient.Disconnect();                                                //Disconnect from Server
        Console.Write("Press any key to continue . . . ");
        Console.ReadKey(true);
ModbusClient ModbusClient=新的ModbusClient(“190.201.100.100”,502)//Modbus TCP服务器的Ip地址和端口
modbusClient.Connect()//连接到服务器
WriteMultipleCoils(4,新bool[]{true,true,true,true,true,true,true,true})//写入以地址5开头的线圈
bool[]readCoils=modbusClient.readCoils(9,10)//从服务器读取10个线圈,从地址10开始
int[]readHoldingRegisters=modbusClient.readHoldingRegisters(0,10)//从服务器读取10个保持寄存器,从地址1开始
//控制台输出
对于(int i=0;i
通过BLE进行通信,所以只需要一个库来创建请求帧,一旦我通过BLE获得响应,就将该响应转换为人类可读的格式。
ModbusClient modBusDevice;
modBusDevice = new ModbusClient("IPAddress", int(Port));
modBusDevice.Connect();

bool[] data = new bool[1024];

data = modBusDevice.ReadDiscreteInputs(int(First discrete input to read), int( Number of discrete Inputs to read));
        ModbusClient modbusClient = new ModbusClient("190.201.100.100", 502);    //Ip-Address and Port of Modbus-TCP-Server
        modbusClient.Connect();                                                    //Connect to Server
        modbusClient.WriteMultipleCoils(4, new bool[] {true, true, true, true, true, true, true, true, true, true});    //Write Coils starting with Address 5
        bool[] readCoils = modbusClient.ReadCoils(9,10);                        //Read 10 Coils from Server, starting with address 10
        int[] readHoldingRegisters = modbusClient.ReadHoldingRegisters(0,10);    //Read 10 Holding Registers from Server, starting with Address 1

        // Console Output
        for (int i = 0; i < readCoils.Length; i++)
            Console.WriteLine("Value of Coil " + (9 + i + 1) + " " + readCoils[i].ToString());
                    
        for (int i = 0; i < readHoldingRegisters.Length; i++)
            Console.WriteLine("Value of HoldingRegister " + (i + 1) + " "+ readHoldingRegisters[i].ToString());            
        modbusClient.Disconnect();                                                //Disconnect from Server
        Console.Write("Press any key to continue . . . ");
        Console.ReadKey(true);