├── .gitignore ├── CodeGenerator.png ├── CodeGeneratorOpenness.sln ├── CodeGeneratorOpenness ├── App.config ├── CodeGeneratorOpenness.csproj ├── CodeGeneratorOpenness.csproj.user ├── Inputbox.cs ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── Ressources │ ├── DB.png │ ├── DataType.png │ ├── Document_16x.png │ ├── FB.png │ ├── FC.png │ ├── FolderClosed_16x.png │ ├── OB.png │ ├── Thumbs.db │ ├── safeDB.png │ ├── safeFB.png │ └── safeOB.png ├── StepDataOne.cs ├── Thumbs.db ├── UNC.cs ├── XML │ ├── Branch.xml │ ├── Connection.xml │ ├── Step.xml │ ├── StepPlus.xml │ ├── Transition.xml │ ├── TransitionPlus.xml │ └── V14SP1.xml ├── bin │ └── Debug │ │ └── TestFC1.xml ├── cFirewall.cs ├── cFunctionGroups.cs ├── cImportBlock.cs ├── cMulilingualText.cs ├── cTranlate.cs ├── cXmlFile.cs ├── cXmlFunctions.cs ├── codeGenerator.ico ├── frmMainForm.Designer.cs ├── frmMainForm.cs ├── frmMainForm.resx ├── frmReadStructure.Designer.cs ├── frmReadStructure.cs └── frmReadStructure.resx ├── LICENSE ├── OPNS ├── export.opns └── import.opns ├── README.md ├── Sample ├── GraphBranch.xml ├── GraphBranch2.xml ├── GraphBranchAbortOption.xml ├── GraphEnd.xml ├── GraphJump.xml ├── LAD_TemplateValve_V0.1.xml ├── LAD_TemplateValve_V0.2.xml ├── LAD_TemplateValve_V0.3.xml ├── LAD_TemplateValve_V0.x.xml ├── LAD_Valve_V0.1.xml ├── LAD_Valves_V0.1.xml ├── Sequence.png └── plcBlock_LAD_Block_Logic.xml └── Thumbs.db /.gitignore: -------------------------------------------------------------------------------- 1 | CodeGeneratorOpenness/obj/* 2 | .vs/* 3 | CodeGeneratorOpenness/bin/Debug/CodeGeneratorOpenness.exe 4 | CodeGeneratorOpenness/bin/Debug/CodeGeneratorOpenness.exe.config 5 | CodeGeneratorOpenness/bin/Debug/CodeGeneratorOpenness.pdb 6 | CodeGeneratorOpenness/bin/Debug/Temp/temp.xml 7 | CodeGeneratorOpenness/Ressources/Thumbs.db 8 | CodeGeneratorOpenness/Thumbs.db 9 | CodeGeneratorOpenness/Ressources/Thumbs.db 10 | *.xlsx 11 | CodeGeneratorOpenness/bin/Debug/Export/*.xml 12 | CodeGeneratorOpenness/bin/Debug/Import/*.xml 13 | Sample/Thumbs.db 14 | -------------------------------------------------------------------------------- /CodeGenerator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mking2203/CodeGeneratorOpenness/7ceff738e01687ba6aa99c569daecc05879916be/CodeGenerator.png -------------------------------------------------------------------------------- /CodeGeneratorOpenness.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.29806.167 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeGeneratorOpenness", "CodeGeneratorOpenness\CodeGeneratorOpenness.csproj", "{5D09319B-7072-4956-93D0-56AF15E05639}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {5D09319B-7072-4956-93D0-56AF15E05639}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {5D09319B-7072-4956-93D0-56AF15E05639}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {5D09319B-7072-4956-93D0-56AF15E05639}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {5D09319B-7072-4956-93D0-56AF15E05639}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {9D7B163B-3859-4514-A0EF-B3E60EFF99EC} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | EN 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/CodeGeneratorOpenness.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {5D09319B-7072-4956-93D0-56AF15E05639} 8 | WinExe 9 | CodeGeneratorOpenness 10 | CodeGeneratorOpenness 11 | v4.8 12 | 512 13 | true 14 | true 15 | 16 | 17 | 18 | x64 19 | true 20 | full 21 | false 22 | bin\Debug\ 23 | DEBUG 24 | prompt 25 | 4 26 | 27 | 28 | AnyCPU 29 | pdbonly 30 | true 31 | bin\Release\ 32 | TRACE 33 | prompt 34 | 4 35 | 36 | 37 | codeGenerator.ico 38 | 39 | 40 | 41 | False 42 | ..\..\..\..\..\Program Files\Siemens\Automation\Portal V18\PublicAPI\V18\Siemens.Engineering.dll 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | Form 66 | 67 | 68 | frmMainForm.cs 69 | 70 | 71 | 72 | 73 | 74 | Form 75 | 76 | 77 | frmReadStructure.cs 78 | 79 | 80 | 81 | 82 | frmMainForm.cs 83 | 84 | 85 | PublicResXFileCodeGenerator 86 | Resources.Designer.cs 87 | Designer 88 | 89 | 90 | True 91 | Resources.resx 92 | True 93 | 94 | 95 | frmReadStructure.cs 96 | 97 | 98 | SettingsSingleFileGenerator 99 | Settings.Designer.cs 100 | 101 | 102 | True 103 | Settings.settings 104 | True 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/CodeGeneratorOpenness.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | ProjectFiles 5 | 6 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/Inputbox.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Forms; 2 | using System.Drawing; 3 | 4 | namespace CodeGeneratorOpenness 5 | { 6 | public static class Input 7 | { 8 | public static DialogResult InputBox(string title, string promptText, ref string value) 9 | { 10 | Form form = new Form(); 11 | Label label = new Label(); 12 | TextBox textBox = new TextBox(); 13 | Button buttonOk = new Button(); 14 | Button buttonCancel = new Button(); 15 | 16 | form.Text = title; 17 | label.Text = promptText; 18 | textBox.Text = value; 19 | 20 | buttonOk.Text = "OK"; 21 | buttonCancel.Text = "Cancel"; 22 | buttonOk.DialogResult = DialogResult.OK; 23 | buttonCancel.DialogResult = DialogResult.Cancel; 24 | 25 | label.SetBounds(9, 20, 372, 13); 26 | textBox.SetBounds(12, 36, 372, 20); 27 | buttonOk.SetBounds(228, 72, 75, 23); 28 | buttonCancel.SetBounds(309, 72, 75, 23); 29 | 30 | label.AutoSize = true; 31 | textBox.Anchor = textBox.Anchor | AnchorStyles.Right; 32 | buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; 33 | buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; 34 | 35 | form.ClientSize = new Size(396, 107); 36 | form.Controls.AddRange(new Control[] { label, textBox, buttonOk, buttonCancel }); 37 | form.ClientSize = new Size(System.Math.Max(300, label.Right + 10), form.ClientSize.Height); 38 | form.FormBorderStyle = FormBorderStyle.FixedDialog; 39 | form.StartPosition = FormStartPosition.CenterScreen; 40 | form.MinimizeBox = false; 41 | form.MaximizeBox = false; 42 | form.AcceptButton = buttonOk; 43 | form.CancelButton = buttonCancel; 44 | 45 | DialogResult dialogResult = form.ShowDialog(); 46 | value = textBox.Text; 47 | return dialogResult; 48 | } 49 | 50 | public static DialogResult InputBoxSecret(string title, string promptText, ref string value) 51 | { 52 | Form form = new Form(); 53 | Label label = new Label(); 54 | TextBox textBox = new TextBox(); 55 | Button buttonOk = new Button(); 56 | Button buttonCancel = new Button(); 57 | 58 | form.Text = title; 59 | label.Text = promptText; 60 | textBox.Text = value; 61 | 62 | buttonOk.Text = "OK"; 63 | buttonCancel.Text = "Cancel"; 64 | buttonOk.DialogResult = DialogResult.OK; 65 | buttonCancel.DialogResult = DialogResult.Cancel; 66 | 67 | label.SetBounds(9, 20, 372, 13); 68 | textBox.SetBounds(12, 36, 372, 20); 69 | buttonOk.SetBounds(228, 72, 75, 23); 70 | buttonCancel.SetBounds(309, 72, 75, 23); 71 | 72 | label.AutoSize = true; 73 | textBox.Anchor = textBox.Anchor | AnchorStyles.Right; 74 | buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; 75 | buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; 76 | 77 | textBox.PasswordChar = 'X'; 78 | 79 | form.ClientSize = new Size(396, 107); 80 | form.Controls.AddRange(new Control[] { label, textBox, buttonOk, buttonCancel }); 81 | form.ClientSize = new Size(System.Math.Max(300, label.Right + 10), form.ClientSize.Height); 82 | form.FormBorderStyle = FormBorderStyle.FixedDialog; 83 | form.StartPosition = FormStartPosition.CenterScreen; 84 | form.MinimizeBox = false; 85 | form.MaximizeBox = false; 86 | form.AcceptButton = buttonOk; 87 | form.CancelButton = buttonCancel; 88 | 89 | DialogResult dialogResult = form.ShowDialog(); 90 | value = textBox.Text; 91 | return dialogResult; 92 | } 93 | } 94 | } -------------------------------------------------------------------------------- /CodeGeneratorOpenness/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Reflection; 6 | using System.Threading.Tasks; 7 | using System.Windows.Forms; 8 | 9 | using Microsoft.Win32; 10 | 11 | namespace CodeGeneratorOpenness 12 | { 13 | static class Program 14 | { 15 | /// 16 | /// Der Haupteinstiegspunkt für die Anwendung. 17 | /// 18 | [STAThread] 19 | static void Main() 20 | { 21 | 22 | // since we work im VMware images - we have only one version / image installed 23 | // find the correct version in the registry 24 | 25 | string BASE_PATH = @"SOFTWARE\Siemens\Automation\_InstalledSW\Global\Bundles\"; 26 | RegistryKey key = GetRegistryKey(BASE_PATH); 27 | 28 | if (key != null) 29 | { 30 | var names = key.GetSubKeyNames().OrderBy(x => x).ToList(); 31 | foreach (string n in names) 32 | { 33 | if (n.Contains("TIA Portal V18")) 34 | { 35 | Version = "18.0"; 36 | Api = @"C:\Program Files\Siemens\Automation\Portal V18\PublicAPI\V18"; 37 | } 38 | if (n.Contains("TIA Portal V17")) 39 | { 40 | Version = "17.0"; 41 | Api = @"C:\Program Files\Siemens\Automation\Portal V17\PublicAPI\V17"; 42 | } 43 | if (n.Contains("TIA Portal V16")) 44 | { 45 | Version = "16.0"; 46 | Api = @"C:\Program Files\Siemens\Automation\Portal V16\PublicAPI\V16"; 47 | } 48 | if (n.Contains("TIA Portal V15.1")) 49 | { 50 | Version = "15.1"; 51 | Api = @"C:\Program Files\Siemens\Automation\Portal V15_1\PublicAPI\V15.1"; 52 | } 53 | if (n.Contains("TIA Portal V15") && !n.Contains("TIA Portal V15.1")) 54 | { 55 | Version = "15.0"; 56 | Api = @"C:\Program Files\Siemens\Automation\Portal V15\PublicAPI\V15"; 57 | } 58 | if (n.Contains("TIA Portal V14")) 59 | { 60 | Version = "14.0"; 61 | Api = @"C:\Program Files\Siemens\Automation\Portal V14\PublicAPI\V14"; 62 | } 63 | } 64 | 65 | key.Dispose(); 66 | } 67 | 68 | AppDomain.CurrentDomain.AssemblyResolve += MyResolver; 69 | 70 | Application.EnableVisualStyles(); 71 | Application.SetCompatibleTextRenderingDefault(false); 72 | Application.Run(new frmMainForm()); 73 | } 74 | 75 | public static string Version = string.Empty; 76 | public static string Api = string.Empty; 77 | 78 | private static Assembly MyResolver(object sender, ResolveEventArgs args) 79 | { 80 | int index = args.Name.IndexOf(','); 81 | if (index == -1) 82 | { 83 | return null; 84 | } 85 | 86 | string name = args.Name.Substring(0, index) + ".dll"; 87 | //System.Diagnostics.Debug.Print("Assembly: " + name); 88 | 89 | // for Siemens we load the correct dll (version) 90 | if (name == "Siemens.Engineering.dll") 91 | { 92 | string path = Path.Combine(Api, name); 93 | 94 | // see what dll we can use (incomplete) 95 | if (File.Exists(path)) 96 | { 97 | string fullPath = Path.GetFullPath(path); 98 | if (File.Exists(fullPath)) 99 | { 100 | return Assembly.LoadFrom(fullPath); 101 | } 102 | } 103 | } 104 | return null; 105 | } 106 | 107 | private static RegistryKey GetRegistryKey(string keyname) 108 | { 109 | RegistryKey baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); 110 | RegistryKey key = baseKey.OpenSubKey(keyname); 111 | if (key == null) 112 | { 113 | baseKey.Dispose(); 114 | baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Default); 115 | key = baseKey.OpenSubKey(keyname); 116 | } 117 | if (key == null) 118 | { 119 | baseKey.Dispose(); 120 | baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32); 121 | key = baseKey.OpenSubKey(keyname); 122 | } 123 | baseKey.Dispose(); 124 | 125 | return key; 126 | } 127 | 128 | 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // Allgemeine Informationen über eine Assembly werden über die folgenden 6 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, 7 | // die einer Assembly zugeordnet sind. 8 | [assembly: AssemblyTitle("CodeGeneratorOpenness")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("CodeGeneratorOpenness")] 13 | [assembly: AssemblyCopyright("Copyright © Mark König 2020")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly 18 | // für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von 19 | // COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. 20 | [assembly: ComVisible(false)] 21 | 22 | // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird 23 | [assembly: Guid("5d09319b-7072-4956-93d0-56af15e05639")] 24 | 25 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: 26 | // 27 | // Hauptversion 28 | // Nebenversion 29 | // Buildnummer 30 | // Revision 31 | // 32 | // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, 33 | // indem Sie "*" wie unten gezeigt eingeben: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // Dieser Code wurde von einem Tool generiert. 4 | // Laufzeitversion:4.0.30319.42000 5 | // 6 | // Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn 7 | // der Code erneut generiert wird. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace CodeGeneratorOpenness.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. 17 | /// 18 | // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert 19 | // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. 20 | // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen 21 | // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | public class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | public static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CodeGeneratorOpenness.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle 51 | /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | public static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // Dieser Code wurde von einem Tool generiert. 4 | // Laufzeitversion:4.0.30319.42000 5 | // 6 | // Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn 7 | // der Code erneut generiert wird. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace CodeGeneratorOpenness.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | 26 | [global::System.Configuration.UserScopedSettingAttribute()] 27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 28 | [global::System.Configuration.DefaultSettingValueAttribute("")] 29 | public string PathImportBlock { 30 | get { 31 | return ((string)(this["PathImportBlock"])); 32 | } 33 | set { 34 | this["PathImportBlock"] = value; 35 | } 36 | } 37 | 38 | [global::System.Configuration.UserScopedSettingAttribute()] 39 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 40 | [global::System.Configuration.DefaultSettingValueAttribute("")] 41 | public string PathImportDataTypes { 42 | get { 43 | return ((string)(this["PathImportDataTypes"])); 44 | } 45 | set { 46 | this["PathImportDataTypes"] = value; 47 | } 48 | } 49 | 50 | [global::System.Configuration.UserScopedSettingAttribute()] 51 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 52 | [global::System.Configuration.DefaultSettingValueAttribute("")] 53 | public string PathLanguageText { 54 | get { 55 | return ((string)(this["PathLanguageText"])); 56 | } 57 | set { 58 | this["PathLanguageText"] = value; 59 | } 60 | } 61 | 62 | [global::System.Configuration.UserScopedSettingAttribute()] 63 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 64 | [global::System.Configuration.DefaultSettingValueAttribute("")] 65 | public string PathOpenProject { 66 | get { 67 | return ((string)(this["PathOpenProject"])); 68 | } 69 | set { 70 | this["PathOpenProject"] = value; 71 | } 72 | } 73 | 74 | [global::System.Configuration.UserScopedSettingAttribute()] 75 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 76 | [global::System.Configuration.DefaultSettingValueAttribute("EN")] 77 | public string Language { 78 | get { 79 | return ((string)(this["Language"])); 80 | } 81 | set { 82 | this["Language"] = value; 83 | } 84 | } 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | EN 19 | 20 | 21 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/Ressources/DB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mking2203/CodeGeneratorOpenness/7ceff738e01687ba6aa99c569daecc05879916be/CodeGeneratorOpenness/Ressources/DB.png -------------------------------------------------------------------------------- /CodeGeneratorOpenness/Ressources/DataType.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mking2203/CodeGeneratorOpenness/7ceff738e01687ba6aa99c569daecc05879916be/CodeGeneratorOpenness/Ressources/DataType.png -------------------------------------------------------------------------------- /CodeGeneratorOpenness/Ressources/Document_16x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mking2203/CodeGeneratorOpenness/7ceff738e01687ba6aa99c569daecc05879916be/CodeGeneratorOpenness/Ressources/Document_16x.png -------------------------------------------------------------------------------- /CodeGeneratorOpenness/Ressources/FB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mking2203/CodeGeneratorOpenness/7ceff738e01687ba6aa99c569daecc05879916be/CodeGeneratorOpenness/Ressources/FB.png -------------------------------------------------------------------------------- /CodeGeneratorOpenness/Ressources/FC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mking2203/CodeGeneratorOpenness/7ceff738e01687ba6aa99c569daecc05879916be/CodeGeneratorOpenness/Ressources/FC.png -------------------------------------------------------------------------------- /CodeGeneratorOpenness/Ressources/FolderClosed_16x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mking2203/CodeGeneratorOpenness/7ceff738e01687ba6aa99c569daecc05879916be/CodeGeneratorOpenness/Ressources/FolderClosed_16x.png -------------------------------------------------------------------------------- /CodeGeneratorOpenness/Ressources/OB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mking2203/CodeGeneratorOpenness/7ceff738e01687ba6aa99c569daecc05879916be/CodeGeneratorOpenness/Ressources/OB.png -------------------------------------------------------------------------------- /CodeGeneratorOpenness/Ressources/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mking2203/CodeGeneratorOpenness/7ceff738e01687ba6aa99c569daecc05879916be/CodeGeneratorOpenness/Ressources/Thumbs.db -------------------------------------------------------------------------------- /CodeGeneratorOpenness/Ressources/safeDB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mking2203/CodeGeneratorOpenness/7ceff738e01687ba6aa99c569daecc05879916be/CodeGeneratorOpenness/Ressources/safeDB.png -------------------------------------------------------------------------------- /CodeGeneratorOpenness/Ressources/safeFB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mking2203/CodeGeneratorOpenness/7ceff738e01687ba6aa99c569daecc05879916be/CodeGeneratorOpenness/Ressources/safeFB.png -------------------------------------------------------------------------------- /CodeGeneratorOpenness/Ressources/safeOB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mking2203/CodeGeneratorOpenness/7ceff738e01687ba6aa99c569daecc05879916be/CodeGeneratorOpenness/Ressources/safeOB.png -------------------------------------------------------------------------------- /CodeGeneratorOpenness/StepDataOne.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace CodeGeneratorOpenness 4 | { 5 | public class StepDataOne 6 | { 7 | // some fixed assignements: 8 | // step 1 is always the first step (initial) 9 | // step 100 is always a "step end" 10 | // we can work only step 1 to 100 11 | // 12 | // later this will come from the config file 13 | 14 | public List Steps = new List(); 15 | 16 | // one step sequence for the first test 17 | public StepDataOne() 18 | { 19 | OneStep one = new OneStep(); 20 | one.Number = 1; 21 | one.Description = "Step 1"; 22 | one.NextStep = 21; 23 | one.AbortStep = 0; 24 | one.OptionStep = 0; 25 | 26 | one.WaitingTime = 0; 27 | one.MonitorTime = 0; 28 | Steps.Add(one); 29 | 30 | one = new OneStep(); 31 | one.Number = 21; 32 | one.Description = "Step 21"; 33 | one.NextStep = 27; 34 | one.AbortStep = 32; 35 | one.OptionStep = 43; 36 | 37 | one.WaitingTime = 0; 38 | one.MonitorTime = 0; 39 | Steps.Add(one); 40 | 41 | one = new OneStep(); 42 | one.Number = 27; 43 | one.Description = "Step 27"; 44 | one.NextStep = 32; 45 | one.AbortStep = 0; 46 | one.OptionStep = 0; 47 | 48 | one.WaitingTime = 0; 49 | one.MonitorTime = 0; 50 | Steps.Add(one); 51 | 52 | one = new OneStep(); 53 | one.Number = 32; 54 | one.Description = "Step 32"; 55 | one.NextStep = 43; 56 | one.AbortStep = 0; 57 | one.OptionStep = 0; 58 | 59 | one.WaitingTime = 0; 60 | one.MonitorTime = 0; 61 | Steps.Add(one); 62 | 63 | one = new OneStep(); 64 | one.Number = 43; 65 | one.Description = "Step 43"; 66 | one.NextStep = 100; // step seq. with end 67 | one.NextStep = 1; // loop step seq. with jump 68 | one.AbortStep = 0; 69 | one.OptionStep = 0; 70 | 71 | one.WaitingTime = 0; 72 | one.MonitorTime = 0; 73 | Steps.Add(one); 74 | } 75 | 76 | 77 | } 78 | 79 | public class OneStep 80 | { 81 | public int Number; 82 | public string Description; 83 | public int NextStep; 84 | public int AbortStep; 85 | public int OptionStep; 86 | 87 | public int WaitingTime; 88 | public int MonitorTime; 89 | 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mking2203/CodeGeneratorOpenness/7ceff738e01687ba6aa99c569daecc05879916be/CodeGeneratorOpenness/Thumbs.db -------------------------------------------------------------------------------- /CodeGeneratorOpenness/UNC.cs: -------------------------------------------------------------------------------- 1 | // Source: https://www.wiredprairie.us/blog/index.php/archives/22 2 | 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using System.Text; 7 | using System.Runtime.InteropServices; 8 | using System.IO; 9 | 10 | namespace CodeGeneratorOpenness 11 | { 12 | public static class Pathing 13 | { 14 | [DllImport("mpr.dll", CharSet = CharSet.Unicode, SetLastError = true)] 15 | public static extern int WNetGetConnection( 16 | [MarshalAs(UnmanagedType.LPTStr)] string localName, 17 | [MarshalAs(UnmanagedType.LPTStr)] StringBuilder remoteName, 18 | ref int length); 19 | /// 20 | /// Given a path, returns the UNC path or the original. (No exceptions 21 | /// are raised by this function directly). For example, "P:\2008-02-29" 22 | /// might return: "\\networkserver\Shares\Photos\2008-02-09" 23 | /// 24 | /// The path to convert to a UNC Path 25 | /// A UNC path. If a network drive letter is specified, the 26 | /// drive letter is converted to a UNC or network path. If the 27 | /// originalPath cannot be converted, it is returned unchanged. 28 | public static string GetUNCPath(string originalPath) 29 | { 30 | StringBuilder sb = new StringBuilder(512); 31 | int size = sb.Capacity; 32 | 33 | // look for the {LETTER}: combination ... 34 | if (originalPath.Length > 2 && originalPath[1] == ':') 35 | { 36 | // don't use char.IsLetter here - as that can be misleading 37 | // the only valid drive letters are a-z && A-Z. 38 | char c = originalPath[0]; 39 | if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) 40 | { 41 | int error = WNetGetConnection(originalPath.Substring(0, 2), 42 | sb, ref size); 43 | if (error == 0) 44 | { 45 | DirectoryInfo dir = new DirectoryInfo(originalPath); 46 | 47 | string path = Path.GetFullPath(originalPath) 48 | .Substring(Path.GetPathRoot(originalPath).Length); 49 | return Path.Combine(sb.ToString().TrimEnd(), path); 50 | } 51 | } 52 | } 53 | 54 | return originalPath; 55 | } 56 | } 57 | } -------------------------------------------------------------------------------- /CodeGeneratorOpenness/XML/Branch.xml: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /CodeGeneratorOpenness/XML/Connection.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/XML/Step.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | <MultiLanguageText Lang="de-DE">My Step X</MultiLanguageText> 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/XML/StepPlus.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | false 4 | false 5 | false 6 | 7 | 8 | Schrittstruktur 9 | 10 | 11 |
12 | 13 | 65 14 | 15 | 16 | T#10S 17 | 18 | 19 | T#7S 20 | 21 | 22 | 16#04 23 | 24 |
25 |
26 |
27 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/XML/Transition.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/XML/TransitionPlus.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | false 4 | false 5 | false 6 | 7 | 8 | Transitionsstruktur 9 | 10 | 11 |
12 | 13 | 14 | 15 |
16 |
17 |
-------------------------------------------------------------------------------- /CodeGeneratorOpenness/cFirewall.cs: -------------------------------------------------------------------------------- 1 | /// 2 | /// Sample applicatin for automated code generation for Siemens TIA Portal with Openness Interface 3 | /// 4 | /// by Mark König @ 02/2020 5 | /// 6 | /// cFirewall is a small helper to avoid the firewall anytime you build 7 | /// 8 | 9 | using System; 10 | using System.Collections.Generic; 11 | using System.Linq; 12 | using System.Text; 13 | using System.Threading.Tasks; 14 | using System.Windows.Forms; 15 | using System.IO; 16 | using System.Security.Cryptography; 17 | using Microsoft.Win32; 18 | 19 | namespace CodeGeneratorOpenness 20 | { 21 | class cFirewall 22 | { 23 | public void CalcHash() 24 | { 25 | // calc the hash for the file for the firwall settings 26 | string applicationPath = Application.StartupPath + "\\CodeGeneratorOpenness.exe"; 27 | string lastWriteTimeUtcFormatted = String.Empty; 28 | DateTime lastWriteTimeUtc; 29 | HashAlgorithm hashAlgorithm = SHA256.Create(); 30 | FileStream stream = File.OpenRead(applicationPath); 31 | byte[] hash = hashAlgorithm.ComputeHash(stream); 32 | // this is how the hash should appear in the .reg file 33 | string convertedHash = Convert.ToBase64String(hash); 34 | 35 | // get the path of the application 36 | FileInfo fileInfo = new FileInfo(applicationPath); 37 | // since I'm working with mapped drives we need the UNC path here 38 | string uncPath = Pathing.GetUNCPath(applicationPath); 39 | 40 | lastWriteTimeUtc = fileInfo.LastWriteTimeUtc; 41 | // this is how the last write time should be formatted 42 | lastWriteTimeUtcFormatted = lastWriteTimeUtc.ToString(@"yyyy\/MM\/dd HH:mm:ss.fff"); 43 | 44 | // we set the key in the registry to avoid the firewall each time 45 | try 46 | { 47 | // first time we need to ack, then the key is present 48 | RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Siemens\Automation\Openness\" + Program.Version + @"\Whitelist\CodeGeneratorOpenness.exe\Entry", true); 49 | rk.SetValue("FileHash", convertedHash); 50 | rk.SetValue("DateModified", lastWriteTimeUtcFormatted); 51 | rk.SetValue("Path", uncPath); 52 | } 53 | catch 54 | { } 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/cFunctionGroups.cs: -------------------------------------------------------------------------------- 1 | /// 2 | /// Sample applicatin for automated code generation for Siemens TIA Portal with Openness Interface 3 | /// 4 | /// by Mark König @ 02/2020 5 | /// 6 | /// cFunctionGroup contains some functions for blocks (recursive) 7 | /// 8 | 9 | using System.Collections.Generic; 10 | using System.Windows.Forms; 11 | using System.Drawing; 12 | 13 | using Siemens.Engineering.SW; 14 | using Siemens.Engineering.SW.Blocks; 15 | using Siemens.Engineering.SW.Types; 16 | 17 | namespace CodeGeneratorOpenness 18 | { 19 | class cFunctionGroups 20 | { 21 | public void ClearTreeView(TreeView Tree) 22 | { 23 | Tree.Nodes.Clear(); 24 | } 25 | 26 | public void LoadTreeView(TreeView Tree, PlcSoftware Software) 27 | { 28 | // start update treeview 29 | Tree.BeginUpdate(); 30 | 31 | // add root node 32 | TreeNode root = new TreeNode(Software.Name); 33 | Tree.Nodes.Add(root); 34 | 35 | // Add Program Blocks 36 | TreeNode programBlocks = new TreeNode("Program Blocks"); 37 | programBlocks.Tag = Software.BlockGroup; 38 | root.Nodes.Add(programBlocks); 39 | 40 | AddPlcBlocks(Software.BlockGroup, programBlocks); 41 | programBlocks.Expand(); 42 | 43 | // add data types 44 | TreeNode dataTypes = new TreeNode("PLC Data types"); 45 | dataTypes.Tag = Software.TypeGroup; 46 | root.Nodes.Add(dataTypes); 47 | 48 | AddPlcTypes(Software.TypeGroup, dataTypes); 49 | dataTypes.Expand(); 50 | 51 | // end update 52 | Tree.EndUpdate(); 53 | 54 | root.Expand(); 55 | } 56 | public void AddPlcBlocks(PlcBlockGroup plcGroup, TreeNode node) 57 | { 58 | // first add all plc blocks 59 | foreach (PlcBlock plcBlock in plcGroup.Blocks) 60 | { 61 | TreeNode n = null; 62 | 63 | if (plcBlock is OB) 64 | { 65 | n = new TreeNode(plcBlock.Name + " [OB" + plcBlock.Number.ToString() + "]"); 66 | n.Tag = plcBlock; 67 | //n.ToolTipText = "Version " + plcBlock.HeaderVersion.ToString(); 68 | n.ImageIndex = 2; 69 | 70 | OB ob = (OB)plcBlock; 71 | if (ob.SecondaryType.Contains("Safe")) 72 | { 73 | n.BackColor = Color.Yellow; 74 | n.ImageIndex = 7; 75 | } 76 | } 77 | else if (plcBlock is FB) 78 | { 79 | n = new TreeNode(plcBlock.Name + " [FB" + plcBlock.Number.ToString() + "]"); 80 | n.Tag = plcBlock; 81 | n.ImageIndex = 3; 82 | 83 | FB fb = (FB)plcBlock; 84 | if ((fb.ProgrammingLanguage == ProgrammingLanguage.F_LAD) || 85 | (fb.ProgrammingLanguage == ProgrammingLanguage.F_FBD)) 86 | { 87 | n.BackColor = Color.Yellow; 88 | n.ImageIndex = 8; 89 | } 90 | } 91 | else if (plcBlock is FC) 92 | { 93 | n = new TreeNode(plcBlock.Name + " [FC" + plcBlock.Number.ToString() + "]"); 94 | n.Tag = plcBlock; 95 | n.ImageIndex = 4; 96 | } 97 | else if (plcBlock is InstanceDB) 98 | { 99 | n = new TreeNode(plcBlock.Name + " [DB" + plcBlock.Number.ToString() + "]"); 100 | n.Tag = plcBlock; 101 | n.ImageIndex = 5; 102 | 103 | InstanceDB db = (InstanceDB)plcBlock; 104 | n.Name = db.Name + "[DB" + db.Number.ToString() + "]"; 105 | if (db.ProgrammingLanguage == ProgrammingLanguage.F_DB) 106 | { 107 | n.BackColor = Color.Yellow; 108 | n.ImageIndex = 6; 109 | } 110 | } 111 | else if (plcBlock is GlobalDB) 112 | { 113 | n = new TreeNode(plcBlock.Name + " [DB" + plcBlock.Number.ToString() + "]"); 114 | n.Tag = plcBlock; 115 | n.ImageIndex = 5; 116 | 117 | GlobalDB db = (GlobalDB)plcBlock; 118 | n.Name = db.Name + "[FB" + db.Number.ToString() + "]"; 119 | if (db.ProgrammingLanguage == ProgrammingLanguage.F_DB) 120 | { 121 | n.BackColor = Color.Yellow; 122 | n.ImageIndex = 6; 123 | } 124 | } 125 | else if (plcBlock is ArrayDB) 126 | { 127 | n = new TreeNode(plcBlock.Name + " [DB" + plcBlock.Number.ToString() + "]"); 128 | n.Tag = plcBlock; 129 | n.ImageIndex = 5; 130 | 131 | ArrayDB db = (ArrayDB)plcBlock; 132 | n.Name = db.Name + "[FB" + db.Number.ToString() + "]"; 133 | if (db.ProgrammingLanguage == ProgrammingLanguage.F_DB) 134 | { 135 | n.BackColor = Color.Yellow; 136 | n.ImageIndex = 6; 137 | } 138 | } 139 | 140 | if (n != null) 141 | { 142 | n.SelectedImageIndex = n.ImageIndex; 143 | node.Nodes.Add(n); 144 | } 145 | else 146 | { 147 | MessageBox.Show("Not found: " + plcBlock.Name); 148 | } 149 | } 150 | 151 | // then add groups and search recursive 152 | foreach (PlcBlockGroup group in plcGroup.Groups) 153 | { 154 | TreeNode n = new TreeNode(group.Name); 155 | n.Tag = group; 156 | n.ImageIndex = 1; 157 | n.SelectedImageIndex = 1; 158 | 159 | AddPlcBlocks(group, n); 160 | node.Nodes.Add(n); 161 | } 162 | } 163 | public void AddPlcTypes(PlcTypeGroup plcTypeGroup, TreeNode node) 164 | { 165 | foreach (PlcType ty in plcTypeGroup.Types) 166 | { 167 | TreeNode n = new TreeNode(ty.Name); 168 | n.Tag = ty; 169 | n.ImageIndex = 9; 170 | n.SelectedImageIndex = n.ImageIndex; 171 | 172 | node.Nodes.Add(n); 173 | } 174 | 175 | // then add groups and search recursive 176 | foreach (PlcTypeGroup tGroup in plcTypeGroup.Groups) 177 | { 178 | TreeNode n = new TreeNode(tGroup.Name); 179 | n.Tag = tGroup; 180 | n.ImageIndex = 1; 181 | n.SelectedImageIndex = 1; 182 | 183 | node.Nodes.Add(n); 184 | AddPlcTypes(tGroup, n); 185 | } 186 | } 187 | 188 | public List GetAllBlocks(PlcBlockGroup SearchGroup, List result) 189 | { 190 | foreach (PlcBlock block in SearchGroup.Blocks) 191 | { 192 | result.Add(block); 193 | } 194 | foreach (PlcBlockGroup group in SearchGroup.Groups) 195 | { 196 | result = GetAllBlocks(group, result); 197 | } 198 | return result; 199 | } 200 | public List GetAllDataTypes(PlcTypeGroup SearchGroup, List result) 201 | { 202 | foreach (PlcType ty in SearchGroup.Types) 203 | { 204 | result.Add(ty); 205 | } 206 | foreach (PlcTypeGroup group in SearchGroup.Groups) 207 | { 208 | result = GetAllDataTypes(group, result); 209 | } 210 | return result; 211 | } 212 | public List GetAllBlocksNames(PlcBlockGroup SearchGroup, List result) 213 | { 214 | foreach (PlcBlock block in SearchGroup.Blocks) 215 | { 216 | result.Add(block.Name); 217 | } 218 | foreach (PlcBlockGroup group in SearchGroup.Groups) 219 | { 220 | result = GetAllBlocksNames(group, result); 221 | } 222 | return result; 223 | } 224 | public List GetAllDataTypesNames(PlcTypeGroup SearchGroup, List result) 225 | { 226 | foreach (PlcType ty in SearchGroup.Types) 227 | { 228 | result.Add(ty.Name); 229 | } 230 | foreach (PlcTypeGroup group in SearchGroup.Groups) 231 | { 232 | result = GetAllDataTypesNames(group, result); 233 | } 234 | return result; 235 | } 236 | 237 | // we need to enumerate through the tree since there is no function in the API? 238 | public bool NameExists(string Name, PlcSoftware Software) 239 | { 240 | List list = new List(); 241 | list = GetAllBlocksNames(Software.BlockGroup, list); 242 | if (list.Contains(Name)) return true; 243 | 244 | list = new List(); 245 | list = GetAllDataTypesNames(Software.TypeGroup, list); 246 | if (list.Contains(Name)) return true; 247 | 248 | return false; 249 | } 250 | 251 | public bool GroupExists(string Name, PlcBlockGroup Group) 252 | { 253 | foreach (PlcBlockGroup g in Group.Groups) 254 | { 255 | if (g.Name.ToLower() == Name.ToLower()) return true; 256 | } 257 | 258 | return false; 259 | } 260 | 261 | public bool GroupBlockExists(string Name, PlcBlockUserGroupComposition Group) 262 | { 263 | foreach (PlcBlockGroup g in Group) 264 | { 265 | if (g.Name.ToLower() == Name.ToLower()) return true; 266 | } 267 | 268 | return false; 269 | } 270 | 271 | public bool GroupTypeExists(string Name, PlcTypeUserGroupComposition Group) 272 | { 273 | foreach (PlcTypeUserGroup g in Group) 274 | { 275 | if (g.Name.ToLower() == Name.ToLower()) return true; 276 | } 277 | 278 | return false; 279 | } 280 | } 281 | } 282 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/cImportBlock.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using System.Xml; 3 | 4 | namespace CodeGeneratorOpenness 5 | { 6 | public class cImportBlock 7 | { 8 | private XmlDocument xmlDoc; 9 | private XmlNode nameDefination; 10 | 11 | private string blockName; 12 | private FileInfo xmlFileInfo; 13 | 14 | public cImportBlock(string Filename) 15 | { 16 | if (File.Exists(Filename)) 17 | { 18 | try 19 | { 20 | xmlFileInfo = new FileInfo(Filename); 21 | 22 | xmlDoc = new XmlDocument(); 23 | xmlDoc.Load(Filename); 24 | 25 | // get the version of the document 26 | XmlNode bkm = xmlDoc.SelectSingleNode("//Document//Engineering"); 27 | BlockVersion = bkm.Attributes["version"].Value; 28 | 29 | // get block type 30 | XmlNode document = xmlDoc.SelectSingleNode("//Document"); 31 | foreach (XmlNode node in document.ChildNodes) 32 | { 33 | if (node.Name.StartsWith("SW.Blocks.")) 34 | { 35 | BlockType = node.Name.Substring(10); 36 | break; 37 | } 38 | } 39 | 40 | // we found the type of the software 41 | if (BlockType != string.Empty) 42 | { 43 | nameDefination = xmlDoc.SelectSingleNode("//Document//SW.Blocks." + BlockType + "//AttributeList//Name"); 44 | blockName = nameDefination.InnerText; 45 | 46 | XmlNodeList nodes = xmlDoc.GetElementsByTagName("Access"); 47 | foreach (XmlNode n in nodes) 48 | { 49 | 50 | if(n.Attributes["Scope"].Value == "GlobalVariable") 51 | { 52 | 53 | } 54 | else if (n.Attributes["Scope"].Value == "LocalVariable") 55 | { 56 | 57 | } 58 | } 59 | } 60 | else 61 | { 62 | // no success 63 | xmlDoc = null; 64 | xmlFileInfo = null; 65 | 66 | BlockType = string.Empty; 67 | BlockVersion = string.Empty; 68 | blockName = string.Empty; 69 | } 70 | } 71 | catch 72 | { 73 | // something went wrong 74 | xmlDoc = null; 75 | xmlFileInfo = null; 76 | 77 | BlockType = string.Empty; 78 | BlockVersion = string.Empty; 79 | blockName = string.Empty; 80 | } 81 | } 82 | } 83 | 84 | public void SaveXml(string FileName) 85 | { 86 | if (xmlDoc != null) 87 | { 88 | xmlDoc.Save(FileName); 89 | xmlFileInfo = new FileInfo(FileName); 90 | } 91 | } 92 | 93 | public FileInfo XmlFileInfo 94 | { 95 | get 96 | { 97 | return xmlFileInfo; 98 | } 99 | } 100 | public string BlockVersion { get; } = string.Empty; 101 | public string BlockName 102 | { 103 | get 104 | { 105 | return blockName; 106 | } 107 | set 108 | { 109 | if(xmlDoc != null) 110 | { 111 | blockName = value; 112 | nameDefination.InnerText = value; 113 | } 114 | } 115 | } 116 | public string BlockType { get; } = string.Empty; 117 | } 118 | } 119 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/cMulilingualText.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace CodeGeneratorOpenness 8 | { 9 | // HINWEIS: Für den generierten Code ist möglicherweise mindestens .NET Framework 4.5 oder .NET Core/Standard 2.0 erforderlich. 10 | /// 11 | [System.SerializableAttribute()] 12 | [System.ComponentModel.DesignerCategoryAttribute("code")] 13 | [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 14 | [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] 15 | public partial class MultilingualText 16 | { 17 | 18 | private MultilingualTextMultilingualTextItem[] objectListField; 19 | 20 | private string idField; 21 | 22 | private string compositionNameField; 23 | 24 | /// 25 | [System.Xml.Serialization.XmlArrayItemAttribute("MultilingualTextItem", IsNullable = false)] 26 | public MultilingualTextMultilingualTextItem[] ObjectList 27 | { 28 | get 29 | { 30 | return this.objectListField; 31 | } 32 | set 33 | { 34 | this.objectListField = value; 35 | } 36 | } 37 | 38 | /// 39 | [System.Xml.Serialization.XmlAttributeAttribute()] 40 | public string ID 41 | { 42 | get 43 | { 44 | return this.idField; 45 | } 46 | set 47 | { 48 | this.idField = value; 49 | } 50 | } 51 | 52 | /// 53 | [System.Xml.Serialization.XmlAttributeAttribute()] 54 | public string CompositionName 55 | { 56 | get 57 | { 58 | return this.compositionNameField; 59 | } 60 | set 61 | { 62 | this.compositionNameField = value; 63 | } 64 | } 65 | } 66 | 67 | /// 68 | [System.SerializableAttribute()] 69 | [System.ComponentModel.DesignerCategoryAttribute("code")] 70 | [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 71 | public partial class MultilingualTextMultilingualTextItem 72 | { 73 | 74 | private MultilingualTextMultilingualTextItemAttributeList attributeListField; 75 | 76 | private string idField; 77 | 78 | private string compositionNameField; 79 | 80 | /// 81 | public MultilingualTextMultilingualTextItemAttributeList AttributeList 82 | { 83 | get 84 | { 85 | return this.attributeListField; 86 | } 87 | set 88 | { 89 | this.attributeListField = value; 90 | } 91 | } 92 | 93 | /// 94 | [System.Xml.Serialization.XmlAttributeAttribute()] 95 | public string ID 96 | { 97 | get 98 | { 99 | return this.idField; 100 | } 101 | set 102 | { 103 | this.idField = value; 104 | } 105 | } 106 | 107 | /// 108 | [System.Xml.Serialization.XmlAttributeAttribute()] 109 | public string CompositionName 110 | { 111 | get 112 | { 113 | return this.compositionNameField; 114 | } 115 | set 116 | { 117 | this.compositionNameField = value; 118 | } 119 | } 120 | } 121 | 122 | /// 123 | [System.SerializableAttribute()] 124 | [System.ComponentModel.DesignerCategoryAttribute("code")] 125 | [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 126 | public partial class MultilingualTextMultilingualTextItemAttributeList 127 | { 128 | 129 | private string cultureField; 130 | 131 | private string textField; 132 | 133 | /// 134 | public string Culture 135 | { 136 | get 137 | { 138 | return this.cultureField; 139 | } 140 | set 141 | { 142 | this.cultureField = value; 143 | } 144 | } 145 | 146 | /// 147 | public string Text 148 | { 149 | get 150 | { 151 | return this.textField; 152 | } 153 | set 154 | { 155 | this.textField = value; 156 | } 157 | } 158 | } 159 | } 160 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/cTranlate.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace CodeGeneratorOpenness 5 | { 6 | public class cTranlate 7 | { 8 | public cTranlate(Form Form, string Culture) 9 | { 10 | string txt = string.Empty; 11 | foreach (Control c in Form.Controls) 12 | { 13 | // save the text 14 | if ((c.Text != string.Empty) && (c.Tag == null)) 15 | c.Tag = c.Text; 16 | 17 | txt = (string)c.Tag; 18 | 19 | if (c is Label) 20 | { 21 | if (Culture == "DE") 22 | { 23 | if (txt == "Data Type") c.Text = "Datentyp"; 24 | else if (txt == "Safety Data Block") c.Text = "Sicherer Datenbaustein"; 25 | else if (txt == "Safety Fuction Block") c.Text = "Sicherer Funktionsblock"; 26 | else if (txt == "Safety Organization Block") c.Text = "Sicherer Organisationsblock"; 27 | else if (txt == "Data Block") c.Text = "Datenbaustein"; 28 | else if (txt == "Function") c.Text = "Funktion"; 29 | else if (txt == "Function Block") c.Text = "Funktionsblock"; 30 | else if (txt == "Organization Block") c.Text = "Organisationsblock"; 31 | else if (txt == "Blocks") c.Text = "Blöcke"; 32 | else if (txt == "PLC") c.Text = "SPS"; 33 | else if (txt == "Device") c.Text = "Station"; 34 | else 35 | Console.WriteLine(txt); 36 | } 37 | else 38 | { 39 | // EN 40 | if (txt != string.Empty) c.Text = txt; 41 | } 42 | } 43 | 44 | if (c is Button) 45 | { 46 | if (Culture == "DE") 47 | { 48 | if (txt == "Reload") c.Text = "neu Laden"; 49 | else if (txt == "Open project") c.Text = "Projekt öffnen"; 50 | else 51 | Console.WriteLine(txt); 52 | } 53 | else 54 | { 55 | // EN 56 | if (txt != string.Empty) c.Text = txt; 57 | } 58 | } 59 | 60 | if (c is MenuStrip) 61 | { 62 | MenuStrip strip = (MenuStrip)c; 63 | foreach (ToolStripMenuItem m in strip.Items) 64 | { 65 | // save the text 66 | if ((m.Text != string.Empty) && (m.Tag == null)) 67 | m.Tag = m.Text; 68 | 69 | txt = (string)m.Tag; 70 | 71 | if (Culture == "DE") 72 | { 73 | if (txt == "Project") m.Text = "Projekt"; 74 | else if (txt == "Import") m.Text = "Import"; 75 | else if (txt == "Export") m.Text = "Export"; 76 | else if (txt == "Project Texts") m.Text = "Projekt Texte"; 77 | else if (txt == "Language") m.Text = "Sprache"; 78 | else 79 | Console.WriteLine(txt); 80 | } 81 | else 82 | { 83 | // EN 84 | if (txt != string.Empty) m.Text = txt; 85 | } 86 | 87 | foreach (ToolStripItem n in m.DropDownItems) 88 | { 89 | // save the text 90 | if ((n.Text != string.Empty) && (n.Tag == null)) 91 | n.Tag = n.Text; 92 | 93 | txt = (string)n.Tag; 94 | 95 | if (Culture == "DE") 96 | { 97 | if (txt == "Open") n.Text = "Öffnen"; 98 | else if (txt == "Compile") n.Text = "Kompilieren"; 99 | else if (txt == "Save") n.Text = "Speichern"; 100 | else if (txt == "Close") n.Text = "Schließen"; 101 | else if (txt == "Exit") n.Text = "Ende"; 102 | else if (txt == "PLC Blocks") n.Text = "SPS Bausteine"; 103 | else if (txt == "PLC Data types") n.Text = "SPS Daten Typen"; 104 | else if (txt == "Export") n.Text = "Export"; 105 | else if (txt == "Import") n.Text = "Import"; 106 | else if (txt == "English") n.Text = "Englisch"; 107 | else if (txt == "German") n.Text = "Deutsch"; 108 | else 109 | Console.WriteLine(txt); 110 | } 111 | else 112 | { 113 | // EN 114 | if (txt != string.Empty) n.Text = txt; 115 | } 116 | } 117 | } 118 | } 119 | } 120 | } 121 | 122 | public void TranslateContext(ContextMenu Context, string Culture) 123 | { 124 | foreach (MenuItem m in Context.MenuItems) 125 | { 126 | // save the text 127 | if ((m.Text != string.Empty) && (m.Tag == null)) 128 | m.Tag = m.Text; 129 | 130 | string txt = (string)m.Tag; 131 | 132 | if (Culture == "DE") 133 | { 134 | if (txt == "Delete") m.Text = "Löschen"; 135 | else if (txt == "Add group") m.Text = "Neue Gruppe"; 136 | else if (txt == "Delete group") m.Text = "Gruppe löschen"; 137 | else 138 | Console.WriteLine(txt); 139 | } 140 | else 141 | { 142 | // EN 143 | if (txt != string.Empty) m.Text = txt; 144 | } 145 | } 146 | } 147 | } 148 | } 149 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/cXmlFile.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Xml; 3 | 4 | namespace CodeGeneratorOpenness 5 | { 6 | public class cXmlFile 7 | { 8 | public cXmlFile(string FileName) 9 | { 10 | try 11 | { 12 | xDoc = new XmlDocument(); 13 | xDoc.Load(FileName); 14 | 15 | // get version of the file 16 | XmlNode n1 = xDoc.SelectSingleNode("//Engineering"); 17 | Version = n1.Attributes["version"].Value; 18 | 19 | // search the document information 20 | n1 = xDoc.SelectSingleNode("//Document"); 21 | foreach (XmlNode y in n1) 22 | { 23 | if (y.Name.StartsWith("SW.Blocks.")) 24 | { 25 | Type = y.Name.Substring(10); 26 | 27 | XmlNode attr = FindChildNodeByName(y, "AttributeList"); 28 | XmlNode nNode = FindChildNodeByName(attr, "Name"); 29 | Name = nNode.InnerText; 30 | } 31 | } 32 | 33 | GetLimitIDs(); 34 | Valid = true; 35 | } 36 | catch 37 | { 38 | Valid = false; 39 | xDoc = null; 40 | } 41 | } 42 | 43 | private static XmlNode FindChildNodeByName(XmlNode Node, string ChildName) 44 | { 45 | foreach (XmlNode x in Node.ChildNodes) 46 | { 47 | if (x.Name == ChildName) 48 | return x; 49 | } 50 | return null; 51 | } 52 | 53 | public void GetLimitIDs() 54 | { 55 | XmlNodeList tmp = xDoc.SelectNodes("//*"); // match every element 56 | foreach (XmlNode n in tmp) 57 | { 58 | int x; 59 | 60 | // search UID's 61 | if (n.Attributes["UId"] != null) 62 | { 63 | x = Convert.ToInt32(n.Attributes["UId"].Value); 64 | if (x >= 0) 65 | { 66 | if (x > uidHigh) uidHigh = x; 67 | if (x < uidLow) uidLow = x; 68 | } 69 | } 70 | 71 | // search ID's 72 | if (n.Attributes["ID"] != null) 73 | { 74 | x = Convert.ToInt32(n.Attributes["ID"].Value, 16); 75 | 76 | // ignore main block 77 | if (n.Name != "SW.Blocks.FB") 78 | { 79 | if (x >= 0) 80 | { 81 | if (x > idHigh) idHigh = x; 82 | if (x < idLow) idLow = x; 83 | } 84 | } 85 | } 86 | } 87 | } 88 | 89 | public void ChangeIDs(int UID_Offset, int ID_Offset) 90 | { 91 | XmlNodeList tmp = xDoc.SelectNodes("//*"); // match every element 92 | foreach (XmlNode n in tmp) 93 | { 94 | int x; 95 | 96 | if (n.Attributes["UId"] != null) 97 | { 98 | x = Convert.ToInt32(n.Attributes["UId"].Value); 99 | x = x + UID_Offset; 100 | n.Attributes["UId"].Value = x.ToString(); 101 | } 102 | 103 | if (n.Attributes["ID"] != null) 104 | { 105 | // ignore main block 106 | if (n.Name != "SW.Blocks.FB") 107 | { 108 | x = Convert.ToInt32(n.Attributes["ID"].Value, 16); 109 | x = x + ID_Offset; 110 | n.Attributes["ID"].Value = x.ToString("X"); 111 | } 112 | } 113 | } 114 | GetLimitIDs(); 115 | } 116 | 117 | public bool Valid = false; 118 | public string Name = string.Empty; 119 | public string Type = string.Empty; 120 | public string Version = string.Empty; 121 | 122 | public int uidLow = 9999; 123 | public int uidHigh = -1; 124 | public int idLow = 9999; 125 | public int idHigh = -1; 126 | 127 | private XmlDocument xDoc; 128 | 129 | public XmlDocument XmlDocument { get => xDoc; } 130 | } 131 | } 132 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/cXmlFunctions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Xml; 4 | 5 | namespace CodeGeneratorOpenness 6 | { 7 | class cXmlFunctions 8 | { 9 | public Dictionary GetLimitIDs(XmlDocument XMLDocument) 10 | { 11 | Dictionary result = new Dictionary(); 12 | 13 | int uidLow = 9999; 14 | int uidHigh = 0; 15 | int idLow = 9999; 16 | int idHigh = 0; 17 | 18 | XmlNodeList tmp = XMLDocument.SelectNodes("//*"); // match every element 19 | foreach (XmlNode n in tmp) 20 | { 21 | 22 | int x; 23 | 24 | if (n.Attributes["UId"] != null) 25 | { 26 | x = Convert.ToInt32(n.Attributes["UId"].Value); 27 | 28 | if (x > 0) 29 | { 30 | if (x > uidHigh) uidHigh = x; 31 | if (x < uidLow) uidLow = x; 32 | } 33 | } 34 | 35 | if (n.Attributes["ID"] != null) 36 | { 37 | x = Convert.ToInt32(n.Attributes["ID"].Value, 16); 38 | 39 | if (x > 0) 40 | { 41 | if (x > idHigh) idHigh = x; 42 | if (x < idLow) idLow = x; 43 | } 44 | } 45 | } 46 | 47 | result.Add("minUID", uidLow); 48 | result.Add("maxUID", uidHigh); 49 | result.Add("minID", idLow); 50 | result.Add("maxID", idHigh); 51 | 52 | return result; 53 | } 54 | 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/codeGenerator.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mking2203/CodeGeneratorOpenness/7ceff738e01687ba6aa99c569daecc05879916be/CodeGeneratorOpenness/codeGenerator.ico -------------------------------------------------------------------------------- /CodeGeneratorOpenness/frmMainForm.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 363, 17 122 | 123 | 124 | 125 | AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w 126 | LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 127 | ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAB2 128 | DgAAAk1TRnQBSQFMAgEBCgEAAQgBAQEIAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo 129 | AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA 130 | AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 131 | AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA 132 | AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm 133 | AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM 134 | AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA 135 | ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz 136 | AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ 137 | AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM 138 | AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA 139 | AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA 140 | AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ 141 | AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ 142 | AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA 143 | AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm 144 | ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ 145 | Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz 146 | AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA 147 | AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM 148 | AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM 149 | ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM 150 | Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA 151 | AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM 152 | AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ 153 | AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz 154 | AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm 155 | AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw 156 | AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEAEF4D9Ay8AfQgABBe 157 | AvQMzwG8AfQgAAReCXkDXgL0Ad0C/wL0BhkB7QG8AfQgAANeCV8BeQNeAvQBCQP/AfQBCgUZAe0BvAH0 158 | IAABXgJ5BawExwF5A14C9AEJAf8BCgL3AQoB9AQZAe0BvAH0IAADXwGyBawDxwF5A14C9AEJAf8BCgP/ 159 | AvQBCgIZAe0BvAH0IAAE0wGyAawBxwT7AccEeQL0AQkB/wEKAv8BCgL3AQoCGQHtAbwB9CAAA14C0wGy 160 | AccE+wHHA18BeQL0AQkB9AEKAvcBCgH/A/QBGQHtAbwB9CAAAV4CeQPTAccE+wGsA8cBXgL0AQkB9AEK 161 | Av8BCgL3AQoB9AEZAe0BvAH0IAADXwPTAccE+wGsAXkDXgL0AQkB9AEKAfQE/wEKAvQB7QG8AfQgAALZ 162 | BNMFxwGsAXkDXgL0AQkBGQEKAvQBCgL3AQoC9AHtAbwB9CAAA14G0wGyAqwBeQNeAvQBCQEZAQoC9wEK 163 | BP8B9AHtAbwB9CAAA14B2QbTAbIBrAReAvQBCQMZAfQBCgL3AQoC/wHtAbwB9CAAEF4C9AHWBBkD9AEK 164 | Av8B7QG8AfQgABBeAvQB1gUZA/QC/wHtAbwB9CAAEF4C9APWCAkB7QL0IAAU9AHzAfIB8AS8AfAB8gHz 165 | AvQFXgHlBnkB5QNeBQ0B/wpeE/QB8wG1AYwBhgIEAoYBtQG8AfAC9AReAXMBrgGGAgQChgHsAnkCXgGG 166 | ArQBrQGmAf8KXgX0CbwF9AG1AYYFpwGiAYUBzwG8AvQDXgFzAYYFpwGiAYUB7AF5Al4CiwKGAaYB/wd5 167 | A14E9AkNAbwF9AEEAacByAanAQQBvAL0A14BBAGnAcgGpwEEAXkCXgFlA/8BZQH/BqIBeQNeAvQCvANP 168 | A0kDSAG8BfQDzgHIBqcBvAL0A14DzgHIBqcBeQJeAaYBuwH/AbsBpgH/AaQFowF5A14B9AMNBE8DSQJI 169 | AbwF9APOAcgGpwG8AvQDXgPOAcgGpwF5Al4B8AOmAfAB/wKkBKMBeQNeAfQCVQRPAUgEVQFIA7wD9ATO 170 | AcgFpwG8AvQDXgTOAcgFpwF5Al4G/wGjBPsBowR5BPQDTwFIBFUBSQMNA/QB5gTOAcgEpwG8AvQDXgHm 171 | BM4ByASnAXkFXgHLAcoBxgGjBPsBowOiAXkC9AK8AVUCTwFIBFUCSQJIA/QB5gTOAcgEpwG8AvQDXgHm 172 | BM4ByASnAXkDXgJ5AssBygGjBPsEowFeAfQDDQJVAU8BSARVAUkBvAX0AuYEzgHIA6cBvAL0A14C5gTO 173 | AcgDpwF5Al4DogPLAaME+wGkAXkDXgH0BlUFSAFPAbwF9AHmAdUG1gHmAacBvAL0A14B5gHVBtYB5gGn 174 | AXkCXgbLBaMBpAF5A14E9ARVBU8BvAX0CdYB1QG8AvQDXgnWAdUBeQVeBcsBygHGAqQBeQNeBPQFVQRP 175 | BvQK1gHyAvQDXgrWAeUFXgbLAcoBxgGkBF4T9AEJCNYBCQP0A14BBwjWAQcTXhT0Ad0BCQTWAQkB3QT0 176 | BF4BmQEJBNYBCQGZFF4g9CBeAgAN9BEAIPQCAAH0CxQB9BEAIPQCAAH0ARQJ9AEUAfQBAA/0AQAF9Am8 177 | B/QJvAL0AgAB9AEUCfQBFAH0AQAB9AGZC3kBmQH0AQAE9AmiAbwG9AlfAbwC9AIAAfQBFAn0ARQB9AEA 178 | AfQNeQH0AQAC9AK8BKQFowG8BPQCvAWsBMcBvAL0AgAB9AEUCfQBFAH0AQAB9A15AfQBAAH0A6IFpASj 179 | AbwD9ANfAbIFrAPHAbwC9AIAAfQBFAn0ARQB9AEAAfQNeQH0AQAB9APLAcoBxgGkAaMEywGjA7wB9ATT 180 | AbIBrAHHBNoBxwO8AgAB9AEUCfQBFAH0AQAB9A15AfQBAAT0AcsBygHGAaMEywGjA6IE9ALTAbIBxwTa 181 | AccDXwIAAfQBFAn0ARQB9AEAAfQNeQH0AQAC9AK8AssBygGjBMsEowL0ArwD0wHHBNoBrAPHAgAB9AEU 182 | CfQBFAH0AQAB9A15AfQBAAH0A6IDywGjBMsBpAG8A/QDXwPTAccE2gGsAbwC9AIAAfQBFAX0BRQB9AEA 183 | AfQNeQH0AQAB9AbLBaMBpAG8A/QC2QTTBccBrAG8AvQCAAH0ARQF9AEUAvQBbQHrAfQBAAH0DHkBmQH0 184 | AQAE9AXLAcoBxgKkAbwG9AbTAbICrAG8AvQCAAH0ARQF9AEUAfQBbQHrAfMB9AEAAfQBeQb0ARoBmQX0 185 | AQAE9AbLAcoBxgGkB/QB2QbTAbIBrAP0AgAB9AEUBfQBFAFtAesB8wH0AgAB9AGZB3kBGwH0BQAg9AIA 186 | AfQHFAHrAfMB9AMACvQB/wUAIPQCAAr0FAAg9AFCAU0BPgcAAT4DAAEoAwABQAMAATADAAEBAQABAQUA 187 | AYABARYAA///AAIAAcABAQL/BAABwAEBAv8EAAHAAQEBAAEBBAABwAEBAQABAQQAAcABAQEAAQEEAAHA 188 | AQEBAAEBBAABwAEBAQABAQQAAcABAQEAAQEEAAHAAQEBAAEBBAABwAEBAQABAQQAAcABAQEAAQEEAAHA 189 | AQEBAAEBBAABwAEBAQABAQQAAcABAwEAAR8EAAHAAQcBAAEfBAABwAEPAv8EAAs= 190 | 191 | 192 | 193 | 17, 17 194 | 195 | 196 | 147, 17 197 | 198 | 199 | 248, 17 200 | 201 | 202 | 473, 17 203 | 204 | 205 | 206 | 207 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO 208 | wwAADsMBx2+oZAAAAS9JREFUOE9j+P/fhyRETw1nlP6fUPx7ROHXPrnvO2Q+b5T6sFLizULRF7NEHsPV 209 | ABFCw0nFv4flIaq/bJT6CFS9SAykepLg/XOXUuDKGIAGQ8w+DDZ7u8zneObDyKiT/zaKBmOGLgjaC1YN 210 | dAlQ0f//QJuhqIn3GooGIAbygQjubjQNlVyXijjO5bCdSmU5DtUAQRukPqwCulv0BZoGoGq4K4DmAoXQ 211 | AZqGbLZTECdAEMPxy0/EvSZCEJAN1AD0ZSPv9SqoS04DXQJUB3cIg6BDw+p914HqgCSQDWQ08VyDqM5m 212 | BbkbaCGKBg7jLJA7wADChrsYjlA0aITOVg2aoeg3SdarR9S5GagB4lY0hNAg7zchvPtmYOtlr7oz/I6N 213 | YJugclgRA6OKLzIioOG/DwBeiepwgugl7AAAAABJRU5ErkJggg== 214 | 215 | 216 | 217 | 218 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO 219 | wwAADsMBx2+oZAAAAbJJREFUOE9j+EAiQGh4//7D4TM/Vmz/M3vtvxmr/gMRkAHkAgWBUnCA0LBh72+I 220 | Oky0dvdPuB6Ehpmr0dXBEVDq8ZNnEGUIDS3T/6Cpg6Oa3h8nz1yCKENoCEz/Utr5q3vu36nLoX6Ysuxf 221 | +4zfGRWfDG0eHTlxHqIMoSEg7QsQ+SV99oz76BrxzjH4jY33CzPXp4a2j3TM72PX4Jfy2Sfho3v0e6eQ 222 | N3a+ryzcnxs7PNazfKhhdA+bhtQvPomfPGLeu4S/tQ94beX5wtTpqb71Iy2Te6p6d7Bo8E3+BHSMG9Ax 223 | Qa9tvF+auzw1snukY3Zf3eCuktYtLBq8gY6Jeu8MdIzfK0uIYyxAjlHWua2gdgOLBo/YDy5hUMeYgBzz 224 | UMvkvqrubUX1mzJK17BoEONpsva8hxwyIMdo3pRVOCPIWo9Fw4zpZ2UkZqhrbNM2OqNjdltd/7q80jEJ 225 | sXVCXJMry7dh0fDu3ftZs08H+6800JwswFItwFytpzbJx2NZR8e+w8fOXb1+G6IMoQEIgHqAaebq9Ttn 226 | L1w9cfrS8dMXz5y/evnqrfsPH799+w6k4sMHAGtaKRb8Lic3AAAAAElFTkSuQmCC 227 | 228 | 229 | 230 | 231 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO 232 | wwAADsMBx2+oZAAAAPZJREFUOE9j+EAioLMGlROSKoellffKKu1QUNiopLBKRX6xutxsTdkpOlAV6BqO 233 | yCjvk1PaIQ9VvUhNbrYWULVMj96RE+chakAaVM9KAM1WBpq9D2S24kYlsXg7ZCTdaoiigcvWGIIUd8gr 234 | blQEmg1UBHIeDEnVmaBoAAIgH4iAZoNdoo6mQbLcTKLAUjzLSjzFFsUPUF/O0UTTAFQNdwVIg+J2YJiA 235 | XAIPEzQN4lnWECcAEYofIKplevWl2wyB7ga7xALiEqBSsCNQ/QAOQYhqY6BqyUKw6lQboIXoGiAAbhUm 236 | wq4BCCBWYUUQBegaCAISNXz4AACIKe5s/evyYwAAAABJRU5ErkJggg== 237 | 238 | 239 | 240 | 241 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO 242 | wwAADsMBx2+oZAAAAQxJREFUOE9j+EAioLMG8U1/xNb9FF3xXWTRV+HZHwUnveXvfMnX+ISn4iFUBZoG 243 | sXW/xFb8EFn4RXjWB7DqF7yNT4GqufLuHDlxHqIGpAFoMNjsX6IQ1bM/MtoeRUYcqTdQNDAw5EOQyMKv 244 | QmCzgYokNv2FI/aYKygagADIByLhWWB3d71E08AWcoHF9yyz20kmp+MofhCc/Fag6yXQ3WgaWPzOwl0B 245 | 0gD2JdRsvgZgmDxA08DsfhLiBCBC8QMoTMofcuff5Uy7wR57hTX0AqvfWSb3U0yOx4FKwY5A9QNY9R3O 246 | VJBqttCLLL5ngGYD3Q20EF0DBMCtwkTYNQABxCqsCKIAXQNBQKKGDx8AKWQgU43hNuMAAAAASUVORK5C 247 | YII= 248 | 249 | 250 | 251 | 252 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO 253 | wwAADsMBx2+oZAAAAQBJREFUOE9j+EAioLOGM0r/Tyj+PaLwa5/c9x0ynzdKfVgp8Wah6ItZIo+hKtA0 254 | nFT8e1geovrLRqmPQNWLxECqJwneP3LiPEQNSAPQYIjZh8Fmb5f5HM98GBl18t9G0WDM0AVBe8GqgS4B 255 | Kjqp+A+OmnivoWgAAiAfiODuRtNQyXWpiONcDtupVJbjKH7YIPVhFdDdoi/QNABVw10B0rBPFugSoC9B 256 | ZgN9OVPkCZqGbLZTECcAEYofFok+nyX8eKLgfaAvG3mvV0FdchroEqBSsCNQ/QBR3cV/u4nnGkR1NivI 257 | 3UAL0TVAANwqTIRdAxBArMKKIArQNRAEJGr48AEA2MMzwYi49ywAAAAASUVORK5CYII= 258 | 259 | 260 | 261 | 262 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO 263 | wwAADsMBx2+oZAAAARRJREFUOE9j+P/fhyRETw3im/6IrfspuuK7yKKvwrM/Ck56y9/5kq/xCU/FQ7ga 264 | IEJoEFv3S2zFD5GFX4RnfQCrfsHb+BSomivvzrlLKXBlDECDwWb/EoWonv2R0fYoMuJIvYGigYEhH4JE 265 | Fn4VApsNVPT/P9BmKGKPuYKiAYiBfCASngV2d9dLNA1sIRdYfM8yu51kcjoO1QBBgpPfCnS9BLobTQOL 266 | 31m4K4DmMoB9CTWbrwEYJg/QNDC7n4Q4AYIQfgCFSflD7vy7nGk32GOvsIZeYPU7y+R+isnxOFAd3CFA 267 | M6B+AKu+w5kKUs0WepHF9wzQbKC7gRaia4CyYFZhIuwagAhiFVYEV4OigRhEoob/PgD2G9m6S8isKAAA 268 | AABJRU5ErkJggg== 269 | 270 | 271 | 272 | 273 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO 274 | wwAADsMBx2+oZAAAAbFJREFUOE9j+P/fhySE0PDvn++pyytX77o3Z933Gav+ARGQAeQCBYFScGUIDVsO 275 | npux6j9WtHH/BbgehIaZq/+iqYOjmav/ffgYgq6hZfofNHVwVNP74/K1JHQNgelfSjt/dc/9O3U50AMg 276 | dVOW/Wuf8Tuj4pOhzaNzl1LQNQSkfQEiv6TPnnEfXSPeOQa/sfF+Yeb61ND2kY75fewa/FI++yR8dI9+ 277 | 7xTyxs73lYX7c2OHx3qWDzWM7mHTkPrFJ/GTR8x7l/C39gGvrTxfmDo91bd+pGVyT1XvDhYNvsmfgI5x 278 | Azom6LWN90tzl6dGdo90zO6rG9xV0rqFRYM30DFR752BjvF7ZQlxjAXIMco6txXUbmDR4BH7wSUM6hgT 279 | kGMeapncV9W9rah+U0bpGhYNYjwN1p73kEMG5BjNm7IKZwRZ67BoWLggT0ZihrrGNm2jMzpmt9X1r8sr 280 | HZMQWyfENbm+thKLhr9/fRYtLgoLajXSbhJgqRJgrjLQaPT3bu7rKz97IeXh42h0DUD096/vh4/BQLkb 281 | t+MvXU2+eDXp+q2E+w9j3rwL/fPHD6Tmvw8A3ELrCgyfqnYAAAAASUVORK5CYII= 282 | 283 | 284 | 285 | 286 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO 287 | wwAADsMBx2+oZAAAAYBJREFUOE+FkOtOwkAQhXk0n8M38DX87RsYlZhg1ECCokTFiFESTdSIGEOVtqLS 288 | UrG7W1DuzIyzSBSoCZv5sZfznTk7kWC4VrbFWlysJ0QsKTZTMp4WyUOROhbpE3l4KjNncnEp+qMcAay+ 289 | M6Fg4oMNRhntKlRq5AmUdWp1qNsjBnKXt3/AalzcmzBSV+jVg6pAVadIZI7V7W4IWE+KBxuNFyw5WPaQ 290 | dcvRGBdvOj36bIaA2K4slmFc12hRt0/9ATXbJD5DwMaesioacCX6aqKDalBN4TSwtS/Knk4sAmw0iWMA 291 | UKevb/yAeADTQOJAub42rn9p9XgH9wOfnX8A6QcTSXiaHOZd4IsH5lsI2DlS7M26Aegw46TlYPEZpoF0 292 | VrIlPyPp4QRf/HVyavqG1QVrMA1kzmVv+MVfY7eGtgNFGwsW5J9CHbIXir0B9dT9hiYtF4bemC/BzWMI 293 | yF0pIGp1SdWx6qPtgqHVcFsa3BhwbYSA+QVzZk0AvPg8s4Ig+AY2uFKBezWdPwAAAABJRU5ErkJggg== 294 | 295 | 296 | 297 | 589, 17 298 | 299 | 300 | 676, 17 301 | 302 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/frmReadStructure.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace CodeGeneratorOpenness 2 | { 3 | partial class frmReadStructure 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.label1 = new System.Windows.Forms.Label(); 32 | this.label2 = new System.Windows.Forms.Label(); 33 | this.SuspendLayout(); 34 | // 35 | // label1 36 | // 37 | this.label1.AutoSize = true; 38 | this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 39 | this.label1.Location = new System.Drawing.Point(72, 49); 40 | this.label1.Name = "label1"; 41 | this.label1.Size = new System.Drawing.Size(224, 25); 42 | this.label1.TabIndex = 0; 43 | this.label1.Text = "Read project structure"; 44 | // 45 | // label2 46 | // 47 | this.label2.AutoSize = true; 48 | this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 49 | this.label2.Location = new System.Drawing.Point(114, 104); 50 | this.label2.Name = "label2"; 51 | this.label2.Size = new System.Drawing.Size(140, 25); 52 | this.label2.TabIndex = 1; 53 | this.label2.Text = "Please wait..."; 54 | // 55 | // frmReadStructure 56 | // 57 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 58 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 59 | this.BackColor = System.Drawing.SystemColors.AppWorkspace; 60 | this.ClientSize = new System.Drawing.Size(369, 198); 61 | this.Controls.Add(this.label2); 62 | this.Controls.Add(this.label1); 63 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 64 | this.Name = "frmReadStructure"; 65 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 66 | this.Text = "ReadStructure"; 67 | this.ResumeLayout(false); 68 | this.PerformLayout(); 69 | 70 | } 71 | 72 | #endregion 73 | 74 | private System.Windows.Forms.Label label1; 75 | private System.Windows.Forms.Label label2; 76 | } 77 | } -------------------------------------------------------------------------------- /CodeGeneratorOpenness/frmReadStructure.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Windows.Forms; 10 | 11 | namespace CodeGeneratorOpenness 12 | { 13 | public partial class frmReadStructure : Form 14 | { 15 | public frmReadStructure() 16 | { 17 | InitializeComponent(); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /CodeGeneratorOpenness/frmReadStructure.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /OPNS/export.opns: -------------------------------------------------------------------------------- 1 | # XML-Dateien importieren 2 | 3 | #open Portal 4 | #open Project "P:\Projekte\Test\ProjektTestImport\ProjektTestImport.ap16" 5 | 6 | # project is already open 7 | connect Portal "P:\Projekte\Test\ProjektTestImport\ProjektTestImport.ap16" 8 | 9 | # select the plc 10 | select Plc "PLC_1" 11 | 12 | select ProgramBlocks "FB_SEQ_One" 13 | export ProgramBlocks "P:\VmSharedFolder" None 14 | -------------------------------------------------------------------------------- /OPNS/import.opns: -------------------------------------------------------------------------------- 1 | # XML-Dateien importieren 2 | 3 | #open Portal 4 | #open Project "P:\Projekte\Test\ProjektTestImport\ProjektTestImport.ap16" 5 | 6 | # project is already open 7 | connect Portal "P:\Projekte\Test\ProjektTestImport\ProjektTestImport.ap16" 8 | 9 | # select the plc 10 | select Plc "PLC_1" 11 | 12 | import ProgramBlocks "P:\VmSharedFolder\SAT\CodeGeneratorOpenness\Sample\GraphBranchAbortOption.xml" 13 | 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CodeGeneratorOpenness 2 | Siemens TIA Portal Code Generator via Openness Interface 3 | 4 | Since we are doing import of Graph step sequence through an Excel sheet using Openness, I was thinking of building a "structure" code generator for the TIA portal. Right now, most important functions are working so it would be possible to 5 |
6 | -build a group tree
7 | -import any kind of blocks like FB, FC, OB or data types
8 | -generate step sequences as graph (not 100% complete yet) - no config right now 9 | 10 | This covers mainly the function we can find in the Openness scripter. But I want to go a little further to build structures more variable. Not sure where it leads to but my goal will be to use templates to build FB with n-times valve FBs through a scripter or later on maybe a tool to configure this. 11 | 12 | Based on the description found here: 13 | 14 | https://support.industry.siemens.com/cs/attachments/109477163/TIAPortalOpennessenUS_en-US.pdf (English) 15 | https://cache.industry.siemens.com/dl/files/163/109477163/att_926040/v1/TIAPortalOpennessdeDE_de-DE.pdf (Deutsch) 16 | 17 | 18 | This version is based on TIA V16. 19 |
20 | With some small changes this will also work with 14SP1,15 or 15.1 (work ongoing) 21 |
22 |
23 | Functions added:
24 |
25 | -open TIA with interface (first instance or new instance)
26 | -open project file via file dialog
27 | -compile software
28 | -save project
29 | -close project
30 | -show folder structure software
31 | -show data types
32 | -add / delete groups in the treeview
33 | -add complete path to the treeview
34 | -imports PLC blocks (with rename if needed)
35 | -import data types
36 | -export blocks / types
37 | -export project text (de/en)
38 | -import project text (de/en)
39 |
40 | Test
41 | -add / change language for editing
42 | -for devolpment set the key in the registry to avoid firewall each time
43 |
44 | Limtitations:
45 | -no global search for block/types
46 | -import fails if language is not in the project
47 | -export projects text can not overwrite existing files 48 |
49 |
50 | Screenshot: 51 |
52 | Code Generator 53 | 54 |
55 |
56 | Some code for the graph generation is "reversed engineered" since there is no description. In my case I used the openness scripter in the version 14 to export a couple graph's to understand the structure. See the scripts I added in the OPNS folder. Some generated step sequence for testing are in the sample folder. Right now there is only one "step class" which is doing the configuration. In the futrue I will plan to use a excel file to read the config. 57 |
58 |
59 | For the sequence generation I used a V14 sample of an empty seqeunce. In the XML we need to add transitions and steps into the static area (change in later versions) Then I enumerate through my defined steps to build the sequence including transitions and branches. Of course I can not cover 100% of any posibility, so my sequences are straight forward - only with alternate branches and jumps. In the next version I will also cover actions and supervisions for each step. 60 |
61 |
62 | Step sequence 63 | 64 | -------------------------------------------------------------------------------- /Sample/LAD_TemplateValve_V0.1.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 2020-03-29T17:41:57.7640743Z 6 | None 7 | 8 | 9 | Totally Integrated Automation Portal 10 | V16 Update 1 11 | 12 | 13 | TIA Portal Version Control Interface 14 | V16 15 | 16 | 17 | TIA Portal Openness 18 | V16 Update 1 19 | 20 | 21 | SINAMICS Startdrive Advanced 22 | V16 Update 1 23 | 24 | 25 | SINAMICS Startdrive G130, G150, S120, S150, SINAMICS MV, S210 26 | V16 Update 1 27 | 28 | 29 | SINAMICS Startdrive G110M, G120, G120C, G120D, G120P 30 | V16 Update 1 31 | 32 | 33 | STEP 7 Professional 34 | V16 Update 1 35 | 36 | 37 | STEP 7 Safety 38 | V16 39 | 40 | 41 | WinCC Advanced 42 | V16 Update 1 43 | 44 | 45 | 46 | 47 | 48 | 49 |
50 |
51 |
52 |
53 | true 54 |
55 |
56 | 57 | 58 | 59 |
60 |
61 | 62 | Optimized 63 | 100 64 | TemplateValve 65 | 2 66 | LAD 67 | false 68 | 69 | 70 | 71 | 72 | 73 | 74 | de-DE 75 | 76 | 77 | 78 | 79 | 80 | en-GB 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | LAD 123 | 124 | 125 | 126 | 127 | 128 | 129 | de-DE 130 | 131 | 132 | 133 | 134 | 135 | en-GB 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | de-DE 146 | Release valve 147 | 148 | 149 | 150 | 151 | en-GB 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | LAD 235 | 236 | 237 | 238 | 239 | 240 | 241 | de-DE 242 | 243 | 244 | 245 | 246 | 247 | en-GB 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | de-DE 258 | Open / Close valve 259 | 260 | 261 | 262 | 263 | en-GB 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | LAD 331 | 332 | 333 | 334 | 335 | 336 | 337 | de-DE 338 | 339 | 340 | 341 | 342 | 343 | en-GB 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | de-DE 354 | Call valve FB 355 | 356 | 357 | 358 | 359 | en-GB 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | de-DE 372 | Sample valve template 373 | 374 | 375 | 376 | 377 | en-GB 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | -------------------------------------------------------------------------------- /Sample/LAD_TemplateValve_V0.2.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 2020-03-29T17:41:57.7640743Z 6 | None 7 | 8 | 9 | Totally Integrated Automation Portal 10 | V16 Update 1 11 | 12 | 13 | TIA Portal Version Control Interface 14 | V16 15 | 16 | 17 | TIA Portal Openness 18 | V16 Update 1 19 | 20 | 21 | SINAMICS Startdrive Advanced 22 | V16 Update 1 23 | 24 | 25 | SINAMICS Startdrive G130, G150, S120, S150, SINAMICS MV, S210 26 | V16 Update 1 27 | 28 | 29 | SINAMICS Startdrive G110M, G120, G120C, G120D, G120P 30 | V16 Update 1 31 | 32 | 33 | STEP 7 Professional 34 | V16 Update 1 35 | 36 | 37 | STEP 7 Safety 38 | V16 39 | 40 | 41 | WinCC Advanced 42 | V16 Update 1 43 | 44 | 45 | 46 | 47 | 48 | 49 |
50 |
51 |
52 |
53 | true 54 |
55 |
56 | 57 | 58 | 59 |
60 |
61 | 62 | Optimized 63 | 100 64 | TemplateValve 65 | 2 66 | LAD 67 | false 68 | 69 | 70 | 71 | 72 | 73 | 74 | de-DE 75 | 76 | 77 | 78 | 79 | 80 | en-GB 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | LAD 123 | 124 | 125 | 126 | 127 | 128 | 129 | de-DE 130 | 131 | 132 | 133 | 134 | 135 | en-GB 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | de-DE 146 | Release valve 147 | 148 | 149 | 150 | 151 | en-GB 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | LAD 235 | 236 | 237 | 238 | 239 | 240 | 241 | de-DE 242 | 243 | 244 | 245 | 246 | 247 | en-GB 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | de-DE 258 | Open / Close valve 259 | 260 | 261 | 262 | 263 | en-GB 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | LAD 331 | 332 | 333 | 334 | 335 | 336 | 337 | de-DE 338 | 339 | 340 | 341 | 342 | 343 | en-GB 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | de-DE 354 | Call valve FB 355 | 356 | 357 | 358 | 359 | en-GB 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | de-DE 372 | Sample valve template 373 | 374 | 375 | 376 | 377 | en-GB 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | -------------------------------------------------------------------------------- /Sample/LAD_TemplateValve_V0.3.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 2020-03-29T17:41:57.7640743Z 6 | None 7 | 8 | 9 | Totally Integrated Automation Portal 10 | V16 Update 1 11 | 12 | 13 | TIA Portal Version Control Interface 14 | V16 15 | 16 | 17 | TIA Portal Openness 18 | V16 Update 1 19 | 20 | 21 | SINAMICS Startdrive Advanced 22 | V16 Update 1 23 | 24 | 25 | SINAMICS Startdrive G130, G150, S120, S150, SINAMICS MV, S210 26 | V16 Update 1 27 | 28 | 29 | SINAMICS Startdrive G110M, G120, G120C, G120D, G120P 30 | V16 Update 1 31 | 32 | 33 | STEP 7 Professional 34 | V16 Update 1 35 | 36 | 37 | STEP 7 Safety 38 | V16 39 | 40 | 41 | WinCC Advanced 42 | V16 Update 1 43 | 44 | 45 | 46 | 47 | 48 | 49 |
50 |
51 |
52 |
53 | true 54 | true 55 |
56 |
57 | 58 | 59 | 60 |
61 |
62 | 63 | Optimized 64 | 100 65 | GenerateValve 66 | 2 67 | LAD 68 | false 69 | 70 | 71 | 72 | 73 | 74 | 75 | de-DE 76 | 77 | 78 | 79 | 80 | 81 | en-GB 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | LAD 124 | 125 | 126 | 127 | 128 | 129 | 130 | de-DE 131 | 132 | 133 | 134 | 135 | 136 | en-GB 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | de-DE 147 | Release valve 148 | 149 | 150 | 151 | 152 | en-GB 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | LAD 236 | 237 | 238 | 239 | 240 | 241 | 242 | de-DE 243 | 244 | 245 | 246 | 247 | 248 | en-GB 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | de-DE 259 | Open / Close valve 260 | 261 | 262 | 263 | 264 | en-GB 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | LAD 332 | 333 | 334 | 335 | 336 | 337 | 338 | de-DE 339 | 340 | 341 | 342 | 343 | 344 | en-GB 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | de-DE 355 | Call valve FB 356 | 357 | 358 | 359 | 360 | en-GB 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | LAD 406 | 407 | 408 | 409 | 410 | 411 | 412 | de-DE 413 | 414 | 415 | 416 | 417 | 418 | en-GB 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | de-DE 429 | Release valve 430 | 431 | 432 | 433 | 434 | en-GB 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | LAD 518 | 519 | 520 | 521 | 522 | 523 | 524 | de-DE 525 | 526 | 527 | 528 | 529 | 530 | en-GB 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | de-DE 541 | Open / Close valve 542 | 543 | 544 | 545 | 546 | en-GB 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | 561 | 562 | 563 | 564 | 565 | 566 | 567 | 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | LAD 614 | 615 | 616 | 617 | 618 | 619 | 620 | de-DE 621 | 622 | 623 | 624 | 625 | 626 | en-GB 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | de-DE 637 | Call valve FB 638 | 639 | 640 | 641 | 642 | en-GB 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | de-DE 657 | Sample valve template 658 | 659 | 660 | 661 | 662 | en-GB 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | -------------------------------------------------------------------------------- /Sample/LAD_TemplateValve_V0.x.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 2020-03-29T17:41:57.7640743Z 6 | None 7 | 8 | 9 | Totally Integrated Automation Portal 10 | V16 Update 1 11 | 12 | 13 | TIA Portal Version Control Interface 14 | V16 15 | 16 | 17 | TIA Portal Openness 18 | V16 Update 1 19 | 20 | 21 | SINAMICS Startdrive Advanced 22 | V16 Update 1 23 | 24 | 25 | SINAMICS Startdrive G130, G150, S120, S150, SINAMICS MV, S210 26 | V16 Update 1 27 | 28 | 29 | SINAMICS Startdrive G110M, G120, G120C, G120D, G120P 30 | V16 Update 1 31 | 32 | 33 | STEP 7 Professional 34 | V16 Update 1 35 | 36 | 37 | STEP 7 Safety 38 | V16 39 | 40 | 41 | WinCC Advanced 42 | V16 Update 1 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 |
51 |
52 |
53 |
54 | 55 | 56 | true 57 | 58 | 59 |
60 |
61 | 62 | 63 | 64 |
65 |
66 | 67 | 68 | Optimized 69 | 100 70 | TemplateValve 71 | 2 72 | LAD 73 | false 74 | 75 | 76 | 77 | 78 | 79 | 80 | de-DE 81 | 82 | 83 | 84 | 85 | 86 | en-GB 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | LAD 131 | 132 | 133 | 134 | 135 | 136 | 137 | de-DE 138 | 139 | 140 | 141 | 142 | 143 | en-GB 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | de-DE 154 | Release valve 155 | 156 | 157 | 158 | 159 | en-GB 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | LAD 245 | 246 | 247 | 248 | 249 | 250 | 251 | de-DE 252 | 253 | 254 | 255 | 256 | 257 | en-GB 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | de-DE 268 | Open / Close valve 269 | 270 | 271 | 272 | 273 | en-GB 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | LAD 343 | 344 | 345 | 346 | 347 | 348 | 349 | de-DE 350 | 351 | 352 | 353 | 354 | 355 | en-GB 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | de-DE 366 | Call valve FB 367 | 368 | 369 | 370 | 371 | en-GB 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | de-DE 384 | Sample valve template 385 | 386 | 387 | 388 | 389 | en-GB 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | de-DE 400 | 401 | 402 | 403 | 404 | 405 | en-GB 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | LAD 450 | 451 | 452 | 453 | 454 | 455 | 456 | de-DE 457 | 458 | 459 | 460 | 461 | 462 | en-GB 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | de-DE 473 | Release valve 474 | 475 | 476 | 477 | 478 | en-GB 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | 561 | 562 | 563 | LAD 564 | 565 | 566 | 567 | 568 | 569 | 570 | de-DE 571 | 572 | 573 | 574 | 575 | 576 | en-GB 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | de-DE 587 | Open / Close valve 588 | 589 | 590 | 591 | 592 | en-GB 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | LAD 662 | 663 | 664 | 665 | 666 | 667 | 668 | de-DE 669 | 670 | 671 | 672 | 673 | 674 | en-GB 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | 684 | de-DE 685 | Call valve FB 686 | 687 | 688 | 689 | 690 | en-GB 691 | 692 | 693 | 694 | 695 | 696 | 697 | 698 | 699 | 700 | 701 | 702 | de-DE 703 | Sample valve template 704 | 705 | 706 | 707 | 708 | en-GB 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | -------------------------------------------------------------------------------- /Sample/LAD_Valve_V0.1.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 2020-03-29T17:41:51.5680055Z 6 | None 7 | 8 | 9 | Totally Integrated Automation Portal 10 | V16 Update 1 11 | 12 | 13 | TIA Portal Version Control Interface 14 | V16 15 | 16 | 17 | TIA Portal Openness 18 | V16 Update 1 19 | 20 | 21 | SINAMICS Startdrive Advanced 22 | V16 Update 1 23 | 24 | 25 | SINAMICS Startdrive G130, G150, S120, S150, SINAMICS MV, S210 26 | V16 Update 1 27 | 28 | 29 | SINAMICS Startdrive G110M, G120, G120C, G120D, G120P 30 | V16 Update 1 31 | 32 | 33 | STEP 7 Professional 34 | V16 Update 1 35 | 36 | 37 | STEP 7 Safety 38 | V16 39 | 40 | 41 | WinCC Advanced 42 | V16 Update 1 43 | 44 | 45 | 46 | 47 | 48 | 49 |
50 | 51 | 52 | 53 |
54 |
55 | 56 |
57 |
58 |
59 | 60 |
61 |
62 |
63 | 64 | Optimized 65 | 100 66 | Valve 67 | 1 68 | LAD 69 | false 70 | 71 | 72 | 73 | 74 | 75 | 76 | de-DE 77 | easy sample 78 | 79 | 80 | 81 | 82 | en-GB 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | LAD 139 | 140 | 141 | 142 | 143 | 144 | 145 | de-DE 146 | 147 | 148 | 149 | 150 | 151 | en-GB 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | de-DE 162 | Open valve 163 | 164 | 165 | 166 | 167 | en-GB 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | LAD 226 | 227 | 228 | 229 | 230 | 231 | 232 | de-DE 233 | 234 | 235 | 236 | 237 | 238 | en-GB 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | de-DE 249 | Close valve 250 | 251 | 252 | 253 | 254 | en-GB 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | LAD 299 | 300 | 301 | 302 | 303 | 304 | 305 | de-DE 306 | 307 | 308 | 309 | 310 | 311 | en-GB 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | de-DE 322 | Output valve 323 | 324 | 325 | 326 | 327 | en-GB 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | de-DE 340 | Valve control 341 | 342 | 343 | 344 | 345 | en-GB 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | -------------------------------------------------------------------------------- /Sample/LAD_Valves_V0.1.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 2020-03-29T18:09:27.7952476Z 6 | None 7 | 8 | 9 | Totally Integrated Automation Portal 10 | V16 Update 1 11 | 12 | 13 | TIA Portal Version Control Interface 14 | V16 15 | 16 | 17 | TIA Portal Openness 18 | V16 Update 1 19 | 20 | 21 | SINAMICS Startdrive Advanced 22 | V16 Update 1 23 | 24 | 25 | SINAMICS Startdrive G130, G150, S120, S150, SINAMICS MV, S210 26 | V16 Update 1 27 | 28 | 29 | SINAMICS Startdrive G110M, G120, G120C, G120D, G120P 30 | V16 Update 1 31 | 32 | 33 | STEP 7 Professional 34 | V16 Update 1 35 | 36 | 37 | STEP 7 Safety 38 | V16 39 | 40 | 41 | WinCC Advanced 42 | V16 Update 1 43 | 44 | 45 | 46 | 47 | 48 | 49 |
50 |
51 |
52 |
53 |
54 |
55 | 56 | Optimized 57 | 100 58 | Valves 59 | 3 60 | LAD 61 | false 62 | 63 | 64 | 65 | 66 | 67 | 68 | de-DE 69 | 70 | 71 | 72 | 73 | 74 | en-GB 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | LAD 84 | 85 | 86 | 87 | 88 | 89 | 90 | de-DE 91 | 92 | 93 | 94 | 95 | 96 | en-GB 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | de-DE 107 | 108 | 109 | 110 | 111 | 112 | en-GB 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | de-DE 125 | 126 | 127 | 128 | 129 | 130 | en-GB 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | -------------------------------------------------------------------------------- /Sample/Sequence.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mking2203/CodeGeneratorOpenness/7ceff738e01687ba6aa99c569daecc05879916be/Sample/Sequence.png -------------------------------------------------------------------------------- /Sample/plcBlock_LAD_Block_Logic.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 2020-05-27T18:57:34.0416305Z 6 | None 7 | 8 | 9 | Totally Integrated Automation Portal 10 | V16 Update 1 11 | 12 | 13 | TIA Portal Version Control Interface 14 | V16 15 | 16 | 17 | TIA Portal Openness 18 | V16 Update 1 19 | 20 | 21 | SINAMICS Startdrive Advanced 22 | V16 Update 2 23 | 24 | 25 | SINAMICS Startdrive G130, G150, S120, S150, SINAMICS MV, S210 26 | V16 Update 2 27 | 28 | 29 | SINAMICS Startdrive G110M, G120, G120C, G120D, G120P 30 | V16 Update 2 31 | 32 | 33 | STEP 7 Professional 34 | V16 Update 1 35 | 36 | 37 | STEP 7 Safety 38 | V16 39 | 40 | 41 | WinCC Advanced 42 | V16 Update 1 43 | 44 | 45 | 46 | 47 | 48 | 49 |
50 | 51 |
52 |
53 | 54 |
55 |
56 |
57 |
58 | 59 |
60 |
61 | 62 | Optimized 63 | 100 64 | Block_Logic 65 | 1 66 | LAD 67 | false 68 | 69 | 70 | 71 | 72 | 73 | 74 | de-DE 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | LAD 117 | 118 | 119 | 120 | 121 | 122 | 123 | de-DE 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | de-DE 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | LAD 192 | 193 | 194 | 195 | 196 | 197 | 198 | de-DE 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | de-DE 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | LAD 220 | 221 | 222 | 223 | 224 | 225 | 226 | de-DE 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | de-DE 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | de-DE 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | -------------------------------------------------------------------------------- /Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mking2203/CodeGeneratorOpenness/7ceff738e01687ba6aa99c569daecc05879916be/Thumbs.db --------------------------------------------------------------------------------