public override ModbusTCPMessage Process(IMemoryModel memory) { int address = Int16Extensions.FromBytes(PDU.Data.First(), PDU.Data.Skip(1).First()); int length = Int16Extensions.FromBytes(PDU.Data.Skip(2).First(), PDU.Data.Skip(3).First()); try { var values = memory.Read4x(address, length); ProtocolDataUnit pdu = PDU.ValidResponse( new byte[] { (byte)(values.Count() * 2) } .Concat(values.SelectMany(v => v.GetBytes()))); ModbusTCPMessage reply = Create( MBAP.Create((byte)(pdu.GetBytes().Count() + 1), ApplicationHeader.UnitID), pdu); return(reply); } catch { ProtocolDataUnit pdu = PDU.ErrorResponse(new byte[] { 0x01 }); ModbusTCPMessage reply = Create( MBAP.Create((byte)(pdu.GetBytes().Count() + 1), ApplicationHeader.UnitID), pdu); return(reply); } }
public MBTCPServer(IPAddress address, int port, IMemoryModel memoryModel) { _listener = new ConnectionListener(address, port); _listener.OnConnectionAccepted += _listener_OnConnectionAccepted; _receiveDataTask = _listener.StartAsync(); _memoryModel = memoryModel; Status = ServerStatus.Connected; }
public override ModbusTCPMessage Process(IMemoryModel memory) { try { int address = StartAddress(); var values = ParseValues(); memory.Write4x(address, values); var pdu = PDU.ValidResponse(((Int16)values.Count()).GetBytes()); var reply = Create( MBAP.Create((byte)(pdu.GetBytes().Count() + 1), ApplicationHeader.UnitID), pdu); return(reply); } catch { var pdu = PDU.ErrorResponse(new byte[] { 0x01 }); ModbusTCPMessage reply = Create( MBAP.Create((byte)(pdu.GetBytes().Count() + 1), ApplicationHeader.UnitID), pdu); return(reply); } }
private void setMemoryModel(string mm) { memoryModel = MemoryModels.GetMemoryModel(mm); }
public virtual ModbusTCPMessage Process(IMemoryModel memory) { return(this); }