/// <summary> /// Read event from papper /// </summary> /// <param name="selector"></param> /// <param name="offset"></param> /// <param name="length"></param> /// <returns></returns> private byte[] OnRead(string selector, int offset, int length) { var ad = ExtractAreaData(selector); var sw = new Stopwatch(); sw.Start(); try { switch (ad.Item1) { case PlcArea.DB: return(_client.ReadAny(PlcArea.DB, offset, typeof(byte), new[] { length, ad.Item2 }) as byte[]); case PlcArea.FB: return(_client.ReadAny(PlcArea.FB, offset, typeof(byte), new[] { length }) as byte[]); case PlcArea.QB: return(_client.ReadAny(PlcArea.QB, offset, typeof(byte), new[] { length }) as byte[]); case PlcArea.IB: return(_client.ReadAny(PlcArea.IB, offset, typeof(byte), new[] { length }) as byte[]); default: throw new NotImplementedException(); } } finally { sw.Stop(); _logger.LogInformation($"Read operation: {selector}.{offset}.{length} lasts {sw.Elapsed.TotalMilliseconds}"); } }
public void PerfTest() { var client = new Dacs7Client(); client.Connect(ConnectionString); var offset = 0; var sw = new Stopwatch(); sw.Start(); for (int i = 0; i < 100; i++) { var reads = new List <ReadOperationParameter> { ReadOperationParameter.CreateForBit(250, offset, 0), ReadOperationParameter.CreateForBit(250, offset, 1), ReadOperationParameter.CreateForBit(250, offset, 2), ReadOperationParameter.CreateForBit(250, offset, 3), ReadOperationParameter.CreateForBit(250, offset, 4) }; var result = client.ReadAny(reads); if (!(bool)result.FirstOrDefault()) { Console.WriteLine($"Bit 0 is false!"); } Console.WriteLine($"{i}"); } sw.Stop(); client.Disconnect(); }
public void TestGeneric() { var client = new Dacs7Client(); client.Connect(ConnectionString); for (int i = 0; i < 8; i++) { var offset = TestBitOffset + i; //Set to false and read client.WriteAny <bool>(TestDbNr, offset, false); var boolValue1 = client.ReadAny <bool>(TestDbNr, offset); //Set to true and read client.WriteAny(TestDbNr, offset, true); var boolValue2 = client.ReadAny <bool>(TestDbNr, offset); Assert.NotEqual(boolValue1, boolValue2); client.WriteAny <int>(TestDbNr, TestByteOffset, 512); var intValue1 = client.ReadAny <int>(TestDbNr, TestByteOffset); client.WriteAny <int>(TestDbNr, TestByteOffset, i); var intValue2 = client.ReadAny <int>(TestDbNr, TestByteOffset); Assert.NotEqual(intValue1, intValue2); Assert.Equal(512, intValue1); Assert.Equal(i, intValue2); client.WriteAny(TestDbNr, TestByteOffset, "TEST", 4); var strValue1 = client.ReadAny <string>(TestDbNr, TestByteOffset, 4)?.FirstOrDefault(); var writeVal = i.ToString().PadRight(4, 'X'); client.WriteAny(TestDbNr, TestByteOffset, writeVal, 4); var strValue2 = client.ReadAny <string>(TestDbNr, TestByteOffset, 4)?.FirstOrDefault(); Assert.NotEqual(strValue1, strValue2); Assert.Equal("TEST", strValue1); Assert.Equal(writeVal, strValue2); var firstWriteVal = "TEST".ToCharArray(); client.WriteAny(TestDbNr, TestByteOffset, firstWriteVal, 4); var charValue1 = client.ReadAny <char>(TestDbNr, TestByteOffset, 4); var secondWriteVal = i.ToString().PadRight(4, 'X').ToCharArray(); client.WriteAny(TestDbNr, TestByteOffset, secondWriteVal, 4); var charValue2 = client.ReadAny <char>(TestDbNr, TestByteOffset, 4); Assert.False(charValue1.SequenceEqual(charValue2)); Assert.True(firstWriteVal.SequenceEqual(charValue1)); Assert.True(secondWriteVal.SequenceEqual(charValue2)); } client.Disconnect(); }
public void TestaBunchOfMultiWrites() { var db = 11; var operations = new List <WriteOperationParameter>(); var readOperations = new List <ReadOperationParameter>(); for (int i = 0; i < 100; i++) { operations.Add(new WriteOperationParameter { Area = PlcArea.DB, Offset = i, Type = typeof(bool), Args = new int[] { 1, db }, Data = false }); readOperations.Add(new ReadOperationParameter { Area = PlcArea.DB, Offset = i, Type = typeof(bool), Args = new int[] { 1, db } }); } var client = new Dacs7Client(); client.Connect(ConnectionString); //Reset to false client.WriteAny(operations); var result = client.ReadAny(readOperations).ToList(); for (int i = 0; i < operations.Count; i++) { operations[i].Data = !((bool)result[i]); } client.WriteAny(operations); result = client.ReadAny(readOperations).ToList(); for (int i = 0; i < operations.Count; i++) { Assert.Equal((bool)operations[i].Data, ((bool)result[i])); } operations.RemoveAt(0); client.WriteAny(operations); client.Disconnect(); Assert.False(client.IsConnected); }
public void ReadWriteAnyTest() { var client = new Dacs7Client(); client.Connect(ConnectionString); Assert.True(client.IsConnected); client.WriteAny(PlcArea.DB, TestByteOffset, (byte)0x05, new int[] { 1, TestDbNr }); var bytes = client.ReadAny(PlcArea.DB, TestByteOffset, typeof(byte), new int[] { 1, TestDbNr }) as byte[]; Assert.NotNull(bytes); Assert.Equal((byte)0x05, bytes[0]); client.WriteAny(PlcArea.DB, TestByteOffset, (byte)0x00, new int[] { 1, TestDbNr }); bytes = client.ReadAny(PlcArea.DB, TestByteOffset, typeof(byte), new int[] { 1, TestDbNr }) as byte[]; Assert.NotNull(bytes); Assert.Equal((byte)0x00, bytes[0]); client.WriteAny(PlcArea.DB, TestByteOffset, (byte)0x05, new int[] { 1, TestDbNr }); bytes = client.ReadAny(PlcArea.DB, TestByteOffset, typeof(byte), new int[] { 1, TestDbNr }) as byte[]; Assert.NotNull(bytes); Assert.Equal((byte)0x05, bytes[0]); client.WriteAny(PlcArea.DB, TestByteOffset, (byte)0x00, new int[] { 1, TestDbNr }); bytes = client.ReadAny(PlcArea.DB, TestByteOffset, typeof(byte), new int[] { 1, TestDbNr }) as byte[]; Assert.NotNull(bytes); Assert.Equal((byte)0x00, bytes[0]); client.WriteAny(PlcArea.DB, TestBitOffset, true, new int[] { 1, TestDbNr }); var state = client.ReadAny(PlcArea.DB, TestBitOffset, typeof(bool), new int[] { 1, TestDbNr }) as byte[]; Assert.NotNull(state); Assert.Equal((byte)0x01, state[0]); client.WriteAny(PlcArea.DB, TestBitOffset, false, new int[] { 1, TestDbNr }); state = client.ReadAny(PlcArea.DB, TestBitOffset, typeof(bool), new int[] { 1, TestDbNr }) as byte[]; Assert.NotNull(state); Assert.Equal((byte)0x00, state[0]); client.WriteAny(PlcArea.DB, TestBitOffset, true, new int[] { 1, TestDbNr }); state = client.ReadAny(PlcArea.DB, TestBitOffset, typeof(bool), new int[] { 1, TestDbNr }) as byte[]; Assert.NotNull(state); Assert.Equal((byte)0x01, state[0]); client.WriteAny(PlcArea.DB, TestBitOffset, false, new int[] { 1, TestDbNr }); state = client.ReadAny(PlcArea.DB, TestBitOffset, typeof(bool), new int[] { 1, TestDbNr }) as byte[]; Assert.NotNull(state); Assert.Equal((byte)0x00, state[0]); client.Disconnect(); Assert.False(client.IsConnected); }
public void ReadNotExistingItem() { var client = new Dacs7Client(); //client.OnLogEntry += Console.WriteLine; client.Connect(ConnectionString); Assert.True(client.IsConnected); const int length = ushort.MaxValue; Assert.Throws <Dacs7ContentException>(() => client.ReadAny(PlcArea.DB, 0, typeof(byte), new[] { length, LongDbNumer })); client.Disconnect(); Assert.False(client.IsConnected); }
public void ReadWriteMoreThanOnePduTest() { var client = new Dacs7Client(); client.Connect(ConnectionString); Assert.True(client.IsConnected); const int length = 24000; var testData = new byte[length]; for (var i = 0; i < testData.Length; i++) { testData[i] = 0xFF; } var sw = new Stopwatch(); sw.Start(); client.WriteAny(PlcArea.DB, 0, testData, new[] { length, LongDbNumer }); sw.Stop(); Console.WriteLine("Write time: {0}ms", sw.ElapsedMilliseconds); sw.Reset(); sw.Start(); var red = client.ReadAny(PlcArea.DB, 0, typeof(byte), new[] { length, LongDbNumer }) as byte[]; sw.Stop(); Console.WriteLine("Read time: {0}ms", sw.ElapsedMilliseconds); Assert.NotNull(red); Assert.True(testData.SequenceEqual(red)); client.Disconnect(); Assert.False(client.IsConnected); }
public static void Main(string[] args) { _client.OnConnectionChange += _client_OnConnectionChange; _client.Connect(ConnectionString); GenericsSample(); MultiValuesSample(); var red = _client.ReadAny(PlcArea.DB, 0, typeof(int), new[] { 2, LongDbNumer }); var boolValue = _client.ReadAny <bool>(LongDbNumer, 0, 2); _client.WriteAny(LongDbNumer, 0, new bool[] { true, true }); var intValue = _client.ReadAny <int>(LongDbNumer, 0, 2); _client.WriteAny(LongDbNumer, 0, new int[] { 1, 2 }); ReadWriteAnyTest(); ReadWriteMoreThanOnePduTest(); ReadWriteMoreThanOnePduParallelTest(); _client.Disconnect(); Thread.Sleep(1000); }