public void NModbusAsciiMaster_ReadTimeout()
    {
        SerialPort port = ModbusMasterFixture.CreateAndOpenSerialPort(ModbusMasterFixture.DefaultMasterSerialPortName);

        using IModbusSerialMaster master = ModbusSerialMaster.CreateAscii(port);
        master.Transport.ReadTimeout     = master.Transport.WriteTimeout = 1000;
        Assert.Throws <TimeoutException>(() => master.ReadCoils(100, 1, 1));
    }
Example #2
0
    public void NModbusRtuMaster_ReadTimeout()
    {
        SerialPort port = ModbusMasterFixture.CreateAndOpenSerialPort(ModbusMasterFixture.DefaultMasterSerialPortName);

        using ModbusSerialMaster? master = ModbusSerialMaster.CreateRtu(port);
        master.Transport.ReadTimeout     = master.Transport.WriteTimeout = 1000;
        master.ReadCoils(100, 1, 1);
    }
    public void NModbusSerialRtuSlave_BonusCharacter_VerifyTimeout()
    {
        SerialPort masterPort = ModbusMasterFixture.CreateAndOpenSerialPort(ModbusMasterFixture.DefaultMasterSerialPortName);
        SerialPort slavePort  = ModbusMasterFixture.CreateAndOpenSerialPort(ModbusMasterFixture.DefaultSlaveSerialPortName);

        using ModbusSerialMaster? master = ModbusSerialMaster.CreateRtu(masterPort);
        using ModbusSerialSlave? slave   = ModbusSerialSlave.CreateRtu(1, slavePort);
        master.Transport.ReadTimeout     = master.Transport.WriteTimeout = 1000;
        slave.DataStore = DataStoreFactory.CreateTestDataStore();

        Thread slaveThread = new(async() => await slave.ListenAsync());

        slaveThread.IsBackground = true;
        slaveThread.Start();

        // assert successful communication
        Assert.Equal(new bool[] { false, true }, master.ReadCoils(1, 1, 2));

        // write "bonus" character
        masterPort.Write("*");

        // assert successful communication
        Assert.Equal(new bool[] { false, true }, master.ReadCoils(1, 1, 2));
    }