EPLAN

ExternalTestAssembly

Daniel Papp ist immer fleißig, vielen Dank nochmal an dieser Stelle.

Aufgrund der Implementierung von CAE-Consulting ist nun bekannt wie man DLLs im Scripting nutzen kann. Somit kann man auch Excel oder SQL bedienen… eigentlich Alles außer der immer noch kostenpflichtigen EPLAN API…

Vielen Dank für das Beispiel! Wie gewohnt findet man die Daten auf Daniels GitHub Repo.

using System;
using System.Reflection;
using System.Windows.Forms;

namespace ExternalTestAssembly
{
    public class Script
    {
        [Start]
        public void Run()
        {
            //AbsoluteAssemblyPath: for example "C:\Users\Public\EPLAN\Data\Binaries\MyWPFControlLibrary.dll
            Assembly myAssembly = Assembly.LoadFrom(@"AbsoluteAssemblyPath");

            //Namespace.ClassName: absolute name of the class to instaciate 
            //"InstAttibute": if the constructor of the class needs some attributes
            Object objectOfTestClass = myAssembly.CreateInstance("Namespace.ClassName", false, BindingFlags.ExactBinding, null, new Object[] {"InstAttibute"}, null, null);

            //Namespace.ClassName: again the class name to get the methode to execute
            //MethodName: Name of the method to execute
            MethodInfo show = myAssembly.GetType("Namespace.ClassName").GetMethod("MethodName");

            //result: remove if methode has no return type (void)
            //"MethodAttribute": attributes for the methode (could also be empty)
            Boolean result = (Boolean)show.Invoke(objectOfTestClass, new Object[]{ "MethodAttribute" });

            //go on with simple scriptcode
            if (result == true)
            {
                MessageBox.Show("Welcome to wonderland!");
            }
            else
            {
                MessageBox.Show("So you're not the chosen one!");
            }
            
        }
    }
}

 

Von |2017-11-09T12:23:40+01:002015-03-26|EPLAN, EPLAN-Scripts|

MenuCreator

Kennt Ihr das…?
Man hat ein Projekt längere Zeit im Kopf und man kommt nicht zur Umsetzung… Bei MenuCreator sind es ca. fünf Jahre.

Scripting in EPLAN macht Spaß, aber das Menübauen ist meiner Meinung nach nicht schön gelöst. Es ist somit fast unmöglich für einen EPLAN Anwender ohne Programmierkenntnissen sich selbst eins zu bauen.

Somit war das Ziel eine einfache UI zu bauen, in der man sich ein oder mehrere Menüs zusammenbauen kann.

Es können alle Scripte vom ShopForProcess einfach hinzugefügt werden. Aber auch eigene Scripte oder EPLAN Actions.

1

2

ShopForProcess: MenuCreator

Von |2015-03-25T13:08:01+01:002015-03-25|EPLAN, ShopForProcess|

Eigenschaftsanordnungsprojekt

Als EPLAN-Admin kennt man wohl die mühselige Arbeit alle Eigenschaftsanordnungen auf einen Standard zu bringen. Es ist sehr zeitintensiv und schwer zu organisieren. Hier kann ich jedem empfehlen es in einem eigenen Projekt zu machen und die Eigenschaftsanordnungen zu Im-/Exportieren über Projekt>Organisieren.

Eigenschaftsanordnungen-exportieren

Wenn man alle EPLAN-Symbole in allen Varianten platzieren möchte benötigt man dafür sehr viel Zeit. Ich habe es kurz mal gebenchmarked:

  • Symbolbibliotheken: 22
  • Symbole: 11590
  • Varianten: 87548

Bei manueller Platzierung wären es 251h vorausgesetzt man hat einen schnellen Rechner und arbeitet lokal. Wir haben ein Projekt vorbereitet welches alle Symbole in allen Varianten beinhaltet. Die Projekt-Struktur ist identisch mit der unter Einfügen>Symbol. Somit findet man sich schnell zurecht.

EPLAN-Projekt-Eigenschaftsanordnungen-Deutsch-2-3

Folgende Symbolbibliotheken wurden platziert:

  • BaseSymbolLibrary
  • CCL1ESS
  • GB_single_symbol
  • GB_symbol
  • GOST_single_symbol
  • GOST_symbol
  • GRAPHICS
  • HVAC_ESS
  • HYD1ESS
  • HYD2ESS
  • IEC_ED_ESS
  • IEC_SC_ESS
  • IEC_single_symbol
  • IEC_symbol
  • LUB1ESS
  • NFPA_single_symbol
  • NFPA_symbol
  • OS_SYM_ESS
  • PID_ESS
  • PNE1ESS
  • PPE_SYM SPECIAL

EPLAN-Projekt-Eigenschaftsanordnungen-Deutsch-2-3-Motorschutz

 

Pro Symbol und Variante wird eine eigene Eigenschaftsanordnung erstellt. Der Name ist Customer_A (wobei “A” die Variante darstellt). Gerne können wir auch z.B. euer Firmenkürzel voranstellen. Somit ist sogar dieser Aufwand minimiert einen Namen zu wählen.

2015-03-10_13-52-27

Das Projekt gibt es in Deutsch & Englisch in Version 2.3 & 2.4. Auf Anfrage erstellen wir gerne auch das Projekt in einer anderen Sprache bzw. Version. Im Artikel findet Ihr auch Beispiel-PDFs der Projekte:

Von |2016-01-11T14:35:18+01:002015-03-12|EPLAN, ShopForProcess|

MainMenuName

Man lernt nie aus…
Menü-Erzeugung ist etwas was man beim EPLAN-Scripting meist als erstes macht… da schaut man sich auch keine Methoden an…

Wie im vorherigen Post erwähnt, habe ich bisl was mit mehreren Oberflächensprachen gemacht. Hier gab es ein Problem wenn man ein Hauptmenü hinzufügen will, denn normalerweise gibt man ja den Namen an (z.B. “Hilfe”). Aber im englischen heißt es eben anders…

Dafür hat EPLAN die Enumeration MainMenuName implementiert, was eigentlich immer der empfohlene Weg wäre:

public enum MainMenuName {
  eMainMenuProject = 0,
  eMainMenuPage,
  eMainMenuEdit,
  eMainMenuView,
  eMainMenuProjectData,
  eMainMenuFind,
  eMainMenuOptions,
  eMainMenuUtilities,
  eMainMenuWindow,
  eMainMenuHelp,
  eMainMenuInsert,
  eMainMenuLayoutspace,
}

Die Verwendung sieht wie folgt aus:

uint menuId = menu.AddMainMenu("MyMenu", Eplan.EplApi.Gui.Menu.MainMenuName.eMainMenuHelp,
    "MyMenu", "ActionName", "Description", 1);

Hätte ich das eher Gewusst das besser recherchiert als ich das Buch geschrieben habe, wäre die Info eher gekommen :^)

Von |2017-11-09T12:23:40+01:002015-03-09|EPLAN, EPLAN-Scripts|

GuiLanguage

Es ist schön mit MultiLanguageStrings zu arbeiten, wenn man z.B. ein Menü in verschiedenen Oberflächensprachen darstellen möchte.

Leider gibt es keine Methodenüberlagerung für ein Popup-Menü, welches MultiLanguageStrings erlaubt.
Aus diesem Grund habe ich einen Weg gesucht um dies trotzdem zu realisieren.
Geht auch, mit umgekehrten Weg… Den MultiLanguageString per GetStringToDisplay() Methode anzeigen…

Hier benötigt man aber auch die GuiLanguage, welche man wie folgt herausfindet:

ISOCode.Language guiLanguage = new Languages().GuiLanguage.GetNumber();
Von |2017-11-09T12:23:40+01:002015-03-08|EPLAN, EPLAN-Scripts|
Nach oben