コード例 #1
0
        public void SortPlcAddressForUTTes04()
        {
            var eventInfoes = new List <DataAddress>
            {
                new DataAddress()
                {
                    Value = "DM001"
                },
                new DataAddress()
                {
                    Value = "DM003"
                },
                new DataAddress()
                {
                    Value = "DM005"
                },
                new DataAddress()
                {
                    Value = "DM006"
                }
            };

            var result = PlcAddressSortHelper.Sort <short>(eventInfoes);

            Assert.AreEqual(1, result.AddressSegments.Count());
            Assert.IsTrue(result.AddressSegments.Any(e => e.StartAddress.Value == "DM005"));

            Assert.AreEqual(2, result.AddressNotSegment.Count());
            Assert.IsTrue(result.AddressNotSegment.Addresses.Any(e => e.Value == "DM001"));
            Assert.IsTrue(result.AddressNotSegment.Addresses.Any(e => e.Value == "DM003"));
        }
コード例 #2
0
        private List <Tuple <DataAddress, TValue> > ScanAddress(IPlc plc, List <EventInfo <TValue> > eventInfoes)
        {
            var        result     = new List <Tuple <DataAddress, TValue> >();
            SortResult sortResult = InMemoryCache.GetOrAdd <SortResult>(eventInfoes.GetHashCode().ToString(), key =>
            {
                var r = new SortResult();
                var distinctPlcAddresses = eventInfoes.Select(e => (e.Event as EventBase).PlcAddress).Distinct();

                r.AddressNotSegment.Addresses = distinctPlcAddresses.ToList();

                if (!PlcMonitorImp.IsPlcManualSimulator)
                {
                    r = PlcAddressSortHelper.Sort <TValue>(distinctPlcAddresses);
                }

                return(r);
            });

            sortResult.AddressSegments.ForEach(addressSegment =>
            {
                var startAddress = addressSegment.StartAddress;
                List <TValue> values;

                startAddress.Offset = addressSegment.AllAddressesByDes.Count - 1;

                values = plc.Read <TValue>(startAddress).ToList();

                for (var index = 0; index < values.Count(); index++)
                {
                    result.Add(new Tuple <DataAddress, TValue>(addressSegment.AllAddressesByDes[index], values[index]));
                }
            });

            sortResult.AddressNotSegment.Addresses.ForEach(address =>
            {
                var value = plc.ReadSingle <TValue>(address);

                result.Add(new Tuple <DataAddress, TValue>(address, value));
            });

            return(result);
        }
コード例 #3
0
        public void SortPlcAddressForUTTest01()
        {
            var eventInfoes = new List <DataAddress>
            {
                new DataAddress()
                {
                    Value = "DM004"
                },
                new DataAddress()
                {
                    Value = "DM000"
                },
                new DataAddress()
                {
                    Value = "DM002"
                },
                new DataAddress()
                {
                    Value = "DM008"
                },
                new DataAddress()
                {
                    Value = "DM010"
                },
                new DataAddress()
                {
                    Value = "DM018"
                }
            };
            var result = PlcAddressSortHelper.Sort <int>(eventInfoes);

            Assert.AreEqual(2, result.AddressSegments.Count());
            Assert.IsTrue(result.AddressSegments.Any(e => e.StartAddress.Value == "DM000"));
            Assert.IsTrue(result.AddressSegments.Any(e => e.StartAddress.Value == "DM008"));

            Assert.AreEqual(1, result.AddressNotSegment.Count());
            Assert.IsTrue(result.AddressNotSegment.Addresses.Any(e => e.Value == "DM018"));
        }
コード例 #4
0
        public int GetPollingCount()
        {
            var value = PlcAddressSortHelper.Sort <TValue>(eventInfoes.Select(e => (e.Event as EventBase).PlcAddress).Distinct());

            return(value.AddressSegments.Count() + value.AddressNotSegment.Count());
        }