Пример #1
0
        public async Task <List <RegisterDataSlice> > Read(DeviceDescription description)
        {
            await Task.Delay(1000);

            if (description.Id == 2)
            {
                throw new Exception();
            }

            return(description.Registers.Select(r =>
            {
                var rand = new Random();

                var intV = (double)rand.Next(10, 100);
                var floatV = (double)rand.Next(10, 99);

                var value = 2.0 * r.IntegerAddress * description.Id;

                if (this.cache.TryGetValue(new Tuple <uint, uint>(description.Id, r.IntegerAddress), out var cachedValue))
                {
                    value = cachedValue;
                }

                var data = new RegisterDataSlice(new RegisterId(description.Id, r), DateTime.Now, value);

                return data;
            }).ToList());
        }
Пример #2
0
        public List <RegisterDataSlice> ParseResult(DeviceDescription device, List <RegisterDescription> descriptions, int length, ushort[] data)
        {
            var collectedData = new List <RegisterDataSlice>(descriptions.Count);

            var startOffset = (int)descriptions.First().IntegerAddress;

            foreach (var register in descriptions)
            {
                var i = (int)register.IntegerAddress - startOffset;

                var count = this.RegisterLength(register);

                var bytes = data.Skip(i).Take(count).ToArray();

                switch (bytes.Length)
                {
                case 2:
                {
                    var parsedData = new RegisterDataSlice(new RegisterId(device.Id, register), DateTime.Now, this.ToFloat(bytes[0], bytes[1]));
                    collectedData.Add(parsedData);

                    break;
                }

                case 1:
                {
                    var parsedData = new RegisterDataSlice(new RegisterId(device.Id, register), DateTime.Now, bytes[0]);
                    collectedData.Add(parsedData);

                    break;
                }

                default:
                    return(collectedData);
                }
            }

            return(collectedData);
        }
Пример #3
0
        public void Save(RegisterDataSlice dataSlice)
        {
            lock (this.storageSync)
            {
                if (this.storedData.Count > 10000)
                {
                    this.storedData.Clear();
                }

                if (this.storedData.TryGetValue(dataSlice.Id, out var value))
                {
                    value.Add(dataSlice);
                }
                else
                {
                    this.storedData.Add(dataSlice.Id, new List <RegisterDataSlice>()
                    {
                        dataSlice
                    });
                }

                this.Saved?.Invoke(this, dataSlice);
            }
        }
Пример #4
0
 public bool First(Func <RegisterDataSlice, bool> filter, out RegisterDataSlice dataSlice)
 {
     throw new NotImplementedException();
 }