public TResponse ExecuteCustomMessage <TResponse>(IModbusMessage request) where TResponse : IModbusMessage, new() { if (Transport is ModbusRtuTransport) { string errorMessageFormat = "In order to use the RTU protocol your custom {0} type {1} needs to implement the {2} interface."; if (!(request is IModbusMessageRtu)) { throw new ArgumentException( String.Format(CultureInfo.InvariantCulture, errorMessageFormat, "request", request.GetType().Name, typeof(IModbusMessageRtu).Name), "request"); } if (!typeof(IModbusMessageRtu).IsAssignableFrom(typeof(TResponse))) { throw new ArgumentException( String.Format(CultureInfo.InvariantCulture, errorMessageFormat, "response", request.GetType().Name, typeof(IModbusMessageRtu).Name), "TResponse"); } } return(Transport.UnicastMessage <TResponse>(request)); }
public void CreateModbusRequestForReadCoils() { ReadCoilsInputsRequest req = new(1, 2, 1, 10); IModbusMessage request = ModbusMessageFactory.CreateModbusRequest(req.MessageFrame); Assert.Equal(typeof(ReadCoilsInputsRequest), request.GetType()); }
public void CreateModbusRequestForDiagnostics() { DiagnosticsRequestResponse diagnosticsRequest = new DiagnosticsRequestResponse(0, 2, new RegisterCollection(45)); IModbusMessage request = ModbusMessageFactory.CreateModbusRequest(diagnosticsRequest.MessageFrame); Assert.Equal(typeof (DiagnosticsRequestResponse), request.GetType()); }
public void CreateModbusRequestForDiagnostics() { MockRepository mocks = new MockRepository(); var mockSlave = mocks.PartialMock <ModbusSlave>((byte)1, new EmptyTransport()); DiagnosticsRequestResponse diagnosticsRequest = new DiagnosticsRequestResponse(0, 2, new RegisterCollection(45)); IModbusMessage request = ModbusMessageFactory.CreateModbusRequest(mockSlave, diagnosticsRequest.MessageFrame); Assert.AreEqual(typeof(DiagnosticsRequestResponse), request.GetType()); }
public void CreateModbusRequestForReadCoils() { MockRepository mocks = new MockRepository(); var mockSlave = mocks.PartialMock <ModbusSlave>((byte)1, new EmptyTransport()); ReadCoilsInputsRequest req = new ReadCoilsInputsRequest(1, 2, 1, 10); IModbusMessage request = ModbusMessageFactory.CreateModbusRequest(mockSlave, req.MessageFrame); Assert.AreEqual(typeof(ReadCoilsInputsRequest), request.GetType()); }
public IModbusMessage HandleSlaveRequest(IModbusMessage request, ISlaveDataStore dataStore) { //Attempt to cast the message TRequest typedRequest = request as TRequest; if (typedRequest == null) { throw new InvalidOperationException($"Unable to cast request of type '{request.GetType().Name}' to type '{typeof(TRequest).Name}"); } //Do the implementation specific logic return(Handle(typedRequest, dataStore)); }