public void FailsFromInvalidString(string s)
            {
                var result = TmAddr.TryParse(s, out var tmAddr);

                result.Should().BeFalse();
                tmAddr.Should().BeNull();
            }
            public void ParsesCorrectlyFromValidString(string s, TmType type)
            {
                var result = TmAddr.TryParse(s, out var tmAddr);

                result.Should().BeTrue();
                tmAddr.Should().Be(new TmAddr(type, 16, 33, 257));
            }
Beispiel #3
0
        public async Task <IActionResult> ShowTi(string id)
        {
            if (!TmAddr.TryParse(id, out var tmAddr, TmType.Analog))
            {
                return(NotFound());
            }
            var tmAnalog = new TmAnalog(tmAddr);
            await Task.WhenAll(_api.UpdateTagPropertiesAndClassData(tmAnalog),
                               _api.UpdateAnalog(tmAnalog));

            return(Ok(_mapper.Map <TmAnalogDto>(tmAnalog)));
        }
        public override void Configure(JObject options)
        {
            if (options == null)
            {
                throw new Exception("Не заданы настройки");
            }
            _options = options.ToObject <Options>();
            new OptionsValidator().ValidateAndThrow(_options);

            if (_options?.WorkInterval != null)
            {
                SetWorkInterval(_options.WorkInterval.Value);
            }

            if (!TmAddr.TryParse(_options.SetStatus, out _tmStatusToSet, TmType.Status))
            {
                throw new Exception("Требуется указать корректный адрес сигнала для установки значения");
            }
        }
        private void SetAnalogs(List <string> analogs)
        {
            if (analogs == null ||
                analogs.Count == 0)
            {
                return;
            }

            var addrGroupRegex = new Regex(@"^(\d+):(\d+):(\d+)..(\d+)$");

            foreach (var analog in analogs)
            {
                if (TmAddr.TryParse(analog, out var tmAddr, TmType.Analog))
                {
                    Analogs.Add(tmAddr.ToComplexInteger());
                    continue;
                }
                var groupMatch = addrGroupRegex.Match(analog);
                if (groupMatch.Success)
                {
                    var ch         = int.Parse(groupMatch.Groups[1].Value);
                    var rtu        = int.Parse(groupMatch.Groups[2].Value);
                    var firstPoint = int.Parse(groupMatch.Groups[3].Value);
                    var lastPoint  = int.Parse(groupMatch.Groups[4].Value);
                    for (var point = firstPoint; point <= lastPoint; point++)
                    {
                        try
                        {
                            Analogs.Add(new TmAddr(TmType.Analog, ch, rtu, point).ToComplexInteger());
                        }
                        catch (Exception)
                        {
                            throw new Exception($"Некорректная группа сигналов: {analog}");
                        }
                    }
                    continue;
                }
                throw new Exception($"Некорректный адрес измерения: {analog}");
            }

            Analogs.Sort();
        }
        private void SetStatuses(List <string> statuses)
        {
            if (statuses == null ||
                statuses.Count == 0)
            {
                return;
            }

            var addrGroupRegex = new Regex(@"^(\d+):(\d+):(\d+)..(\d+)$");

            foreach (var status in statuses)
            {
                if (TmAddr.TryParse(status, out var tmAddr, TmType.Status))
                {
                    Statuses.Add(tmAddr.ToComplexInteger());
                    continue;
                }
                var groupMatch = addrGroupRegex.Match(status);
                if (groupMatch.Success)
                {
                    var ch         = int.Parse(groupMatch.Groups[1].Value);
                    var rtu        = int.Parse(groupMatch.Groups[2].Value);
                    var firstPoint = int.Parse(groupMatch.Groups[3].Value);
                    var lastPoint  = int.Parse(groupMatch.Groups[4].Value);
                    for (var point = firstPoint; point <= lastPoint; point++)
                    {
                        try
                        {
                            Statuses.Add(new TmAddr(TmType.Status, ch, rtu, point).ToComplexInteger());
                        }
                        catch (Exception)
                        {
                            throw new Exception($"Некорректная группа сигналов: {status}");
                        }
                    }
                    continue;
                }
                throw new Exception($"Некорректный адрес сигнала: {status}");
            }

            Statuses.Sort();
        }