public XmlNode AddValueType(PathComponent path, MultilingualText comment, string start_value) { int[] indices; XmlElement value_node = AddPathValues(type_section, path, null, out indices); return(AddPathAttributes(value_node, path, comment, start_value, indices)); }
public XmlNode AddPath(PathComponent path, MultilingualText comment, string start_value) { int[] indices; AddPathEnable(static_section, path.PrependPath(enable_prefix), out indices); AddPathEnable(static_section, path.PrependPath(enable_selected_prefix), out indices); AddPathValues(static_section, path.PrependPath(preset_selected_prefix), null, out indices); PathComponent preset_path = path.PrependPath(preset_prefix); XmlElement value_node = AddPathValues(static_section, preset_path, null, out indices); return(AddPathAttributes(value_node, preset_path, comment, start_value, indices)); }
MultilingualText readComment(XmlElement comment_elem) { MultilingualText comment = new MultilingualText(); XmlNodeList text_elems = comment_elem.SelectNodes("if:MultiLanguageText", XMLUtil.nameSpaces); foreach (XmlNode t in text_elems) { XmlElement mlt = t as XmlElement; string lang = mlt.GetAttribute("Lang"); string text = mlt.InnerText; comment.AddText(lang, text); } return(comment); }
protected override void DoWork() { lock (portal) { try { IntSet idset = new IntSet(); XmlDocument doc = new XmlDocument(); doc.LoadXml(Resources.InitialHMITextList); XMLUtil.CollectID(doc.DocumentElement, idset); XmlElement name_attr = doc.SelectSingleNode("/Document/Hmi.TextGraphicList.TextList/AttributeList/Name") as XmlElement; name_attr.InnerText = list_name; XmlElement entry_list = doc.SelectSingleNode("/Document/Hmi.TextGraphicList.TextList/ObjectList") as XmlElement; { MultilingualText text = new MultilingualText(); foreach (string culture in cultures) { text.AddText(culture, "?"); } XmlElement entry = ListEntry(doc, 0, true, text); } List <int> keys = new List <int>(texts.Keys); keys.Sort(); foreach (int k in keys) { XmlElement entry = ListEntry(doc, k, false, texts[k]); entry_list.AppendChild(entry); XMLUtil.ReplaceID(entry, idset); } TIAutils.ImportTextListXML(doc, text_lists); } catch (Exception ex) { LogMessage(MessageLog.Severity.Error, "Failed create HMI text list:\n" + ex.Message); return; } } }
protected void readSubelement(XmlElement subelement, PathComponent parent) { string indices_str = subelement.GetAttribute("Path"); string[] index_strings = indices_str.Split(path_sep); int[] indices = new int[index_strings.Length]; for (int i = 0; i < index_strings.Length; i++) { indices[i] = int.Parse(index_strings[i]); } PathComponent subs; int subs_count = SubstituteIndices(parent, out subs, (indices as IList <int>).GetEnumerator()); if (subs_count != indices.Length) { if (!(subs is IndexComponent) || (subs_count != (indices.Length + ((IndexComponent)subs).Indices.Length))) { throw new Exception("Length of path in subelement doesn't match number of indices in path"); } // It's the path of the array itself not an array item. subs = subs.Parent; } XmlElement comment_elem = subelement.SelectSingleNode("if:Comment", XMLUtil.nameSpaces) as XmlElement; MultilingualText comment = null; if (comment_elem != null) { comment = readComment(comment_elem); } if (((options & Options.AllowNoComment) != 0) || comment != null) { handle_tag(new HandleTagEventArgs() { Path = subs, Comment = comment }); } }
private void WriteButton_Click(object sender, EventArgs e) { if (task_dialog == null) { task_dialog = new TaskDialog(); } task_dialog.Clear(); Project proj = tiaPortal.Projects[0]; LanguageAssociation langs = proj.LanguageSettings.ActiveLanguages; string[] cultures = langs.Select(l => l.Culture.Name).ToArray(); string default_culture = proj.LanguageSettings.ReferenceLanguage.Culture.Name; foreach (PresetTagList.Row row in presetList) { row.Tag.labels.AddMissingCultures(cultures, default_culture); if (row.Tag.state_labels != null) { foreach (MultilingualText text in row.Tag.state_labels.Values) { text.AddMissingCultures(cultures, default_culture); } } } // Sort the groups into separate lists of tags Dictionary <string, List <PresetTag> > tag_groups = tagGroups(presetList); ConstantLookup constants = new ConstantLookup(); constants.Populate(tiaPortal, plcSoftware); // Create databases for all groups foreach (string group_name in tag_groups.Keys) { string db_name = PRESET_DB_PREFIX + group_name; string hmi_db_name = PRESET_HMI_DB_PREFIX + group_name; var tags = tag_groups[group_name]; string value_type_name = "PresetValueType_" + group_name; string enable_type_name = "PresetEnableType_" + group_name; task_dialog.AddTask(new CreatePresetTypesTask(tiaPortal, tags, typeGroup, value_type_name, enable_type_name)); string recall_block_name = "PresetRecall_" + group_name; task_dialog.AddTask(new CreatePresetRecallBlockTask(tiaPortal, tags, resultGroup, recall_block_name, value_type_name, enable_type_name)); string store_block_name = "PresetStore_" + group_name; string store_enabled_block_name = "PresetStoreEnabled_" + group_name; task_dialog.AddTask(new CreatePresetStoreBlockTask(tiaPortal, tags, resultGroup, store_block_name, store_enabled_block_name, value_type_name, enable_type_name)); } task_dialog.AddTask(new CreatePlcCompileTask(tiaPortal, plcSoftware)); foreach (HmiTarget hmi in hmiTargets) { // Create HMI tags TagFolder preset_tag_folder = hmi.TagFolder.Folders.Find("Preset"); if (preset_tag_folder != null) { task_dialog.AddTask(new CreateHmiPresetConstantTagsTask(tiaPortal, preset_tag_folder, constants)); } } // Create HMI for all groups foreach (string group_name in tag_groups.Keys) { var tags = tag_groups[group_name]; string db_name = PRESET_DB_PREFIX + group_name; string hmi_db_name = PRESET_HMI_DB_PREFIX + group_name; foreach (HmiTarget hmi in hmiTargets) { string popup_name = "PresetPopup_" + group_name; ScreenPopupFolder popup_folder = hmi.ScreenPopupFolder; ScreenPopup popup = popup_folder.ScreenPopups.Find(popup_name); if (popup == null) { task_dialog.AddTask(new MessageTask("Skipping preset group " + group_name + " for HMI " + hmi.Name, MessageLog.Severity.Info, "Assuming preset group " + group_name + " is not used by this HMI since the pop-up screen " + popup_name + " was not found")); continue; } String list_prefix = "PresetTextList_" + group_name + "_"; TextListComposition hmi_text_lists = hmi.TextLists; // Text list that are candidates for deletion List <String> delete_lists = new List <string>(); // Find all preset text lists foreach (var list in hmi_text_lists) { if (list.Name.StartsWith(list_prefix)) { delete_lists.Add(list.Name); } } // Create text lists int count = 1; foreach (PresetTag tag in tags) { if (tag.state_labels != null) { string list_name = list_prefix + count; delete_lists.Remove(list_name); // Don't delete this list task_dialog.AddTask(new CreateHmiTextListTask(tiaPortal, list_name, hmi_text_lists, tag.state_labels)); } count++; } // Delete old textlists task_dialog.AddTask(new DeleteHmiTextListTask(tiaPortal, list_prefix, hmi_text_lists, delete_lists)); // Get number of presets configured string count_entry_name = "PresetCount_" + group_name; ConstantLookup.Entry count_entry = constants.Lookup(count_entry_name); if (count_entry == null) { throw new Exception("Global constant " + count_entry_name + " not found"); } int nPresets = int.Parse(count_entry.value); Dictionary <int, MultilingualText> preset_names = new Dictionary <int, MultilingualText>(); // Create preset name list { for (int p = 1; p <= nPresets; p++) { string name_string = "<hmitag length='20' type='Text' name='PresetName_" + group_name + "_" + p + "'>Preset " + p + "</hmitag>"; MultilingualText text = new MultilingualText(); foreach (string c in cultures) { text.AddText(c, name_string); } preset_names.Add(p, text); } string list_name = "PresetNameList_" + group_name; task_dialog.AddTask(new CreateHmiTextListTask(tiaPortal, list_name, hmi_text_lists, preset_names)); } // Create HMI tags TagFolder preset_tag_folder = hmi.TagFolder.Folders.Find("Preset"); if (preset_tag_folder != null) { string table_name = "Preset_" + group_name; task_dialog.AddTask(new CreatePresetHmiTagsTask(tiaPortal, tags, preset_tag_folder, table_name, group_name, db_name, hmi_db_name, nPresets)); } else { MessageBox.Show("No HMI tag group name 'Preset' was found for HMI " + hmi.Name + ". No tag tables will be updated."); } // Load template screen ScreenTemplate obj_templ = hmi.ScreenTemplateFolder.ScreenTemplates.Find("ObjectTemplate"); if (obj_templ != null) { XmlDocument templates = TIAutils.ExportScreenTemplateXML(obj_templ); // Create popups task_dialog.AddTask(new CreatePresetScreenPopupTask(tiaPortal, tags, popup_folder, templates, popup_name, group_name)); } else { MessageBox.Show("No template screen named ObjectTemplate found for HMI " + hmi.Name + ". Some screens will not be updated."); } } } task_dialog.Show(); }
protected MemberComponent readMember(XmlElement member_elem, PathComponent parent) { string name = member_elem.GetAttribute("Name"); string type_str = member_elem.GetAttribute("Datatype"); string left; DataType type = DataTypeParser.Parse(type_str, out left); MemberComponent member = new MemberComponent(name, type, parent); PathComponent child_path = member; if (type is ARRAY) { ARRAY array = (ARRAY)type; child_path = new IndexComponent(new int[array.Limits.Count], array.MemberType, member); if ((options & Options.NoSubelement) != 0) { if (member != child_path) { handle_tag(new HandleTagEventArgs() { Path = SubstituteIndicesLow(child_path), Comment = null }); } } } XmlElement comment_elem = member_elem.SelectSingleNode("if:Comment", XMLUtil.nameSpaces) as XmlElement; MultilingualText comment = null; if (comment_elem != null) { comment = readComment(comment_elem); } if (((options & Options.AllowNoComment) != 0) || comment != null) { handle_tag(new HandleTagEventArgs() { Path = SubstituteIndicesLow(member), Comment = comment }); } XmlNodeList member_elems = member_elem.SelectNodes("if:Member", XMLUtil.nameSpaces); foreach (XmlNode m in member_elems) { MemberComponent submember = readMember((XmlElement)m, child_path); if (child_path.Type is STRUCT) { STRUCT struct_type = (STRUCT)child_path.Type; struct_type.Members.Add(new StructMember() { Name = submember.Name, MemberType = submember.Type }); } } if ((options & Options.NoSubelement) == 0) { XmlNodeList sub_elems = member_elem.SelectNodes("if:Subelement", XMLUtil.nameSpaces); foreach (XmlNode s in sub_elems) { readSubelement(s as XmlElement, child_path); } } return(member); }
public void Handler(string type, string data) { if (type == "preset") { int p = data.IndexOf(':'); if (p < 0) { return; } string group = data.Substring(0, p).Trim(); if (group == "") { group = "main"; } string label = data.Substring(p + 1).Trim(); String[] groups = group.Split(','); if (preset.presetGroups != null && !preset.presetGroups.Equals(groups)) { group = "<inconsistent>"; } preset.presetGroups = groups; if (preset.labels == null) { preset.labels = new MultilingualText(culture, label); } else { preset.labels.AddText(culture, label); } } else if (type == "preset_default") { preset.defaultValue = data.Trim(); } else if (type == "preset_nostore") { preset.noStore = true; } else if (type == "preset_unit") { preset.unit = data.Trim(); } else if (type == "preset_precision") { int value; if (int.TryParse(data, out value) && value >= 0) { preset.precision = value; } } else if (type == "preset_min") { float value; if (float.TryParse(data, out value)) { preset.min = value; } } else if (type == "preset_max") { float value; if (float.TryParse(data, out value)) { preset.max = value; } } else if (type == "preset_order") { int value; if (int.TryParse(data, out value)) { preset.order = value; } } else if (type == "preset_state") { int p = data.IndexOf(':'); if (p < 0) { return; } string value_str = data.Substring(0, p).Trim(); if (int.TryParse(value_str, out int value)) { string label_str = data.Substring(p + 1).Trim(); if (preset.state_labels == null) { preset.state_labels = new Dictionary <int, MultilingualText>(); } MultilingualText label; if (preset.state_labels.TryGetValue(value, out label)) { label.AddText(culture, label_str); } else { label = new MultilingualText(culture, label_str); preset.state_labels.Add(value, label); } } } }
protected XmlElement ListEntry(XmlDocument doc, int value, bool def, MultilingualText text) { XmlElement entry = doc.CreateElement("Hmi.TextGraphicList.TextListEntry"); entry.SetAttribute("ID", "0"); entry.SetAttribute("CompositionName", "Entries"); XmlElement attr_list = doc.CreateElement("AttributeList"); entry.AppendChild(attr_list); XmlElement default_entry = doc.CreateElement("DefaultEntry"); default_entry.InnerText = def ? "true" : "false"; attr_list.AppendChild(default_entry); XmlElement entry_type = doc.CreateElement("EntryType"); entry_type.InnerText = "SingleValue"; attr_list.AppendChild(entry_type); XmlElement from = doc.CreateElement("From"); from.InnerText = value.ToString(); attr_list.AppendChild(from); XmlElement to = doc.CreateElement("To"); to.InnerText = value.ToString(); attr_list.AppendChild(to); XmlElement obj_list = doc.CreateElement("ObjectList"); entry.AppendChild(obj_list); XmlElement multi_text = doc.CreateElement("MultilingualText"); multi_text.SetAttribute("ID", "0"); multi_text.SetAttribute("CompositionName", "Text"); obj_list.AppendChild(multi_text); XmlElement obj_list2 = doc.CreateElement("ObjectList"); multi_text.AppendChild(obj_list2); foreach (string culture in text.Cultures) { XmlElement text_item = doc.CreateElement("MultilingualTextItem"); text_item.SetAttribute("ID", "0"); text_item.SetAttribute("CompositionName", "Items"); obj_list2.AppendChild(text_item); XmlElement attr_list2 = doc.CreateElement("AttributeList"); text_item.AppendChild(attr_list2); XmlElement culture_elem = doc.CreateElement("Culture"); culture_elem.InnerText = culture; attr_list2.AppendChild(culture_elem); List <ParseText.FieldInfo> fields = null; XmlElement parsed_text = ParseText.ParseTextToTextElement(doc, text[culture], ref fields); attr_list2.AppendChild(parsed_text); } return(entry); }