예제 #1
0
        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));
        }
예제 #2
0
    public void CreateModbusRequestForReadCoils()
    {
        ReadCoilsInputsRequest req     = new(1, 2, 1, 10);
        IModbusMessage         request = ModbusMessageFactory.CreateModbusRequest(req.MessageFrame);

        Assert.Equal(typeof(ReadCoilsInputsRequest), request.GetType());
    }
예제 #3
0
 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));
        }