最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用EasyModbus進(jìn)行通訊的實(shí)現(xiàn)示例

 更新時間:2026年01月04日 09:50:17   作者:*Major*-莙工科技有限公司  
EasyModbus是一個流行的.NET庫,用于實(shí)現(xiàn)Modbus TCP、RTU和UDP協(xié)議通信,本文就來介紹一下C#使用EasyModbus進(jìn)行通訊的實(shí)現(xiàn)示例,感興趣的可以了解一下

EasyModbus是一個流行的.NET庫,用于實(shí)現(xiàn)Modbus TCP、RTU和UDP協(xié)議通信。

一 安裝EasyModbus

二 ModbusRTU-串口連接

// 創(chuàng)建Modbus RTU客戶端
ModbusClient modbusClient = new ModbusClient("COM10"); // 串口號
modbusClient.Baudrate = 9600; // 波特率
modbusClient.Parity = System.IO.Ports.Parity.None; // 校驗(yàn)位
modbusClient.StopBits = System.IO.Ports.StopBits.One; // 停止位

modbusClient.Connect();

三 ModbusTCP-網(wǎng)口連接

// 創(chuàng)建Modbus客戶端實(shí)例
ModbusClient modbusClient = new ModbusClient("127.0.0.1", 502); // IP地址和端口
// 連接到Modbus服務(wù)器
modbusClient.Connect();

四 讀取多個輸出線圈

    // 讀取線圈狀態(tài) (功能碼01)
    bool[] coilStatus = modbusClient.ReadCoils(0, 5); // 從地址0開始讀取5個線圈

五 寫入單個線圈

  // 寫入單個線圈 (功能碼05)
    modbusClient.WriteSingleCoil(0, true); // 向地址0寫入true

六 讀取保持寄存器

    // 讀取保持寄存器 (功能碼03)
    int[] holdingRegisters = modbusClient.ReadHoldingRegisters(0, 10); // 從地址0開始讀取10個寄存器

七 讀取輸入寄存器

int[] inputRegisters = modbusClient.ReadInputRegisters(0, 5);

八 寫入單個輸出寄存器

modbusClient.WriteSingleRegister(0, 1234);

九 寫入多個輸出寄存器

// 寫入多個寄存器 (功能碼16)
int[] valuesToWrite = { 100, 200, 300 };
modbusClient.WriteMultipleRegisters(0, valuesToWrite); // 從地址0開始寫入

基本用法

1. Modbus TCP客戶端

using EasyModbus;

// 創(chuàng)建Modbus客戶端實(shí)例
ModbusClient modbusClient = new ModbusClient("127.0.0.1", 502); // IP地址和端口

try
{
    // 連接到Modbus服務(wù)器
    modbusClient.Connect();
    
    // 讀取保持寄存器 (功能碼03)
    int[] holdingRegisters = modbusClient.ReadHoldingRegisters(0, 10); // 從地址0開始讀取10個寄存器
    
    // 寫入單個寄存器 (功能碼06)
    modbusClient.WriteSingleRegister(0, 1234); // 向地址0寫入值1234
    
    // 寫入多個寄存器 (功能碼16)
    int[] valuesToWrite = { 100, 200, 300 };
    modbusClient.WriteMultipleRegisters(10, valuesToWrite); // 從地址10開始寫入
    
    // 讀取線圈狀態(tài) (功能碼01)
    bool[] coilStatus = modbusClient.ReadCoils(0, 5); // 從地址0開始讀取5個線圈
    
    // 寫入單個線圈 (功能碼05)
    modbusClient.WriteSingleCoil(0, true); // 向地址0寫入true
}
catch (Exception ex)
{
    Console.WriteLine($"發(fā)生錯誤: {ex.Message}");
}
finally
{
    // 斷開連接
    modbusClient.Disconnect();
}

2. Modbus RTU客戶端 (串口通信)

using EasyModbus;

// 創(chuàng)建Modbus RTU客戶端
ModbusClient modbusClient = new ModbusClient("COM1"); // 串口號
modbusClient.Baudrate = 9600; // 波特率
modbusClient.Parity = System.IO.Ports.Parity.None; // 校驗(yàn)位
modbusClient.StopBits = System.IO.Ports.StopBits.One; // 停止位

try
{
    modbusClient.Connect();
    
    // 與TCP類似的操作
    int[] inputRegisters = modbusClient.ReadInputRegisters(0, 5);
    // ...其他操作
}
catch (Exception ex)
{
    Console.WriteLine($"發(fā)生錯誤: {ex.Message}");
}
finally
{
    modbusClient.Disconnect();
}

3. Modbus服務(wù)器

EasyModbus也支持創(chuàng)建Modbus服務(wù)器:

using EasyModbus;

// 創(chuàng)建Modbus TCP服務(wù)器
ModbusServer modbusServer = new ModbusServer();
modbusServer.Port = 502; // 設(shè)置端口

// 設(shè)置寄存器值(服務(wù)器模擬)
modbusServer.HoldingRegisters[0] = 100;
modbusServer.HoldingRegisters[1] = 200;

// 啟動服務(wù)器
modbusServer.Listen();

Console.WriteLine("Modbus服務(wù)器已啟動,按任意鍵停止...");
Console.ReadKey();

// 停止服務(wù)器
modbusServer.StopListening();

高級功能

異步操作

// 異步讀取保持寄存器
int[] registers = await Task.Run(() => modbusClient.ReadHoldingRegisters(0, 10));

事件處理

modbusClient.DataReceived += (sender, e) => 
{
    Console.WriteLine($"接收到數(shù)據(jù): {BitConverter.ToString(e.Data)}");
};

超時設(shè)置

modbusClient.ConnectionTimeout = 5000; // 5秒連接超時

注意事項(xiàng)

  1. 確保防火墻允許Modbus通信(默認(rèn)端口502)
  2. 對于RTU模式,確保串口配置與設(shè)備匹配
  3. 處理異常情況,如連接失敗、超時等
  4. 寄存器地址從0開始,但某些設(shè)備文檔可能從1開始計(jì)數(shù),需要注意偏移

完整示例

using System;
using EasyModbus;

class Program
{
    static void Main(string[] args)
    {
        ModbusClient modbusClient = new ModbusClient("192.168.1.100", 502);
        
        try
        {
            Console.WriteLine("正在連接Modbus服務(wù)器...");
            modbusClient.Connect();
            
            // 讀取保持寄存器
            Console.WriteLine("讀取保持寄存器...");
            int[] registers = modbusClient.ReadHoldingRegisters(0, 5);
            for (int i = 0; i < registers.Length; i++)
            {
                Console.WriteLine($"寄存器 {i}: {registers[i]}");
            }
            
            // 寫入寄存器
            Console.WriteLine("寫入寄存器...");
            modbusClient.WriteSingleRegister(10, 1234);
            
            // 驗(yàn)證寫入
            int value = modbusClient.ReadHoldingRegisters(10, 1)[0];
            Console.WriteLine($"寄存器10的新值: {value}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"錯誤: {ex.Message}");
        }
        finally
        {
            modbusClient.Disconnect();
            Console.WriteLine("連接已關(guān)閉");
        }
    }
}

通過以上示例,你應(yīng)該能夠開始在C#項(xiàng)目中使用EasyModbus庫進(jìn)行Modbus通信了。

到此這篇關(guān)于C#使用EasyModbus進(jìn)行通訊的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)C# EasyModbus通訊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

克什克腾旗| 海丰县| 枣阳市| 大冶市| 婺源县| 佳木斯市| 新龙县| 永定县| 安仁县| 遂溪县| 靖江市| 长岛县| 长汀县| 祁连县| 正定县| 吉安县| 乌拉特后旗| 贞丰县| 长沙市| 苍溪县| 德化县| 西乌珠穆沁旗| 莱州市| 栾川县| 佳木斯市| 甘洛县| 乐都县| 杂多县| 夏津县| 鞍山市| 罗定市| 玉田县| 曲沃县| 平邑县| 靖西县| 柘城县| 临城县| 六盘水市| 西贡区| 喀喇| 巴青县|