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

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

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

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

一 安裝EasyModbus

二 ModbusRTU-串口連接

// 創(chuàng)建Modbus RTU客戶端
ModbusClient modbusClient = new ModbusClient("COM10"); // 串口號(hào)
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();

四 讀取多個(gè)輸出線圈

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

五 寫入單個(gè)線圈

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

六 讀取保持寄存器

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

七 讀取輸入寄存器

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

八 寫入單個(gè)輸出寄存器

modbusClient.WriteSingleRegister(0, 1234);

九 寫入多個(gè)輸出寄存器

// 寫入多個(gè)寄存器 (功能碼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個(gè)寄存器
    
    // 寫入單個(gè)寄存器 (功能碼06)
    modbusClient.WriteSingleRegister(0, 1234); // 向地址0寫入值1234
    
    // 寫入多個(gè)寄存器 (功能碼16)
    int[] valuesToWrite = { 100, 200, 300 };
    modbusClient.WriteMultipleRegisters(10, valuesToWrite); // 從地址10開始寫入
    
    // 讀取線圈狀態(tài) (功能碼01)
    bool[] coilStatus = modbusClient.ReadCoils(0, 5); // 從地址0開始讀取5個(gè)線圈
    
    // 寫入單個(gè)線圈 (功能碼05)
    modbusClient.WriteSingleCoil(0, true); // 向地址0寫入true
}
catch (Exception ex)
{
    Console.WriteLine($"發(fā)生錯(cuò)誤: {ex.Message}");
}
finally
{
    // 斷開連接
    modbusClient.Disconnect();
}

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

using EasyModbus;

// 創(chuàng)建Modbus RTU客戶端
ModbusClient modbusClient = new ModbusClient("COM1"); // 串口號(hào)
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ā)生錯(cuò)誤: {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;

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

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

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

高級(jí)功能

異步操作

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

事件處理

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

超時(shí)設(shè)置

modbusClient.ConnectionTimeout = 5000; // 5秒連接超時(shí)

注意事項(xiàng)

  1. 確保防火墻允許Modbus通信(默認(rèn)端口502)
  2. 對(duì)于RTU模式,確保串口配置與設(shè)備匹配
  3. 處理異常情況,如連接失敗、超時(shí)等
  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($"錯(cuò)誤: {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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

斗六市| 托克逊县| 黑河市| 托里县| 蒲城县| 阿瓦提县| 鄂托克前旗| 红河县| 扶沟县| 黄大仙区| 红桥区| 岳池县| 呼伦贝尔市| 卓尼县| 怀安县| 丹阳市| 会东县| 新干县| 芦山县| 油尖旺区| 铁岭市| 长岭县| 盐津县| 平乡县| 长泰县| 康定县| 通榆县| 石楼县| 凤阳县| 南安市| 东台市| 莱州市| 盘山县| 安宁市| 周口市| 泗洪县| 霍城县| 洪雅县| 安丘市| 仁化县| 米易县|