EPLAN-Scripts

EPLAN5 Konvertierung

Ach… auf meine alten P8 Tage darf ich noch EPLAN5 Projekte konvertieren… das freut mich.
Weniger freut es mich dass man im Scripting dann garnicht weiß, wo EPLAN die *.elk Datei erzeugt.

Komischerweise wird hier eine Großbuchstabenkonvertierung gemacht…

Darum hier mal die Routine wie man von einem EPLAN5 Projekt die Projektdatei von P8 ermittelt:

private string GetNewP8ProjectFromEplan5Import(string path)
{
	var diffWithFilename = path.Replace(ProjectsPath, ""); // FolderA\ProjectA.P

	FileInfo fi = new FileInfo(diffWithFilename);

	var diffWithoutFilename = diffWithFilename.Replace(fi.Name, "").ToUpper(); // FOLDERA\ProjectA.P
	var filename = fi.Name.Replace(".P", ".elk"); // ProjectA.elk			

	var project = Path.Combine(DestinationPath, diffWithoutFilename, filename);

	return project;
}

Danach kann z.B. das Projekt geöffnet, oder auch Actions ausgeführt werden.

Von |2017-11-09T11:22:18+01:002015-12-04|EPLAN, EPLAN-Scripts|

Script Debugging

Da schreibt man ein Buch… denkt man kennt sich einigermaßen aus mit dem Thema…
Und fast eineinhalb Jahre später, kann man Scripte debuggen und ich weiß von nichts… keiner schreibt was in dieses Internet. Dann mach ich das mal.

Seit EPLAN 2.4 ist es möglich Scripte zu debuggen. Es gibt kleine Einschränkungen aber man kann sich endlich die unendlichen MessageBoxen und Scripte Neulad-Szenarien sparen.

Es gibt, wie so oft, eine versteckte Einstellung welche gesetzt werden muss, damit das Debuggen funktioniert.
Ich habe es mal in das kostenlose Script ExtendedSettings gepackt.

Der Einstellungspfad ist folgender:
USER.EplanEplApiScriptLog.DebugScripts

 

In Visual Studio dann einfach:

  • Debug > Attach to Process…
  • EPLAN.exe auswählen
  • Attach

In EPLAN:

  • Script laden/ausführen

 

EPLAN kopiert beim Laden/Ausführen eines Scriptes das Script in den Temp-Ordner.
Der Dateiname ist wie folgt aufgebaut:
Debug_[Scriptname]

Leider können dadurch keine Haltepunkte in EPLAN gesetzt werden. Dies muss per Code geschehen:

System.Diagnostics.Debugger.Break();

Aber: Ist einmal ein Breakpoint gesetzt worden, kann auch wie gewohnt in Visual Studio ein Haltepunkt gesetzt werden.

Wichtig: Wenn die EPLAN-Einstellung bzgl. Script Debugging nicht gesetzt ist, müssen diese Haltepunkte entfernt werden.

Als Workaround habe ich folgendes herausgefunden:
Mit der Compiler-Abfrage auf #if DEBUG kann dieses Problem umgangen werden.

#if DEBUG
	System.Diagnostics.Debugger.Break(); 
#endif

 

Hier noch ein kleines Demo Video:

 

Ich bin ziemlich traurig darüber dass ich das jetzt erst erfahren habe. Ich sollte mal die Emails zählen welche ich die letzten 1,5 Jahre beantwortet habe mit der Frage “ist debugging bei Scripten nicht möglich?”.
Vielleicht denkt jeder der diesen Weg schon kannte einfach dass ich das schon wüsste…
Naja, ich bin einfach nur froh um diese Funktion!

Anbei noch mein Beispiel:

using System;
using System.Linq;
using System.Windows.Forms;
using Eplan.EplApi.Base;
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Scripting;
using System.Windows.Forms;
using Eplan.EplApi.Scripting;

namespace ibKastl.Scripts.Test
{
    public class Test
    {
        [Start]
        public void Action()
        {
#if DEBUG
			System.Diagnostics.Debugger.Break();
#endif
			MessageBox.Show("Start walking...");

#if DEBUG
	        System.Diagnostics.Debug.WriteLine("Walk 500 miles...");
#endif
	        for (int i = 1; i <= 500; i++)
	        {
#if DEBUG
				System.Diagnostics.Debug.WriteLine("Mile {0}: still walking...", i); 
#endif
			}

	        MessageBox.Show("End");
        }
    }
}
Von |2017-11-09T11:22:18+01:002015-12-04|EPLAN, EPLAN-Scripts|

XEsSetProjectPropertyAction PropertyIdentName

EPLAN hat ja die Handhabung mit benutzerdefinierten Eigenschaften geändert.
Diese können nun über Optionen > Eigenschaften konfigurieren… geändert werden.

Leider hat EPLAN nicht gesagt wie man diese Eigenschaften dann auch Schreiben kann.
In der Action XEsSetProjectPropertyAction ist nur dokumentiert wie man die ID-bezogenen Eigenschaften setzt.

Es gibt, wie so oft, einen nicht dokumentierten Parameter namens PropertyIdentName mit dem man die Eigenschaften ansprechen kann.

Beispiel:

  • Projekt
  • Seite
  • Funktion
  • Artikelreferenz
XEsSetProjectPropertyAction /PropertyIdentName:"EPLAN.Project.UserSupplementaryField1" /PropertyIndex:0 /PropertyValue:"My project property"

XEsSetPagePropertyAction /PropertyIdentName:"EPLAN.Page.UserSupplementaryField1" /PropertyIndex:0 /PropertyValue:"My page property"

XEsSetPropertyAction /PropertyIdentName:"EPLAN.Function.UserSupplementaryField1" /PropertyIndex:0 /PropertyValue:"My function property"

XEsSetPropertyAction /PropertyIdentName:"EPLAN.ArticleRef.EPLAN.PartRef.UserSupplementaryField1" /PropertyIndex:1 /PropertyValue:"My articlereference property"
Von |2017-11-09T11:22:18+01:002015-12-02|EPLAN, EPLAN-Scripts|

ToggleLayers

Ich habe im letzten Jahr, seit Veröffentlichung von EPLAN 2.4, viele Anfragen bzgl. der EPLAN API Erweiterung ToggleLayers erhalten.

Mit diesem API Addin das von allen EPLAN Anwendern, auch ohne API genutzt werden kann, ist es möglich Ebenen per Scripting zu steuern.

Leider habe ich keine Freigabe für den Download bekommen. Aber die Anmerkung dass User welche diese Funktion brauchen beim Support danach fragen sollen.

Somit ist geklärt: Auch mit EPLAN 64bit (2.4/2.5) ist es möglich die Ebenen umzuschalten.

Hier die Doku der Action:

Actionname
ToggleLayers

Parameter
LAYERSTATE

Werte

  • Name der Ebene zum Beispiel EPLAN491
  • Textgröße zum Beispiel 1,0
  • Sichtbar Wert y für sichtbar / n für unsichtbar
  • Drucken Wert y für Druckausgabe / n für keine Druckausgabe
  • Farbe gemäß der Farbnummern in EPLAN z.B. 102

Beispiel:

ToggleLayers /LAYERSTATE:"EPLAN491|1,0|y|y|102"
Von |2017-11-09T11:22:18+01:002015-11-24|EPLAN, EPLAN-Scripts|

EPLAN Events

Anbei eine Auflistung von Events, auf welche man sich per API & Script aufschalten kann.

Beispiel

Beim Projekt-Schließen wird die Action ausgeführt.

using System.Windows.Forms;
using Eplan.EplApi.Scripting;

public class MyEventHandler
{
    [DeclareEventHandler("onActionStart.String.XPrjActionProjectClose")]
    public void Action()
    {
        MessageBox.Show("Ich kann Scripten!");

        return;
    }
}

 

Eplan.EplApi.OnMainEnd
Send when the Main End starts.

Eplan.EplApi.OnMainStart
Send when the Main Start is done. This is when a mainframe is available. The event is not send when the application is started in offline modus or to execute an action.

Eplan.EplApi.OnPostOpenProject
Project management: After opening a project

Eplan.EplApi.OnUserPreCloseProject
Project management: Before closing a project

Ged.Redraw
Force a Redraw for the GED

NCSettingsMachineTools.Redraw
Force a Redraw for the NC Machine Tools settings tab

onActionEnd.String.*
Send after the end of any Action.

onActionStart.String.*
Send before the start of any Action.

Page.ConnectionDirty
Event when a Page gets dirty

Project.CablingDirty
Event when cabling gets dirty

Von |2017-11-09T11:22:19+01:002015-11-19|EPLAN, EPLAN-Scripts|
Nach oben