[Modbus] 如何 用 C# 開發 Modbus Master Protocol - (15) 實作 ModbusClientAdpater
續上篇,當所有的 Client 類別都完成後,最後就是要實作 ModbusClientAdpater 類別
目前是用 switch 實作建立 Client 的執行個體功能,當然也可以利用反射實現IoC
[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
我好像忘了寫實作 AsciiModbusDataConvert 類別,算了,專案連結已經放上去,請自行連過去看吧。
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET