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

C# 使用NModbus的實(shí)現(xiàn)示例

 更新時(shí)間:2025年01月13日 11:55:03   作者:追烽少年x  
本文主要介紹了在C#中使用NModbus4庫(kù)進(jìn)行Modbus通信,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

在工業(yè)自動(dòng)化和控制系統(tǒng)中,Modbus協(xié)議是一種廣泛使用的通信協(xié)議。它是一種基于主從結(jié)構(gòu)的串行通信協(xié)議,簡(jiǎn)單、可靠且易于實(shí)現(xiàn)。在C#中,可以使用NModbus4庫(kù)來(lái)執(zhí)行Modbus通信。本文將詳細(xì)介紹如何使用NModbus4庫(kù)在C#中執(zhí)行Modbus讀操作。

1.安裝NModbus4庫(kù)

使用Nuget包管理器安裝:

在這里插入圖片描述

2.創(chuàng)建MoModbus連接

2.1ModbusRTU通信

using System.IO.Ports;
using Modbus.Device;
using Modbus;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Net;
using System.Runtime.Remoting.Contexts;
using System.Collections;

namespace CModbusTest
{
    internal class Program
    {
        private static SerialPort serialport;
        private static ModbusSerialMaster master;
        private static ModbusIpMaster masterIp;
        private static TcpClient tcpclient;
        static void Main(string[] args)
        {
            //
            string[] ports = SerialPort.GetPortNames();
            serialport = new SerialPort(ports[0], 9600, Parity.None, 8, StopBits.One);
            serialport.Open();
            master = ModbusSerialMaster.CreateRtu(serialport);
            master.Transport.WriteTimeout = 2000;
            master.Transport.ReadTimeout = 2000;
            master.Transport.WaitToRetryMilliseconds = 500;
            master.Transport.Retries = 3;

            try
            {
                ushort[] data = master.ReadHoldingRegisters(1, 0, 2);
                List<byte> list = new List<byte>();
                foreach (var item in data)
                {
                    list.AddRange(BitConverter.GetBytes(item).Reverse());
                }
                Console.WriteLine(list.ToArray());
            }
            catch (Exception ex)
            {
                if (serialport != null || serialport.IsOpen)
                {
                    serialport.Close();
                }
                master = null;
                throw new Exception("【讀取保持寄存器】失?。? + ex.Message);
            }
        }
    }
}

代碼解析:
配置串口連接:使用 SerialPort 類設(shè)置串口連接,包括端口號(hào)、波特率、校驗(yàn)位等。
創(chuàng)建 Modbus RTU 客戶端:通過(guò) ModbusSerialMaster.CreateRtu() 創(chuàng)建 Modbus RTU 客戶端。
讀取寄存器:通過(guò) ReadHoldingRegisters 方法讀取指定從站地址和寄存器范圍的數(shù)據(jù)。
關(guān)閉串口連接:通信完成后,關(guān)閉串口。
常見 Modbus RTU 操作:
讀取數(shù)據(jù):ReadCoils()、ReadDiscreteInputs()、ReadHoldingRegisters()、ReadInputRegisters()。
寫入數(shù)據(jù):WriteSingleCoil()、WriteSingleRegister()、WriteMultipleCoils()、WriteMultipleRegisters()。

2.2ModbusTCP通信

using System.IO.Ports;
using Modbus.Device;
using Modbus;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Net;
using System.Runtime.Remoting.Contexts;
using System.Collections;

namespace CModbusTest
{
    internal class Program
    {
        private static SerialPort serialport;
        private static ModbusSerialMaster master;
        private static ModbusIpMaster masterIp;
        private static TcpClient tcpclient;
        static void Main(string[] args)
        {
             // 1. 連接到 Modbus 服務(wù)器(Modbus TCP)
             tcpclient = new TcpClient();
             tcpclient.Connect(IPAddress.Parse("127.0.0.1"),502);

             // 2. 獲取 Modbus TCP 設(shè)備的協(xié)議客戶端
             masterIp = ModbusIpMaster.CreateIp(tcpclient);
             masterIp.Transport.WriteTimeout = 2000;
             masterIp.Transport.ReadTimeout = 2000;
             masterIp.Transport.WaitToRetryMilliseconds = 500;
             masterIp.Transport.Retries = 3;

             // 3. 讀取從站設(shè)備的寄存器
             ushort startAddress = 0;  // 寄存器起始地址
             ushort numRegisters = 10; // 讀取 10 個(gè)寄存器
             try
             {
                 // 讀取保持寄存器
                 ushort[] registers = masterIp.ReadHoldingRegisters(startAddress, numRegisters);

                // 輸出結(jié)果
                Console.WriteLine("讀取到的寄存器值:");
                foreach (var register in registers)
                {
                   Console.WriteLine(register);
                }
             }
             catch (Exception ex)
             {
                   Console.WriteLine($"讀取錯(cuò)誤: {ex.Message}");
             }
        }
    }
}

代碼解析:
連接到 Modbus 服務(wù)器:使用 TcpClient 與 Modbus 設(shè)備建立 TCP 連接。指定設(shè)備的 IP 地址和端口(默認(rèn)為 502)。
創(chuàng)建 Modbus 客戶端:通過(guò) ModbusTcpMaster.CreateIp(client) 創(chuàng)建一個(gè) Modbus 客戶端,支持讀寫數(shù)據(jù)。
讀取保持寄存器:通過(guò) ReadHoldingRegisters 方法從設(shè)備讀取指定地址的多個(gè)寄存器的值。
關(guān)閉連接:通信完成后,關(guān)閉與設(shè)備的連接。
常用 Modbus 操作:
讀取寄存器:ReadHoldingRegisters()、ReadInputRegisters()。
寫入寄存器:WriteSingleRegister()、WriteMultipleRegisters()。

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

相關(guān)文章

  • 一起來(lái)學(xué)習(xí)C#的觀察者模式

    一起來(lái)學(xué)習(xí)C#的觀察者模式

    這篇文章主要為大家詳細(xì)介紹了C#的觀察者模式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • 淺析依賴注入框架Autofac的使用

    淺析依賴注入框架Autofac的使用

    Autofac是一款I(lǐng)OC框架,比起Spring.NET,Unity,Castle等等框架,它很輕量級(jí)且性能也很高,下面小編給大家介紹下依賴注入框架Autofac的使用。
    2015-07-07
  • C#自定義事件模擬風(fēng)吹草搖擺效果

    C#自定義事件模擬風(fēng)吹草搖擺效果

    這篇文章主要介紹了C#自定義事件模擬風(fēng)吹草搖擺效果,草地上每一顆草都監(jiān)聽HoverTreeWindEvent事件,根據(jù)風(fēng)向(WindDdirection)調(diào)整姿態(tài)。需要的朋友可以參考下
    2017-08-08
  • c#判斷磁盤驅(qū)動(dòng)器類型的兩種方法介紹

    c#判斷磁盤驅(qū)動(dòng)器類型的兩種方法介紹

    本文介紹了使用WINDOWS API判斷一個(gè)磁盤驅(qū)動(dòng)器的類型和使用System.IO.DriveInfo判斷一個(gè)磁盤驅(qū)動(dòng)器的二種方法,大家參考和吧
    2014-01-01
  • C#標(biāo)識(shí)符的使用小結(jié)

    C#標(biāo)識(shí)符的使用小結(jié)

    C#標(biāo)識(shí)符還是比較常見的東西,這里我們主要介紹C#標(biāo)識(shí)符中的用法,包括介紹 static 的方法和bool 的形參等方面
    2014-01-01
  • C#實(shí)現(xiàn)微信分賬功能的完整步驟

    C#實(shí)現(xiàn)微信分賬功能的完整步驟

    這篇文章主要給大家介紹了關(guān)于C#實(shí)現(xiàn)微信分賬功能的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • C#如何實(shí)現(xiàn)對(duì)sql server數(shù)據(jù)庫(kù)的增刪改查

    C#如何實(shí)現(xiàn)對(duì)sql server數(shù)據(jù)庫(kù)的增刪改查

    本文的主要內(nèi)容是C#實(shí)現(xiàn)對(duì)sql server數(shù)據(jù)庫(kù)的增刪改查,示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2015-08-08
  • C#中串口讀取問(wèn)題及解決方案

    C#中串口讀取問(wèn)題及解決方案

    在現(xiàn)代計(jì)算機(jī)系統(tǒng)中,串口通信仍然是許多設(shè)備和應(yīng)用程序之間進(jìn)行數(shù)據(jù)交換的重要方式,無(wú)論是在工業(yè)自動(dòng)化、嵌入式系統(tǒng),還是在日常的硬件調(diào)試中,串口都扮演著不可或缺的角色,本文旨在深入探討C#中串口讀取問(wèn)題的常見原因,并提供一系列有效的解決方案,需要的朋友可以參考下
    2024-12-12
  • C#中SetStyle的具體使用

    C#中SetStyle的具體使用

    本文主要介紹了C#中SetStyle的具體使用,該方法用于啟用或禁用特定的控件樣式,以控制控件的行為和外觀,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • C#中的Lazy如何使用詳解

    C#中的Lazy如何使用詳解

    這篇文章主要給大家介紹了C#中Lazy如何使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評(píng)論

青河县| 谢通门县| 福鼎市| 文成县| 泽州县| 抚州市| 高雄县| 宁南县| 德钦县| 连城县| 和硕县| 淮北市| 河源市| 绿春县| 赞皇县| 惠州市| 麻江县| 龙海市| 阿克陶县| 吴川市| 明光市| 定边县| 永顺县| 大同市| 万州区| 大宁县| 临沭县| 东源县| 德兴市| 深水埗区| 嘉鱼县| 大理市| 普安县| 雷波县| 滨海县| 南昌市| 扎囊县| 温州市| 筠连县| 聊城市| 贺兰县|