[Modbus] 如何 用 C# 開發 Modbus Master Protocol - (14) 實作 AsciiModbusClient
續上篇,接下來要實作 AsciiModbusClient,在這個類別裡主要是處理 Serial 類別中的 Send/Receive 方法,也就是要將 AsciiModbusRequest 以及 AsciiMuodbusResponse 組合起來
如下圖紅框:
由上圖可以知道,在這裡直接繼承 RtuModbusClient 類別,原因是因為它們都是要處理 Serial 類別,只是要實作不同的 AbsModbusRequest 和 AbsMuodbusResponse
所以它只有短短的覆寫屬性
程式碼如下:
public class AsciiModbusClient : RtuModbusClient { private AbsModbusRequest _modbusRequest = new AsciiModbusRequest(); private AbsModbusResponse _modbusResponse = new AsciiModbusResponse(); private AbsModbusDataConvert _modbusDataConvert = new AsciiModbusDataConvert(); internal override AbsModbusRequest ModbusRequest { get { return _modbusRequest; } set { _modbusRequest = value; } } internal override AbsModbusResponse ModbusResponse { get { return _modbusResponse; } set { _modbusResponse = value; } } internal override AbsModbusDataConvert ModbusDataConvert { get { return _modbusDataConvert; } set { _modbusDataConvert = value; } } }
調用方式如下:
public void CreateModbusAsciiClientTest() { ModbusClientAdpater adpater = new ModbusClientAdpater(); AbsModbusClient client = adpater.CreateModbusClient(EnumModbusFraming.ASCII); client.Connect(new SerialModbusConnectConifg() { PortName = "COM6", BaudRate = 115200, Parity = Parity.None, StopBits = StopBits.One }); var result = client.ReadCoilsToDecimal(1, 0, 10); }
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET