欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#輕松實(shí)現(xiàn)Modbus通信

freeflydom
2024年10月14日 9:45 本文熱度 748

1、前言

大家好!我是付工。前面給大家介紹了一系列關(guān)于RS485與Modbus的知識(shí)。

終于有人把RS485說清楚了
終于有人把Modbus說明白了
通透!終于把ModbusRTU弄明白了
這樣看來,ModbusTCP協(xié)議太簡單了
今天跟大家聊聊關(guān)于C#如何實(shí)現(xiàn)Modbus通信。

2、開源通信庫

通信庫是對通信協(xié)議的封裝,一般是以dll動(dòng)態(tài)鏈接庫的形式存在,對于編程者來說,只需要調(diào)用庫的各種方法即可實(shí)現(xiàn)數(shù)據(jù)讀寫。

通信庫有兩種,一種是開源的,即使開源,也要注意看下開源許可證,開源并不一定免費(fèi),另外一種就是自己開發(fā)封裝的,這個(gè)需要具備一定的開發(fā)能力。

Modbus通信有很多開源通信庫,這其中使用較為廣泛的是NModbus4,NModbus4是一個(gè)開源且免費(fèi)的Modbus通信庫,它的開源許可證是MIT,是一個(gè)相對寬松的軟件授權(quán)條款,可以商用。

3、ModbusRTU通信

1、在項(xiàng)目解決方案資源管理器中,選擇【引用】右擊,在彈出的界面中,點(diǎn)擊【管理NuGet程序包】選項(xiàng),如下圖所示:

 

2、在打開的選項(xiàng)卡中,選擇【瀏覽】,然后輸入NModbus4進(jìn)行搜索,搜索到之后,選擇最新穩(wěn)定版2.1.0,點(diǎn)擊【安裝】即可:

 

3、在NModbus4基礎(chǔ)上封裝一個(gè)打開串口和關(guān)閉串口的方法:


private SerialPort serialPort;private ModbusSerialMaster master;public void Open(string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits)
{
    if (this.serialPort != null && this.serialPort.IsOpen)
    {
        this.serialPort.Close();
    }
    this.serialPort = new SerialPort(portName, baudRate, parity, dataBits, stopBits);
    this.serialPort.Open();
    this.master = ModbusSerialMaster.CreateRtu(this.serialPort);
    this.master.Transport.WriteTimeout = 2000;
    this.master.Transport.ReadTimeout = 2000;
    this.master.Transport.WaitToRetryMilliseconds = 500;
    this.master.Transport.Retries = 3;
} public void Close()
 {
     if (this.serialPort != null && this.serialPort.IsOpen)
     {
         this.serialPort.Close();
     }
     this.master = null;
 }

4、在NModbus4基礎(chǔ)上封裝各種讀寫的方法,這里以讀取保持型寄存器為例,其他方法都是類似的:


public byte[] ReadHoldingRegisters(byte slaveId, ushort start, ushort length)
{
    try
    {
        ushort[] data = this.master.ReadHoldingRegisters(slaveId, start, length);
        List<byte> result = new List<byte>();
        foreach (var item in data)
        {
            result.AddRange(BitConverter.GetBytes(item).Reverse());
        }
        return result.ToArray();
    }
    catch (Exception ex)
    {
        throw new Exception("【讀取保持寄存器】失敗:" + ex.Message);
    }
}

基于NModbus4實(shí)現(xiàn)ModbusRTU通信,不需要關(guān)注協(xié)議及報(bào)文,只需要對NModbus4庫二次封裝即可。

4、ModbusTCP通信

NModbus4不僅支持ModbusRTU通信,也同樣支持ModbusTCP通信,ModbusTCP與ModbusRTU的封裝過程非常類似,主要是存在以下兩個(gè)不同點(diǎn):

  • ModbusRTU是基于串口通信,因此主要使用的是SerialPort類,而ModbusTCP是基于以太網(wǎng)通信,主要使用的是TcpClient類。

  • ModbusRTU的讀取和寫入方法中都必須包含從站地址,而ModbusTCP可以把SlaveAddress作為一個(gè)可選項(xiàng)。

ModbusTCP通信庫封裝過程如下:1、在NModbus4基礎(chǔ)上封裝一個(gè)TCP連接和斷開的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private TcpClient tcpClient;
private ModbusIpMaster master
public void Connect(string ip, int port)
{
    tcpClient = new TcpClient();
    tcpClient.Connect(IPAddress.Parse(ip), port);
    this.master = ModbusIpMaster.CreateIp(this.tcpClient);
    this.master.Transport.WriteTimeout = 2000;
    this.master.Transport.ReadTimeout = 2000;
    this.master.Transport.WaitToRetryMilliseconds = 500;
    this.master.Transport.Retries = 3;
}
 public void DisConnect()
 {
     if (this.tcpClient != null && this.tcpClient.Connected)
     {
         this.tcpClient.Close();
     }
     this.master = null;
 }

2、封裝一個(gè)讀取輸出線圈的方法,其他讀寫方法都是類似的:


public bool[] ReadOutputCoils(ushort start, ushort length, byte slaveAddress = 1)
{
    try
    {
        return this.master.ReadCoils(slaveAddress, start, length);
    }
    catch (Exception ex)
    {
        throw new Exception("【讀取輸出線圈】失敗:" + ex.Message);
    }
}

轉(zhuǎn)自https://www.cnblogs.com/xiketangedu/p/18461727


該文章在 2024/10/14 9:48:54 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved