예제 #1
0
        public async Task ReadWriteSingles()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                const string datablock = "DB1";
                var writeResults       = (await client.WriteAsync(WriteItem.Create(datablock, 10014, (float)0.0))).ToArray();


                var results = (await client.ReadAsync(ReadItem.Create <float>(datablock, 10014))).ToArray();


                Assert.Single(results);
                Assert.Equal(typeof(float), results[0].Type);
                Assert.Equal((float)0.0, (float)results[0].Value);

                writeResults = (await client.WriteAsync(WriteItem.Create(datablock, 10014, (float)0.5))).ToArray();

                results = (await client.ReadAsync(ReadItem.Create <float>(datablock, 10014))).ToArray();

                Assert.Single(results);
                Assert.Equal(typeof(float), results[0].Type);
                Assert.Equal((float)0.5, (float)results[0].Value);

                writeResults = (await client.WriteAsync(WriteItem.Create(datablock, 10014, (float)0.0))).ToArray();
            });
        }
예제 #2
0
        public async Task ReadWriteMultibleCharsStringLongerThanPDUSize()
        {
            const string datablock = "DB141";
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                var data = new List <ReadItem> {
                    ReadItem.Create <char[]>(datablock, 28, 14),
                    ReadItem.Create <char[]>(datablock, 46, 10),
                    ReadItem.Create <string>(datablock, 106, 10),
                    ReadItem.Create <char[]>(datablock, 124, 10),
                    ReadItem.Create <char[]>(datablock, 134, 10),
                    ReadItem.Create <char[]>(datablock, 60, 8),
                    ReadItem.Create <char[]>(datablock, 86, 8),
                    ReadItem.Create <char[]>(datablock, 94, 8),
                    ReadItem.Create <char[]>(datablock, 116, 8),
                    ReadItem.Create <char[]>(datablock, 0, 8),
                    ReadItem.Create <char[]>(datablock, 8, 8),
                    ReadItem.Create <char[]>(datablock, 16, 8),
                    ReadItem.Create <char[]>(datablock, 76, 6),
                    ReadItem.Create <char[]>(datablock, 24, 4),
                    ReadItem.Create <char[]>(datablock, 42, 4),
                    ReadItem.Create <char[]>(datablock, 56, 4)
                };

                var results = (await client.ReadAsync(data)).ToArray();

                Assert.Equal(data.Count, results.Length);
                Assert.True(results.All(x => x.IsSuccessReturnCode));

                var writeResults = await client.WriteAsync(data.Select((r, i) => r.From(results[i].Data)).ToArray());

                Assert.Equal(data.Count, writeResults.Count());
                Assert.True(writeResults.All(x => x == ItemResponseRetValue.Success));
            }, 240);
        }
예제 #3
0
        public async Task ReadWriteSingleStrings()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                const string datablock = "DB1";
                var writeResults       = (await client.WriteAsync(WriteItem.Create(datablock, 10046, ""),
                                                                  WriteItem.Create(datablock, 10068, "                    "))).ToArray();


                var results = (await client.ReadAsync(ReadItem.Create <string>(datablock, 10046, 20),
                                                      ReadItem.Create <string>(datablock, 10068, 20))).ToArray();


                Assert.Equal(2, results.Count());
                Assert.Equal(typeof(string), results[0].Type);
                Assert.Equal("", (string)results[0].Value);
                Assert.Equal(typeof(string), results[1].Type);
                Assert.Equal("                    ", (string)results[1].Value);

                writeResults = (await client.WriteAsync(WriteItem.Create(datablock, 10046, "Test1"),
                                                        WriteItem.Create(datablock, 10068, "Test2               "))).ToArray();

                results = (await client.ReadAsync(ReadItem.Create <string>(datablock, 10046, 20),
                                                  ReadItem.Create <string>(datablock, 10068, 20))).ToArray();

                Assert.Equal(2, results.Count());
                Assert.Equal(typeof(string), results[0].Type);
                Assert.Equal("Test1", (string)results[0].Value);
                Assert.Equal(typeof(string), results[1].Type);
                Assert.Equal("Test2               ", (string)results[1].Value);

                writeResults = (await client.WriteAsync(WriteItem.Create(datablock, 10046, ""),
                                                        WriteItem.Create(datablock, 10068, "                    "))).ToArray();
            });
        }
예제 #4
0
        public async Task ReadWriteString()
        {
            const string datablock = "DB962";
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                var data0 = new List <WriteItem> {
                    WriteItem.Create <string>(datablock, 58, 14, "XXXXXXXXXXXXXX")
                };

                var writeResults1 = await client.WriteAsync(data0);
                Assert.Equal(data0.Count, writeResults1.Count());
                Assert.True(writeResults1.All(x => x == ItemResponseRetValue.Success));


                var data1 = new List <ReadItem> {
                    ReadItem.Create <string>(datablock, 58, 14)
                };

                var readResults1 = await client.ReadAsync(data1);

                var data = new List <WriteItem> {
                    WriteItem.Create <string>(datablock, 58, 14, "1234567890ABCD")
                };

                var writeResults2 = await client.WriteAsync(data);
                Assert.Equal(data.Count, writeResults2.Count());
                Assert.True(writeResults2.All(x => x == ItemResponseRetValue.Success));


                var readResults2 = await client.ReadAsync(data1);


                Assert.False(readResults1.FirstOrDefault().Data.Span.SequenceEqual(readResults2.FirstOrDefault().Data.Span));
            }, 240);
        }
        public async Task ReadWriteSingles()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                var originWriteTags = new Dictionary <string, object>
                {
                    { $"DB2.10014,r", (float)0.0 }
                };
                var writeResults = (await client.WriteAsync(originWriteTags.Select(w => WriteItem.CreateFromTag(w.Key, w.Value)))).ToArray();
                var results      = (await client.ReadAsync(originWriteTags.Select(w => ReadItem.CreateFromTag(w.Key)))).ToArray();



                Assert.Single(results);
                Assert.Equal(typeof(float), results[0].Type);
                Assert.Equal((float)0.0, (float)results[0].Value);

                var writeTags = new Dictionary <string, object>
                {
                    { $"DB2.10014,r", (float)0.5 }
                };

                writeResults = (await client.WriteAsync(writeTags.Select(w => WriteItem.CreateFromTag(w.Key, w.Value)))).ToArray();

                results = (await client.ReadAsync(writeTags.Select(w => ReadItem.CreateFromTag(w.Key)))).ToArray();

                Assert.Single(results);
                Assert.Equal(typeof(float), results[0].Type);
                Assert.Equal((float)0.5, (float)results[0].Value);

                writeResults = (await client.WriteAsync(originWriteTags.Select(w => WriteItem.CreateFromTag(w.Key, w.Value)))).ToArray();
            });
        }
예제 #6
0
        public async Task CreateMultiWriteTest()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                var items = new List <WriteItem>();
                var data  = new byte[18];

                items.Add(WriteItem.Create("DB1993", 8, new byte[86]));

                items.Add(WriteItem.Create("DB1993", 2122, new byte[878]));
                items.Add(WriteItem.Create("DB1993", 102, new byte[18]));
                items.Add(WriteItem.Create("DB1993", 3008, new byte[492]));
                items.Add(WriteItem.Create("DB1993", 4122, new byte[378]));
                items.Add(WriteItem.Create("DB1993", 122, new byte[18]));
                items.Add(WriteItem.Create("DB1993", 14, new byte[86]));
                items.Add(WriteItem.Create("DB1993", 722, new byte[78]));
                items.Add(WriteItem.Create("DB1993", 1422, new byte[78]));

                for (int i = 0; i < 37; i++)
                {
                    items.Add(WriteItem.Create("DB1993", 142 + (i * 20), data));
                }

                var writeResults = (await client.WriteAsync(items)).ToArray();
            });
        }
예제 #7
0
 public async Task ReadOfNotExistingBlock()
 {
     await PlcTestServer.ExecuteClientAsync(async (client) =>
     {
         var x = await client.ReadAsync("DB66.0,B");
     });
 }
예제 #8
0
        public async Task CreateWriteReferenceTest()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                var item         = WriteItem.Create("DB210", 192, false);
                var writeResults = (await client.WriteAsync(item)).ToArray();

                item         = WriteItem.Create("DB210", 193, false);
                writeResults = (await client.WriteAsync(item)).ToArray();


                item         = WriteItem.Create("DB210", 35440, false);
                writeResults = (await client.WriteAsync(item)).ToArray();


                item         = WriteItem.Create("DB210", 35441, false);
                writeResults = (await client.WriteAsync(item)).ToArray();


                item         = WriteItem.Create("DB210", 70688, false);
                writeResults = (await client.WriteAsync(item)).ToArray();


                item         = WriteItem.Create("DB210", 70689, false);
                writeResults = (await client.WriteAsync(item)).ToArray();

                item         = WriteItem.Create("DB210", 105936, false);
                writeResults = (await client.WriteAsync(item)).ToArray();


                item         = WriteItem.Create("DB210", 105937, false);
                writeResults = (await client.WriteAsync(item)).ToArray();
            });
        }
예제 #9
0
        public async Task ReadWriteMultibleDInts()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                const string datablock = "DB1";
                var writeDataDefault   = new int[] { 0, 0 };
                const int startAddress = 10038;
                var writeResults       = (await client.WriteAsync(WriteItem.Create(datablock, startAddress, writeDataDefault))).ToArray();


                var results = (await client.ReadAsync(ReadItem.Create <int>(datablock, startAddress, 2))).ToArray();


                Assert.Single(results);
                Assert.Equal(typeof(int[]), results[0].Type);

                var resultValueDefault = results[0].GetValue <int[]>();

                Assert.True(resultValueDefault.SequenceEqual(writeDataDefault));

                var writeData = new int[] { 22, 21 };
                writeResults  = (await client.WriteAsync(WriteItem.Create(datablock, startAddress, writeData))).ToArray();

                results = (await client.ReadAsync(ReadItem.Create <int>(datablock, startAddress, 2))).ToArray();

                Assert.Single(results);
                Assert.Equal(typeof(int[]), results[0].Type);

                var resultValue = results[0].GetValue <int[]>();

                Assert.True(resultValue.SequenceEqual(writeData));

                writeResults = (await client.WriteAsync(WriteItem.Create(datablock, startAddress, writeDataDefault))).ToArray();
            });
        }
예제 #10
0
        public async Task ReadWriteBigDBData()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                var data            = Enumerable.Repeat((byte)0x00, 1000).ToArray();
                var originWriteTags = new Dictionary <string, object>
                {
                    { $"DB2.2500,b,1000", data }
                };

                var writeResults = (await client.WriteAsync(originWriteTags.Select(w => WriteItem.CreateFromTag(w.Key, w.Value)))).ToArray();
                var results      = (await client.ReadAsync(originWriteTags.Select(w => ReadItem.CreateFromTag(w.Key)))).ToArray();

                Assert.True(results.FirstOrDefault().Data.ToArray().SequenceEqual(data));

                var data2     = Enumerable.Repeat((byte)0x25, 1000).ToArray();
                var writeTags = new Dictionary <string, object>
                {
                    { $"DB2.2500,b,1000", data2 }
                };

                writeResults = (await client.WriteAsync(writeTags.Select(w => WriteItem.CreateFromTag(w.Key, w.Value)))).ToArray();

                results = (await client.ReadAsync(writeTags.Select(w => ReadItem.CreateFromTag(w.Key)))).ToArray();

                Assert.True(results.FirstOrDefault().Data.ToArray().SequenceEqual(data2));

                writeResults = (await client.WriteAsync(originWriteTags.Select(w => WriteItem.CreateFromTag(w.Key, w.Value)))).ToArray();
            });
        }
예제 #11
0
        public async Task ReadWriteSingleWords()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                const string datablock = "DB1";
                var writeResults       = (await client.WriteAsync(WriteItem.Create(datablock, 10002, (ushort)0),
                                                                  WriteItem.Create(datablock, 10004, (short)0))).ToArray();


                var results = (await client.ReadAsync(ReadItem.Create <ushort>(datablock, 10002),
                                                      ReadItem.Create <short>(datablock, 10004))).ToArray();


                Assert.Equal(2, results.Count());
                Assert.Equal(typeof(ushort), results[0].Type);
                Assert.Equal((ushort)0, (ushort)results[0].Value);
                Assert.Equal(typeof(short), results[1].Type);
                Assert.Equal((short)0, (short)results[1].Value);

                writeResults = (await client.WriteAsync(WriteItem.Create(datablock, 10002, (ushort)15),
                                                        WriteItem.Create(datablock, 10004, (short)25))).ToArray();

                results = (await client.ReadAsync(ReadItem.Create <ushort>(datablock, 10002),
                                                  ReadItem.Create <short>(datablock, 10004))).ToArray();

                Assert.Equal(2, results.Count());
                Assert.Equal(typeof(ushort), results[0].Type);
                Assert.Equal((ushort)15, (ushort)results[0].Value);
                Assert.Equal(typeof(short), results[1].Type);
                Assert.Equal((short)25, (short)results[1].Value);

                writeResults = (await client.WriteAsync(WriteItem.Create(datablock, 10002, (ushort)0),
                                                        WriteItem.Create(datablock, 10004, (short)0))).ToArray();
            });
        }
예제 #12
0
 public async Task ReadMetadataOfNotExistingBlock()
 {
     await PlcTestServer.ExecuteClientAsync(async (client) =>
     {
         var x = await client.ReadBlockInfoAsync(PlcBlockType.Db, 66);
         Assert.Equal(0, x.CodeSize);
     });
 }
예제 #13
0
        public async Task ReadWriteDataAndCheckIfTheResultsDontChangeBecauseOfBufferReusing()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                const string datablock = "DB4";
                const ushort offset    = 2500;
                var resultsDefault0    = new Memory <byte>(Enumerable.Repeat((byte)0x00, 1000).ToArray());
                var resultsDefault1    = await client.WriteAsync(WriteItem.Create(datablock, offset, resultsDefault0));
                var resultsDefault2    = (await client.ReadAsync(ReadItem.Create <byte[]>(datablock, offset, 1000)));

                var first = resultsDefault2.FirstOrDefault();
                var copy1 = new byte[first.Data.Length];
                first.Data.CopyTo(copy1);

                Assert.True(resultsDefault0.Span.SequenceEqual(first.Data.Span), "1");
                Assert.True(resultsDefault0.Span.SequenceEqual(copy1), "2");

                var results0 = new Memory <byte>(Enumerable.Repeat((byte)0x25, 1000).ToArray());
                var results1 = await client.WriteAsync(WriteItem.Create(datablock, offset, results0));
                var results2 = (await client.ReadAsync(ReadItem.Create <byte[]>(datablock, offset, 1000)));

                var second = results2.FirstOrDefault();
                var copy2  = new byte[second.Data.Length];
                second.Data.CopyTo(copy2);


                resultsDefault1 = await client.WriteAsync(WriteItem.Create(datablock, offset, resultsDefault0));
                Assert.True(results0.Span.SequenceEqual(results2.FirstOrDefault().Data.Span), "3");
                Assert.True(results0.Span.SequenceEqual(copy2), "4");


                var results00 = new Memory <byte>(Enumerable.Repeat((byte)0x01, 1000).ToArray());
                var results01 = await client.WriteAsync(WriteItem.Create(datablock, offset, results00));
                var results02 = (await client.ReadAsync(ReadItem.Create <byte[]>(datablock, offset, 1000)));

                var third = results02.FirstOrDefault();
                var copy3 = new byte[third.Data.Length];
                third.Data.CopyTo(copy3);

                resultsDefault1 = await client.WriteAsync(WriteItem.Create(datablock, offset, resultsDefault0));
                Assert.True(results00.Span.SequenceEqual(results02.FirstOrDefault().Data.Span), "5");
                Assert.True(results00.Span.SequenceEqual(copy3), "6");


                Assert.True(resultsDefault0.Span.SequenceEqual(first.Data.Span), "7");
                Assert.True(resultsDefault0.Span.SequenceEqual(copy1), "8");
                Assert.True(first.Data.Span.SequenceEqual(copy1), "9");

                Assert.True(results0.Span.SequenceEqual(second.Data.Span), "10");
                Assert.True(results0.Span.SequenceEqual(copy2), "11");
                Assert.True(second.Data.Span.SequenceEqual(copy2), "12");

                Assert.True(results00.Span.SequenceEqual(third.Data.Span), "13");
                Assert.True(results00.Span.SequenceEqual(copy3), "14");
                Assert.True(third.Data.Span.SequenceEqual(copy3), "15");
            });
        }
예제 #14
0
        public async Task WriteString()
        {
            const string datablock = "DB962";
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                var data = new List <WriteItem> {
                    WriteItem.Create <string>(datablock, 12, 8, "12345678")
                };

                var writeResults = await client.WriteAsync(data);
                Assert.Equal(data.Count, writeResults.Count());
                Assert.True(writeResults.All(x => x == ItemResponseRetValue.Success));
            }, 240);
        }
예제 #15
0
        public async Task ReadMixedData()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                var results = (await client.ReadAsync(ReadItem.CreateFromTag("DB1.4,B,8"),
                                                      ReadItem.CreateFromTag("DB1.38,B,8"),
                                                      ReadItem.CreateFromTag("DB1.94,B,10"))).ToArray();



                Assert.Equal(3, results.Count());
                Assert.True(results[0].IsSuccessReturnCode);
                Assert.True(results[1].IsSuccessReturnCode);
                Assert.True(results[2].IsSuccessReturnCode);
            });
        }
        // DB2241.0,B,15450
        public async Task WriteBigDBData()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                var data            = Enumerable.Repeat((byte)0x00, 15450).ToArray();
                var originWriteTags = new Dictionary <string, object>
                {
                    { $"DB2241.0,b,15450", data }
                };

                var writeResults = (await client.WriteAsync(originWriteTags)).ToArray();
                Assert.Equal(ItemResponseRetValue.DataError, writeResults[0]);
                var results = (await client.ReadAsync(originWriteTags.Keys)).ToArray();
                Assert.Equal(ItemResponseRetValue.DataError, results[0].ReturnCode);
            });
        }
예제 #17
0
        public async Task ReadMultibleByteArrayData()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                const string datablock = "DB1";
                var results            = (await client.ReadAsync(ReadItem.Create <byte[]>(datablock, 0, 1000),
                                                                 ReadItem.Create <byte[]>(datablock, 2200, 100),
                                                                 ReadItem.Create <byte[]>(datablock, 1000, 1000),
                                                                 ReadItem.Create <byte[]>(datablock, 200, 100))).ToArray();


                Assert.Equal(4, results.Count());
                Assert.Equal(1000, results[0].Data.Length);
                Assert.Equal(100, results[1].Data.Length);
                Assert.Equal(1000, results[2].Data.Length);
                Assert.Equal(100, results[3].Data.Length);
            });
        }
예제 #18
0
        public async Task ReadWriteBigDBData()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                const string datablock = "DB1";
                const ushort offset    = 2500;
                var resultsDefault0    = new Memory <byte>(Enumerable.Repeat((byte)0x00, 1000).ToArray());
                var resultsDefault1    = await client.WriteAsync(WriteItem.Create(datablock, offset, resultsDefault0));
                var resultsDefault2    = (await client.ReadAsync(ReadItem.Create <byte[]>(datablock, offset, 1000)));

                var results0 = new Memory <byte>(Enumerable.Repeat((byte)0x25, 1000).ToArray());
                var results1 = await client.WriteAsync(WriteItem.Create(datablock, offset, results0));
                var results2 = (await client.ReadAsync(ReadItem.Create <byte[]>(datablock, offset, 1000)));


                resultsDefault1 = await client.WriteAsync(WriteItem.Create(datablock, offset, resultsDefault0));
                Assert.True(results0.Span.SequenceEqual(results2.FirstOrDefault().Data.Span));
            });
        }
예제 #19
0
        public async Task ReadMixedData()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                var originWriteTags = new Dictionary <string, object>
                {
                    { $"DB2.4,B,8", null },
                    { $"DB2.38,B,8", null },
                    { $"DB2.94,B,10", null },
                };


                var results = (await client.ReadAsync(originWriteTags.Select(w => ReadItem.CreateFromTag(w.Key)))).ToArray();

                Assert.Equal(3, results.Count());
                Assert.True(results[0].IsSuccessReturnCode);
                Assert.True(results[1].IsSuccessReturnCode);
                Assert.True(results[2].IsSuccessReturnCode);
            });
        }
예제 #20
0
        public async Task WriteMultiCharsAndString()
        {
            const string datablock = "DB962";
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                var data = new List <WriteItem> {
                    WriteItem.Create <char[]>(datablock, 60, 14, "|010101010101|".ToCharArray()),
                    WriteItem.Create <char[]>(datablock, 2, 10, "|01010101|".ToCharArray()),
                    WriteItem.Create <string>(datablock, 12, 8, "|123456|"),
                    WriteItem.Create <char[]>(datablock, 36, 6, "|1234|".ToCharArray()),
                    WriteItem.Create <char[]>(datablock, 24, 4, "|12|".ToCharArray()),
                    WriteItem.Create <char[]>(datablock, 30, 4, "|12|".ToCharArray()),
                    WriteItem.Create <char[]>(datablock, 44, 4, "|12|".ToCharArray())
                };

                var writeResults = await client.WriteAsync(data);
                Assert.Equal(data.Count, writeResults.Count());
                Assert.True(writeResults.All(x => x == ItemResponseRetValue.Success));
            }, 240);
        }
예제 #21
0
        public async Task ReadWriteSingleBits()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                var originWriteTags = new Dictionary <string, object>
                {
                    { $"DB2.10000,x0", false },
                    { $"DB2.10000,x5", false }
                };
                var writeResults = (await client.WriteAsync(originWriteTags.Select(w => WriteItem.CreateFromTag(w.Key, w.Value)))).ToArray();


                var results = (await client.ReadAsync(originWriteTags.Select(w => ReadItem.CreateFromTag(w.Key)))).ToArray();


                Assert.Equal(2, results.Count());
                Assert.Equal(typeof(bool), results[0].Type);
                Assert.False((bool)results[0].Value);
                Assert.Equal(typeof(bool), results[1].Type);
                Assert.False((bool)results[1].Value);


                var writeTags = new Dictionary <string, object>
                {
                    { $"DB2.10000,x0", true },
                    { $"DB2.10000,x5", true }
                };

                writeResults = (await client.WriteAsync(writeTags.Select(w => WriteItem.CreateFromTag(w.Key, w.Value)))).ToArray();

                results = (await client.ReadAsync(writeTags.Select(w => ReadItem.CreateFromTag(w.Key)))).ToArray();

                Assert.Equal(2, results.Count());
                Assert.Equal(typeof(bool), results[0].Type);
                Assert.True((bool)results[0].Value);
                Assert.Equal(typeof(bool), results[1].Type);
                Assert.True((bool)results[1].Value);

                writeResults = (await client.WriteAsync(originWriteTags.Select(w => WriteItem.CreateFromTag(w.Key, w.Value)))).ToArray();
            });
        }
예제 #22
0
        public async Task ReadWriteSingleDWords()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                var originWriteTags = new Dictionary <string, object>
                {
                    { $"DB2.10006,dw", (uint)0 },
                    { $"DB2.10010,di", 0 }
                };
                var writeResults = (await client.WriteAsync(originWriteTags.Select(w => WriteItem.CreateFromTag(w.Key, w.Value)))).ToArray();
                var results      = (await client.ReadAsync(originWriteTags.Select(w => ReadItem.CreateFromTag(w.Key)))).ToArray();



                Assert.Equal(2, results.Count());
                Assert.Equal(typeof(uint), results[0].Type);
                Assert.Equal((uint)0, (uint)results[0].Value);
                Assert.Equal(typeof(int), results[1].Type);
                Assert.Equal(0, (int)results[1].Value);


                var writeTags = new Dictionary <string, object>
                {
                    { $"DB2.10006,dw", (uint)15 },
                    { $"DB2.10010,di", 25 }
                };

                writeResults = (await client.WriteAsync(writeTags.Select(w => WriteItem.CreateFromTag(w.Key, w.Value)))).ToArray();

                results = (await client.ReadAsync(writeTags.Select(w => ReadItem.CreateFromTag(w.Key)))).ToArray();


                Assert.Equal(2, results.Count());
                Assert.Equal(typeof(uint), results[0].Type);
                Assert.Equal((ushort)15, (uint)results[0].Value);
                Assert.Equal(typeof(int), results[1].Type);
                Assert.Equal(25, (int)results[1].Value);

                writeResults = (await client.WriteAsync(originWriteTags.Select(w => WriteItem.CreateFromTag(w.Key, w.Value)))).ToArray();
            });
        }
예제 #23
0
        public async Task ReadMultibleByteArrayData()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                var readTags = new Dictionary <string, object>
                {
                    { $"DB2.0,b,1000", 1000 },
                    { $"DB2.2200,b,100", 100 },
                    { $"DB2.1000,b,1000", 1000 },
                    { $"DB2.200,b,100", 100 },
                };

                var results = (await client.ReadAsync(readTags.Select(w => ReadItem.CreateFromTag(w.Key)))).ToArray();

                Assert.Equal(4, results.Count());
                Assert.Equal(1000, results[0].Data.Length);
                Assert.Equal(100, results[1].Data.Length);
                Assert.Equal(1000, results[2].Data.Length);
                Assert.Equal(100, results[3].Data.Length);
            });
        }
예제 #24
0
        public async Task ReadWriteSingleStrings()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                var originWriteTags = new Dictionary <string, object>
                {
                    { $"DB2.10046,s,20", "" },
                    { $"DB2.10068,s,20", "                    " }
                };
                var writeResults = (await client.WriteAsync(originWriteTags.Select(w => WriteItem.CreateFromTag(w.Key, w.Value)))).ToArray();
                var results      = (await client.ReadAsync(originWriteTags.Select(w => ReadItem.CreateFromTag(w.Key)))).ToArray();


                Assert.Equal(2, results.Count());
                Assert.Equal(typeof(string), results[0].Type);
                Assert.Equal("", (string)results[0].Value);
                Assert.Equal(typeof(string), results[1].Type);
                Assert.Equal("                    ", (string)results[1].Value);


                var writeTags = new Dictionary <string, object>
                {
                    { $"DB2.10046,s,20", "Test1" },
                    { $"DB2.10068,s,20", "Test2               " }
                };

                writeResults = (await client.WriteAsync(writeTags.Select(w => WriteItem.CreateFromTag(w.Key, w.Value)))).ToArray();

                results = (await client.ReadAsync(writeTags.Select(w => ReadItem.CreateFromTag(w.Key)))).ToArray();


                Assert.Equal(2, results.Count());
                Assert.Equal(typeof(string), results[0].Type);
                Assert.Equal("Test1", (string)results[0].Value);
                Assert.Equal(typeof(string), results[1].Type);
                Assert.Equal("Test2               ", (string)results[1].Value);

                writeResults = (await client.WriteAsync(originWriteTags.Select(w => WriteItem.CreateFromTag(w.Key, w.Value)))).ToArray();
            });
        }
예제 #25
0
        public async Task ReadWriteSingleStrings2()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                var originWriteTags = new Dictionary <string, object>
                {
                    { $"DB2.10090,s,20", "" },
                    { $"DB2.10112,s,20", "                    " }
                };
                var writeResults = (await client.WriteAsync(originWriteTags.Select(w => WriteItem.CreateFromTag(w.Key, w.Value)))).ToArray();
                var results      = (await client.ReadAsync(originWriteTags.Select(w => ReadItem.CreateFromTag(w.Key)))).ToArray();


                Assert.Equal(2, results.Count());
                Assert.Equal(typeof(string), results[0].Type);
                Assert.Equal("", (string)results[0].Value);
                Assert.Equal(typeof(string), results[1].Type);
                Assert.Equal("                    ", (string)results[1].Value);


                var writeTags = new Dictionary <string, object>
                {
                    { $"DB2.10046,s,20", "A PARTIAL STRING".PadLeft(20).Substring(0, 18) },
                    { $"DB2.10068,s,20", "A FULLY STRING IT IS".PadLeft(20) }
                };

                writeResults = (await client.WriteAsync(writeTags.Select(w => WriteItem.CreateFromTag(w.Key, w.Value)))).ToArray();

                results = (await client.ReadAsync(writeTags.Select(w => ReadItem.CreateFromTag(w.Key)))).ToArray();


                Assert.Equal(2, results.Count());
                Assert.Equal(typeof(string), results[0].Type);
                Assert.Equal("A PARTIAL STRING".PadLeft(20).Substring(0, 18), (string)results[0].Value);
                Assert.Equal(typeof(string), results[1].Type);
                Assert.Equal("A FULLY STRING IT IS".PadLeft(20), (string)results[1].Value);

                writeResults = (await client.WriteAsync(originWriteTags.Select(w => WriteItem.CreateFromTag(w.Key, w.Value)))).ToArray();
            });
        }
