├── .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 | My Step X
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 |
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 |
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 |
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 |
55 |
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 |
55 |
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 |
56 |
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 |
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 |
54 |
57 |
58 |
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 |
52 |
55 |
56 |
57 |
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
--------------------------------------------------------------------------------