Ejemplo n.º 1
0
        public async Task ThrowsOnSlaveExceptionResponse(SlaveExceptionCode exceptionCode)
        {
            // Arrange
            var target = new Mock <ModbusTransport>(new Mock <IPipeResource>().Object, Mock.Of <ITransactionIdProvider>(), Mock.Of <ILogger <IModbusMaster> >())
            {
                CallBase = true
            };
            var request  = new ReadHoldingRegistersRequest(1, 1, 1);
            var response = ModbusResponseFactory.CreateResponse <SlaveExceptionResponse>(
                new byte[] { 1, 129, (byte)exceptionCode });

            target.SetupWriteRequestAsync(request);
            target.SetupReadResponseAsync <ReadHoldingRegistersResponse>(response);

            // Act
            var ex = await Assert.ThrowsAsync <SlaveException>(() => target.Object.SendAsync <ReadHoldingRegistersResponse>(request));

            // Assert
            Assert.Equal(1, ex.SlaveAddress);
            Assert.Equal(129, ex.FunctionCode);
            Assert.Equal(exceptionCode, ex.SlaveExceptionCode);

            target.Protected().As <IModbusTransportMock>()
            .Verify(x => x.WriteRequestAsync(request, It.IsAny <CancellationToken>()), Times.Once());
            target.Protected().As <IModbusTransportMock>()
            .Verify(x => x.ReadResponseAsync <ReadHoldingRegistersResponse>(It.IsAny <CancellationToken>()), Times.Once());
        }
Ejemplo n.º 2
0
        public override void Initialize(ReadOnlySpan <byte> frame)
        {
            base.Initialize(frame);

            if (FunctionCode <= Constants.ExceptionOffset)
            {
                throw new FormatException("Invalid function code value for SlaveExceptionResponse.");
            }

            SlaveExceptionCode = (SlaveExceptionCode)frame[2];
        }