[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