Archiv für das Jahr: 2015

EPLAN-API: Showcase 2015 Mai

Ich habe die letzten Wochen paar Kundenlösungen entwickelt. Sind alles Funktionen welche, meiner Meinung nach, in EPLAN nicht fehlen sollten…

Falls jemand auch so schöne Funktionen haben möchte, einfach melden :^)

 

CorrectLocationDescription

Mit CorrectLocationDescription können Strukturkennzeichenbeschreibungen, welche leer sind automatisch gesetzt werden. So können für unterschiedliche Maschinen die Beschreibungen vorgehalten werden.

 

ToggleVariant

Mit ToggleVariant können schnell Varianten eines Symbol durchgeschaltet werden.

 

UpdateDevice

Mit UpdateDevice werden alle Artikeldaten des ersten Artikels, an das Betriebsmittel geschrieben. Es erfolgt hier keine Abfrage mehr wie in der EPLAN Standard-Funktion.

 

ReplaceDevice

Mit ReplaceDevice können Artikelnummern automatisch ersetzt werden. Es werden alle Eigenschaften des Artikels an das Betriebsmittel geschrieben.

 

ChangeCableLength

Mit ChangeCableLength können die Längen von selektierten Kabeln mit einem Offsetwert angepasst werden. Somit können zum Beispiel alle Kabel verlängert werden, wenn die Schaltschrankposition geändert wird.

Von |2015-10-29T11:29:53+01:002015-05-28|EPLAN|

EPLAN-API: Signierung automatisieren

Ach, es ist schon anstrengend jedesmal die API-Addins zu signieren. Gerade wenn man in der Entwicklung ist.
Ich mag keine Arbeitsschritte die ich immer wieder gleich manuell machen muss, das dürfte ja bekannt sein :^)

Darum habe ich mich umgeschaut wie man denn das Signieren automatisieren kann.

Mit dem Befehlszeilentool MsBuild kann man Projekte bauen und mit Parametern auch gleich signieren:

msbuild myapplication.sln /p:SignAssembly=true /p:DelaySign=true /p:AssemblyOriginatorKeyFile=mykey.snk

Einfach die Pfade zu den Dateien (Projekt/Key-File) eintragen und fertig… Denkt man. Aber es klappt nicht, habe schon einige Zeit damit verbracht dieses Verhalten nachzuvollziehen.

Aber ich habe einen Workaround gefunden. Die Projektdatei (bei C# *.csproj) kann man so anpassen dass beim Release auch signiert wird:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
  <PlatformTarget>x86</PlatformTarget>
  <OutputPath>bin\Release\</OutputPath>
  <SignAssembly>true</SignAssembly>
  <AssemblyOriginatorKeyFile>myKey.snk</AssemblyOriginatorKeyFile>
  <DelaySign>true</DelaySign>
</PropertyGroup>

Zu beachten: Bei Änderungen an den Eigenschaften im Projekt können sich diese Werte ändern.

Ich habe mir den Arbeitsablauf schon soweit automatisiert, dass bei jedem Release-Build die DLL gleich signiert wird. Alle Abhängigkeiten werden auch gleich zusammenkopiert. Für das Debuggen das gleiche, aber ohne Signing :^)

Jetzt muss ich nur noch den Upload zu EPLAN automatisieren, wenn da Jemand was für mich hat, wäre sehr dankbar!

Von |2015-05-12T14:03:21+02:002015-05-17|EPLAN|

EPLAN-API: Kabellänge in Einheit setzen

Aufgrund eines aktuellen Projektes bin ich in Berührung mit der Klasse UnitParser gekommen. Hat mir ziemlich Kopfschmerzen bereitet, aber mit Hilfe vom (super) EPLAN-Support konnte ich mein Vorhaben realisieren.

Zur Kabellänge sollte ein gewisser Wert (in Meter) addiert werden. Generell kein Problem.
Aber man kann in EPLAN die Einheit am Kabel selbst bestimmen. So kann die Projekteinstellung Meter sein, aber am Kabel kann ein Wert in Millimeter angegeben werden.

Dadurch ergibt sich folgender Workflow:

  • Konvertierung der Kabellänge zu Länge in Meter
  • Addieren des Offsets
  • Konvertierung der Kabellänge von Meter in die Quell-Einheit (z.B. Millimeter)

 

Schön ist auch dass der ParserParameter gleich ein Property für die Unterdrückung von Nullstellen mitbringt.

