Compare commits
30 Commits
75f6e8dca8
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| cd6b9dc31f | |||
| f4dac5677e | |||
| 8d0915b97e | |||
| 4a4cdcacc6 | |||
| db9653286d | |||
| 50609f80cf | |||
| 8c11d15494 | |||
| b6ab35d8be | |||
| eca5a82644 | |||
| 046bcf7290 | |||
| a1d86500f2 | |||
| bed533e66b | |||
| 64506684a2 | |||
| e157acf77e | |||
| 5e7880a3ad | |||
| 45c8973975 | |||
| 594abb8b2e | |||
| d1ab663ff5 | |||
| 437c6d23fd | |||
| cfe1104c5c | |||
| 78d6edd6a8 | |||
| 4956525f24 | |||
| 676429c053 | |||
| f868032b67 | |||
| 8c98f99d39 | |||
| e07968981b | |||
| b0af6f73dc | |||
| 143d790a1d | |||
| 28dc81d21f | |||
| e3be04ec39 |
@@ -0,0 +1,298 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Overview
|
||||
|
||||
This is a Python-based cable routing automation tool for industrial plant layouts. The system reads DXF files containing equipment positions and cable trays, calculates optimal cable paths using graph algorithms, and generates cable lists with SIVAS article numbers for procurement.
|
||||
|
||||
## Architecture
|
||||
|
||||
The codebase follows a modular three-stage pipeline:
|
||||
|
||||
1. **Position Extraction** ([getpositions.py](lib/getpositions.py)) - Extracts equipment positions and cable tray geometries from DXF files
|
||||
2. **Route Calculation** ([routing.py](lib/routing.py)) - Builds graph models and calculates shortest paths between equipment and distributors
|
||||
3. **Output Generation** ([drawdxf.py](lib/drawdxf.py)) - Creates DXF files with cable paths and Excel lists with cable specifications
|
||||
|
||||
### Pipeline Data Flow
|
||||
|
||||
```
|
||||
DXF file
|
||||
→ getpositions.py → *_positionsdraw.json (positions, racks, distributors, mappings)
|
||||
→ routing.py → *_todraw.json (cable routes with coordinates and lengths)
|
||||
→ drawdxf.py → *.dxf + *.xlsx + BOM (final output files)
|
||||
```
|
||||
|
||||
The JSON intermediate files serve as interfaces between stages and are valuable for debugging. Each stage can be run independently.
|
||||
|
||||
### Workflow Modes
|
||||
|
||||
The system supports four primary workflows:
|
||||
|
||||
1. **Full Cable Routing** (`getexdraw.bat`) - Complete pipeline from DXF input to cable paths and BOMs
|
||||
2. **I/O Conversion** (`ioconverter.bat`) - Converts DXF equipment data to Excel formats for TIA, WSCAD, and other systems
|
||||
3. **Text Extraction** (`extract.bat`) - Extracts all TEXT and MTEXT objects from DXF files to multiple formats (Excel, JSON, Text) for translation purposes
|
||||
4. **Translation** (`tr2dxf.bat`, `tr2dxf_cs.bat`, etc.) - Translates DXF text content into target languages (Czech, English, French, Italian, Spanish)
|
||||
|
||||
### Core Modules
|
||||
|
||||
- **[plant.py](lib/plant.py)** - Main business logic containing the `Anlage` class that models industrial plants, manages equipment connections, and implements graph-based routing algorithms
|
||||
- **[model.py](lib/model.py)** - Data classes for points, equipment, distributors, and cable trays using dataclasses and dacite
|
||||
- **[graphbuild.py](lib/graphbuild.py)** - Graph construction utilities for network topology
|
||||
- **[linesweep.py](lib/linesweep.py)** - Geometric algorithms for line intersection detection
|
||||
|
||||
### Utility Modules
|
||||
|
||||
- **[error_collector.py](lib/error_collector.py)** - Centralized error/warning collection system with two severity levels; used across getpositions and drawdxf
|
||||
- **[utils.py](lib/utils.py)** - Common utility functions: file I/O, environment variable checks, JSON operations, DXF file handling, dictionary merging
|
||||
- **[updateconfignames.py](lib/updateconfignames.py)** - Updates SIVAS article descriptions in `bezeichner.cfg` from external SIVAS database exports (CSV files in `data/`)
|
||||
- **[flags.py](lib/flags.py)** - Icon/flag generation using PIL for language flags (EN, FR, IT, ES, CS)
|
||||
|
||||
### Export & Conversion Modules
|
||||
|
||||
- **[portalexport.py](lib/portalexport.py)** - Exports equipment I/O data to Excel formats for TIA Portal and WSCAD
|
||||
- **[ioconverter.py](lib/ioconverter.py)** - `ExcelConverter` class for converting I/O lists with input/output identifier mappings
|
||||
- **[translate.py](lib/translate.py)** - Comprehensive text extraction/translation: extracts TEXT, MTEXT, and block attributes from DXF/DWG files; supports Excel, JSON, Text export formats
|
||||
|
||||
### DXF Utility Modules
|
||||
|
||||
- **[create_dxf_symbols.py](lib/create_dxf_symbols.py)** - Creates DXF symbol blocks (grounding, switchboard, subdistribution, motor symbols)
|
||||
- **[create_example.py](lib/create_example.py)** - `TestDataGenerator` for generating synthetic test DXF files with defined layouts
|
||||
- **[create_numbers.py](lib/create_numbers.py)** - Generates/updates numbered symbols in DXF files based on RENAMER layer configuration
|
||||
|
||||
### Configuration System
|
||||
|
||||
The system uses configuration files in `cfg/`:
|
||||
|
||||
- **`BMK.cfg`** - Equipment identification codes, cable type mappings, routing inclusion/exclusion rules, cabinet/tunnel patterns, length adjustments
|
||||
- **`kabel.cfg`** - SIVAS article number mappings for different cable types and lengths (sections like `[MA]`, `[WD_Q]`, `[WD_I]`, etc.)
|
||||
- **`allgemein.cfg`** - Layer names for racks/distributors/tunnels, geometric tolerances, connection parameters
|
||||
- **`bezeichner.cfg`** - Article number descriptions, auto-populated from SIVAS database
|
||||
- **`translator.cfg`** - Text filtering for translation (wildcard and regex ignore patterns)
|
||||
- **`enumerate.cfg`** - Symbol enumeration settings (RENAMER layers, polyline distances)
|
||||
- **`translation/CS.cfg`** - Czech language translation key mappings
|
||||
|
||||
**Important**: When adding a new equipment prefix, it must be added to **both** `[Routing-Include]` and `[Cable-Mapping]` in `BMK.cfg`, and the corresponding cable section must exist in `kabel.cfg`.
|
||||
|
||||
**Article-specific mappings**: `[Cable-Mapping]` supports article-number-specific entries like `MB-929012603 = WD_Q-929012603` alongside generic prefix mappings like `MA = MA`. The specific entry takes precedence when the sensor's article number matches.
|
||||
|
||||
**Current prefixes in `[Routing-Include]`**: MA, MB, QM, BG, BP, BX, PO, SF, PF, GF
|
||||
|
||||
## Common Commands
|
||||
|
||||
### Main Execution
|
||||
|
||||
```bash
|
||||
# Process a DXF file for cable routing (drag-and-drop onto desktop shortcut in production)
|
||||
bin\getexdraw.bat <filename.dxf>
|
||||
|
||||
# Convert DXF to I/O lists for TIA Portal, WSCAD, etc.
|
||||
bin\ioconverter.bat <filename.dxf>
|
||||
|
||||
# Extract text from DXF files for translation
|
||||
bin\extract.bat <filename.dxf>
|
||||
|
||||
# Translate DXF to Czech (also: tr2dxf_en, tr2dxf_fr, tr2dxf_it, tr2dxf_es)
|
||||
bin\tr2dxf_cs.bat <filename.dxf>
|
||||
|
||||
# PowerShell alternative for getexdraw
|
||||
bin\getexdraw.ps1 <filename.dxf>
|
||||
|
||||
# Manual execution of pipeline stages
|
||||
bin\getpositions.bat --filename <file.dxf> -s -r -w <output.json>
|
||||
bin\routing.bat --filename <positions.json> -w <todraw.json>
|
||||
bin\draw_dxf.bat --filename <todraw.json> --new <output.dxf> -x <output.xlsx>
|
||||
bin\portalexport.bat --filename <positions.json> --outname <basename>
|
||||
bin\translate.bat --filename <file.dxf> --extract --export-type excel,json --outname <output>
|
||||
```
|
||||
|
||||
**Note**: All `.bat` scripts have corresponding `.sh` equivalents for Linux/macOS systems.
|
||||
|
||||
### Development and Testing
|
||||
|
||||
```bash
|
||||
# Install Python dependencies
|
||||
bin\install_py.bat
|
||||
|
||||
# Run automated test suite (all test files)
|
||||
bin\run_tests.bat
|
||||
|
||||
# Run test for a single file (most common for development)
|
||||
bin\run_test.bat <testname>
|
||||
bin\run_test.bat easy
|
||||
bin\run_test.bat easy --clean
|
||||
|
||||
# Run tests for specific file (alternative syntax)
|
||||
bin\run_tests.bat --file <testname>
|
||||
|
||||
# Run tests in different modes
|
||||
bin\run_test.bat <testname> --ioconverter
|
||||
bin\run_test.bat <testname> --translation
|
||||
bin\run_tests.bat --ioconverter
|
||||
|
||||
# Create reference files from current outputs
|
||||
bin\run_tests.bat --create-references
|
||||
|
||||
# Clean up work folders after tests
|
||||
bin\run_tests.bat --clean
|
||||
|
||||
# Run unit tests
|
||||
bin\run_unittests.bat
|
||||
|
||||
# Individual component testing
|
||||
python lib\getpositions.py --help
|
||||
python lib\routing.py --graph # Shows visual graph
|
||||
python lib\drawdxf.py --help
|
||||
```
|
||||
|
||||
### Production Deployment
|
||||
|
||||
```bash
|
||||
# Create desktop shortcuts with drag-and-drop icons for all tools
|
||||
bin\dropItem_create.bat
|
||||
|
||||
# Remove desktop shortcuts
|
||||
bin\dropItem_remove.bat
|
||||
```
|
||||
|
||||
### Configuration Management
|
||||
|
||||
```bash
|
||||
# Update SIVAS article descriptions
|
||||
python lib\updateconfignames.py
|
||||
|
||||
# Convert between formats
|
||||
python lib\ioconverter.py
|
||||
```
|
||||
|
||||
## Development Guidelines
|
||||
|
||||
### Code Style
|
||||
|
||||
- Use German comments and variable names for consistency with existing codebase
|
||||
- Follow dataclass patterns established in [model.py](lib/model.py)
|
||||
- Maintain separation between geometric operations (Shapely) and graph algorithms (NetworkX)
|
||||
|
||||
### Configuration Changes
|
||||
|
||||
- Always update corresponding `.cfg` files when adding new equipment types or cable categories
|
||||
- A new equipment prefix needs entries in: `[Routing-Include]`, `[Cable-Mapping]` (both in `BMK.cfg`), and a matching section in `kabel.cfg`
|
||||
- Test configuration changes with sample DXF files in [testdata/](testdata/) directory
|
||||
- Configuration files use Windows INI format with specific section naming conventions
|
||||
|
||||
### Error Handling
|
||||
|
||||
The system uses [error_collector.py](lib/error_collector.py) for centralized error/warning collection with two severity levels:
|
||||
|
||||
- **Errors** (critical issues that affect output correctness):
|
||||
- Equipment connection failures (distance tolerances)
|
||||
- Missing SIVAS article numbers
|
||||
- Invalid DXF block attributes
|
||||
- Graph routing failures
|
||||
- Missing or overdefined tunnel positions
|
||||
- Duplicate equipment IDs
|
||||
|
||||
- **Warnings** (potential issues, processing continues):
|
||||
- Missing or incomplete block attributes
|
||||
- Invalid KENNZEICHNUNG format
|
||||
- Missing tunnel length specifications
|
||||
|
||||
All issues are collected in the `warnings` section of output JSON files (e.g., `*_positionsdraw.json`). Critical errors also generate separate `*_errors.json` files. See [doc/Anwenderdoku_kurz.md](doc/Anwenderdoku_kurz.md) for detailed error descriptions and resolution steps.
|
||||
|
||||
### Config Validation
|
||||
|
||||
On startup, `getpositions.py` validates configuration consistency and reports:
|
||||
- Prefixes in `[Routing-Include]` without a `[Cable-Mapping]` entry
|
||||
- Cable sections referenced in `[Cable-Mapping]` that are missing from `kabel.cfg`
|
||||
|
||||
### Testing
|
||||
|
||||
The project includes a comprehensive automated test suite:
|
||||
|
||||
- Test DXF files stored in [testdata/](testdata/) (e.g., `easy.dxf`, `easy_sps.dxf`, `easy_hoehe.dxf`, `easy_3tunnels.dxf`, `Erdungsbsp.dxf`)
|
||||
- Reference JSON outputs stored alongside test DXF files
|
||||
- Test runner ([run_tests.py](lib/run_tests.py)) compares generated outputs against references with diff reporting
|
||||
- Supports `getexdraw`, `ioconverter`, and `translate` workflow testing
|
||||
- Visual graph debugging available with `--graph` flag in routing
|
||||
- Test cases cover: standard routing, SPS integration, height differences, tunnel overdefinition, grounding, duplicate IDs, translation
|
||||
- Unit tests in `lib/` (`error_collector_test.py`, `utils_test.py`, `flags_test.py`, `create_numbers_test.py`, `getpositions_test.py`)
|
||||
- Additional edge case tests in [tests/](tests/) directory (e.g., `test_ioconverter_errors.py`)
|
||||
|
||||
## File Structure
|
||||
|
||||
```text
|
||||
bin/ # Batch scripts (.bat) and shell scripts (.sh) for all workflows
|
||||
cfg/ # Configuration files (BMK, cable mappings, tolerances, translation filters)
|
||||
cfg/translation/# Language-specific translation configs (CS.cfg)
|
||||
lib/ # Python modules (core pipeline, utilities, tests)
|
||||
work/ # Working directory for processing results (generated output)
|
||||
testdata/ # Test DXF files and reference outputs for automated testing
|
||||
tests/ # Additional test files and edge case test data
|
||||
doc/ # Comprehensive German documentation (Markdown + PDF)
|
||||
doc/img/Icons/ # Icons for desktop shortcuts
|
||||
data/ # SIVAS article number CSV reference files (auto-populated)
|
||||
translation/ # Translation configurations
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
Key Python packages (see [lib/requirements.txt](lib/requirements.txt)):
|
||||
|
||||
- `ezdxf` - DXF file reading/writing
|
||||
- `shapely` - Geometric operations
|
||||
- `networkx` - Graph algorithms
|
||||
- `openpyxl` - Excel output generation
|
||||
- `pandas` - Data manipulation
|
||||
- `matplotlib` - Graph visualization
|
||||
- `dacite` - Dataclass conversion utilities
|
||||
- `PyMuPDF` - PDF processing capabilities
|
||||
- `pillow` - Image processing (flag/icon generation)
|
||||
- `pytest` - Testing framework
|
||||
|
||||
## Output Files
|
||||
|
||||
### Cable Routing Workflow (getexdraw)
|
||||
|
||||
- `*_cables.dxf` - DXF with drawn cable paths
|
||||
- `*_cables.xlsx` - Cable list with lengths and SIVAS numbers
|
||||
- `*_BOM.xlsx` - Complete bill of materials
|
||||
- `*_positionsdraw.json` - Intermediate position data with routing info
|
||||
- `*_todraw.json` - Intermediate routing data for drawing
|
||||
- `*_errors.json` - Error report (if validation fails)
|
||||
|
||||
### I/O Conversion Workflow (ioconverter)
|
||||
|
||||
- `*-TIA.xlsx` - Excel export for TIA Portal
|
||||
- `*-WSCAD.xlsx` - Excel export for WSCAD
|
||||
- `*_positionsconv.json` - Intermediate position data for conversion
|
||||
- `*_errors.json` - Error report (if validation fails)
|
||||
|
||||
### Text Extraction Workflow (extract)
|
||||
|
||||
- `*_texts.xlsx` - Excel file with all TEXT and MTEXT entities from DXF for translation
|
||||
|
||||
### Translation Workflow (tr2dxf)
|
||||
|
||||
- Translated DXF files with text replaced in target language
|
||||
|
||||
## Environment Variables
|
||||
|
||||
The system uses environment variables defined in [bin/setenv.bat](bin/setenv.bat):
|
||||
|
||||
- `PROJECT` - Root directory of the project
|
||||
- `PROJECT_BIN` - Binary/script directory
|
||||
- `PROJECT_CFG` - Configuration directory
|
||||
- `PROJECT_DOC` - Documentation directory
|
||||
- `PROJECT_LIB` - Python library directory
|
||||
- `PROJECT_DATA` - SIVAS reference data directory
|
||||
- `PROJECT_WORK` - Working directory for outputs
|
||||
- `PROJECT_TEST` - Test data directory (testdata/)
|
||||
- `PROJECT_LOG` - Log directory
|
||||
- `PROJECT_TRANSLATION` - Translation directory
|
||||
- `PROJECT_IO_RESULTS` - Network location for I/O converter results
|
||||
- `PROJECT_BOM_RESULTS` - Network location for BOM results
|
||||
- `SIVAS_TEILESTAMM` - Path to SIVAS parts database export tool
|
||||
- `SIVAS_EXCEL_EXPORT_DIR` - Output directory for SIVAS data exports
|
||||
- `INSTALL_DIR` - Desktop shortcut installation location
|
||||
|
||||
Local overrides can be placed in `bin/_setenv.bat` (not tracked in git).
|
||||
@@ -0,0 +1,114 @@
|
||||
# Kabeltool - Automatisierte Kabellängenermittlung
|
||||
|
||||
Automatisiertes Toolset zur Ermittlung von Kabellängen in industriellen Anlagenlayouts. Aus einer DXF-Zeichnung werden Gerätepositionen und Kabeltrassen extrahiert, optimale Kabelwege berechnet und Stücklisten mit SIVAS-Artikelnummern erzeugt.
|
||||
|
||||
Die Übersetzungswerkzeuge ermöglichen den einfachen Transfer der .dxf Dateien in eine andere Sprache.
|
||||
|
||||
## Liste der vorhandenen Werkzeuge
|
||||
|
||||
| | Workflow | Skript | Beschreibung | Ausgabe |
|
||||
|---|----------|--------|--------------|---------|
|
||||
| <img src="doc/img/Icons/Icon_getex.png" width="128"> | **Cable Routing** | `getexdraw.bat` | Vollständige Kabelberechnung mit Wegführung und Stücklisten | `*_cables.dxf`, `*_cables.xlsx`, `*_BOM.xlsx` |
|
||||
| <img src="doc/img/Icons/Icon_portal.png" width="128"> | **I/O Conversion** | `ioconverter.bat` | Export von Gerätelisten für TIA Portal, WSCAD u.a. | `*-TIA.xlsx`, `*-WSCAD.xlsx` |
|
||||
| <img src="doc/img/Icons/dxf2txt.png" width="128"> | **Text Extraction** | `extract.bat` | Textextraktion aus DXF für Übersetzung | `*_texts.xlsx`, `*_texts.json` |
|
||||
| <img src="doc/img/Icons/dxfCs.png" width="128"> | **Translation** | `tr2dxf_<lang>.bat` | Übersetzung von DXF-Texten (CS, EN, FR, IT, ES) | `*_<lang>.dxf` |
|
||||
|
||||
## Verwendung
|
||||
|
||||
DXF-Datei per **Drag & Drop** auf die Desktop-Verknüpfung ziehen (erstellt via `bin\dropItem_create.bat`) oder direkt aufrufen:
|
||||
|
||||
```bash
|
||||
bin\getexdraw.bat <meine_anlage.dxf>
|
||||
```
|
||||
|
||||
## Pipelines
|
||||
|
||||
### Cable Routing (`getexdraw.bat`)
|
||||
|
||||
```text
|
||||
DXF-Datei
|
||||
1. getpositions.py --> Positionen extrahieren --> *_positionsdraw.json
|
||||
2. routing.py --> Kabelwege berechnen --> *_todraw.json
|
||||
3. drawdxf.py --> DXF + Excel erzeugen --> *_cables.dxf, *_cables.xlsx, *_BOM.xlsx
|
||||
```
|
||||
|
||||
### I/O Conversion (`ioconverter.bat`)
|
||||
|
||||
```text
|
||||
DXF-Datei
|
||||
1. getpositions.py --> Positionen extrahieren --> *_positionsconv.json
|
||||
2. portalexport.py --> Excel-Export erzeugen --> *-TIA.xlsx, *-WSCAD.xlsx, *-EA.xlsx
|
||||
```
|
||||
|
||||
### Text Extraction & Translation (`extract.bat` / `tr2dxf_<lang>.bat`)
|
||||
|
||||
```text
|
||||
DXF-Datei
|
||||
1. translate.py --extract --> Texte extrahieren --> *_texts.xlsx, *_texts.json
|
||||
2. translate.py --translate --> Texte übersetzen --> *_<lang>.dxf
|
||||
```
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
# Repository klonen
|
||||
git clone http://gitea.schoenenberger.de/mistangl/kabellaengen.git
|
||||
|
||||
# Python-Abhängigkeiten installieren
|
||||
bin\install_py.bat
|
||||
|
||||
# Desktop-Verknüpfungen erstellen
|
||||
bin\dropItem_create.bat
|
||||
```
|
||||
|
||||
**Voraussetzung**: Python 3.x (lokal installiert oder via `NETWORK_INTERPRETER_PATH` Umgebungsvariable).
|
||||
|
||||
## Konfiguration
|
||||
|
||||
Konfigurationsdateien in `cfg/` steuern das Verhalten:
|
||||
|
||||
| Datei | Zweck |
|
||||
|-------|-------|
|
||||
| `allgemein.cfg` | Layernamen, geometrische Toleranzen |
|
||||
| `BMK.cfg` | Betriebsmittelkennzeichnung, Kabeltyp-Zuordnung, Routing-Regeln |
|
||||
| `kabel.cfg` | SIVAS-Artikelnummern je Kabeltyp und Kabellänge |
|
||||
| `bezeichner.cfg` | Artikelnummern-Bezeichner (automatisch aus SIVAS ergänzt) |
|
||||
|
||||
> **Hinweis**: Neuer BMK-Prefix muss in `BMK.cfg` unter `[Routing-Include]` **und** `[Cable-Mapping]` eingetragen werden. Die zugewiesene Kabel-Sektion muss in `kabel.cfg` existieren.
|
||||
|
||||
## Tests
|
||||
|
||||
```bash
|
||||
# Alle Tests
|
||||
bin\run_tests.bat
|
||||
|
||||
# Einzeltest
|
||||
bin\run_test.bat easy
|
||||
|
||||
# Unit-Tests
|
||||
bin\run_unittests.bat
|
||||
```
|
||||
|
||||
## Projektstruktur
|
||||
|
||||
```text
|
||||
bin/ Batch- und Shell-Skripte
|
||||
cfg/ Konfigurationsdateien
|
||||
lib/ Python-Module
|
||||
work/ Arbeitsverzeichnis (Ausgabedateien)
|
||||
testdata/ Test-DXF-Dateien und Referenzdaten
|
||||
data/ SIVAS-Artikeldaten (CSV)
|
||||
doc/ Dokumentation (Deutsch)
|
||||
```
|
||||
|
||||
## Dokumentation
|
||||
|
||||
- [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
|
||||
- [Symbole](doc/Symbole_und_Benennungen.md) - Beschreibung des Aufbaus und Attribute der zu verwendenden Symbole, damit die Erkennung funktioniert
|
||||
|
||||
## Lizenz
|
||||
|
||||
Intern - Schoenenberger
|
||||
+9
-2
@@ -13,6 +13,7 @@ BX
|
||||
PO
|
||||
SF
|
||||
PF
|
||||
GF
|
||||
|
||||
|
||||
# Kürzel die im Routing Prozess ignoriert werden sollen, zum Beispiel bauteile innerhalb der Schaltschränke
|
||||
@@ -52,17 +53,23 @@ TUNNEL\d+
|
||||
[Cable-Mapping]
|
||||
# Format: PREFIX = Cable-Section[, Section2, ...]
|
||||
MA = MA
|
||||
MB = WD_Q
|
||||
MB-929012603 = WD_Q-929012603
|
||||
QM = WD_Q
|
||||
BG = WD_I
|
||||
BG-829422026 = WD_I-829422026
|
||||
BG-720002003 = WD_I-720002003
|
||||
BG-822035037 = WD_I-822035037
|
||||
BX = WF_B, WD_I
|
||||
BG-200000375 = WD_I-200000375
|
||||
BG-790000213 = WD_I-790000213
|
||||
BG-200000525 = WD_I-200000525
|
||||
BG-400101729 = WD_I-400101729
|
||||
BG-827072102 = WD_I-827072102
|
||||
BX = WF_BX, WD_I
|
||||
PO = WD_PO
|
||||
BP = WD_I
|
||||
SF = WD_I
|
||||
PF = WD_Q
|
||||
GF = WF_GF
|
||||
|
||||
|
||||
# Anpassung von berechneter kabellänge um Betrag x aufgrund von z.b. an Sensor existierenden Kabelschwänzen
|
||||
|
||||
@@ -36,6 +36,7 @@ UNTERVERTEILER
|
||||
0-0_Omniflo_Busverteiler-Kennzeichnung
|
||||
Schaltschrank-ILS
|
||||
ILS_Schaltschrank
|
||||
ILS_Busmodul
|
||||
Omniflo_Schaltschrank
|
||||
|
||||
|
||||
@@ -58,6 +59,23 @@ REALE_POSITION_IO
|
||||
0-0_ILS_EINGANG
|
||||
0-0_ILS_AUSGANG
|
||||
0-0_ILS_MOTOR
|
||||
ILS_Eingang
|
||||
ILS_Eingang-F
|
||||
ILS_BT-Eingang
|
||||
ILS_BT-Eingang-F
|
||||
ILS_BT-Kennzeichnung
|
||||
ILS_Schaltschrank
|
||||
ILS_Schaltschrank-Eingang
|
||||
ILS_Schaltschrank-Eingang-F
|
||||
ILS_Ausgang
|
||||
ILS_BT-Ausgang
|
||||
ILS_BT-Ausgang-F
|
||||
ILS_Schaltschrank-Ausgang
|
||||
ILS_Schaltschrank-Ausgang-F
|
||||
ILS_Motor
|
||||
ILS_Scanner
|
||||
ILS_A-Gruppe
|
||||
ILS_Encoder-800
|
||||
0-0-Omniflo_EINGANG
|
||||
0-0-Omniflo_AUSGANG
|
||||
0-0-Omniflo_MOTOR
|
||||
@@ -80,7 +98,10 @@ MOTOR
|
||||
0-0_Omniflo_AM_POT_Pritsche
|
||||
POT-Erdung
|
||||
Omniflo_POT-Erdung
|
||||
Omniflo_Tunnel
|
||||
ILS_POT-Erdung
|
||||
ILS_Tunnel
|
||||
Omniflo_Schaltschrank
|
||||
Omniflo_Schaltschrank-Eingang
|
||||
Omniflo_Schaltschrank-Ausgang
|
||||
Omniflo_Schaltschrank-Eingang-F
|
||||
@@ -91,6 +112,26 @@ Omniflo_Motor
|
||||
Omniflo_BT-Eingang
|
||||
Omniflo_BT-Ausgang
|
||||
Omniflo_BT-Eingang_F
|
||||
Omniflo_BT-Kennzeichnung
|
||||
Omniflo_Scanner
|
||||
Omniflo_Busmodul
|
||||
Flex_Ausgang
|
||||
Flex_Eingang
|
||||
Flex_BT-Ausgang
|
||||
Flex_BT-Eingang
|
||||
Flex_BT-Eingang-F
|
||||
Flex_BT-Kennzeichnung
|
||||
Flex_Encoder-800
|
||||
Flex_Motor
|
||||
Flex_Scanner
|
||||
Flex_Schaltschrank
|
||||
Flex_Schaltschrank-Ausgang
|
||||
Flex_Schaltschrank-Ausgang-F
|
||||
Flex_Schaltschrank-Eingang
|
||||
Flex_Schaltschrank-Eingang-F
|
||||
Flex_Tunnel
|
||||
Flex_POT-Erdung
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+17
-3
@@ -3,7 +3,7 @@
|
||||
200000215 = Camera DM280 m. Halter für Trolley Id.(AP110) - BG
|
||||
610554001 = Sensorhalter für WT18-3P420 oder -BG
|
||||
610554002 = CPC Sensorhalter mit Reflextaster P1NH601 -BG
|
||||
720002003 = SENSOR INDUK. M18x1, SA=12MM N-BÜ/NO, KABEL-150MM
|
||||
720002003 = Sensor Induk. M18x1, SA=12mm N-BÜ/NO, Kabel-150mm
|
||||
722001300 = Verb.-Leitung M12 St-0°/ M8 Bu-0° PUR UL/CSA 1m
|
||||
722001301 = Verb.-Leitung M12 St-0°/ M8 Bu-0° PUR UL/CSA 2m
|
||||
722001302 = Verb.-Leitung M12 St-0°/ M8 Bu-0° PUR UL/CSA 3m
|
||||
@@ -38,6 +38,13 @@
|
||||
722001357 = Verb.-Leitung M12 St-0°/ M12 Bu-0° PUR UL/CSA 30m
|
||||
722001358 = Verb.-Leitung M12 St-0°/ M12 Bu-0° PUR UL/CSA 2,5m
|
||||
722001359 = Verb.-Leitung M12 St-0°/ M12 Bu-0° PUR UL/CSA 40m
|
||||
722001252 = Verb.-Leitung M12 St-0°/ M12 Bu-0° PUR UL/CSA 3m
|
||||
722001253 = Verb.-Leitung M12 St-0°/ M12 Bu-0° PUR UL/CSA 5m
|
||||
722001254 = Verb.-Leitung M12 St-0°/ M12 Bu-0° PUR UL/CSA 10m
|
||||
722001255 = Verb.-Leitung M12 St-0°/ M12 Bu-0° PUR UL/CSA 15m
|
||||
722001256 = Verb.-Leitung M12 St-0°/ M12 Bu-0° PUR UL/CSA 20m
|
||||
722001257 = Verb.-Leitung M12 St-0°/ M12 Bu-0° PUR UL/CSA 30m
|
||||
722001259 = Verb.-Leitung M12 St-0°/ M12 Bu-0° PUR UL/CSA 40m
|
||||
723000013 = ADERLEITUNG H07V-K 6MM² GELB/GRÜN (RING a`100m)
|
||||
725000001 = 12G1,0mm², Steuerleitung
|
||||
725000002 = 12G1,0mm², Steuerleitung
|
||||
@@ -133,10 +140,11 @@
|
||||
829422026 = INDUKT. SENSOR LP KPL.
|
||||
720002011 = Sensor Induk. M18 8mm bündig/PNP-NO/ST M12
|
||||
703001017 = HILFSCHALTER MIT ZUGFEDERANSCHLUSS F. 3RV2011
|
||||
790000057 = Sirius act Tableau 4 F "LM-GN+PDT-GE+LDT-BL+NA"
|
||||
790000057 = SIRIUS ACT Tableau 4 F "LM-GN+PDT-GE+LDT-BL+NA"
|
||||
790801501 = Busverteiler kpl. ET 200SP DI+DQ, Exact -BG
|
||||
790820400 = Unterverteiler 1 800x2100x400 -BG
|
||||
790821106 = SCHALTSCHRANK 2000X2100X400 (HGF) -BG
|
||||
790821103 = SCHALTSCHRANK 1200x2000x400 KPL.
|
||||
829434314 = PINABFRAGE LI MECHANISCH KPL.
|
||||
829534306 = Camera DM280 m. Halter (ILS) - BG
|
||||
829624040 = UMLENKFLANSCH-c 800 MIT INKEMENTALGEBER KPL.
|
||||
@@ -148,6 +156,7 @@
|
||||
829434300 = LICHTTASTER LP+SP ALS STAUMELDER, KPL.
|
||||
721002006 = Lichtleiterverstärke [Erweiterungseinheit]
|
||||
721002005 = Lichtleiterverstärker [Basiseinheit]
|
||||
721002008 = Lichtleiterkabel_M4 2St.
|
||||
700002021 = AX-KOMPAKT-SCHALTSCHRANK 600X760X210
|
||||
822035037 = ROLLENSCH. KPL. 1 NO FÜR KF
|
||||
822035100 = ROLLENSCH. KPL. 1NO F. AFS/ST
|
||||
@@ -162,7 +171,7 @@
|
||||
790002024 = TABLEAU 1-F kpl. LDT BLAU
|
||||
790002026 = Bedientableau 1 F kpl "DT-grün"
|
||||
790002027 = Bedientableau 2 F -kpl. "LDT-GE+NA"
|
||||
790002029 = Bedientableau 6 F - kpl.(LM-GN+LM-YE+LM-RD+BLIND+
|
||||
790002029 = Bedientableau 6 F - kpl.(LM-GN+LM-YE+LM-RD+BLIND+2xSW)
|
||||
790002039 = Bedientableau 2 F -kpl. "LDT-KL+NA" KPL.
|
||||
790002040 = Bedientableau 3 F"LDT-BL+LDT-KL+NA" KPL.
|
||||
790002041 = Bedientableau 4 F kpl."LDT-BL+LDT-BL+LDT-KL+NA"
|
||||
@@ -173,6 +182,11 @@
|
||||
790002061 = Bedientableau 4 F -kpl. "LM-GN+PDT-GE+LDT-BL+NA"
|
||||
790002064 = Bedientableau 6 F, Not-halt, Ldt-bl, Ldt gn,Blind,
|
||||
790002066 = Bedientableau 2 F -kpl. "PDT-GE+KN-RAST 1-0-2"
|
||||
929012603 = WEGEVENT.5/2 MONOSTABIL SY5120-5WAOU-C6F-Q
|
||||
200000436 = Camera DM280 m. Halter Gefälleprofil ILS
|
||||
200000478 = Vereinzeler KB-Behängung links
|
||||
790000213 = DB-Automatisierung für Doppelbügelerkennung kpl.
|
||||
|
||||
|
||||
|
||||
[Missing]
|
||||
|
||||
+105
-1
@@ -68,9 +68,80 @@
|
||||
30.0=722001357
|
||||
40.0=722001359
|
||||
|
||||
# Kabel für Sensor 790000213
|
||||
# cables for sensor 790000213
|
||||
[WD_I-790000213]
|
||||
2.5=722001358
|
||||
3.0=722001352
|
||||
5.0=722001353
|
||||
10.0=722001354
|
||||
15.0=722001355
|
||||
20.0=722001356
|
||||
30.0=722001357
|
||||
40.0=722001359
|
||||
|
||||
# Kabel für Sensor 200000525
|
||||
# cables for sensor 200000525
|
||||
[WD_I-200000525]
|
||||
3.0=722001252
|
||||
5.0=722001253
|
||||
10.0=722001254
|
||||
15.0=722001255
|
||||
20.0=722001256
|
||||
30.0=722001257
|
||||
40.0=722001259
|
||||
|
||||
# Kabel für Sensor 400101729
|
||||
# cables for sensor 400101729
|
||||
[WD_I-400101729]
|
||||
3.0=722001252
|
||||
5.0=722001253
|
||||
10.0=722001254
|
||||
15.0=722001255
|
||||
20.0=722001256
|
||||
30.0=722001257
|
||||
40.0=722001259
|
||||
|
||||
# Kabel für Sensor 827072102
|
||||
# cables for sensor 827072102
|
||||
[WD_I-827072102]
|
||||
3.0=722001252
|
||||
5.0=722001253
|
||||
10.0=722001254
|
||||
15.0=722001255
|
||||
20.0=722001256
|
||||
30.0=722001257
|
||||
40.0=722001259
|
||||
|
||||
# Daten-Kabel für Scanner (Patchkabel gruen)
|
||||
# Data-cable for scanners (Patchcable green)
|
||||
[WF_B]
|
||||
[WF_BX]
|
||||
0.25=726001062
|
||||
0.5=726001040
|
||||
1.0=726001041
|
||||
1.5=726001042
|
||||
2.0=726001043
|
||||
3.0=726001044
|
||||
5.0=726001045
|
||||
10.0=726001046
|
||||
15.0=726001047
|
||||
20.0=726001048
|
||||
25.0=726001049
|
||||
30.0=726001050
|
||||
35.0=726001051
|
||||
40.0=726001052
|
||||
45.0=726001053
|
||||
50.0=726001054
|
||||
55.0=726001055
|
||||
60.0=726001056
|
||||
65.0=726001057
|
||||
85.0=726001060
|
||||
95.0=726001061
|
||||
|
||||
# Daten-Kabel für ENCODER (Patchkabel gruen)
|
||||
# Data-cable for encoder (Patchcable green)
|
||||
# ist identisch mit Scanner Kabel
|
||||
[WF_GF]
|
||||
0.25=726001062
|
||||
0.5=726001040
|
||||
1.0=726001041
|
||||
@@ -96,3 +167,36 @@
|
||||
[WD_PO]
|
||||
100.0=723000013
|
||||
|
||||
# Kabel für Sensor 200000375
|
||||
# cables for sensor 200000375
|
||||
[WD_I-200000375]
|
||||
1.0=722001330
|
||||
2.0=722001331
|
||||
2.5=722001338
|
||||
3.0=722001332
|
||||
5.0=722001333
|
||||
10.0=722001334
|
||||
15.0=722001335
|
||||
20.0=722001336
|
||||
25.0=722001337
|
||||
30.0=722001339
|
||||
35.0=722001340
|
||||
40.0=722001341
|
||||
50.0=722001342
|
||||
|
||||
# Kabel für Ventil 929012603
|
||||
# cables for valves 929012603
|
||||
[WD_Q-929012603]
|
||||
1.0=722001300
|
||||
2.0=722001301
|
||||
2.5=722001308
|
||||
3.0=722001302
|
||||
5.0=722001303
|
||||
10.0=722001304
|
||||
15.0=722001305
|
||||
20.0=722001306
|
||||
25.0=722001307
|
||||
30.0=722001309
|
||||
35.0=722001310
|
||||
40.0=722001311
|
||||
50.0=722001312
|
||||
+30
-54
@@ -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_<lang>.bat` | Textextraktion und Übersetzung von DXF-Inhalten | `*_texts.json`/`.xlsx`, `*_<lang>.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:
|
||||
@@ -100,13 +86,13 @@ creating new .dxf ..
|
||||
done
|
||||
creating excel file with cable information ..
|
||||
done
|
||||
C:\10-Develop\kabellaengen\work\dxfdatei_BOM.xlsx
|
||||
C:\10-Develop\kabellaengen\work\dxfdatei_cables.dxf
|
||||
C:\10-Develop\kabellaengen\work\dxfdatei_cables.xlsx
|
||||
C:\10-Develop\kabellaengen\work\dxfdatei_positions.json
|
||||
C:\10-Develop\kabellaengen\work\dxfdatei_reduziert.dxf
|
||||
C:\10-Develop\kabellaengen\work\dxfdatei_positionsdraw.json
|
||||
C:\10-Develop\kabellaengen\work\dxfdatei_todraw.json
|
||||
5 Datei(en) verschoben.
|
||||
Drücken sie eine beliebige Taste . . .
|
||||
Drücken Sie eine beliebige Taste . . .
|
||||
```
|
||||
|
||||
Das Drücken einer beliebigen Taste beendet das Programm und die Ausgabe kann verwendet werden.
|
||||
@@ -117,14 +103,15 @@ Verwende z. B. projekt_123.dxf statt mein projekt #1.dxf.
|
||||
|
||||
## Standardmäßige Ausgabe des Programms
|
||||
|
||||
In den Ordner auf dem Desktop in dem das Kabeltool liegt werden nach Beendigung der Berechnungen die Ausgabedateien abgelegt. Standardmäßig sind dies vier Dateien, wovon letztlich zwei für den Anwender bestimmt sind. In der nachfolgenden Liste steht der name *dxfdatei* stellvertretend für die eingegebene Datei des Benutzers.
|
||||
In den Ordner auf dem Desktop in dem das Kabeltool liegt werden nach Beendigung der Berechnungen die Ausgabedateien abgelegt. Standardmäßig sind dies fünf Dateien, wovon drei für den Anwender bestimmt sind. In der nachfolgenden Liste steht der Name *dxfdatei* stellvertretend für die eingegebene Datei des Benutzers.
|
||||
|
||||
| Dateiname | Details |
|
||||
|---------------------------|---------------------------------------------------------------------------------------------------|
|
||||
| `dxfdatei_cables.dxf` | `.dxf`-Datei, **mit Kabelwegen** (z. B. für Import ins Original-Layout als eigenes Layer) und gezeichneten Racks (ggf. in 3D) |
|
||||
| `dxfdatei_cables.xlsx` | **Excel-Datei** mit Kabellängen, Längenübersicht und Fehler-Übersicht |
|
||||
| `dxfdatei_positions` | **Zwischendatei** (nicht für Endnutzer bestimmt) |
|
||||
| `dxfdatei_todraw` | **Zwischendatei** (nicht für Endnutzer bestimmt) |
|
||||
| Dateiname | Details |
|
||||
|--------------------------------|---------------------------------------------------------------------------------------------------|
|
||||
| `dxfdatei_cables.dxf` | `.dxf`-Datei, **mit Kabelwegen** (z. B. für Import ins Original-Layout als eigenes Layer) und gezeichneten Racks (ggf. in 3D) |
|
||||
| `dxfdatei_cables.xlsx` | **Excel-Datei** mit Kabellängen, Längenübersicht und Fehler-Übersicht |
|
||||
| `dxfdatei_BOM.xlsx` | **Excel-Datei** mit Gesamtstückliste und Unterverteiler-spezifischer Stückliste |
|
||||
| `dxfdatei_positionsdraw.json` | **Zwischendatei** (nicht für Endnutzer bestimmt) |
|
||||
| `dxfdatei_todraw.json` | **Zwischendatei** (nicht für Endnutzer bestimmt) |
|
||||
|
||||
### .dxf-Datei: *dxfdatei*_cables.dxf
|
||||
|
||||
@@ -483,8 +470,8 @@ Dieses Toolset dient der **automatisierten** und **komfortablen** Ermittlung von
|
||||
|
||||
- eine strukturierte `.json`-Datei mit Kabellängen und Pfadkoordinaten
|
||||
- eine visuelle `.dxf`-Datei mit eingezeichneten Kabelwegen
|
||||
- eine weitere .dxf-Datei mit einem reduzierten Layout (Kabeltrassen + Kabel + Unterverteiler)
|
||||
- zukünftig: tabellarische Aufbereitung der Kabellängen mit SIVAS-Nummern (z. B. `.xlsx`)
|
||||
- eine tabellarische Aufbereitung der Kabellängen mit SIVAS-Nummern (`.xlsx`)
|
||||
- eine Stückliste (BOM) mit Gesamtübersicht und UV-spezifischer Auflistung (`.xlsx`)
|
||||
|
||||
## Allgemeiner Programmablauf
|
||||
|
||||
@@ -502,15 +489,24 @@ Die Ausgabe schreibt:
|
||||
|
||||
```text
|
||||
C:\10-Develop\kabellaengen\bin>getexdraw.bat easy.dxf
|
||||
--hole Positionen
|
||||
|
||||
=== Fetching Positions ===
|
||||
reading file ..done
|
||||
|
||||
Validating given configs: Checking for inconsistency.
|
||||
No Inconsistencies found. Continuing with routing process.
|
||||
|
||||
writing results to a json file ...
|
||||
done
|
||||
--erzeuge Graph mit Routing
|
||||
|
||||
=== Creating Graph for Routing ===
|
||||
writing results to a json file ...
|
||||
done
|
||||
--zeichne Kabel in dxf Datei
|
||||
done
|
||||
|
||||
=== Writing Output Files ===
|
||||
Cable-Routes exported to new dxf-file
|
||||
Cable-Summary exported to Excel-file
|
||||
BOM exported to Excel-file
|
||||
```
|
||||
|
||||
## Ausgabe des Toolsets
|
||||
@@ -521,6 +517,7 @@ Alle drei oben genannten Teilprogramme erzeugen eine eigene Ausgabedatei. Die Er
|
||||
|
||||
- Die .dxf-Datei mit den Kabelwegen: `NamederEingabedatei_cables.dxf`
|
||||
- Die tabellarische Aufbereitung der Kabellängen mit zugehörigen Sachnummern für jeden Sensor / Aktor: `NamederEingabedatei_cables.xlsx`
|
||||
- Die Stückliste (BOM): `NamederEingabedatei_BOM.xlsx`
|
||||
|
||||
## Informationen zu den Einzelprogrammen
|
||||
|
||||
@@ -770,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 |
|
||||
|-----------|-----------|--------------|---------|----------|
|
||||
@@ -1091,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.
|
||||
|
||||
|
||||
@@ -0,0 +1,197 @@
|
||||
# Anwenderdoku zum I/O Converter (ioconverter) <!-- omit in toc -->
|
||||
|
||||
- [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 <meine_anlage.dxf>
|
||||
```
|
||||
|
||||
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
|
||||
|
||||
### Einzelne Exportformate erzeugen
|
||||
|
||||
Der `portalexport.py` kann auch direkt aufgerufen werden, um nur bestimmte Exportformate zu erzeugen:
|
||||
|
||||
```bash
|
||||
# Nur TIA-Export erzeugen
|
||||
bin\portalexport.bat --filename <positionsconv.json> --outname <basename> --mode TIA
|
||||
|
||||
# Nur WSCAD-Export ohne Bezüge
|
||||
bin\portalexport.bat --filename <positionsconv.json> --outname <basename> --mode WSCAD --no_bezug
|
||||
|
||||
# Nur EA-Liste
|
||||
bin\portalexport.bat --filename <positionsconv.json> --outname <basename> --mode EA
|
||||
```
|
||||
|
||||
### Spezialfall: Eingabe über Textdatei (ohne DXF)
|
||||
|
||||
Für den Fall, dass die IO-Daten **nicht aus einer DXF-Datei** stammen, sondern bereits in aufbereiteter Form vorliegen, kann `portalexport.py` auch direkt mit einer Textdatei als Eingabe arbeiten. Damit wird die gesamte DXF-Verarbeitung (`getpositions.py`) übersprungen.
|
||||
|
||||
**Anwendungsfälle:**
|
||||
|
||||
- IO-Listen aus einem **anderen System** (z.B. manuell gepflegte Excel-Listen, Datenbank-Exporte) sollen in das TIA- oder WSCAD-Format konvertiert werden
|
||||
- Daten aus der DXF-Extraktion sollen **vorab korrigiert oder ergänzt** werden, bevor der Excel-Export erfolgt
|
||||
- **Testen** des Exporters ohne eine DXF-Datei verarbeiten zu müssen
|
||||
|
||||
**Aufruf:**
|
||||
|
||||
```bash
|
||||
bin\portalexport.bat --input <eingabe.txt> --mode TIA
|
||||
```
|
||||
|
||||
**Format der Textdatei:** Die Datei muss pro Zeile einen Eintrag im folgenden CSV-Format mit einfachen Anführungszeichen enthalten:
|
||||
|
||||
```text
|
||||
'<IO>','<BEZEICHNUNG>','<VERW>','<KENNZEICHNUNG>','<TEXT-D>','<TEXT-E>','<TEXT-ES>','<TEXT-F>'
|
||||
```
|
||||
|
||||
**Beispiel:**
|
||||
|
||||
```text
|
||||
'DI01','Stausensor 1 (ILS-CV M0108)','Jam detector','=A01+UC0101-KF1DI1','','','',''
|
||||
'DQ04','Motor MA0062','CV-M0062_0,75','=A01+UH01-KF1DQ04','Motor MA0062','Motor MA0062','',''
|
||||
```
|
||||
|
||||
Die Felder entsprechen den Block-Attributen aus der DXF-Datei. Dieses Format wird auch intern von `portalexport.py` erzeugt, wenn es die JSON-Daten aus `getpositions.py` verarbeitet.
|
||||
|
||||
> [!NOTE]
|
||||
> Bei der Eingabe per Textdatei entfällt die Gruppierung nach SPS-Nummer - alle Einträge werden in einem Satz Ausgabedateien zusammengefasst. Ebenso werden keine `getpositions`-Fehler und -Warnungen in die Excel-Dateien geschrieben, da keine DXF-Validierung stattfindet.
|
||||
+11
-18
@@ -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 |
|
||||
|-----------|-----------|--------------|---------|----------|
|
||||
|
||||
@@ -34,10 +34,11 @@ Welche Geraete geroutet werden, bestimmt die `cfg/BMK.cfg`:
|
||||
| `QM` | Ventile/Pumpen |
|
||||
| `BG` | Sensoren/Naeherungsschalter |
|
||||
| `BP` | Naeherungsschalter |
|
||||
| `BX` | Mehrzweckgeraete |
|
||||
| `BX` | Mehrzweckgeraete, z.B. Scanner |
|
||||
| `PO` | Pneumatik-Elemente |
|
||||
| `SF` | Sicherheitselemente |
|
||||
| `PF` | Programmierbare Logik |
|
||||
| `GF` | Encoder |
|
||||
|
||||
**Routing-Ignore** (Schaltschrankelemente, nicht geroutet):
|
||||
|
||||
|
||||
+1
-2
@@ -913,8 +913,7 @@ def map_sensor_to_cable_cfg(plines):
|
||||
section_list = mapping[name_prefix]
|
||||
else:
|
||||
sens2cable[pl.id].append("Kein Kabeltyp zugewiesen (BMK.cfg)")
|
||||
section_list = list()
|
||||
# TODO was soll hier passieren wenn die Config falsch ist?
|
||||
continue # Kein Mapping gefunden, Rest überspringen
|
||||
|
||||
# Liste aus evtl. mehreren Sektionen erzeugen
|
||||
sections = [s.strip() for s in section_list.split(",")]
|
||||
|
||||
+1
-1
@@ -99,7 +99,7 @@ def prepare_data(rawdata:dict):
|
||||
for sname, sdata in sensors.items():
|
||||
dsensors[sname] = {
|
||||
"point": Point(sdata["pos"]),
|
||||
"artinr": sdata.get("ARTINR","")
|
||||
"artinr": sdata.get("ARTINR","").strip()
|
||||
}
|
||||
|
||||
subdists = rawdata["distributors"]
|
||||
|
||||
Reference in New Issue
Block a user