コード例 #1
0
        public async Task <IList <OpisenseOpcConfiguration> > Read(Func <string, Task> onError = null)
        {
            try
            {
                var result  = new List <OpisenseOpcConfiguration>();
                var records = await ReadCsv();

                foreach (var recordsByOpcServer in records.GroupBy(r => r.OpcServer))
                {
                    var config = new OpisenseOpcConfiguration(recordsByOpcServer.Key.Trim());
                    foreach (var recordsByGroupName in recordsByOpcServer.GroupBy(r => r.GroupName))
                    {
                        var readCycle = TimeSpan.FromMinutes(Math.Max(recordsByGroupName.Min(r => r.ReadCycleMinutes), FastestReadCycle));
                        var group     = new OpisenseOpcItemGroup(recordsByGroupName.Key.Trim(), readCycle);
                        var items     = recordsByGroupName.Where(r => !string.IsNullOrWhiteSpace(r.TagName)).ToList();
                        if (items.Any())
                        {
                            config.OpisenseOpcItemGroups.Add(group);
                            group.OpisenseOpcItems.AddRange(items.Select(i => new OpisenseOpcItem {
                                OpcItemName = i.TagName.Trim(), VariableId = i.VariableId
                            }));
                        }
                    }
                    result.Add(config);
                }
                return(result);
            }
            catch (Exception ex)
            {
                onError?.Invoke(ex.Message);
                return(new List <OpisenseOpcConfiguration>());
            }
        }
コード例 #2
0
        public async Task <bool> ValidateConfig(OpisenseOpcConfiguration config, Func <string, Task> onError)
        {
            if (config is  null)
            {
                await ThrowOrReport(new Exception("The configuration is null"), onError);

                return(false);
            }

            if (string.IsNullOrEmpty(config.OpcServerUrl))
            {
                await ThrowOrReport(new Exception("The server is null"), onError);

                return(false);
            }

            if (config.OpisenseOpcItemGroups == null || !config.OpisenseOpcItemGroups.Any())
            {
                await ThrowOrReport(new Exception("There is no group to read"), onError);

                return(false);
            }

            if (config.OpisenseOpcItemGroups.Any(g => string.IsNullOrWhiteSpace(g.GroupName)))
            {
                await ThrowOrReport(new Exception("At least one group name is empty"), onError);

                return(false);
            }

            foreach (var invalidPollingCycle in config.OpisenseOpcItemGroups.Where(g => g.PollingCycle <= TimeSpan.Zero))
            {
                await ThrowOrReport(new Exception($"The polling cycle {invalidPollingCycle.PollingCycle:g} of group '{invalidPollingCycle.GroupName}' is invalid (<= 0)"), onError);

                return(false);
            }

            foreach (var configOpisenseOpcItemGroup in config.OpisenseOpcItemGroups)
            {
                if (configOpisenseOpcItemGroup.OpisenseOpcItems.Any(i => string.IsNullOrWhiteSpace(i.OpcItemName)))
                {
                    await ThrowOrReport(new Exception($"At least one item name is empty in group '{configOpisenseOpcItemGroup.GroupName}'"), onError);

                    return(false);
                }
            }

            return(true);
        }