private void SetCableLenght(Cable cable, double offsetInMeter)
{
    // Get cable properties
    UnitParser unitParserOld = new UnitParser();
    ParserParameter parserParameterOld = new ParserParameter();
    parserParameterOld.Group = UnitGroup.Length;
    parserParameterOld.SuppressFloatingZeroes = true; // remove trailling zeros

    string oldLengthInSourceUnit = cable.Properties.FUNC_CABLELENGTH;
    unitParserOld.Set(oldLengthInSourceUnit, parserParameterOld);

    // get the right enum
    String unitString = unitParserOld.GetUnit();
    foreach (Unit unit in Enum.GetValues(typeof(Unit)))
    {
        if (unit.ToString() == "Length_" + unitString)
        {
            parserParameterOld.UnitID = unit;
            break;
        }
    }

    // calc in meter
    ParserParameter parserParameterNew = new ParserParameter();
    parserParameterNew.UnitID = Unit.Length_m;
    double oldLengthInMeter = unitParserOld.ValueToUnit(parserParameterNew);
    double newLengthInMeter = oldLengthInMeter + offsetInMeter;
    UnitParser unitParserNew = new UnitParser();
    unitParserNew.Set(newLengthInMeter, "m", parserParameterNew);

    // calc in source unit
    string newLengthInSourceUnit = unitParserNew.ToDisplay(parserParameterOld);
    cable.Properties.FUNC_CABLELENGTH = newLengthInSourceUnit;
}
Von |2015-05-06T08:44:11+02:002015-05-06|EPLAN|

EPLAN Scripting & API Dokumentation erstellen

Wie schon öfters angemerkt, gibt es eine API-Dokumentation von EPLAN, welche leider nur mit dem Erwerb der API-Entwickler einsehbar ist.

Besonders schade daran ist, dass Scripting dort sehr gut beschrieben wird.

Da die Dokumentation von EPLAN selbst auch automatisch generiert wird, hat sich Daniel Papp die Mühe gemacht und das Ganze mal mit Sandcastle getestet.

Mit seiner Anleitung kann man sich eine eigene Scripting & API Dokumentation erstellen:

http://broadcast.oreilly.com/2010/09/build-html-documentation-for-y.html
Nicht erschrecken! Wir brauchen nur Step 1, Step 4 und den Anfang von 5.
Anstelle der in der Anleitung erzeugten Guy.dll + Guy.xml, binden wir die folgenden Dateien aus dem “..\EPLAN\Platform\[version]\Bin” Ordner ein:

  • Eplan.EplApi.AFu.dll
  • Eplan.EplApi.AFu.xml
  • Eplan.EplApi.Baseu.dll
  • Eplan.EplApi.Baseu.xml
  • Eplan.EplApi.DataModelu.dll
  • Eplan.EplApi.DataModelu.xml
  • Eplan.EplApi.EServicesu.dll
  • Eplan.EplApi.EServicesu.xml
  • Eplan.EplApi.Guiu.dll
  • Eplan.EplApi.Guiu.xml
  • Eplan.EplApi.HEServicesu.dll
  • Eplan.EplApi.HEServicesu.xml
  • Eplan.EplApi.MasterData.dll
  • Eplan.EplApi.Ppeu.dll
  • Eplan.EplApi.Ppeu.xml
  • Eplan.EplApi.Systemu.dll
  • Eplan.EplApi.Systemu.xml

In den Project Properties (Taste F4) kann man noch ein paar Einstellungen wie den Ausgabepfad, Format, Titel, Name etc. vornehmen.
Die Durchlaufzeit des Build-Prozesses kann je nach Rechnerleistung relativ hoch sein (Intel Core2, 2,4GHz ca. 50min).
Es werden auch Tausende Warnungen wegen fehlender Referenzen ausgegeben. Diesen bin ich nicht weiter nachgegangen. Das Ergebnis ist dennoch brauchbar.
Der User, und Migration Guide aus der Originaldoku fehlen. Der Rest scheint sehr ähnlich zu sein.
Man könnte so auch eigene Doku anfügen, oder sich nur die für das Scripting relevanten Bibliotheken (*.AFu.*; *.Baseu.*; *.Guiu.*) erzeugen.

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

Postbuild Befehlszeile ApiAddin

Ich muss selber immer nachschauen oder kopier mir es, darum schreib ich es hier mal auf :^)

Bei einem EPLAN ApiAddin ist es praktisch wenn die fertige DLL gleich ins Zielverzeichnis kopiert wird. In Visual Studio kann man das per Postbuild-Befehlszeile automatisieren:

COPY /Y "$(TargetDir)$(ProjectName).dll" "C:\Program Files (x86)\EPLAN\Platform\2.4.4\Bin\$(ProjectName).dll"

2015-04-28_09-46-33

Kurz zur Erklärung:

  • /Y: Unterdrückt die Bestätigungsaufforderung vor dem Überschreiben vorhandener Zieldateien.
  • $(TargetDir): Eingestellte Ausgabeverzeichnis
  • $(ProjectName): Projektname (sollte dem der DLL entsprechen)
Von |2017-11-09T11:24:11+01:002015-04-28|EPLAN, EPLAN-API|
Nach oben