[Modbus] 如何 用 C# 開發 Modbus Master Protocol - (15) 實作 ModbusClientAdpater

[Modbus] 如何 用 C# 開發 Modbus Master Protocol - (15) 實作 ModbusClientAdpater

續上篇,當所有的 Client 類別都完成後,最後就是要實作 ModbusClientAdpater 類別

image

 

目前是用 switch 實作建立 Client 的執行個體功能,當然也可以利用反射實現IoC

[C#.NET] 利用 dynamic 簡化反射程式碼?

[C#.NET] 利用 Expression Tree 提昇反射效率

或是參考91哥的作法

[Software Architecture]IoC and DI

 

程式碼如下:


public class ModbusClientAdpater
{
    public virtual AbsModbusClient ModbusClient
    {
        get;
        set;
    }

    public virtual AbsModbusClient CreateModbusClient(EnumModbusFraming EnumModbusFrame)
    {
        switch (EnumModbusFrame)
        {
            case EnumModbusFraming.TCP:
                this.ModbusClient = new TcpModbusClient();
                break;

            case EnumModbusFraming.RTU:
                this.ModbusClient = new RtuModbusClient();
                break;

            case EnumModbusFraming.ASCII:
                this.ModbusClient = new AsciiModbusClient();
                break;

            default:
                throw new ArgumentOutOfRangeException("EnumModbusFrame");
        }

        return this.ModbusClient;
    }
}

會用的到的列舉


public enum EnumModbusFraming : byte
{
    TCP = 0,
    RTU = 1,
    ASCII = 2,
}


最後的最後,感謝一路觀看的朋友,架構及程式碼寫了將近兩個星期,在短短的兩天內一次噴出,所以將章節拆開,但主要重點還是專注在 Protocol 的定義

我把專案放置在以下位置,有興趣的朋友可前往觀看,專案還不算整個完成,所以有可能會異動,可能還會加上非同步模型,實作Slave(也就是Server),可能啦...

https://tako.codeplex.com/SourceControl/changeset/view/32615

image

 

我好像忘了寫實作 AsciiModbusDataConvert 類別,算了,專案連結已經放上去,請自行連過去看吧。

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo