Wir werden ein Script erstellen um automatisch eine Beschriftung zu erzeugen, welche gleich im Projektordner abgespeichert wird.

Hier gibt es eine schöne Funktion in Eplan. Dienstprogramme/Automatisiert bearbeiten/Einstellungen…

In diesem Dialog kann man sich sehr schön seine Beschriftungen zusammen klicken:

Zuerst erstellen wir uns ein Testscript (klicken auf neu)

Hier vergeben wir einen beliebigen Namen

Nun markieren wir „Beschriften“ und fügen es nach rechts ein

Im folgenden Dialog kann man nun eine beliebige Beschriftung zusammenstellen (Speicherort ist zu vernachlässigen, da wir diesen später im Script bestimmen)

Wichtig! Nun muss das Script gespeichert werden (Diskettensymbol).

Danach klicken wir oben auf Bearbeiten (Stiftsymbol).

Siehe da… Wir haben ein (fast) fertiges Script :)

public class Script
{
    [Start]
    public void AutoTreat(String ProjectName)
    {
        Progress progress = new Progress("SimpleProgress");
        progress.BeginPart(100, "");
        progress.SetAllowCancel(true);
        if (!progress.Canceled())
        {
            progress.BeginPart(100, "Labelling");
            ActionCallingContext labellingContext = new ActionCallingContext();
            labellingContext.AddParameter("CONFIGSCHEME", "test");
            labellingContext.AddParameter("DESTINATIONFILE", @"C:\Test");
            labellingContext.AddParameter("FILTERSCHEME", "");
            labellingContext.AddParameter("LANGUAGE", "de_DE");
            labellingContext.AddParameter("LogMsgActionDone", "true");
            labellingContext.AddParameter("SHOWOUTPUT", "1");
            labellingContext.AddParameter("PROJECTNAME", ProjectName);
            labellingContext.AddParameter("RECREPEAT", "1");
            labellingContext.AddParameter("SORTSCHEME", "");
            labellingContext.AddParameter("TASKREPEAT", "1");
            new CommandLineInterpreter().Execute("label", labellingContext);
            progress.EndPart();
        }

        progress.EndPart(true);
    }
}

Ein bisschen Nacharbeit ist aber dennoch erforderlich:

public class Script
{
    [Start]
    public void AutoTreat(String ProjectName)
    {
    }

Hier Bennenen wir unser Script und unsere Klasse:

public class Beschriftung
{
}

In dieser Zeile wird ein String übergeben für den Projektnamen. Dies funktioniert aber im Scripting leider nicht. Darum kann man hier den String löschen und wir bauen uns das ganze selbst zusammen.

public void AutoTreat(String ProjectName)

Zusammen ergibt das alles:

public class Beschriftung
{
    [DeclareAction("Beschriftung")]
    public void BeschriftungVoid()
    {
    }
}

In der folgenden Zeile wird nur ein Startpunkt festgelegt. Dies dient dazu das Script zu starten über Dienstprogramme/Scripte/Ausführen…

Wir wollen aber das ganze fest einbinden (Laden…). Darum deklarieren wir nun eine neue Action, welche wir dann wie immer in der Toolbar verknüpfen können.

[Start]

Wird dann zu…

[DeclareAction("Beschriftung")]

Nun sieht unser Code wie folgt aus:

public class Beschriftung
{
    [DeclareAction("Beschriftung")]
    public void BeschriftungVoid()
    {
        Progress progress = new Progress("SimpleProgress");
        progress.BeginPart(100, "");
        progress.SetAllowCancel(true);
        if (!progress.Canceled())
        {
            progress.BeginPart(100, "Labelling");
            ActionCallingContext labellingContext = new ActionCallingContext();
            labellingContext.AddParameter("CONFIGSCHEME", "test");
            labellingContext.AddParameter("DESTINATIONFILE", @"C:\Test");
            labellingContext.AddParameter("FILTERSCHEME", "");
            labellingContext.AddParameter("LANGUAGE", "de_DE");
            labellingContext.AddParameter("LogMsgActionDone", "true");
            labellingContext.AddParameter("SHOWOUTPUT", "1");
            labellingContext.AddParameter("PROJECTNAME", ProjectName);
            labellingContext.AddParameter("RECREPEAT", "1");
            labellingContext.AddParameter("SORTSCHEME", "");
            labellingContext.AddParameter("TASKREPEAT", "1");
            new CommandLineInterpreter().Execute("label", labellingContext);
            progress.EndPart();
        }

        progress.EndPart(true);
    }
}

Nun kommen wir zu der eigentlichen Action:

Progress progress = new Progress("SimpleProgress");
    progress.BeginPart(100, "");
    progress.SetAllowCancel(true);
    if (!progress.Canceled())
    {
        progress.BeginPart(100, "Labelling");

        progress.EndPart();
    }

    progress.EndPart(true);
}

Hier wird eine Progressbar (Ladebalken) initialisiert (Titelzeile = „Labelling“). Die Action wird ausgeführt wenn nicht der Button Cancel (Deutsch = Abbrechen) gedrückt wird.

Nun kommen wir zur Beschriftungsfunktion:

ActionCallingContext labellingContext = new ActionCallingContext();
labellingContext.AddParameter("CONFIGSCHEME", "test");
labellingContext.AddParameter("DESTINATIONFILE", @"C:\Test");
labellingContext.AddParameter("FILTERSCHEME", "");
labellingContext.AddParameter("LANGUAGE", "de_DE");
labellingContext.AddParameter("LogMsgActionDone", "true");
labellingContext.AddParameter("SHOWOUTPUT", "1");
labellingContext.AddParameter("PROJECTNAME", ProjectName);
labellingContext.AddParameter("RECREPEAT", "1");
labellingContext.AddParameter("SORTSCHEME", "");
labellingContext.AddParameter("TASKREPEAT", "1");
new CommandLineInterpreter().Execute("label", labellingContext);

ActionCallingContext: Sind die Parameter welche der Action “mitgegeben” werden.

AddParameter: fügt Parameter hinzu (Parametername + Wert)

CommandLineInterpreter().Execute: Führt die Action mit den Parametern aus.

Die Parameter wurden von Eplan schon alle gefüllt (nach dem Schema welches wir eingestellt, bzw. konfiguriert haben)

Man kann dies auch nachlesen (in der Suche nach „label“ suchen).

Nun müssen wir aber noch beim Parameter „PROJECTNAME“ unser Projekt irgendwie eintragen, da Eplan so nicht weiß welches Project gemeint ist.

Zusätzlich versuchen wir gleich den aktuellen Projektordner herauszufinden…

Das Ganze ist nicht schwer, wenn man weiß wie ;)

Zuerst eine kurze Erklärung von „String“. Was ist ein String. Einfach gesagt eine Zeichenkette (Zahlen, Buchstaben, usw.)

Nun wollen wir diese Informationen (Projektname und Projektpfad) jeweils in einen String schreiben.

Die meisten von Euch kennen bestimmt die Pfadvariablen in Eplan. Genau diese nutzen wir nun im Scripting auch.

string ProjectName = PathMap.SubstitutePath("$(P)");
string sProjectName = PathMap.SubstitutePath("$(PROJECTNAME)");
string Projectpath = PathMap.SubstitutePath("$(PROJECTPATH)");

Beim Projektpfad möchte ich aber, dass die Beschriftung im selben Ordner gespeichert wird wie die *.elk-Datei.

Darum fügen wir eine Funktion ein welche den String kürzt. Beispiel:

„C:\Test\Testprojekt.elk“ >>> „C:\Testprojekt.elk“

Projectpath = Projectpath.Substring(0, sProjectpath.LastIndexOf("\\"));

Nun bauen wir das ganze mal zusammen :)

public class Beschriftung
{
    [DeclareAction("Beschriftung")]
    public void BeschriftungVoid()
    {
        string ProjectFullName = PathMap.SubstitutePath("$(P)"); // Projektpfad + Projektname + Erweiterung
        string sProjectName = PathMap.SubstitutePath("$(PROJECTNAME)");
        string Projectpath = PathMap.SubstitutePath("$(PROJECTPATH)"); // Projektpfad
        Projectpath = Projectpath.Substring(0, Projectpath.LastIndexOf("\\")); // Pfad zur Projektdatei

        // Initialisierung Progressbar
        Progress progress = new Progress("SimpleProgress");
        progress.BeginPart(100, "");
        progress.SetAllowCancel(true);
        if (!progress.Canceled())
        {
            progress.BeginPart(100, "Text im Ladebalken Dialog");

            // Parameter für die Action
            ActionCallingContext labellingContext = new ActionCallingContext();
            labellingContext.AddParameter("CONFIGSCHEME", "test");
            labellingContext.AddParameter("DESTINATIONFILE", Projectpath + sProjectName + "_Testbeschriftung.txt"); // Zieldatei: "Projektpfad/Projektname_Testbeschriftung.txt"
            labellingContext.AddParameter("FILTERSCHEME", "");
            labellingContext.AddParameter("LANGUAGE", "de_DE");
            labellingContext.AddParameter("LogMsgActionDone", "true");
            labellingContext.AddParameter("SHOWOUTPUT", "1");
            labellingContext.AddParameter("PROJECTNAME", ProjectFullName); // Projektname komplett mit Erweiterung
            labellingContext.AddParameter("RECREPEAT", "1");
            labellingContext.AddParameter("SORTSCHEME", "");
            labellingContext.AddParameter("TASKREPEAT", "1");

            // Ausführen der Beschriftungsaction mit Parametern
            new CommandLineInterpreter().Execute("label", labellingContext);

            // Progressbar ENDE
            progress.EndPart();
        }
        progress.EndPart(true);
    }
}

Wichtig sind die Ergänzungen bei den Parametern DESTINATIONFILE (Zieldatei) und PROJECTNAME!

Falls ihr etwas nicht versteht oder allgemeine Fragen habt, schreibt dies einfach in die Kommentare!