예제 #26
0
        public async Task ReadWriteMultibleDWords()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                var originWriteTags = new Dictionary <string, object>
                {
                    { $"DB2.10034,dw,2", new uint[] { 0, 0 } }
                };
                var writeResults = (await client.WriteAsync(originWriteTags.Select(w => WriteItem.CreateFromTag(w.Key, w.Value)))).ToArray();
                var results      = (await client.ReadAsync(originWriteTags.Select(w => ReadItem.CreateFromTag(w.Key)))).ToArray();


                Assert.Single(results);
                Assert.Equal(typeof(uint[]), results[0].Type);

                var resultValueDefault = results[0].Value as uint[];

                Assert.True(resultValueDefault.SequenceEqual(originWriteTags.FirstOrDefault().Value as uint[]));

                var writeData = new uint[] { 22, 21 };
                var writeTags = new Dictionary <string, object>
                {
                    { $"DB2.10034,dw,2", writeData }
                };

                writeResults = (await client.WriteAsync(writeTags.Select(w => WriteItem.CreateFromTag(w.Key, w.Value)))).ToArray();

                results = (await client.ReadAsync(writeTags.Select(w => ReadItem.CreateFromTag(w.Key)))).ToArray();


                Assert.Single(results);
                Assert.Equal(typeof(uint[]), results[0].Type);

                var resultValue = results[0].Value as uint[];

                Assert.True(resultValue.SequenceEqual(writeData));

                writeResults = (await client.WriteAsync(originWriteTags.Select(w => WriteItem.CreateFromTag(w.Key, w.Value)))).ToArray();
            });
        }
        public async Task ReadWriteMultibleDInts()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                var originWriteTags = new Dictionary <string, object>
                {
                    { $"DB2.10038,di,2", new int[] { 0, 0 } }
                };
                var writeResults = (await client.WriteAsync(originWriteTags)).ToArray();
                var results      = (await client.ReadAsync(originWriteTags.Keys)).ToArray();


                Assert.Single(results);
                Assert.Equal(typeof(int[]), results[0].Type);

                var resultValueDefault = results[0].GetValue <int[]>();

                Assert.True(resultValueDefault.SequenceEqual(originWriteTags.FirstOrDefault().Value as int[]));

                var writeData = new int[] { 22, 21 };
                var writeTags = new Dictionary <string, object>
                {
                    { $"DB2.10038,di,2", writeData }
                };

                writeResults = (await client.WriteAsync(writeTags)).ToArray();

                results = (await client.ReadAsync(writeTags.Keys)).ToArray();

                Assert.Single(results);
                Assert.Equal(typeof(int[]), results[0].Type);

                var resultValue = results[0].GetValue <int[]>();

                Assert.True(resultValue.SequenceEqual(writeData));

                writeResults = (await client.WriteAsync(originWriteTags)).ToArray();
            });
        }
        public async Task ReadWriteSingleWords()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                var originWriteTags = new Dictionary <string, object>
                {
                    { $"DB2.10002,w", (ushort)0 },
                    { $"DB2.10004,i", (short)0 }
                };
                var writeResults = (await client.WriteAsync(originWriteTags)).ToArray();
                var results      = (await client.ReadAsync(originWriteTags.Keys)).ToArray();


                Assert.Equal(2, results.Count());
                Assert.Equal(typeof(ushort), results[0].Type);
                Assert.Equal((ushort)0, (ushort)results[0].Value);
                Assert.Equal(typeof(short), results[1].Type);
                Assert.Equal((short)0, (short)results[1].Value);

                var writeTags = new Dictionary <string, object>
                {
                    { $"DB2.10002,w", (ushort)15 },
                    { $"DB2.10004,i", (short)25 }
                };

                writeResults = (await client.WriteAsync(writeTags)).ToArray();

                results = (await client.ReadAsync(writeTags.Keys)).ToArray();

                Assert.Equal(2, results.Count());
                Assert.Equal(typeof(ushort), results[0].Type);
                Assert.Equal((ushort)15, (ushort)results[0].Value);
                Assert.Equal(typeof(short), results[1].Type);
                Assert.Equal((short)25, (short)results[1].Value);

                writeResults = (await client.WriteAsync(originWriteTags)).ToArray();
            });
        }
예제 #29
0
        public async Task ReadWriteSingleBits()
        {
            await PlcTestServer.ExecuteClientAsync(async (client) =>
            {
                const string datablock = "DB1";
                var baseOffset         = 10000 * 8;
                var writeResults       = (await client.WriteAsync(WriteItem.Create(datablock, baseOffset, false),
                                                                  WriteItem.Create(datablock, baseOffset + 5, false))).ToArray();


                var results = (await client.ReadAsync(ReadItem.Create <bool>(datablock, baseOffset),
                                                      ReadItem.Create <bool>(datablock, baseOffset + 5))).ToArray();


                Assert.Equal(2, results.Count());
                Assert.Equal(typeof(bool), results[0].Type);
                Assert.False((bool)results[0].Value);
                Assert.Equal(typeof(bool), results[1].Type);
                Assert.False((bool)results[1].Value);

                writeResults = (await client.WriteAsync(WriteItem.Create(datablock, baseOffset, true),
                                                        WriteItem.Create(datablock, baseOffset + 5, true))).ToArray();

                results = (await client.ReadAsync(ReadItem.Create <bool>(datablock, baseOffset),
                                                  ReadItem.Create <bool>(datablock, baseOffset + 5))).ToArray();

                Assert.Equal(2, results.Count());
                Assert.Equal(typeof(bool), results[0].Type);
                Assert.True((bool)results[0].Value);
                Assert.Equal(typeof(bool), results[1].Type);
                Assert.True((bool)results[1].Value);

                writeResults = (await client.WriteAsync(WriteItem.Create(datablock, baseOffset, false),
                                                        WriteItem.Create(datablock, baseOffset + 5, false))).ToArray();
            });
        }