public void NModbusSerialRtuSlave_BonusCharacter_VerifyTimeout() { SerialPort masterPort = ModbusMasterFixture.CreateAndOpenSerialPort(ModbusMasterFixture.DefaultMasterSerialPortName); SerialPort slavePort = ModbusMasterFixture.CreateAndOpenSerialPort(ModbusMasterFixture.DefaultSlaveSerialPortName); using (var master = ModbusSerialMaster.CreateRtu(masterPort)) using (var slave = ModbusSerialSlave.CreateRtu(1, slavePort)) { master.Transport.ReadTimeout = master.Transport.WriteTimeout = 1000; slave.DataStore = DataStoreFactory.CreateTestDataStore(); Thread slaveThread = new Thread(slave.Listen); slaveThread.IsBackground = true; slaveThread.Start(); // assert successful communication Assert.AreEqual(new bool[] { false, true }, master.ReadCoils(1, 1, 2)); // write "bonus" character masterPort.Write("*"); // assert successful communication Assert.AreEqual(new bool[] { false, true }, master.ReadCoils(1, 1, 2)); } }
public override async void SimulatorStart() { if (_simularorClient == null) { return; } await Task.Run(() => { for (int i = 0; i < slaves.Count; i++) { try { slaves[i].ModbusSlaveRequestReceived += Modbus_Serial_ModbusSlaveRequestReceived; slaves[i].WriteComplete += Modbus_Serial_WriteComplete; slaves[i].ListenAsync(); } catch (Exception emx) { this.SimulatorAppendLog("启动模拟器失败 " + emx.Message); } } Random rd = new Random(); //初始化数据 while (true) { for (int i = 0; i < slaves.Count; i++) { slaves[i].DataStore = DataStoreFactory.CreateTestDataStore(); } this.SimulatorAppendLog("所有从机初始化数据一次"); Thread.Sleep(SimulatorUpdateCycle * 1000); } }); }
public static void StartSlave(ModbusSlave slave) { slave.DataStore = DataStoreFactory.CreateTestDataStore(); Thread?slaveThread = new(async() => await slave.ListenAsync()); slaveThread.Start(); }
public static void StartSlave(ModbusSlave slave) { slave.DataStore = DataStoreFactory.CreateTestDataStore(); var slaveThread = new Thread(slave.Listen); slaveThread.Start(); }
public void ModbusUdpSlave_MultipleMasters() { Random randomNumberGenerator = new Random(); bool master1Complete = false; bool master2Complete = false; UdpClient masterClient1 = new UdpClient(); masterClient1.Connect(ModbusMasterFixture.DefaultModbusIPEndPoint); ModbusIpMaster master1 = ModbusIpMaster.CreateIp(masterClient1); UdpClient masterClient2 = new UdpClient(); masterClient2.Connect(ModbusMasterFixture.DefaultModbusIPEndPoint); ModbusIpMaster master2 = ModbusIpMaster.CreateIp(masterClient2); UdpClient slaveClient = CreateAndStartUdpSlave(ModbusMasterFixture.Port, DataStoreFactory.CreateTestDataStore()); Thread master1Thread = new Thread(delegate() { for (int i = 0; i < 5; i++) { Thread.Sleep(randomNumberGenerator.Next(1000)); _log.Debug("Read from master 1"); Assert.AreEqual(new ushort[] { 2, 3, 4, 5, 6 }, master1.ReadHoldingRegisters(1, 5)); } master1Complete = true; }); Thread master2Thread = new Thread(delegate() { for (int i = 0; i < 5; i++) { Thread.Sleep(randomNumberGenerator.Next(1000)); _log.Debug("Read from master 2"); Assert.AreEqual(new ushort[] { 3, 4, 5, 6, 7 }, master2.ReadHoldingRegisters(2, 5)); } master2Complete = true; }); master1Thread.Start(); master2Thread.Start(); while (!master1Complete || !master2Complete) { Thread.Sleep(200); } slaveClient.Close(); masterClient1.Close(); masterClient2.Close(); }
public void DataStoreReadFromEvent_ReadHoldingRegisters() { DataStore dataStore = DataStoreFactory.CreateTestDataStore(); bool readFromEventFired = false; bool writtenToEventFired = false; dataStore.DataStoreReadFrom += (obj, e) => { readFromEventFired = true; Assert.AreEqual(3, e.StartAddress); Assert.AreEqual(new ushort[] { 4, 5, 6 }, e.Data.B.ToArray()); Assert.AreEqual(ModbusDataType.HoldingRegister, e.ModbusDataType); }; dataStore.DataStoreWrittenTo += (obj, e) => writtenToEventFired = true; DataStore.ReadData <RegisterCollection, ushort>(dataStore, dataStore.HoldingRegisters, 3, 3, new object()); Assert.IsTrue(readFromEventFired); Assert.IsFalse(writtenToEventFired); }
public void DataStoreReadFromEvent_ReadInputs() { DataStore dataStore = DataStoreFactory.CreateTestDataStore(); bool readFromEventFired = false; bool writtenToEventFired = false; dataStore.DataStoreReadFrom += (obj, e) => { readFromEventFired = true; Assert.AreEqual(4, e.StartAddress); Assert.AreEqual(new bool[] { false }, e.Data.A.ToArray()); Assert.AreEqual(ModbusDataType.Input, e.ModbusDataType); }; dataStore.DataStoreWrittenTo += (obj, e) => writtenToEventFired = true; DataStore.ReadData <DiscreteCollection, bool>(dataStore, dataStore.InputDiscretes, 4, 1, new object()); Assert.IsTrue(readFromEventFired); Assert.IsFalse(writtenToEventFired); }
public void DataStoreReadFromEvent_ReadInputRegisters() { DataStore dataStore = DataStoreFactory.CreateTestDataStore(); bool readFromEventFired = false; bool writtenToEventFired = false; dataStore.DataStoreReadFrom += (obj, e) => { readFromEventFired = true; Assert.Equal(4, e.StartAddress); Assert.Equal(new ushort[] {}, e.Data.B.ToArray()); Assert.Equal(ModbusDataType.InputRegister, e.ModbusDataType); }; dataStore.DataStoreWrittenTo += (obj, e) => writtenToEventFired = true; dataStore.ReadData <RegisterCollection, ushort>(dataStore.InputRegisters, 4, 0, new object()); Assert.True(readFromEventFired); Assert.False(writtenToEventFired); }
public void DataStoreWrittenToEvent_WriteHoldingRegisters() { DataStore dataStore = DataStoreFactory.CreateTestDataStore(); bool readFromEventFired = false; bool writtenToEventFired = false; dataStore.DataStoreWrittenTo += (obj, e) => { writtenToEventFired = true; Assert.AreEqual(3, e.Data.B.Count); Assert.AreEqual(0, e.StartAddress); Assert.AreEqual(new ushort[] { 5, 6, 7 }, e.Data.B.ToArray()); Assert.AreEqual(ModbusDataType.HoldingRegister, e.ModbusDataType); }; dataStore.DataStoreReadFrom += (obj, e) => readFromEventFired = true; DataStore.WriteData(dataStore, new RegisterCollection(5, 6, 7), dataStore.HoldingRegisters, 0, new object()); Assert.IsFalse(readFromEventFired); Assert.IsTrue(writtenToEventFired); }
public void DataStoreWrittenToEvent_WriteCoils() { DataStore dataStore = DataStoreFactory.CreateTestDataStore(); bool readFromEventFired = false; bool writtenToEventFired = false; dataStore.DataStoreWrittenTo += (obj, e) => { writtenToEventFired = true; Assert.AreEqual(3, e.Data.A.Count); Assert.AreEqual(4, e.StartAddress); Assert.AreEqual(new [] { true, false, true }, e.Data.A.ToArray()); Assert.AreEqual(ModbusDataType.Coil, e.ModbusDataType); }; dataStore.DataStoreReadFrom += (obj, e) => readFromEventFired = true; DataStore.WriteData(dataStore, new DiscreteCollection(true, false, true), dataStore.CoilDiscretes, 4, new object()); Assert.IsFalse(readFromEventFired); Assert.IsTrue(writtenToEventFired); }
public void SetUp() { _testDataStore = DataStoreFactory.CreateTestDataStore(); }
public ModbusSlaveFixture() { _testDataStore = DataStoreFactory.CreateTestDataStore(); }