Archiv für den Monat: Mai 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|
Nach oben