{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Typenbibliothek" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "pandapower verfügt über eine Bibliothek, mit Hilfe derer Eigenschaften verschiedener Kabel und Transformatoren gespeichert werden können.\n", "\n", "Die folgenden Beispiele basieren alle auf Kabeln, sind aber übertragbar auf Transformatoren, wenn in den zugehörigen Funktionen der Parameter 'element=\"trafo\"' gesetzt wird.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## pandapower-Standardtypen" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Mit Hilfe der Funktion \"available_std_types()\" lassen sich die hinterlegten Daten abrufen:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": true }, "outputs": [], "source": [ "import pandapower as pp\n", "net = pp.create_empty_network()\n", "pp.available_std_types(net, element=\"line\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wird ein Kabel mit Hilfe der create_line()-Funktion erzeugt, werden die Parameter aus dieser Bibliothek entnommen." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "b1 = pp.create_bus(net, vn_kv=.4)\n", "b2 = pp.create_bus(net, vn_kv=.4)\n", "lid = pp.create_line(net, from_bus=b1, to_bus=b2, length_km=0.1, std_type=\"NAYY 4x50 SE\", name=\"test_line\")\n", "net.line.loc[lid]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Eigene Standardtypen definieren" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Es können auch eigene Daten in der Bibliothek hinterlegt werden.\n", "\n", "Dazu müssen mindestens die folgenden Parameter angegeben werden:\n", "\n", "**Für Kabel**:\n", "- r_ohm_per_km\n", "- x_ohm_per_km\n", "- c_nf_per_km\n", "- max_i_ka\n", "\n", "**Für Transformatoren:**\n", "- sn_mva\n", "- vn_hv_kv\n", "- vn_lv_kv\n", "- vk_percent\n", "- vkr_percent\n", "- i0_percent\n", "- pfe_kw\n", "- shift_degree\n", "\n", "Um die Parameter anzulegen, müssen Sie ein dictionary nach folgendem Muster anlegen:\n", "\n", "{\"parameter1\": parameter_wert1, \"parameter2\": paramter_wert2,...} \n", "\n", "Anschließend kann der neu definierte Kabeltyp mit der create_std_type()-Funktion in der Datenbank gesichert werden " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "net = pp.create_empty_network()\n", "test_type = {\"r_ohm_per_km\": 0.01, \"x_ohm_per_km\": 0.02, \"c_nf_per_km\": 10, \"max_i_ka\": 0.4, \"type\": \"cs\"}\n", "pp.create_std_type(net, name=\"test_type\", data=test_type, element=\"line\")\n", "pp.available_std_types(net, element=\"line\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wie man nachprüfen kann, ist der neu definierte Typ jetzt Teil der Standardbibliothek und kann wie gewohnt genutzt werden, um neue Verbindungen zu erzeugen." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "b1 = pp.create_bus(net, vn_kv=.4)\n", "b2 = pp.create_bus(net, vn_kv=.4)\n", "lid = pp.create_line(net, from_bus=b1, to_bus=b2, length_km=0.1, std_type=\"test_type\", name=\"test_line\")\n", "print(net.line.loc[lid])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Lokale Standardbibliotheken" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Definierte Typen werden im Netz gespeichert, wenn Sie die pp.to_json-Funktion verwenden und sind folglich auch dann verfügbar, wenn das Netz neu geladen wird.\n", "\n", "Wenn Sie Kabeltypen lokal speichern und in mehreren Netzen wiederverwenden möchten, können Sie ein dictionary im Format\n", "\n", "{\"std_type1: {\"r_ohm_per_km\": r_ohm_per_km,...}, \"std_type2\": {\"r_ohm_per_km\": r_ohm_per_km,...},...} anlegen und es mit der create_std_types-Funktion dem Netzwerk hinzufügen." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "net = pp.create_empty_network()\n", "linetypes = {\"typ1\": {\"r_ohm_per_km\": 0.01, \"x_ohm_per_km\": 0.02, \"c_nf_per_km\": 10, \"max_i_ka\": 0.4, \"type\": \"cs\"},\n", " \"typ2\": {\"r_ohm_per_km\": 0.015, \"x_ohm_per_km\": 0.01, \"c_nf_per_km\": 30, \"max_i_ka\": 0.3, \"type\": \"cs\"}}\n", "pp.create_std_types(net, data=linetypes, element=\"line\")\n", "pp.available_std_types(net)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dieses dictionary kann nun einfach in einem lokalen Verzeichnis gesichert werden (z.B. im pickle- oder json-Format) und bei Bedarf eingelesen werden. \n", "\n", "Alternativ kann die gesamte Bibliothek eines existierenden Netzwerks kopiert werden." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "new_net = pp.create_empty_network()\n", "pp.copy_std_types(from_net=net, to_net=new_net, element=\"line\")\n", "pp.available_std_types(new_net)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Weitere Parameter hinzufügen" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "Es ist möglich, die Bibliothek um weitere Parameter zu ergänzen und diese in pandapower zu verwenden. Wenn Sie bspw. eine Ausfallraten-Untersuchung im Rahmen einer Verlässlichkeitsanalyse durchführen möchten, können Sie den Parameter \"h_per_km\" zum Standardtyp hinzufügen.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import pandapower as pp\n", "net = pp.create_empty_network()\n", "test_type = {\"r_ohm_per_km\": 0.01, \"x_ohm_per_km\": 0.02, \"c_nf_per_km\": 10, \"max_i_ka\": 0.4, \"type\": \"cs\", \"h_per_km\": 0.01}\n", "pp.create_std_type(net, name=\"test_type\", data=test_type, element=\"line\")\n", "pp.available_std_types(net, element=\"line\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sie können prüfen, dass der neue Parameter in der Datenbank enthalten ist.\n", "\n", "Wir erzeugen jetzt zwei Verbindungen, eine vom neuen \"test_type\" und eine mit einem Typ, der den Parameter \"h_per_km\" nicht hat.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "b1 = pp.create_bus(net, vn_kv=.4)\n", "b2 = pp.create_bus(net, vn_kv=.4)\n", "l1 = pp.create_line(net, from_bus=b1, to_bus=b2, length_km=0.1, std_type=\"test_type\", name=\"test_line1\")\n", "l2 = pp.create_line(net, from_bus=b1, to_bus=b2, length_km=0.1, std_type=\"NAYY 4x50 SE\", name=\"test_line2\")\n", "net.line" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Der Parameter \"h_per_km\" ist nicht in der Tabelle, da es sich nicht um einen Standardparameter handelt. Er kann aber über die Funktion parameter_from_std_type() geladen werden." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pp.parameter_from_std_type(net, parameter=\"h_per_km\")\n", "net.line" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pandapower fügt den Parameter dort hinzu,wo er verfügbar ist. Die zweite Zeile enthält keinen Wert für h_per_km, weil er nicht in der Bibliothek verfügbar ist. Es ist aber alternativ möglich, einen Wert zu definieren, der angezeigt wird, wenn der Parameter nicht verfügbar ist.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pp.parameter_from_std_type(net, parameter=\"h_per_km\", fill=0.02)\n", "net.line" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Ändern von Standardtypen" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Die change_std_type()-Function ermöglicht es, vorhandene Einträge zu ersetzen." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "net = pp.create_empty_network()\n", "b1 = pp.create_bus(net, vn_kv=.4)\n", "b2 = pp.create_bus(net, vn_kv=.4)\n", "l2 = pp.create_line(net, from_bus=b1, to_bus=b2, length_km=0.1, std_type=\"NAYY 4x50 SE\", name=\"test_line\")\n", "net.line" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pp.change_std_type(net, l2, \"NAYY 4x150 SE\", element=\"line\")\n", "net.line" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Typensuche" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "\n", "Es is möglich, nach Einträgen anhand einer Reihe von Parametern zu suchen." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pp.find_std_type_by_parameter(net, data={\"r_ohm_per_km\": 0.1188, \"x_ohm_per_km\": 0.39})" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "Diese Parameter können zusätzlich mit einer Toleranz versehen werden, um mehrere mögliche Typen angezeigt zu bekommen." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pp.find_std_type_by_parameter(net, data={\"r_ohm_per_km\": 0.12, \"x_ohm_per_km\": 0.40}, epsilon=.05)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Lessons learned\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nach Abschluss dieses Tutorials sind Sie in der Lage, die Standardtypendatenbank:\n", "- zu verstehen,\n", "- zu ergänzen,\n", "- zu überarbeiten,\n", "- Ihren Bedürfnissen anzupassen." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" } }, "nbformat": 4, "nbformat_minor": 1 }