diff --git a/README.md b/README.md index f48fac7..4fb8561 100644 --- a/README.md +++ b/README.md @@ -105,6 +105,7 @@ doc/ Dokumentation (Deutsch) - [Anwenderdokumentation](doc/Anwenderdoku.md) - Vollständige Anleitung mit Fehlerbehandlung - [Kurzanleitung / Fehlerfälle](doc/Anwenderdoku_kurz.md) - Kompakte Referenz +- [I/O Converter](doc/Anwenderdoku_ioconverter.md) - EA-Listen und TIA-Portal/WSCAD-Export - [Übersetzungsworkflow](doc/translate.md) - Dokumentation zum Textextraktions- und Übersetzungssystem ## Lizenz diff --git a/doc/Anwenderdoku.md b/doc/Anwenderdoku.md index f6c9b3e..6002df8 100644 --- a/doc/Anwenderdoku.md +++ b/doc/Anwenderdoku.md @@ -32,7 +32,7 @@ - [Warum werden manche Kabeltrassen nicht mit anderen verbunden?](#warum-werden-manche-kabeltrassen-nicht-mit-anderen-verbunden) - [Warum verbindet das Programm den Sensor mit genau dieser Kabeltrasse?](#warum-verbindet-das-programm-den-sensor-mit-genau-dieser-kabeltrasse) - [5. Fehlerfälle und Fehlerbehandlung](#5-fehlerfälle-und-fehlerbehandlung) - - [Allgemeine Fehler und Warnungen (beide Workflows)](#allgemeine-fehler-und-warnungen-beide-workflows) + - [Allgemeine Fehler und Warnungen](#allgemeine-fehler-und-warnungen) - [Detaillierte Beschreibung der Warnungen (Warnings)](#detaillierte-beschreibung-der-warnungen-warnings) - [1. `missing_attributes` (Fehlende oder unvollständige Block-Attribute)](#1-missing_attributes-fehlende-oder-unvollständige-block-attribute) - [2. `tunnel_missing_length` (Fehlende Längenangabe bei Tunnel)](#2-tunnel_missing_length-fehlende-längenangabe-bei-tunnel) @@ -47,9 +47,6 @@ - [Routing Errors (ERR-Routing)](#routing-errors-err-routing) - [Tunnel Connection Errors](#tunnel-connection-errors) - [Hinweise zur Excel-Fehlerausgabe (Cable Routing)](#hinweise-zur-excel-fehlerausgabe-cable-routing) - - [I/O Conversion Workflow - Hinweise](#io-conversion-workflow---hinweise) - - [Ausgabedateien bei Fehlern](#ausgabedateien-bei-fehlern) - - [Wichtige Hinweise](#wichtige-hinweise) # 1. Installation des Programmes und Schnellstart-Guide @@ -67,17 +64,6 @@ Ist Python installiert, werden per Doppelklick automatisch auf die `bin\install_ ## Schnellstart und Vewendung des Programms -Das Programm bietet **drei Hauptworkflows**, die je nach Anwendungsfall eingesetzt werden: - -### Workflow-Übersicht - -| Workflow | Batch-Datei | Zweck | Ausgabe | Verwendete Configs | -| -------- | ----------- | ----- | ------- | ------------------ | -| **Cable Routing** | `getexdraw.bat` | Vollständige Kabelberechnung mit Längen und Stücklisten | `*_cables.dxf`, `*_cables.xlsx`, `*_BOM.xlsx` | `allgemein.cfg`, `BMK.cfg`, `kabel.cfg`, `bezeichner.cfg` | -| **I/O Conversion** | `ioconverter.bat` | Export von Gerätelisten für TIA Portal, WSCAD, etc. | `*-TIA.xlsx`, `*-WSCAD.xlsx`, u.a. | `allgemein.cfg`, `BMK.cfg` | -| **Translation** | `extract.bat` + `tr2dxf_.bat` | Textextraktion und Übersetzung von DXF-Inhalten | `*_texts.json`/`.xlsx`, `*_.dxf` | `allgemein.cfg`, `translation/*.cfg` | - -**Hauptworkflow (Cable Routing):** Im auf dem Desktop erzeugten Ordner findet sich das eigentliche Programm *create_cables*. Um das Programm auszuführen, genügt es die zu verarbeitende .**dxf-Datei** per *Drag and Drop* auf das Programm zu ziehen. Das öffnen der *Command-Shell* bestätigt den Start des Programms und der Anwender wird über den Ablauf informiert. Die Ausgabe schreibt: @@ -781,9 +767,9 @@ Schritt 2: Bei Ausbleiben eines Schnittpunktes -> Vergrößern des Kreises. Bei # 5. Fehlerfälle und Fehlerbehandlung -## Allgemeine Fehler und Warnungen (beide Workflows) +## Allgemeine Fehler und Warnungen -Die folgende Tabelle zeigt alle möglichen Fehler- und Warnungstypen, die von `getpositions.py` erkannt werden. Diese gelten **für beide Workflows** (Cable Routing und I/O Conversion): +Die folgende Tabelle zeigt alle möglichen Fehler- und Warnungstypen, die von `getpositions.py` erkannt werden: | Fehlertyp | Kategorie | Beschreibung | Ursache | Behebung | |-----------|-----------|--------------|---------|----------| @@ -1102,24 +1088,3 @@ Die Fehler-Worksheets in `*_cables.xlsx` erscheinen **nur**, wenn tatsächlich F 3. Führen Sie das Programm erneut aus 4. Beheben Sie verbleibende Routing-Fehler 5. Wiederholen Sie, bis keine ERR-Worksheets mehr erstellt werden - ---- - -## I/O Conversion Workflow - Hinweise - -Der **I/O Conversion Workflow** (`ioconverter.bat`) führt **keine Routing-Berechnungen** durch und erzeugt daher auch keine Routing-spezifischen Fehler. Es werden ausschließlich die **allgemeinen Fehler und Warnungen** aus `getpositions.py` gemeldet (siehe [Allgemeine Fehler und Warnungen](#allgemeine-fehler-und-warnungen-beide-workflows)). - -### Ausgabedateien bei Fehlern - -- `*_errors.json` - enthält alle Fehler und Warnungen aus getpositions -- `*_positionsconv.json` - Zwischenergebnis mit extrahierten Positionen -- `*_TIA.xlsx`, `*_WSCAD.xlsx`, etc. - werden auch bei Warnungen erzeugt, können aber unvollständig sein - -### Wichtige Hinweise - -- **Fehlende Attribute** führen dazu, dass Elemente in den Export-Dateien fehlen -- **Fehlende KENNZEICHNUNG** verhindert die korrekte Zuordnung zu Unterverteilern -- **Doppelte IDs** können zu falschen Einträgen in den Excel-Listen führen - -**Empfehlung:** Beheben Sie alle Warnungen aus `*_errors.json`, bevor Sie die Export-Dateien an nachgelagerte Systeme (TIA Portal, WSCAD) übergeben. - diff --git a/doc/Anwenderdoku_ioconverter.md b/doc/Anwenderdoku_ioconverter.md new file mode 100644 index 0000000..a2de9e4 --- /dev/null +++ b/doc/Anwenderdoku_ioconverter.md @@ -0,0 +1,167 @@ +# Anwenderdoku zum I/O Converter (ioconverter) + +- [Zweck des Programms](#zweck-des-programms) +- [Schnellstart](#schnellstart) + - [Verwendung per Drag \& Drop](#verwendung-per-drag--drop) + - [Verwendung per Kommandozeile](#verwendung-per-kommandozeile) +- [Pipeline und Programmablauf](#pipeline-und-programmablauf) +- [Ausgabedateien](#ausgabedateien) + - [EA-Liste (`*_EA.xlsx`)](#ea-liste-_eaxlsx) + - [TIA-Portal-Export (`*_TIA.xlsx`)](#tia-portal-export-_tiaxlsx) + - [WSCAD-Export (`*_WSCAD.xlsx`)](#wscad-export-_wscadxlsx) +- [Konfiguration und Symbolerkennung](#konfiguration-und-symbolerkennung) +- [Fehlerfälle und Fehlerbehandlung](#fehlerfälle-und-fehlerbehandlung) + - [Allgemeine Fehler und Warnungen](#allgemeine-fehler-und-warnungen) + - [Ausgabedateien bei Fehlern](#ausgabedateien-bei-fehlern) + - [Empfohlene Vorgehensweise](#empfohlene-vorgehensweise) +- [Erweiterte Optionen](#erweiterte-optionen) + +## Zweck des Programms + +Der **I/O Converter** (`ioconverter.bat`) dient der vereinfachten Ableitung von **Ein-/Ausgangslisten (EA-Listen)** sowie der **Eingabedaten für das Siemens TIA Portal** und **WSCAD** aus einer DXF-Layoutzeichnung. + +Das Programm extrahiert alle relevanten Geräteinformationen (Sensoren, Aktoren, Schaltschrankelemente) aus dem Layout und erzeugt daraus formatierte Excel-Dateien, die direkt in die jeweiligen Zielsysteme importiert werden können. Das Routing und die Kabelberechnung entfallen dabei vollständig - es geht ausschließlich um die **Geräte- und IO-Daten**. + +## Schnellstart + +### Verwendung per Drag & Drop + +Im Desktop-Ordner *Kabeltool* (erstellt via `bin\dropItem_create.bat`) befindet sich die Verknüpfung *io_converter*. Die zu verarbeitende **.dxf-Datei** einfach per **Drag & Drop** auf diese Verknüpfung ziehen. + +> [!IMPORTANT] +> Der Dateiname darf **keine Leerzeichen oder Sonderzeichen** enthalten. +> Verwende z. B. `projekt_123.dxf` statt `mein projekt #1.dxf`. + +### Verwendung per Kommandozeile + +```bash +bin\ioconverter.bat +``` + +Die Ausgabe schreibt: + +```text +=== Fetching Positions === +... +=== Creating Excel Files for TIA, WSCAD, .. === +Export 'EA' erfolgreich: ...\work\meine_anlage_EA.xlsx +Export 'TIA' erfolgreich: ...\work\meine_anlage_TIA.xlsx +Export 'WSCAD' erfolgreich: ...\work\meine_anlage_WSCAD.xlsx +``` + +Die erzeugten Dateien werden automatisch in das Ergebnisverzeichnis (`PROJECT_IO_RESULTS`) verschoben. + +## Pipeline und Programmablauf + +Der I/O Converter arbeitet in zwei Schritten: + +```text +DXF-Datei + 1. getpositions.py --> Positionen und Attribute extrahieren --> *_positionsconv.json + 2. portalexport.py --> Excel-Export erzeugen --> *_EA.xlsx, *_TIA.xlsx, *_WSCAD.xlsx +``` + +1. **Positionsextraktion** (`getpositions.py`): Liest die DXF-Datei ein und extrahiert alle Blöcke mit ihren Attributen (IO, SPS, KENNZEICHNUNG, BEZEICHNUNG, VERW, TEXT-D/E/ES/F, ARTINR). Das Ergebnis wird als `*_positionsconv.json` gespeichert. + +2. **Excel-Export** (`portalexport.py`): Liest die JSON-Zwischendatei und erzeugt daraus die Excel-Dateien in den gewünschten Formaten. Die Daten werden dabei nach SPS-Nummer gruppiert - pro SPS entsteht ein eigener Satz Ausgabedateien (z.B. `anlage-SPS1_TIA.xlsx`, `anlage-SPS2_TIA.xlsx`). + +## Ausgabedateien + +Standardmäßig werden **drei Excel-Dateien** pro SPS erzeugt: + +### EA-Liste (`*_EA.xlsx`) + +Eine einfache Übersicht aller Ein- und Ausgänge. Die Datei enthält folgende Worksheets: + +**Ein-, Ausgaenge**: Listet alle erkannten Eingänge und Ausgänge mit Name, Kommentar (Bezeichnung) und Bezug (Kennzeichnung) auf. Die Klassifizierung in Ein- oder Ausgang erfolgt automatisch anhand der Identifier aus dem Block (z.B. DI, FDI = Eingang; DQ, K, M = Ausgang). + +**Duplikate / Errors**: Falls doppelte Namen oder fehlerhafte Einträge erkannt werden, werden diese in separaten Worksheets aufgeführt. + +### TIA-Portal-Export (`*_TIA.xlsx`) + +Im TIA-Portal-Importformat mit folgenden Worksheets: + +**PLC Tags**: Enthält die Spalten `Name`, `Path`, `Data Type`, `Logical Address`, `Comment`, `Hmi Visible`, `Hmi Accessible`, `Hmi Writeable`, `Typeobject ID`, `Version ID`. Diese Datei kann direkt in das Siemens TIA Portal importiert werden. + +**Constants**: Enthält Konstanten mit `Name`, `Path`, `Data Type`, `Value`, `Comment`. + +### WSCAD-Export (`*_WSCAD.xlsx`) + +Im WSCAD-Importformat mit den Spalten `Anschluss`, `Kommentar`, `Symboltext`, `Bezug`, `Sondertext 1-8`. Der Export enthält standardmäßig Bezugsinformationen. Mit der Option `--no_bezug` kann der Export ohne Bezüge erstellt werden. + +Für Bauteile mit unvollständigen Anschlüssen werden fehlende Anschlüsse automatisch bis zur Standardanzahl (8 pro Bauteil) ergänzt. + +## Konfiguration und Symbolerkennung + +Der I/O Converter verwendet folgende Konfigurationsdateien aus `cfg/`: + +| Datei | Relevanz für I/O Converter | +|-----------------|---------------------------| +| `allgemein.cfg` | Layernamen für Sensoren, Aktoren, Unterverteiler etc. - bestimmt, welche Blöcke aus der DXF-Datei extrahiert werden | +| `BMK.cfg` | Betriebsmittelkennzeichnungen (`[Routing-Include]`, `[Routing-Ignore]`) - bestimmt, welche Gerätetypen berücksichtigt werden | + +> [!NOTE] +> Die Konfigurationsdateien `kabel.cfg` und `bezeichner.cfg` werden vom I/O Converter **nicht** benötigt, da keine Kabelberechnung stattfindet. + +Die Erkennung der Symbole (Blöcke) in der DXF-Datei ist die gemeinsame Basis von I/O Converter und Kabelberechnung. Beide Programme nutzen `getpositions.py` mit denselben Regeln zur Symbolsuche: + +- Welche **Layer** durchsucht werden, wird in `allgemein.cfg` unter `[GetPos-Layer_Equipment]`, `[GetPos-Layer_Distributors]` etc. festgelegt +- Welche **Betriebsmittelkennzeichen** (BMK-Präfixe) berücksichtigt werden, regelt `BMK.cfg` unter `[Routing-Include]` und `[Routing-Ignore]` +- Welche **Block-Attribute** erwartet werden (KENNZEICHNUNG, SPS, IO, ARTINR, etc.) und wie die Blöcke im Layout angelegt sein müssen + +Eine ausführliche Beschreibung der Konfigurationsdateien sowie der Anforderungen an die Layouterstellung findet sich in der [Anwenderdokumentation zur Kabellängenermittlung](Anwenderdoku.md) in den Abschnitten "Anpassung des Verhaltens des Programms" und "Anwenderhinweise zur Layouterstellung". + +## Fehlerfälle und Fehlerbehandlung + +### Allgemeine Fehler und Warnungen + +Der I/O Converter durchläuft dieselbe Positionsextraktion wie der Cable-Routing-Workflow. Es gelten daher die gleichen Fehler- und Warnungstypen aus `getpositions.py`. Die vollständige Fehlertabelle findet sich in der [Anwenderdoku](Anwenderdoku.md) bzw. [Kurzanleitung](Anwenderdoku_kurz.md) im Abschnitt "Fehlerfälle und Fehlerbehandlung". + +Die für den I/O Converter relevantesten Fehler sind: + +| Fehlertyp | Auswirkung | +|-----------------|------------| +| `double_ids` | **Abbruch** - Doppelte Geräte-IDs führen zum Programmabbruch. Die `*_errors.json` wird erzeugt, aber keine Excel-Dateien. | +| `missing_attributes` | Betroffene Elemente fehlen in den Export-Dateien | +| `mapping_warnings` (keine KENNZEICHNUNG) | Keine korrekte Zuordnung zu Unterverteilern möglich | +| `missing_sps_prefix` | Gerät kann keiner SPS zugeordnet werden | + +### Ausgabedateien bei Fehlern + +- `*_errors.json` - enthält alle Fehler und Warnungen aus der Positionsextraktion +- `*_positionsconv.json` - Zwischenergebnis mit extrahierten Positionen +- `*_EA.xlsx`, `*_TIA.xlsx`, `*_WSCAD.xlsx` - werden auch bei Warnungen erzeugt, können aber unvollständig sein + +> [!IMPORTANT] +> Bei `double_ids`-Fehlern bricht das Programm nach der Positionsextraktion ab. Es werden **keine** Excel-Dateien erzeugt. Beheben Sie zuerst die doppelten IDs im Layout. + +### Empfohlene Vorgehensweise + +1. Programm ausführen +2. Falls `*_errors.json` erstellt wurde: Fehler prüfen und im Layout korrigieren +3. Erneut ausführen bis keine Fehler mehr auftreten +4. Export-Dateien an nachgelagerte Systeme (TIA Portal, WSCAD) übergeben + +> [!TIP] +> Beheben Sie alle Warnungen aus `*_errors.json`, bevor Sie die Export-Dateien an nachgelagerte Systeme übergeben, um Vollständigkeit sicherzustellen. + +## Erweiterte Optionen + +Der `portalexport.py` kann auch direkt aufgerufen werden, um nur bestimmte Exportformate zu erzeugen: + +```bash +# Nur TIA-Export erzeugen +bin\portalexport.bat --filename --outname --mode TIA + +# Nur WSCAD-Export ohne Bezüge +bin\portalexport.bat --filename --outname --mode WSCAD --no_bezug + +# Nur EA-Liste +bin\portalexport.bat --filename --outname --mode EA +``` + +Alternativ kann eine CSV-Textdatei als Eingabe verwendet werden: + +```bash +bin\portalexport.bat --input --mode TIA +``` diff --git a/doc/Anwenderdoku_kurz.md b/doc/Anwenderdoku_kurz.md index 7cf60a3..8ba6f81 100644 --- a/doc/Anwenderdoku_kurz.md +++ b/doc/Anwenderdoku_kurz.md @@ -9,10 +9,10 @@ - [Excel-Datei: *dxfdatei*\_BOM.xlsx](#excel-datei-dxfdatei_bomxlsx) - [Fehlerfälle und Fehlerbehandlung](#fehlerfälle-und-fehlerbehandlung) - [Übersicht](#übersicht) - - [Zwei Haupt-Workflows](#zwei-haupt-workflows) + - [Programmablauf](#programmablauf) - [Fehler- und Warnungskategorien](#fehler--und-warnungskategorien) - [Fehlerausgabe](#fehlerausgabe) - - [Allgemeine Fehler und Warnungen (beide Workflows)](#allgemeine-fehler-und-warnungen-beide-workflows) + - [Allgemeine Fehler und Warnungen](#allgemeine-fehler-und-warnungen) - [Struktur der Error-JSON-Datei](#struktur-der-error-json-datei) - [Arbeiten mit Fehlerfällen](#arbeiten-mit-fehlerfällen) - [Beispiele aus Testdaten](#beispiele-aus-testdaten) @@ -187,20 +187,14 @@ Hinweis: Diese Ansicht ist besonders nützlich zur **vorbereitenden Bestellplanu Das Programm führt während der Verarbeitung umfassende Validierungen durch und erkennt verschiedene Arten von Fehlern im Layout. Die Fehlerbehandlung unterscheidet sich je nach Anwendungsfall: -### Zwei Haupt-Workflows +### Programmablauf -Das Kabeltool unterstützt zwei verschiedene Workflows: +Das Kabeltool (`getexdraw.bat`) arbeitet in drei Schritten: -1. **Cable Routing Workflow** (`getexdraw.bat`): - - Schritt 1: `getpositions.py` - Extrahiert Positionen und validiert Layout - - Schritt 2: `routing.py` - Berechnet Kabelwege über Graph-Algorithmen - - Schritt 3: `drawdxf.py` - Erzeugt DXF mit Kabelwegen und Excel-Listen - - **Ausgabe**: `*_cables.dxf`, `*_cables.xlsx`, `*_BOM.xlsx` - -2. **I/O Conversion Workflow** (`ioconverter.bat`): - - Schritt 1: `getpositions.py` - Extrahiert Positionen und validiert Layout - - Schritt 2: `portalexport.py` - Konvertiert zu Excel-Formaten (TIA, WSCAD, EA) - - **Ausgabe**: `*_TIA.xlsx`, `*_WSCAD.xlsx`, `*_EA.xlsx` +1. `getpositions.py` - Extrahiert Positionen und validiert Layout +2. `routing.py` - Berechnet Kabelwege über Graph-Algorithmen +3. `drawdxf.py` - Erzeugt DXF mit Kabelwegen und Excel-Listen +- **Ausgabe**: `*_cables.dxf`, `*_cables.xlsx`, `*_BOM.xlsx` ### Fehler- und Warnungskategorien @@ -211,15 +205,14 @@ Die Fehlerbehandlung unterscheidet zwischen zwei Kategorien: ### Fehlerausgabe -**Für beide Workflows gilt:** - Falls Fehler oder Warnungen auftreten, schreibt `getpositions.py` **automatisch** eine JSON-Datei `*_errors.json` in den `work`-Ordner -- Im **Cable Routing Workflow** werden zusätzliche Fehler in der Excel-Datei `*_cables.xlsx` als separate Worksheets ausgegeben (siehe [ERR-Worksheets](#erweiterte-ausgabe-im-fehlerfall)) +- Zusätzliche Fehler werden in der Excel-Datei `*_cables.xlsx` als separate Worksheets ausgegeben (siehe [ERR-Worksheets](#erweiterte-ausgabe-im-fehlerfall)) Im Ordner [testdata/](testdata/) finden sich Beispiel-DXF-Dateien, die gezielt bestimmte Fehlerfälle demonstrieren (z.B. [easy_3tunnels_errors.json](testdata/easy_3tunnels_errors.json), [easy_tunnelerror1.json](testdata/easy_tunnelerror1.json)). -## Allgemeine Fehler und Warnungen (beide Workflows) +## Allgemeine Fehler und Warnungen -Die folgende Tabelle zeigt alle möglichen Fehler- und Warnungstypen, die von `getpositions.py` erkannt werden. Diese gelten **für beide Workflows** (Cable Routing und I/O Conversion): +Die folgende Tabelle zeigt alle möglichen Fehler- und Warnungstypen, die von `getpositions.py` erkannt werden: | Fehlertyp | Kategorie | Beschreibung | Ursache | Behebung | |-----------|-----------|--------------|---------|----------|