/// <summary> /// Gets existing or create a new device template. /// </summary> private void PrepareTemplate(string fileName) { deviceTemplate = null; if (string.IsNullOrEmpty(fileName)) { WriteToLog(string.Format(Localization.UseRussian ? "{0} Ошибка: Не задан шаблон устройства для {1}" : "{0} Error: Template is undefined for the {1}", CommUtils.GetNowDT(), Caption)); } else { TemplateDict templateDict = GetTemplateDictionary(); if (templateDict.TryGetValue(fileName, out DeviceTemplate existingTemplate)) { if (existingTemplate != null) { deviceTemplate = GetTemplateFactory().CreateDeviceTemplate(); deviceTemplate.CopyFrom(existingTemplate); } } else { DeviceTemplate newTemplate = GetTemplateFactory().CreateDeviceTemplate(); WriteToLog(string.Format(Localization.UseRussian ? "{0} Загрузка шаблона устройства из файла {1}" : "{0} Load device template from file {1}", CommUtils.GetNowDT(), fileName)); string filePath = Path.IsPathRooted(fileName) ? fileName : Path.Combine(AppDirs.ConfigDir, fileName); if (newTemplate.Load(filePath, out string errMsg)) { deviceTemplate = newTemplate; } else { WriteToLog(errMsg); } templateDict.Add(fileName, deviceTemplate); } } }
/// <summary> /// Gets existing or create a new device template. /// </summary> private void PrepareTemplate(string fileName) { if (fileName == "") { WriteToLog(string.Format(Localization.UseRussian ? "{0} Ошибка: Не задан шаблон устройства для {1}" : "{0} Error: Template is undefined for the {1}", CommUtils.GetNowDT(), Caption)); deviceTemplate = null; } else { deviceTemplate = GetTemplateFactory().CreateDeviceTemplate(); Dictionary <string, DeviceTemplate> templates = GetTemplateDictionary(); if (templates.ContainsKey(fileName)) { // копирование свойств шаблона, загруженного ранее deviceTemplate.CopyFrom(templates[fileName]); } else { WriteToLog(string.Format(Localization.UseRussian ? "{0} Загрузка шаблона устройства из файла {1}" : "{0} Load device template from file {1}", CommUtils.GetNowDT(), fileName)); string filePath = Path.IsPathRooted(fileName) ? fileName : Path.Combine(AppDirs.ConfigDir, fileName); if (!deviceTemplate.Load(filePath, out string errMsg)) { WriteToLog(errMsg); deviceTemplate = null; } templates.Add(fileName, deviceTemplate); } } }
/// <summary> /// Выполнить действия после добавления КП на линию связи /// </summary> public override void OnAddedToCommLine() { // загрузка шаблона устройства deviceTemplate = null; elemGroups = null; elemGroupCnt = 0; floatSignals = new HashSet <int>(); string fileName = ReqParams.CmdLine.Trim(); if (fileName == "") { WriteToLog(string.Format(Localization.UseRussian ? "{0} Ошибка: Не задан шаблон устройства для {1}" : "{0} Error: Template is undefined for the {1}", CommUtils.GetNowDT(), Caption)); } else { Dictionary <string, DeviceTemplate> templates = GetTemplates(); if (templates.ContainsKey(fileName)) { // создание шаблона устройства на основе шаблона, загруженного ранее DeviceTemplate template = templates[fileName]; if (template != null) { deviceTemplate = new DeviceTemplate(); deviceTemplate.CopyFrom(template); } } else { WriteToLog(string.Format(Localization.UseRussian ? "{0} Загрузка шаблона устройства из файла {1}" : "{0} Load device template from file {1}", CommUtils.GetNowDT(), fileName)); DeviceTemplate template = new DeviceTemplate(); string errMsg; if (template.Load(AppDirs.ConfigDir + fileName, out errMsg)) { deviceTemplate = template; templates.Add(fileName, template); } else { WriteToLog(errMsg); templates.Add(fileName, null); } } } if (deviceTemplate != null) { elemGroups = deviceTemplate.GetActiveElemGroups(); elemGroupCnt = elemGroups.Count; } // инициализация тегов КП на основе модели устройства if (deviceTemplate.ElemGroups.Count > 0) { List <TagGroup> tagGroups = new List <TagGroup>(); int tagInd = 0; foreach (ElemGroup elemGroup in deviceTemplate.ElemGroups) { TagGroup tagGroup = new TagGroup(elemGroup.Name); tagGroups.Add(tagGroup); elemGroup.StartKPTagInd = tagInd; foreach (Elem elem in elemGroup.Elems) { int signal = ++tagInd; tagGroup.KPTags.Add(new KPTag(signal, elem.Name)); if (elem.ElemType == ElemTypes.Float) { floatSignals.Add(signal); } } } InitKPTags(tagGroups); CanSendCmd = deviceTemplate.Cmds.Count > 0; } }