From 86d4b9753fa780d2d90d9abc6be62aad2511c6fa Mon Sep 17 00:00:00 2001 From: Miguel Date: Sat, 19 Apr 2025 14:47:13 +0200 Subject: [PATCH] vault backup: 2025-04-19 14:47:13 --- .../obsidian-excalidraw-plugin/data.json | 20 +- .../plugins/obsidian-icon-folder/data.json | 6 +- .../plugins/recent-files-obsidian/data.json | 316 +++++---- .obsidian/workspace.json | 123 ++-- .../AI Prompts useful.md | 18 + .../MCP.md | 42 ++ ...romass 500 Documentation for CO2 System.md | 93 +++ .../500DP_parameter_FactoryValues.csv | 600 +++++++++++++++++ .../CO2/adjuntos/500DP_parameter_Mixer.csv | 595 +++++++++++++++++ .../Endress+Houser/Comparative.xlsx | Bin 0 -> 19844 bytes .../Endress+Houser/Endress+Hauser Software.md | 213 ++++++ .../Heartbeat Technology Implementation.md | 44 ++ .../Endress+Houser/Parameters Comparative.md | 46 ++ .../Endress+Houser/Riunione Endress&Hauser.md | 19 + ...entación Promass 500 para Sistema Syrup.md | 94 +++ .../500DP_parameter_FactoryValues.csv | 600 +++++++++++++++++ .../Syrup_Mass_Syrup -500DP_parameter_SAE.csv | 606 ++++++++++++++++++ ...omag 500 Documentation for Water System.md | 100 +++ .../500DP_parameter_FactoryValues.csv | 452 +++++++++++++ .../Water/adjuntos/500DP_parameter_Mixer.csv | 451 +++++++++++++ .../adjuntos/Pasted image 20250414150025.png | Bin 0 -> 60009 bytes ...Electronica - Fatturazione Elecctronica.md | 4 +- .../Scripts Python/API Google Translate.md | 0 ...slate - Python - LLM - Google Translate.md | 0 .../Scripts Python/Anaconda - miniconda.md | 0 ...leto de un entorno creado con Miniconda.md | 0 ...slate - Python - LLM - Google Translate.md | 0 .../adjuntos/Pasted image 20240801182003.png | Bin .../adjuntos/Pasted image 20240920114457.png | Bin .../adjuntos/Pasted image 20240920114535.png | Bin .../adjuntos/Pasted image 20240920114742.png | Bin .../adjuntos/Pasted image 20240920114820.png | Bin .../adjuntos/Pasted image 20240920114902.png | Bin 01-Documentation/Python/UV UVX.md | 16 + .../Mikrotik - Network Redes/Wireguard.md | 83 +++ .../Routers/Zero-Tier ONE - Lan NAT.md | 251 ++++++++ 01-Documentation/SIDEL/SIDEL - FLD.md | 5 +- .../adjuntos/Pasted image 20250417164020.png | Bin 0 -> 24452 bytes 01-Documentation/Windows/WSL - Uninstall.md | 12 + .../Software/FC622 - FC Scale Speed wGap.md | 13 + .../MIXER/SIDEL - Mixer - Equivalences.md | 5 + .../MIXER/SIDEL - Mixer - Master - IO Tags.md | 2 +- ....007363 - Modifica O&U - SAE196 - Notes.md | 6 + .../SAE196 - IO Adapted.md | 84 +++ .../SAE196 - IO.md | 170 +++++ .../Conversión LAD a SCL Siemens.md | 545 ++++++++++++++++ .../Proyectos en Python/Python Notes.md | 7 + .../Visual Studio Notes.md | 5 + 48 files changed, 5411 insertions(+), 235 deletions(-) create mode 100644 01-Documentation/AI - IA - LLM - Artificial Intelligence/AI Prompts useful.md create mode 100644 01-Documentation/AI - IA - LLM - Artificial Intelligence/MCP.md create mode 100644 01-Documentation/Endress+Houser/CO2/Promass 500 Documentation for CO2 System.md create mode 100644 01-Documentation/Endress+Houser/CO2/adjuntos/500DP_parameter_FactoryValues.csv create mode 100644 01-Documentation/Endress+Houser/CO2/adjuntos/500DP_parameter_Mixer.csv create mode 100644 01-Documentation/Endress+Houser/Comparative.xlsx create mode 100644 01-Documentation/Endress+Houser/Endress+Hauser Software.md create mode 100644 01-Documentation/Endress+Houser/Heartbeat Technology Implementation.md create mode 100644 01-Documentation/Endress+Houser/Parameters Comparative.md create mode 100644 01-Documentation/Endress+Houser/Riunione Endress&Hauser.md create mode 100644 01-Documentation/Endress+Houser/Syrup/Documentación Promass 500 para Sistema Syrup.md create mode 100644 01-Documentation/Endress+Houser/Syrup/adjuntos/500DP_parameter_FactoryValues.csv create mode 100644 01-Documentation/Endress+Houser/Syrup/adjuntos/Syrup_Mass_Syrup -500DP_parameter_SAE.csv create mode 100644 01-Documentation/Endress+Houser/Water/Promag 500 Documentation for Water System.md create mode 100644 01-Documentation/Endress+Houser/Water/adjuntos/500DP_parameter_FactoryValues.csv create mode 100644 01-Documentation/Endress+Houser/Water/adjuntos/500DP_parameter_Mixer.csv create mode 100644 01-Documentation/Endress+Houser/adjuntos/Pasted image 20250414150025.png rename 01-Documentation/{ => Python}/Scripts Python/API Google Translate.md (100%) rename 01-Documentation/{ => Python}/Scripts Python/Allen Bradley HMI Translate - Python - LLM - Google Translate.md (100%) rename 01-Documentation/{ => Python}/Scripts Python/Anaconda - miniconda.md (100%) rename 01-Documentation/{ => Python}/Scripts Python/Miniconda Como hacer un backup completo de un entorno creado con Miniconda.md (100%) rename 01-Documentation/{ => Python}/Scripts Python/Siemens HMI Translate - Python - LLM - Google Translate.md (100%) rename 01-Documentation/{ => Python}/Scripts Python/adjuntos/Pasted image 20240801182003.png (100%) rename 01-Documentation/{ => Python}/Scripts Python/adjuntos/Pasted image 20240920114457.png (100%) rename 01-Documentation/{ => Python}/Scripts Python/adjuntos/Pasted image 20240920114535.png (100%) rename 01-Documentation/{ => Python}/Scripts Python/adjuntos/Pasted image 20240920114742.png (100%) rename 01-Documentation/{ => Python}/Scripts Python/adjuntos/Pasted image 20240920114820.png (100%) rename 01-Documentation/{ => Python}/Scripts Python/adjuntos/Pasted image 20240920114902.png (100%) create mode 100644 01-Documentation/Python/UV UVX.md create mode 100644 01-Documentation/Routers/Zero-Tier ONE - Lan NAT.md create mode 100644 01-Documentation/SIDEL/adjuntos/Pasted image 20250417164020.png create mode 100644 01-Documentation/Windows/WSL - Uninstall.md create mode 100644 04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/SAE196 - IO Adapted.md create mode 100644 04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/SAE196 - IO.md create mode 100644 07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos en Python/Conversión LAD a SCL Siemens.md create mode 100644 07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos en Python/Python Notes.md create mode 100644 07 - Desarrolo de Proyectos - Scripts - Visual Studio/Visual Studio Notes.md diff --git a/.obsidian/plugins/obsidian-excalidraw-plugin/data.json b/.obsidian/plugins/obsidian-excalidraw-plugin/data.json index d2ae08e..732d146 100644 --- a/.obsidian/plugins/obsidian-excalidraw-plugin/data.json +++ b/.obsidian/plugins/obsidian-excalidraw-plugin/data.json @@ -161,7 +161,7 @@ "version": 114, "versionNonce": 497376518, "isDeleted": false, - "boundElements": null, + "boundElements": [], "updated": 1744204665979, "link": null, "locked": false, @@ -206,7 +206,7 @@ "version": 128, "versionNonce": 2142199386, "isDeleted": false, - "boundElements": null, + "boundElements": [], "updated": 1744204665979, "link": null, "locked": false, @@ -251,7 +251,7 @@ "version": 121, "versionNonce": 473943110, "isDeleted": false, - "boundElements": null, + "boundElements": [], "updated": 1744204665979, "link": null, "locked": false, @@ -296,7 +296,7 @@ "version": 130, "versionNonce": 564560666, "isDeleted": false, - "boundElements": null, + "boundElements": [], "updated": 1744204665979, "link": null, "locked": false, @@ -321,8 +321,8 @@ "type": "line", "x": 789.998867, "y": -579.9222670158669, - "width": 3.194759301550221e-8, - "height": 1.8444951427460807e-8, + "width": 0, + "height": 18.660508526112608, "angle": 0, "strokeColor": "#1e1e1e", "backgroundColor": "transparent", @@ -341,7 +341,7 @@ "version": 30, "versionNonce": 340415366, "isDeleted": false, - "boundElements": null, + "boundElements": [], "updated": 1744204665979, "link": null, "locked": false, @@ -366,8 +366,8 @@ "type": "line", "x": 790.0817788707072, "y": -215.5492938412429, - "width": 2.1686625473194e-7, - "height": 5.810913782098546e-8, + "width": 0, + "height": 15.789231879221944, "angle": 0, "strokeColor": "#1e1e1e", "backgroundColor": "transparent", @@ -386,7 +386,7 @@ "version": 22, "versionNonce": 1792741338, "isDeleted": false, - "boundElements": null, + "boundElements": [], "updated": 1744204665979, "link": null, "locked": false, diff --git a/.obsidian/plugins/obsidian-icon-folder/data.json b/.obsidian/plugins/obsidian-icon-folder/data.json index 6c106b0..71cf3e9 100644 --- a/.obsidian/plugins/obsidian-icon-folder/data.json +++ b/.obsidian/plugins/obsidian-icon-folder/data.json @@ -6,6 +6,8 @@ "emojiStyle": "native", "iconColor": null, "recentlyUsedIcons": [ + "LiHelp", + "🤖", "🔒" ], "recentlyUsedIconsSize": 5, @@ -30,5 +32,7 @@ "debugMode": false, "useInternalPlugins": false }, - "01-Documentation/SIDEL/SIDEL - Passwords.md": "🔒" + "01-Documentation/SIDEL/SIDEL - Passwords.md": "🔒", + "01-Documentation/AI - IA - LLM - Artificial Intelligence": "🤖", + "01-Documentation": "LiHelp" } \ No newline at end of file diff --git a/.obsidian/plugins/recent-files-obsidian/data.json b/.obsidian/plugins/recent-files-obsidian/data.json index 8650dca..759dfc1 100644 --- a/.obsidian/plugins/recent-files-obsidian/data.json +++ b/.obsidian/plugins/recent-files-obsidian/data.json @@ -1,29 +1,177 @@ { "recentFiles": [ { - "basename": "Como usar PublicApiGenerator - Nuget - Documentator", - "path": "07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos Visual Studio/Como usar PublicApiGenerator - Nuget - Documentator.md" + "basename": "Conversión LAD a SCL Siemens", + "path": "07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos en Python/Conversión LAD a SCL Siemens.md" + }, + { + "basename": "Script Python DB to Excel", + "path": "07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos en Python/Script Python DB to Excel.md" + }, + { + "basename": "Python Notes", + "path": "07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos en Python/Python Notes.md" + }, + { + "basename": "Visual Studio Notes", + "path": "07 - Desarrolo de Proyectos - Scripts - Visual Studio/Visual Studio Notes.md" + }, + { + "basename": "Zero-Tier ONE - Lan NAT", + "path": "01-Documentation/Routers/Zero-Tier ONE - Lan NAT.md" + }, + { + "basename": "SAE196 - IO", + "path": "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/SAE196 - IO.md" + }, + { + "basename": "SIDEL - Mixer - Equivalences", + "path": "04-SIDEL/00 - MASTER/MIXER/SIDEL - Mixer - Equivalences.md" + }, + { + "basename": "AI Prompts useful", + "path": "01-Documentation/AI - IA - LLM - Artificial Intelligence/AI Prompts useful.md" + }, + { + "basename": "SAE196 - IO Adapted", + "path": "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/SAE196 - IO Adapted.md" + }, + { + "basename": "SIDEL - Mixer - Master - IO Tags", + "path": "04-SIDEL/00 - MASTER/MIXER/SIDEL - Mixer - Master - IO Tags.md" + }, + { + "basename": "Heartbeat Technology Implementation", + "path": "01-Documentation/Endress+Houser/Heartbeat Technology Implementation.md" + }, + { + "basename": "Endress+Hauser Software", + "path": "01-Documentation/Endress+Houser/Endress+Hauser Software.md" + }, + { + "basename": "SIDEL - FLD", + "path": "01-Documentation/SIDEL/SIDEL - FLD.md" + }, + { + "basename": "MCP", + "path": "01-Documentation/AI - IA - LLM - Artificial Intelligence/MCP.md" + }, + { + "basename": "SAE346 - Software adaptation from Master - Notes", + "path": "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - Software adaptation from Master - Notes.md" + }, + { + "basename": "SAE346 - Process diagram", + "path": "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - Process diagram.md" + }, + { + "basename": "SAE346 - Master adaptation to compile", + "path": "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - Master adaptation to compile.md" + }, + { + "basename": "SAE346 - IO from Electrical Diagram", + "path": "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - IO from Electrical Diagram.md" + }, + { + "basename": "Git - Start New Repository with Visual Studio Code - VS Code", + "path": "01-Documentation/GIT/Git - Start New Repository with Visual Studio Code - VS Code.md" + }, + { + "basename": "Notes - Git - Gitea", + "path": "01-Documentation/GIT/Notes - Git - Gitea.md" + }, + { + "basename": "E5.007363 - Modifica O&U - SAE196 - Notes", + "path": "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/E5.007363 - Modifica O&U - SAE196 - Notes.md" + }, + { + "basename": "WSL - Uninstall", + "path": "01-Documentation/Windows/WSL - Uninstall.md" + }, + { + "basename": "on NUC", + "path": "01-Documentation/WSL Linux on Windows/on NUC.md" + }, + { + "basename": "Windows 10 Autologin", + "path": "01-Documentation/Windows/Windows 10 Autologin.md" + }, + { + "basename": "Wireguard", + "path": "01-Documentation/Routers/Mikrotik - Network Redes/Wireguard.md" + }, + { + "basename": "Facturazion Electronica - Fatturazione Elecctronica", + "path": "01-Documentation/Facturazion/Facturazion Electronica - Fatturazione Elecctronica.md" + }, + { + "basename": "Riunione Endress&Hauser", + "path": "01-Documentation/Endress+Houser/Riunione Endress&Hauser.md" }, { "basename": "Endress+Hauser WEB Access", "path": "01-Documentation/Endress+Houser/Endress+Hauser WEB Access.md" }, { - "basename": "Optional - Concentration measurement", - "path": "01-Documentation/Endress+Houser/Optional - Concentration measurement.md" - }, - { - "basename": "Download Software", - "path": "01-Documentation/WEB/Download Software.md" + "basename": "SAE346 - Signals - CIP - Filler - Syrop", + "path": "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - Signals - CIP - Filler - Syrop.md" }, { "basename": "RNF032 - Difference between Hardware on S7 and the Electrical scheme", "path": "04-SIDEL/04 - E5.007299 - Modifica O&U - RNF032/RNF032 - Difference between Hardware on S7 and the Electrical scheme.md" }, + { + "basename": "S7 Software Calls", + "path": "04-SIDEL/00 - MASTER/MIXER/S7 Software Calls.md" + }, + { + "basename": "Documentación Promass 500 para Sistema Syrup", + "path": "01-Documentation/Endress+Houser/Syrup/Documentación Promass 500 para Sistema Syrup.md" + }, + { + "basename": "Promass 500 Documentation for CO2 System", + "path": "01-Documentation/Endress+Houser/CO2/Promass 500 Documentation for CO2 System.md" + }, { "basename": "Endress+Hauser Concentration Optional", "path": "01-Documentation/Endress+Houser/Endress+Hauser Concentration Optional.md" }, + { + "basename": "FC622 - FC Scale Speed wGap", + "path": "03-VM/22 - 9.3841 - Sidel - Tilting/Software/FC622 - FC Scale Speed wGap.md" + }, + { + "basename": "FB629 - FB Calculate Ramp", + "path": "03-VM/22 - 9.3841 - Sidel - Tilting/Software/FB629 - FB Calculate Ramp.md" + }, + { + "basename": "FB623 - Tilting - FB Tilter", + "path": "03-VM/22 - 9.3841 - Sidel - Tilting/Software/FB623 - Tilting - FB Tilter.md" + }, + { + "basename": "Download Software", + "path": "01-Documentation/WEB/Download Software.md" + }, + { + "basename": "Parameters Comparative", + "path": "01-Documentation/Endress+Houser/Parameters Comparative.md" + }, + { + "basename": "Optional - Concentration measurement", + "path": "01-Documentation/Endress+Houser/Optional - Concentration measurement.md" + }, + { + "basename": "Promag 500 Documentation for Water System", + "path": "01-Documentation/Endress+Houser/Water/Promag 500 Documentation for Water System.md" + }, + { + "basename": "UV UVX", + "path": "01-Documentation/Python/UV UVX.md" + }, + { + "basename": "Como usar PublicApiGenerator - Nuget - Documentator", + "path": "07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos Visual Studio/Como usar PublicApiGenerator - Nuget - Documentator.md" + }, { "basename": "Notes for Windows - Chris Titus Tool - Online - Offline", "path": "01-Documentation/Windows/Notes for Windows - Chris Titus Tool - Online - Offline.md" @@ -40,10 +188,6 @@ "basename": "5.007382-EXMU01UF - RVU008 - EQPT24731 - Notes", "path": "04-SIDEL/03 - 5.007382-EXMU01UF - RVU008 - EQPT24731/5.007382-EXMU01UF - RVU008 - EQPT24731 - Notes.md" }, - { - "basename": "E5.007363 - Modifica O&U - SAE196 - Notes", - "path": "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/E5.007363 - Modifica O&U - SAE196 - Notes.md" - }, { "basename": "IM Siemens - Profibus - Comissioning", "path": "01-Documentation/Siemens/IM Siemens - Profibus - Comissioning.md" @@ -51,154 +195,6 @@ { "basename": "SIDEL - Passwords", "path": "01-Documentation/SIDEL/SIDEL - Passwords.md" - }, - { - "basename": "Mixer - Notes", - "path": "01-Documentation/SIDEL/Master Mixer/Mixer - Notes.md" - }, - { - "basename": "5.007382-EXMU01UF - RVU008 - EQPT24731 - Initial Data", - "path": "04-SIDEL/03 - 5.007382-EXMU01UF - RVU008 - EQPT24731/5.007382-EXMU01UF - RVU008 - EQPT24731 - Initial Data.md" - }, - { - "basename": "SAE346 - Software adaptation from Master - Notes", - "path": "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - Software adaptation from Master - Notes.md" - }, - { - "basename": "SAE346 - Signals - CIP - Filler - Syrop", - "path": "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - Signals - CIP - Filler - Syrop.md" - }, - { - "basename": "S7 Software Calls", - "path": "04-SIDEL/00 - MASTER/MIXER/S7 Software Calls.md" - }, - { - "basename": "SAE346 - Process diagram", - "path": "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - Process diagram.md" - }, - { - "basename": "SAE346 - HMI - Machine Configuration", - "path": "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - HMI - Machine Configuration.md" - }, - { - "basename": "SAE346 - IO from Electrical Diagram", - "path": "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - IO from Electrical Diagram.md" - }, - { - "basename": "SAE346 - Master adaptation to compile", - "path": "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - Master adaptation to compile.md" - }, - { - "basename": "SAE346 P&ID", - "path": "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 P&ID.md" - }, - { - "basename": "SIDEL - Mixer - Equivalences", - "path": "04-SIDEL/00 - MASTER/MIXER/SIDEL - Mixer - Equivalences.md" - }, - { - "basename": "Fieldbus Communication - Profibus", - "path": "01-Documentation/Anton Paar/Fieldbus Communication - Profibus.md" - }, - { - "basename": "SIDEL - Software Versions", - "path": "01-Documentation/SIDEL/SIDEL - Software Versions.md" - }, - { - "basename": "Anton Paar - Cobrix 5500", - "path": "01-Documentation/Anton Paar/Cobrix 5500/Anton Paar - Cobrix 5500.md" - }, - { - "basename": "Serial - Lecense", - "path": "01-Documentation/B&R/Serial - Lecense.md" - }, - { - "basename": "B&R Software", - "path": "01-Documentation/B&R/B&R Software.md" - }, - { - "basename": "Versions of MASTERs", - "path": "04-SIDEL/00 - MASTER/Versions of MASTERs.md" - }, - { - "basename": "SIDEL - Master - IPs", - "path": "04-SIDEL/00 - MASTER/SIDEL - Master - IPs.md" - }, - { - "basename": "Danfoss PPO", - "path": "01-Documentation/Inverters/Danfoss/Danfoss PPO.md" - }, - { - "basename": "SIDEL - FLD", - "path": "01-Documentation/SIDEL/SIDEL - FLD.md" - }, - { - "basename": "Master Filler - Notes", - "path": "01-Documentation/SIDEL/Master Filler/Master Filler - Notes.md" - }, - { - "basename": "Calculo de Offsets de DBs", - "path": "01-Documentation/Siemens/Scripts/Calculo de Offsets de DBs.md" - }, - { - "basename": "Script Python DB to Excel", - "path": "07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos en Python/Script Python DB to Excel.md" - }, - { - "basename": "Untitled", - "path": "01-Documentation/Siemens/Scripts/Untitled.md" - }, - { - "basename": "Group Scripts Manager", - "path": "07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos en Python/Group Scripts Manager.md" - }, - { - "basename": "Parameters for communication", - "path": "01-Documentation/Inverters/Danfoss/Parameters for communication.md" - }, - { - "basename": "Pasted Image 20250310155912_626", - "path": "04-SIDEL/01 - SAE463 - E5.006894-EXMU01UM - New Anton Paar/adjuntos/Pasted Image 20250310155912_626.png" - }, - { - "basename": "Pasted Image 20250310155818_479", - "path": "04-SIDEL/01 - SAE463 - E5.006894-EXMU01UM - New Anton Paar/adjuntos/Pasted Image 20250310155818_479.png" - }, - { - "basename": "Pasted image 20250311115714", - "path": "04-SIDEL/01 - SAE463 - E5.006894-EXMU01UM - New Anton Paar/adjuntos/Pasted image 20250311115714.png" - }, - { - "basename": "Pasted image 20250310160926", - "path": "04-SIDEL/01 - SAE463 - E5.006894-EXMU01UM - New Anton Paar/adjuntos/Pasted image 20250310160926.png" - }, - { - "basename": "Pasted image 20250310160812", - "path": "04-SIDEL/01 - SAE463 - E5.006894-EXMU01UM - New Anton Paar/adjuntos/Pasted image 20250310160812.png" - }, - { - "basename": "Pasted image 20250310160616", - "path": "04-SIDEL/01 - SAE463 - E5.006894-EXMU01UM - New Anton Paar/adjuntos/Pasted image 20250310160616.png" - }, - { - "basename": "Pasted image 20250310160355", - "path": "04-SIDEL/01 - SAE463 - E5.006894-EXMU01UM - New Anton Paar/adjuntos/Pasted image 20250310160355.png" - }, - { - "basename": "Pasted image 20250407095858", - "path": "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/adjuntos/Pasted image 20250407095858.png" - }, - { - "basename": "Comm - Mixer - Filler", - "path": "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/COMM - FILLER - MIXER/Comm - Mixer - Filler.md" - }, - { - "basename": "E5.007299 - Modifica O&U - RNF032 - NOTES", - "path": "04-SIDEL/04 - E5.007299 - Modifica O&U - RNF032/E5.007299 - Modifica O&U - RNF032 - NOTES.md" - }, - { - "basename": "Problems to Migration to TIA", - "path": "04-SIDEL/00 - MASTER/adjuntos/Problems to Migration to TIA.md" } ], "omittedPaths": [], diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 2ee723f..3d67dba 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -8,87 +8,87 @@ "type": "tabs", "children": [ { - "id": "0b0b8b496de176cf", + "id": "897643dd9b93c638", "type": "leaf", "state": { "type": "markdown", "state": { - "file": "04-SIDEL/00 - MASTER/MIXER/S7 Software Calls.md", + "file": "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/SAE196 - IO.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "S7 Software Calls" + "title": "SAE196 - IO" } }, { - "id": "9c8cab4a3ddaf461", + "id": "a54b4dc763211462", "type": "leaf", "state": { "type": "markdown", "state": { - "file": "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - Software adaptation from Master - Notes.md", + "file": "04-SIDEL/00 - MASTER/MIXER/SIDEL - Mixer - Equivalences.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "SAE346 - Software adaptation from Master - Notes" + "title": "SIDEL - Mixer - Equivalences" } }, { - "id": "1e202b75a5de872a", + "id": "1518daf4545292c1", "type": "leaf", "state": { "type": "markdown", "state": { - "file": "04-SIDEL/04 - E5.007299 - Modifica O&U - RNF032/RNF032 - Difference between Hardware on S7 and the Electrical scheme.md", + "file": "01-Documentation/AI - IA - LLM - Artificial Intelligence/AI Prompts useful.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "RNF032 - Difference between Hardware on S7 and the Electrical scheme" + "title": "AI Prompts useful" } }, { - "id": "918600f76a580457", + "id": "f9aff123c3b9238e", "type": "leaf", "state": { "type": "markdown", "state": { - "file": "01-Documentation/WEB/Download Software.md", + "file": "01-Documentation/Routers/Zero-Tier ONE - Lan NAT.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "Download Software" + "title": "Zero-Tier ONE - Lan NAT" } }, { - "id": "5dcd1b7c3c365cae", + "id": "7a1cc58dd51a902b", "type": "leaf", "state": { - "type": "markdown", + "type": "webviewer", "state": { - "file": "01-Documentation/Endress+Houser/Endress+Hauser WEB Access.md", - "mode": "source", - "source": false + "url": "https://docs.zerotier.com/route-between-phys-and-virt/", + "title": "Route between ZeroTier and Physical Networks | ZeroTier Documentation", + "mode": "webview" }, - "icon": "lucide-file", - "title": "Endress+Hauser WEB Access" + "icon": "globe-2", + "title": "Route between ZeroTier and Physical Networks | ZeroTier Documentation" } }, { - "id": "5b164e8442f63142", + "id": "90a7c8f7a7e89fc2", "type": "leaf", "state": { "type": "markdown", "state": { - "file": "07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos Visual Studio/Como usar PublicApiGenerator - Nuget - Documentator.md", + "file": "07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos en Python/Conversión LAD a SCL Siemens.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "Como usar PublicApiGenerator - Nuget - Documentator" + "title": "Conversión LAD a SCL Siemens" } } ], @@ -112,7 +112,7 @@ "type": "file-explorer", "state": { "sortOrder": "alphabetical", - "autoReveal": false + "autoReveal": true }, "icon": "lucide-folder-closed", "title": "Files" @@ -287,53 +287,54 @@ "obsidian-importer:Open Importer": false } }, - "active": "5b164e8442f63142", + "active": "90a7c8f7a7e89fc2", "lastOpenFiles": [ - "01-Documentation/Endress+Houser/Endress+Hauser WEB Access.md", - "01-Documentation/Endress+Houser/Optional - Concentration measurement.md", - "01-Documentation/WEB/Download Software.md", - "04-SIDEL/04 - E5.007299 - Modifica O&U - RNF032/RNF032 - Difference between Hardware on S7 and the Electrical scheme.md", + "07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos en Python/Conversión LAD a SCL Siemens.md", + "07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos en Python/Conversión LAD a SCL Siemens.md", + "07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos en Python/Script Python DB to Excel.md", + "07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos en Python/Python Notes.md", + "07 - Desarrolo de Proyectos - Scripts - Visual Studio/Visual Studio Notes.md", + "01-Documentation/Routers/Zero-Tier ONE - Lan NAT.md", + "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/SAE196 - IO.md", + "04-SIDEL/00 - MASTER/MIXER/SIDEL - Mixer - Equivalences.md", + "01-Documentation/AI - IA - LLM - Artificial Intelligence/AI Prompts useful.md", + "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/SAE196 - IO Adapted.md", + "04-SIDEL/00 - MASTER/MIXER/SIDEL - Mixer - Master - IO Tags.md", + "01-Documentation/Endress+Houser/Heartbeat Technology Implementation.md", + "01-Documentation/Endress+Houser/Endress+Hauser Software.md", + "01-Documentation/SIDEL/SIDEL - FLD.md", + "01-Documentation/SIDEL/adjuntos/Pasted image 20250417164020.png", + "01-Documentation/AI - IA - LLM - Artificial Intelligence/MCP.md", + "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - Software adaptation from Master - Notes.md", + "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - Process diagram.md", + "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - Master adaptation to compile.md", + "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - IO from Electrical Diagram.md", + "01-Documentation/GIT/Git - Start New Repository with Visual Studio Code - VS Code.md", + "01-Documentation/GIT/Notes - Git - Gitea.md", + "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/E5.007363 - Modifica O&U - SAE196 - Notes.md", + "01-Documentation/Windows/WSL - Uninstall.md", + "01-Documentation/WSL Linux on Windows/on NUC.md", + "01-Documentation/Windows/Windows 10 Autologin.md", + "01-Documentation/Routers/Mikrotik - Network Redes/Wireguard.md", + "01-Documentation/Endress+Houser/adjuntos/Pasted image 20250414150025.png", + "01-Documentation/Endress+Houser/Comparative.xlsx", + "01-Documentation/Endress+Houser/Endress+Hauser_Parameters_Comparison.csv", + "01-Documentation/Endress+Houser/Water/adjuntos/500DP_parameter_Mixer.csv", + "01-Documentation/Endress+Houser/Water/adjuntos/500DP_parameter_FactoryValues.csv", + "01-Documentation/Endress+Houser/Water/adjuntos/500DP_parameter_2025-04-14_1159.csv", + "01-Documentation/Endress+Houser/Water/adjuntos/500DP_parameter_2025-04-10_1508.csv", + "01-Documentation/Endress+Houser/Water/adjuntos", + "01-Documentation/Endress+Houser/Water/Nueva carpeta", + "01-Documentation/Endress+Houser/CO2/adjuntos/500DP_parameter_FactoryValues.csv", + "01-Documentation/Endress+Houser/CO2/adjuntos/500DP_parameter_Mixer.csv", "01-Documentation/Endress+Houser/adjuntos/Pasted image 20250411154541.png", "01-Documentation/Endress+Houser/adjuntos/Pasted image 20250411154441.png", - "01-Documentation/Endress+Houser/Endress+Hauser Concentration Optional.md", - "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/markdown/192_168_1_212-192_168_1_212.md", - "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/markdown/index.md", "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/screenshots/post_login.png", "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/screenshots/initial_page.png", "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/screenshots/before_click_xpath_Menu.png", "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/screenshots/before_click_xpath_Measured values.png", "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/screenshots/after_click_xpath_Menu.png", "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/screenshots/after_click_xpath_Measured values.png", - "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/screenshots/192_168_1_212-192_168_1_212-pid_38_2.png", - "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/screenshots/192_168_1_212-192_168_1_212-pid_38_1.png", - "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/screenshots", - "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/markdown/192_168_1_212-192_168_1_212-ulPID_38_ulAccCode_235767257.md", - "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/markdown/192_168_1_212-192_168_1_212-ulPID_18_ulAccCode_235767257.md", - "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/markdown/192_168_1_212-192_168_1_212-ulPID_149_ulAccCode_235767257.md", - "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/markdown/192_168_1_212-192_168_1_212-pid_38.md", - "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/markdown/192_168_1_212-192_168_1_212-pid_18.md", - "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/markdown", - "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/html/192_168_1_212-192_168_1_212.html", - "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/html/192_168_1_212-192_168_1_212-ulPID_38_ulAccCode_235767257.html", - "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/html/192_168_1_212-192_168_1_212-ulPID_18_ulAccCode_235767257.html", - "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/html/192_168_1_212-192_168_1_212-ulPID_149_ulAccCode_235767257.html", - "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/html/192_168_1_212-192_168_1_212-pid_38.html", - "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/html/192_168_1_212-192_168_1_212-pid_18.html", - "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/html", - "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/index.json", - "01-Documentation/Windows/Notes for Windows - Chris Titus Tool - Online - Offline.md", - "04-SIDEL/04 - E5.007299 - Modifica O&U - RNF032/E5.007299 - RNF032 - FDM.md", - "04-SIDEL/04 - E5.007299 - Modifica O&U - RNF032/FDM RNF032 E5.007299.md", - "04-SIDEL/03 - 5.007382-EXMU01UF - RVU008 - EQPT24731/5.007382-EXMU01UF - RVU008 - EQPT24731 - Notes.md", - "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/E5.007363 - Modifica O&U - SAE196 - Notes.md", - "01-Documentation/Siemens/IM Siemens - Profibus - Comissioning.md", - "01-Documentation/SIDEL/SIDEL - Passwords.md", - "01-Documentation/SIDEL/Master Mixer/Mixer - Notes.md", - "04-SIDEL/03 - 5.007382-EXMU01UF - RVU008 - EQPT24731/5.007382-EXMU01UF - RVU008 - EQPT24731 - Initial Data.md", - "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - Software adaptation from Master - Notes.md", - "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - Signals - CIP - Filler - Syrop.md", - "04-SIDEL/00 - MASTER/MIXER/S7 Software Calls.md", - "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - Process diagram.md", "03-Revised/93789 Sipa Italia - Tinny - HSCounters - Piattaforma/Divider/Untitled.canvas", "04-InLavoro/9..... MASTER Transport/Standard Transport/FB500 Logic.canvas", "04-InLavoro/HENKEL/93040 - HENKEL - BowlingGreen/TL22-L25/Synoptic Change/Q3.canvas", diff --git a/01-Documentation/AI - IA - LLM - Artificial Intelligence/AI Prompts useful.md b/01-Documentation/AI - IA - LLM - Artificial Intelligence/AI Prompts useful.md new file mode 100644 index 0000000..0d684b6 --- /dev/null +++ b/01-Documentation/AI - IA - LLM - Artificial Intelligence/AI Prompts useful.md @@ -0,0 +1,18 @@ + +### Prompt for IO equivalences search +*** +* filesystem must be enables +* ==Deep thinking needed== + +```pascal + +$Master: "C:\Users\migue\OneDrive\Miguel\Obsidean\Trabajo\VM\04-SIDEL\00 - MASTER\MIXER\SIDEL - Mixer - Master - IO Tags.md" +$PLC: "C:\Users\migue\OneDrive\Miguel\Obsidean\Trabajo\VM\04-SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\SAE196 - IO.md" +$Adaptation: "C:\Users\migue\OneDrive\Miguel\Obsidean\Trabajo\VM\04-SIDEL\06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)\SAE196 - IO Adapted.md" +$Equivalences: "C:\Users\migue\OneDrive\Miguel\Obsidean\Trabajo\VM\04-SIDEL\00 - MASTER\MIXER\SIDEL - Mixer - Equivalences.md" + +Tengo dos tablas de IO, una $Master con los Tags y Descripciones del software y otra tabla $PLC con los IO y las descripciones de cada IO. Los IO son con nomenclatura siemens I0.0 significa ingreso digital byte 0, bit 0. PEW... significa ingreso analogico, mientras que PAW... significa salida analogica. +Quisiera que me ayudes a crear otra tabla $Adaptation en donde a las filas de la tabla $PLC se le complete la celda de Master Tag buscando el mejor candidato de la tabla $Master. En esta tabla quisiera agregar la descripcion revisada de cada uno de las tablas. Podrías agregar una columna con información del nivel de certeza. El archivo $Equivalences tiene información de ciertas equivalencias que pueden ser útiles para las búsquedas. Para acceder a los archivos para leer o escribir puedes usar el MCP filesystem. + +``` + diff --git a/01-Documentation/AI - IA - LLM - Artificial Intelligence/MCP.md b/01-Documentation/AI - IA - LLM - Artificial Intelligence/MCP.md new file mode 100644 index 0000000..fc259f4 --- /dev/null +++ b/01-Documentation/AI - IA - LLM - Artificial Intelligence/MCP.md @@ -0,0 +1,42 @@ + +### MCP Servers on Smithery +https://smithery.ai + +### MCP Server Directory +[MCP Server Directory: 3700+ updated daily \| PulseMCP](https://www.pulsemcp.com/servers) + +### Model Context Protocol servers en Github +*** +[GitHub - modelcontextprotocol/servers: Model Context Protocol Servers](https://github.com/modelcontextprotocol/servers?tab=readme-ov-file) + + +### Generador de configuración + +[Generate claude\_desktop\_config.json \| Claude Desktop MCP Config Generator](https://claudedesktopconfiggenerator.com) + + + +Por ejemplo para instalar [GitHub - mamertofabian/mcp-everything-search](https://github.com/mamertofabian/mcp-everything-search?tab=readme-ov-file) + +* Clonar el repositorio con +``` +git clone url +``` + + * Tener instalado uv + * Modificar el archivo claude_desktop_config.json + +```json +"everything-search": { + "command": "uv", + "args": [ + "--directory", + "/path/to/mcp-everything-search/src/mcp_server_everything_search", + "run", + "mcp-server-everything-search" + ], + "env": { + "EVERYTHING_SDK_PATH": "path/to/Everything-SDK/dll/Everything64.dll" + } +} +``` \ No newline at end of file diff --git a/01-Documentation/Endress+Houser/CO2/Promass 500 Documentation for CO2 System.md b/01-Documentation/Endress+Houser/CO2/Promass 500 Documentation for CO2 System.md new file mode 100644 index 0000000..fab039b --- /dev/null +++ b/01-Documentation/Endress+Houser/CO2/Promass 500 Documentation for CO2 System.md @@ -0,0 +1,93 @@ + +## General Information + +This document details the differences between the factory configuration of the Endress+Hauser Promass 500DP and the specific configuration implemented for the CO2 system in the mixer. + +### Device Information + +| Parameter | Factory Configuration | CO2 System Configuration | +|-----------|----------------------|--------------------------| +| Device tag | Promass300/500DP | Promass300/500DP | +| Serial number | X10F9F02000 | X10F9F02000 | +| Firmware version | V1.00.02 | V1.00.02 | +| Nominal diameter | DN15 / 1/2" | DN15 / 1/2" | + +## Key Configuration Differences + +### 1. Measurement Units + +| Parameter | Factory Values | CO2 System Values | Impact | +|-----------|---------------|-------------------|--------| +| Mass flow unit | kg/h | g/min | Higher precision for real-time process control | +| Mass unit | kg | g | Consistent with flow units | +| Density unit | kg/l | g/ml | Consistent with mass units | +| Medium selection | Liquid | Gas (Carbon dioxide CO2) | Correctly configured for CO2 measurement | + +### 2. Communication and Fieldbus + +| Parameter | Factory Values | CO2 System Values | Impact | +|-----------|---------------|-------------------|--------| +| Device address | 126 | 22 | Specific address in PROFIBUS network | +| Status PROFIBUS Master Config | Not active | Active | Confirmation of active communication with PLC | +| Bus termination | Off | On | Proper network termination for signal integrity | + +### 3. Analog Output Configuration + +| Parameter | Factory Values | CO2 System Values | Impact | +|-----------|---------------|-------------------|--------| +| 0/4 mA value (Output 1) | 0.000 kg/h | 0.000 g/min | Adjusted to system units | +| 20 mA value (Output 1) | 1300.000 kg/h | 250000.0 g/min | Range adjusted for CO2 dosing process | +| 100% bargraph value 1 | 1300.000 kg/h | 250000.0 g/min | Display range consistent with operational range | + +### 4. Low Flow Cut Off + +| Parameter | Factory Values | CO2 System Values | Impact | +|-----------|---------------|-------------------|--------| +| On value low flow cutoff | 26.0000 kg/h | 4333.333 g/min | Adjusted to eliminate noise readings when idle (26 kg/h ≈ 433 g/min) | +| Off value low flow cutoff | 50% | 50% | No change | + +### 5. Partially Filled Pipe Detection + +| Parameter | Factory Values | CO2 System Values | Impact | +|-----------|---------------|-------------------|--------| +| Assign process variable | Density | Off | Disabled as not applicable for gas measurement | + +### 6. Analog Input Configuration + +| Parameter | Factory Values | CO2 System Values | Impact | +|-----------|---------------|-------------------|--------| +| Analog input 3 Channel | Corrected volume flow | Density | Modified for density monitoring | + +### 7. Calibration and Adjustments + +| Parameter | Factory Values | CO2 System Values | Impact | +|-----------|---------------|-------------------|--------| +| Calibration factor | 1.8568 | 1.8568 | No change | +| Zero point | 23 | 23 | No change | +| Calibration date/time | 16.01.25 05:52 | 16.01.25 05:52 | Same calibration | + +## Performance Parameters + +The device is configured with all the necessary performance parameters for CO2 measurement, with measurement status indicators showing "Good" for all active channels, indicating reliable operation. + +## Recommendations + +1. **Monitor flow range**: Verify that the configured range of 0-250000.0 g/min is appropriate for all operating conditions of the CO2 system. + +2. **System integration verification**: Confirm that the PROFIBUS address (22) is correctly recognized by the control system. + +3. **Density measurement validation**: Although CO2 density is relatively low, confirm that the density measurements are accurate for process control. + +4. **Document future calibrations**: Maintain records of any additional adjustments made to the instrument. + +## Conclusions + +The Promass 500DP configuration for the CO2 system has been specifically adapted to: + +1. Work with more appropriate units for gas measurement (g/min instead of kg/h) +2. Establish measurement ranges appropriate for CO2 dosing (250000 g/min) +3. Configure the device specifically for carbon dioxide gas measurement +4. Set up PROFIBUS communication with the appropriate address for the system +5. Disable density-based partially filled pipe detection, which is not applicable for gas measurement + +These changes optimize the flowmeter's performance for its specific application in the CO2 dosing process. diff --git a/01-Documentation/Endress+Houser/CO2/adjuntos/500DP_parameter_FactoryValues.csv b/01-Documentation/Endress+Houser/CO2/adjuntos/500DP_parameter_FactoryValues.csv new file mode 100644 index 0000000..c9a6bab --- /dev/null +++ b/01-Documentation/Endress+Houser/CO2/adjuntos/500DP_parameter_FactoryValues.csv @@ -0,0 +1,600 @@ +"Device tag","Serial number","Firmware version","Fieldbus Type" +"Promass300/500DP","X10F9F02000","V1.00.02","53" + +"MENU PATH","PARAMETER TEXT","PARAMETER VALUE","UNIT" +"Menu/Operation /","Web server language","English","" +"Menu/Operation /","Display language","English","" +"Menu/Operation /","Access status","Maintenance","" +"Menu/Operation /","Locking status","Temporarily locked","" +"Menu/Operation /Display /","Format display","1 value, max. size","" +"Menu/Operation /Display /","Contrast display","50","%" +"Menu/Operation /Display /","Backlight","Enable","" +"Menu/Operation /Display /","Display interval","5","s" +"Menu/Operation /Totalizer handling/","Control Totalizer 1","Totalize","" +"Menu/Operation /Totalizer handling/","Preset value 1","0.0000","kg" +"Menu/Operation /Totalizer handling/","Control Totalizer 2","Totalize","" +"Menu/Operation /Totalizer handling/","Preset value 2","0.0000","kg" +"Menu/Operation /Totalizer handling/","Control Totalizer 3","Totalize","" +"Menu/Operation /Totalizer handling/","Preset value 3","0.0000","kg" +"Menu/Operation /Totalizer handling/","Reset all totalizers","Cancel","" +"Menu/Operation /Weighted averages/","Reset weighted averages","Totalize","" +"Menu/Setup /","Device tag","Promass300/500DP","" +"Menu/Setup /System units/","Mass flow unit","kg/h","" +"Menu/Setup /System units/","Mass unit","kg","" +"Menu/Setup /System units/","Volume flow unit","l/h","" +"Menu/Setup /System units/","Volume unit","l","" +"Menu/Setup /System units/","Corrected volume flow unit","Nl/h","" +"Menu/Setup /System units/","Corrected volume unit","Nl","" +"Menu/Setup /System units/","Density unit","kg/l","" +"Menu/Setup /System units/","Reference density unit","kg/Nl","" +"Menu/Setup /System units/","Temperature unit","°C","" +"Menu/Setup /System units/","Pressure unit","bar","" +"Menu/Setup /Medium selection/","Select medium","Liquid","" +"Menu/Setup /Medium selection/","Pressure compensation","Off","" +"Menu/Setup /Communication/","Device address","126","" +"Menu/Setup /Analog inputs/Analog input 1/","Channel","Mass flow","" +"Menu/Setup /Analog inputs/Analog input 1/","PV filter time","0.0000","" +"Menu/Setup /Analog inputs/Analog input 1/","Fail safe type","Fail-safe value","" +"Menu/Setup /Analog inputs/Analog input 1/","Fail-safe value","0.0000","" +"Menu/Setup /Analog inputs/Analog input 2/","Channel","Volume flow","" +"Menu/Setup /Analog inputs/Analog input 2/","PV filter time","0.0000","" +"Menu/Setup /Analog inputs/Analog input 2/","Fail safe type","Off","" +"Menu/Setup /Analog inputs/Analog input 3/","Channel","Corrected volume flow","" +"Menu/Setup /Analog inputs/Analog input 3/","PV filter time","0.0000","" +"Menu/Setup /Analog inputs/Analog input 3/","Fail safe type","Off","" +"Menu/Setup /Analog inputs/Analog input 4/","Channel","Density","" +"Menu/Setup /Analog inputs/Analog input 4/","PV filter time","0.0000","" +"Menu/Setup /Analog inputs/Analog input 4/","Fail safe type","Off","" +"Menu/Setup /Analog inputs/Analog input 5/","Channel","Mass flow","" +"Menu/Setup /Analog inputs/Analog input 5/","PV filter time","0.0000","" +"Menu/Setup /Analog inputs/Analog input 5/","Fail safe type","Off","" +"Menu/Setup /Analog inputs/Analog input 6/","Channel","Temperature","" +"Menu/Setup /Analog inputs/Analog input 6/","PV filter time","0.0000","" +"Menu/Setup /Analog inputs/Analog input 6/","Fail safe type","Off","" +"Menu/Setup /Analog inputs/Analog input 7/","Channel","Mass flow","" +"Menu/Setup /Analog inputs/Analog input 7/","PV filter time","0.0000","" +"Menu/Setup /Analog inputs/Analog input 7/","Fail safe type","Off","" +"Menu/Setup /Analog inputs/Analog input 8/","Channel","Mass flow","" +"Menu/Setup /Analog inputs/Analog input 8/","PV filter time","0.0000","" +"Menu/Setup /Analog inputs/Analog input 8/","Fail safe type","Off","" +"Menu/Setup /I/O configuration/","I/O module 1 terminal numbers","26-27 (I/O 1)","" +"Menu/Setup /I/O configuration/","I/O module 1 information","Profibus DP","" +"Menu/Setup /I/O configuration/","I/O module 2 terminal numbers","24-25 (I/O 2)","" +"Menu/Setup /I/O configuration/","I/O module 2 information","Not configurable","" +"Menu/Setup /I/O configuration/","I/O module 2 type","Current output ","" +"Menu/Setup /I/O configuration/","I/O module 3 terminal numbers","22-23 (I/O 3)","" +"Menu/Setup /I/O configuration/","I/O module 3 information","Not configurable","" +"Menu/Setup /I/O configuration/","I/O module 3 type","Current output ","" +"Menu/Setup /I/O configuration/","Alteration code","0","" +"Menu/Setup /Current output 1/","Assign current output 1","Mass flow","" +"Menu/Setup /Current output 1/","Terminal number ","24-25 (I/O 2)","" +"Menu/Setup /Current output 1/","Current span","4...20 mA NAMUR","" +"Menu/Setup /Current output 1/","Signal mode","Active","" +"Menu/Setup /Current output 1/","0/4 mA value","0.000","kg/h" +"Menu/Setup /Current output 1/","20 mA value","1300.000","kg/h" +"Menu/Setup /Current output 1/","Damping output 1","1.0","s" +"Menu/Setup /Current output 1/","Failure mode","Max.","" +"Menu/Setup /Current output 2/","Assign current output 2","Density","" +"Menu/Setup /Current output 2/","Terminal number ","22-23 (I/O 3)","" +"Menu/Setup /Current output 2/","Current span","4...20 mA NAMUR","" +"Menu/Setup /Current output 2/","Signal mode","Active","" +"Menu/Setup /Current output 2/","0/4 mA value","0.000","kg/l" +"Menu/Setup /Current output 2/","20 mA value","1.000","kg/l" +"Menu/Setup /Current output 2/","Damping output 2","1.0","s" +"Menu/Setup /Current output 2/","Failure mode","Max.","" +"Menu/Setup /Display /","Value 1 display","Mass flow","" +"Menu/Setup /Display /","0% bargraph value 1","0.0000","kg/h" +"Menu/Setup /Display /","100% bargraph value 1","1300.000","kg/h" +"Menu/Setup /Display /","Value 2 display","None","" +"Menu/Setup /Display /","Value 3 display","None","" +"Menu/Setup /Display /","Value 4 display","None","" +"Menu/Setup /Low flow cut off/","Assign process variable","Mass flow","" +"Menu/Setup /Low flow cut off/","On value low flow cutoff","26.0000","kg/h" +"Menu/Setup /Low flow cut off/","Off value low flow cutoff","50","%" +"Menu/Setup /Low flow cut off/","Pressure shock suppression","0.0","s" +"Menu/Setup /Partially filled pipe detection/","Assign process variable","Density","" +"Menu/Setup /Partially filled pipe detection/","Low value partial filled pipe detection","0.2000","kg/l" +"Menu/Setup /Partially filled pipe detection/","High value partial filled pipe detection","6.0000","kg/l" +"Menu/Setup /Partially filled pipe detection/","Response time part. filled pipe detect.","1.0","s" +"Menu/Setup /Advanced setup/Calculated values/Corrected volume flow calculation/","Corrected volume flow calculation","Calculated reference density","" +"Menu/Setup /Advanced setup/Calculated values/Corrected volume flow calculation/","Reference temperature","20.0000","°C" +"Menu/Setup /Advanced setup/Calculated values/Corrected volume flow calculation/","Linear expansion coefficient","0.000000e+00","1/K" +"Menu/Setup /Advanced setup/Calculated values/Corrected volume flow calculation/","Square expansion coefficient","0.000000e+00","1/K²" +"Menu/Setup /Advanced setup/Sensor adjustment/","Installation direction","Flow in arrow direction","" +"Menu/Setup /Advanced setup/Sensor adjustment/Zero point adjustment/","Zero point adjustment control","Cancel","" +"Menu/Setup /Advanced setup/Sensor adjustment/Zero point adjustment/","Progress","100","" +"Menu/Setup /Advanced setup/Totalizer 1/","Assign process variable","Mass flow","" +"Menu/Setup /Advanced setup/Totalizer 1/","Unit totalizer ","kg","" +"Menu/Setup /Advanced setup/Totalizer 1/","Totalizer operation mode","Net flow total","" +"Menu/Setup /Advanced setup/Totalizer 1/","Failure mode","Stop","" +"Menu/Setup /Advanced setup/Totalizer 2/","Assign process variable","Mass flow","" +"Menu/Setup /Advanced setup/Totalizer 2/","Unit totalizer ","kg","" +"Menu/Setup /Advanced setup/Totalizer 2/","Totalizer operation mode","Forward flow total","" +"Menu/Setup /Advanced setup/Totalizer 2/","Failure mode","Stop","" +"Menu/Setup /Advanced setup/Totalizer 3/","Assign process variable","Mass flow","" +"Menu/Setup /Advanced setup/Totalizer 3/","Unit totalizer ","kg","" +"Menu/Setup /Advanced setup/Totalizer 3/","Totalizer operation mode","Reverse flow total","" +"Menu/Setup /Advanced setup/Totalizer 3/","Failure mode","Stop","" +"Menu/Setup /Advanced setup/Display /","Decimal places 1","x.xx","" +"Menu/Setup /Advanced setup/Display /","Display damping ","0.0","s" +"Menu/Setup /Advanced setup/Display /","Header","Device tag","" +"Menu/Setup /Advanced setup/Display /","Separator",".","" +"Menu/Setup /Advanced setup/WLAN settings/","WLAN","Enable","" +"Menu/Setup /Advanced setup/WLAN settings/","WLAN mode","WLAN access point","" +"Menu/Setup /Advanced setup/WLAN settings/","Network security","WPA2-PSK","" +"Menu/Setup /Advanced setup/WLAN settings/","WLAN IP address","192.168.1.212","" +"Menu/Setup /Advanced setup/WLAN settings/","Assign SSID name","User-defined","" +"Menu/Setup /Advanced setup/WLAN settings/","SSID name"," ","" +"Menu/Setup /Advanced setup/Concentration/Concentration settings/","Liquid type","Off","" +"Menu/Setup /Advanced setup/Concentration/Concentration unit/","Concentration unit","°Brix","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","Coefficients set name","Coef Set No. 1","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","A0","-7.2952","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","A1","15.1555","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","A2","-11.6756","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","A3","4.4759","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","A4","-0.6615","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","B1","0.7220","E-3" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","B2","38.9126","E-6" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","B3","-1.6739","E-9" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","D1","-0.0975","E-2" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","D2","-0.3731","E-4" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","D3","0.2957","E-3" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","D4","-0.1721","E-5" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","Coefficients set name","Coef Set No. 2","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","A0","-7.2952","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","A1","15.1555","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","A2","-11.6756","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","A3","4.4759","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","A4","-0.6615","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","B1","0.7220","E-3" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","B2","38.9126","E-6" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","B3","-1.6739","E-9" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","D1","-0.0975","E-2" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","D2","-0.3731","E-4" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","D3","0.2957","E-3" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","D4","-0.1721","E-5" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","Coefficients set name","Coef Set No. 3","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","A0","-7.2952","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","A1","15.1555","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","A2","-11.6756","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","A3","4.4759","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","A4","-0.6615","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","B1","0.7220","E-3" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","B2","38.9126","E-6" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","B3","-1.6739","E-9" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","D1","-0.0975","E-2" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","D2","-0.3731","E-4" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","D3","0.2957","E-3" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","D4","-0.1721","E-5" +"Menu/Setup /Advanced setup/Petroleum/","Petroleum mode","Off","" +"Menu/Setup /Advanced setup/Petroleum/","API commodity group","A - crude oil","" +"Menu/Setup /Advanced setup/Petroleum/","API table selection","API table 53/54","" +"Menu/Setup /Advanced setup/Petroleum/","Temperature correction source","Internal measured value","" +"Menu/Setup /Advanced setup/Petroleum/","Shrinkage factor","1.0000","" +"Menu/Setup /Advanced setup/Petroleum/","Meter factor","1.0000","" +"Menu/Setup /Advanced setup/Heartbeat setup/Heartbeat base settings/","Record application reference data","Cancel","" +"Menu/Setup /Advanced setup/Heartbeat setup/Heartbeat base settings/","Status","Done","" +"Menu/Setup /Advanced setup/Heartbeat setup/Heartbeat base settings/","Plant operator","--------------------------------","" +"Menu/Setup /Advanced setup/Heartbeat setup/Heartbeat base settings/","Location","--------------------------------","" +"Menu/Setup /Advanced setup/Heartbeat setup/Heartbeat Verification/","Select reference data","Factory water calibration","" +"Menu/Setup /Advanced setup/Configuration backup/","Operating time","0d01h10m18s ","" +"Menu/Setup /Advanced setup/Configuration backup/","Last backup","0d00h00m01s ","" +"Menu/Setup /Advanced setup/Configuration backup/","Configuration management","Cancel","" +"Menu/Setup /Advanced setup/Configuration backup/","Backup state","None","" +"Menu/Setup /Advanced setup/Configuration backup/","Comparison result","Check not done","" +"Menu/Setup /Advanced setup/Administration/","Device reset","Cancel","" +"Menu/Setup /Advanced setup/Administration/Reset access code/","Reset access code","","" +"Menu/Diagnostics /","Actual diagnostics","S862 Partly filled pipe (Warning)0d00h03m46s 1.Check for gas in process +2.Adjust detec. limits (Service ID 146)","" +"Menu/Diagnostics /","Previous diagnostics","Ok","" +"Menu/Diagnostics /","Operating time from restart","0d01h06m37s ","" +"Menu/Diagnostics /Diagnostic list/","Diagnostics 1","S862S862 Partly filled pipe (Warning)0d00h03m46s 1.Check for gas in process +2.Adjust detec. limits (Service ID 146)","" +"Menu/Diagnostics /Diagnostic list/","Diagnostics 2","Ok","" +"Menu/Diagnostics /Diagnostic list/","Diagnostics 3","Ok","" +"Menu/Diagnostics /Diagnostic list/","Diagnostics 4","Ok","" +"Menu/Diagnostics /Diagnostic list/","Diagnostics 5","Ok","" +"Menu/Diagnostics /Event logbook/","Filter options","All","" +"Menu/Diagnostics /Event logbook/","Clear event list","Cancel","" +"Menu/Diagnostics /Device information /","Device tag","Promass300/500DP","" +"Menu/Diagnostics /Device information /","Serial number","X10F9F02000","" +"Menu/Diagnostics /Device information /","Firmware version","01.00.02","" +"Menu/Diagnostics /Device information /","Device name","Promass 300","" +"Menu/Diagnostics /Device information /","Order code ","8F3B15-CE06/0","" +"Menu/Diagnostics /Device information /","Extended order code 1","8F3B15-AAILABBFAASAF","" +"Menu/Diagnostics /Device information /","Extended order code 2","MWAA1+ED","" +"Menu/Diagnostics /Device information /","Extended order code 3","","" +"Menu/Diagnostics /Device information /","ENP version","2.02.00 ","" +"Menu/Diagnostics /Device information /","PROFIBUS ident number","0x156F","" +"Menu/Diagnostics /Device information /","Status PROFIBUS Master Config","Not active","" +"Menu/Diagnostics /Measured values /Measured variables/","Mass flow","0.0000","kg/h" +"Menu/Diagnostics /Measured values /Measured variables/","Volume flow","0.0000","l/h" +"Menu/Diagnostics /Measured values /Measured variables/","Corrected volume flow","0.0000","Nl/h" +"Menu/Diagnostics /Measured values /Measured variables/","Density","0.0013","kg/l" +"Menu/Diagnostics /Measured values /Measured variables/","Reference density","0.0013","kg/Nl" +"Menu/Diagnostics /Measured values /Measured variables/","Temperature","21.5","°C" +"Menu/Diagnostics /Measured values /Measured variables/","Pressure value","1.0132","bar" +"Menu/Diagnostics /Measured values /Output values/Current output 1/","Output current 1","4.00","mA" +"Menu/Diagnostics /Measured values /Output values/Current output 1/","Measured current 1","0.14","mA" +"Menu/Diagnostics /Measured values /Output values/Current output 2/","Output current 2","4.02","mA" +"Menu/Diagnostics /Measured values /Output values/Current output 2/","Measured current 2","0.11","mA" +"Menu/Diagnostics /Measured values /Totalizer 1/","Totalizer value 1","-3.1453","kg" +"Menu/Diagnostics /Measured values /Totalizer 1/","Totalizer status 1","Uncertain","" +"Menu/Diagnostics /Measured values /Totalizer 1/","Totalizer status (Hex) 1","0x78","" +"Menu/Diagnostics /Measured values /Totalizer 2/","Totalizer value 2","0.0554","kg" +"Menu/Diagnostics /Measured values /Totalizer 2/","Totalizer status 2","Uncertain","" +"Menu/Diagnostics /Measured values /Totalizer 2/","Totalizer status (Hex) 2","0x78","" +"Menu/Diagnostics /Measured values /Totalizer 3/","Totalizer value 3","-3.2007","kg" +"Menu/Diagnostics /Measured values /Totalizer 3/","Totalizer status 3","Uncertain","" +"Menu/Diagnostics /Measured values /Totalizer 3/","Totalizer status (Hex) 3","0x78","" +"Menu/Diagnostics /Analog inputs/Analog input 1/","Out value ","0.0000","" +"Menu/Diagnostics /Analog inputs/Analog input 1/","Out unit text","kg/h","" +"Menu/Diagnostics /Analog inputs/Analog input 1/","Out status","Uncertain","" +"Menu/Diagnostics /Analog inputs/Analog input 1/","Out status","0x78","" +"Menu/Diagnostics /Analog inputs/Analog input 2/","Out value ","0.0000","" +"Menu/Diagnostics /Analog inputs/Analog input 2/","Out unit text","l/h","" +"Menu/Diagnostics /Analog inputs/Analog input 2/","Out status","Uncertain","" +"Menu/Diagnostics /Analog inputs/Analog input 2/","Out status","0x78","" +"Menu/Diagnostics /Analog inputs/Analog input 3/","Out value ","0.0000","" +"Menu/Diagnostics /Analog inputs/Analog input 3/","Out unit text","Nl/h","" +"Menu/Diagnostics /Analog inputs/Analog input 3/","Out status","Uncertain","" +"Menu/Diagnostics /Analog inputs/Analog input 3/","Out status","0x78","" +"Menu/Diagnostics /Analog inputs/Analog input 4/","Out value ","0.0013","" +"Menu/Diagnostics /Analog inputs/Analog input 4/","Out unit text","kg/l","" +"Menu/Diagnostics /Analog inputs/Analog input 4/","Out status","Uncertain","" +"Menu/Diagnostics /Analog inputs/Analog input 4/","Out status","0x78","" +"Menu/Diagnostics /Analog inputs/Analog input 5/","Out value ","0.0000","" +"Menu/Diagnostics /Analog inputs/Analog input 5/","Out unit text","kg/h","" +"Menu/Diagnostics /Analog inputs/Analog input 5/","Out status","Uncertain","" +"Menu/Diagnostics /Analog inputs/Analog input 5/","Out status","0x78","" +"Menu/Diagnostics /Analog inputs/Analog input 6/","Out value ","21.5470","" +"Menu/Diagnostics /Analog inputs/Analog input 6/","Out unit text","°C","" +"Menu/Diagnostics /Analog inputs/Analog input 6/","Out status","Uncertain","" +"Menu/Diagnostics /Analog inputs/Analog input 6/","Out status","0x78","" +"Menu/Diagnostics /Analog inputs/Analog input 7/","Out value ","0.0000","" +"Menu/Diagnostics /Analog inputs/Analog input 7/","Out unit text","kg/h","" +"Menu/Diagnostics /Analog inputs/Analog input 7/","Out status","Uncertain","" +"Menu/Diagnostics /Analog inputs/Analog input 7/","Out status","0x78","" +"Menu/Diagnostics /Analog inputs/Analog input 8/","Out value ","0.0000","" +"Menu/Diagnostics /Analog inputs/Analog input 8/","Out unit text","kg/h","" +"Menu/Diagnostics /Analog inputs/Analog input 8/","Out status","Uncertain","" +"Menu/Diagnostics /Analog inputs/Analog input 8/","Out status","0x78","" +"Menu/Diagnostics /Data logging/","Data logging","Overwriting","" +"Menu/Diagnostics /Heartbeat/Performing verification /","Year","10","" +"Menu/Diagnostics /Heartbeat/Performing verification /","Month","January","" +"Menu/Diagnostics /Heartbeat/Performing verification /","Day","1","" +"Menu/Diagnostics /Heartbeat/Performing verification /","Hour","12","" +"Menu/Diagnostics /Heartbeat/Performing verification /","Minute","0","" +"Menu/Diagnostics /Heartbeat/Performing verification /","Start verification","Cancel","" +"Menu/Diagnostics /Heartbeat/Performing verification /","Status","Not done","" +"Menu/Diagnostics /Heartbeat/Performing verification /","Overall result","Not done","" +"Menu/Diagnostics /Simulation /","Assign simulation process variable","Off","" +"Menu/Diagnostics /Simulation /","Current output 1 simulation","Off","" +"Menu/Diagnostics /Simulation /","Current output 2 simulation","Off","" +"Menu/Diagnostics /Simulation /","Device alarm simulation","Off","" +"Menu/Diagnostics /Simulation /","Diagnostic event simulation","65533","" +"Menu/Diagnostics /Simulation /","Diagnostic event category","Process","" +"Menu/Diagnostics /Simulation /","Diagnostic event simulation","Off","" +"Menu/Expert/System/Diagnostic handling/","Alarm delay ","0","s" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 046","Alarm","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 140","Alarm","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 144","Logbook entry only","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 374","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 302","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 441","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 830","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 831","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 832","Logbook entry only","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 833","Logbook entry only","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 834","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 835","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 842","Off","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 862","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 912","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 913","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 944","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 948","Warning","" +"Menu/Expert/System/Administration/","Activate SW option","6661876","" +"Menu/Expert/System/Administration/","Software option overview","Concentration","" +"Menu/Expert/Sensor/System units/","Date/time format","dd.mm.yy hh:mm","" +"Menu/Expert/Sensor/Process parameters/","Flow damping","0.00","s" +"Menu/Expert/Sensor/Process parameters/","Density damping","0.00","s" +"Menu/Expert/Sensor/Process parameters/","Temperature damping","0.00","s" +"Menu/Expert/Sensor/Process parameters/","Flow override","Off","" +"Menu/Expert/Sensor/Process parameters/Partially filled pipe detection/","Maximum damping partial filled pipe det.","0.00","" +"Menu/Expert/Sensor/External compensation/","Temperature mode","Internal measured value","" +"Menu/Expert/Sensor/Sensor adjustment/Density adjustment/","Density adjustment mode","1 point adjustment","" +"Menu/Expert/Sensor/Sensor adjustment/Density adjustment/","Density setpoint 1","1.0000","kg/l" +"Menu/Expert/Sensor/Sensor adjustment/Density adjustment/","Execute density adjustment","Ok","" +"Menu/Expert/Sensor/Sensor adjustment/Density adjustment/","Density adjustment factor","1.0000","" +"Menu/Expert/Sensor/Sensor adjustment/Density adjustment/","Density adjustment offset","0.0000","" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Mass flow offset","0.0000","kg/s" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Mass flow factor","1.0000","" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Volume flow offset","0.0000","m³/s" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Volume flow factor","1.0000","" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Density offset","0.0000","kg/m³" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Density factor","1.0000","" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Corrected volume flow offset","0.0000","Nm³/s" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Corrected volume flow factor","1.0000","" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Reference density offset","0.0000","kg/Nm³" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Reference density factor","1.0000","" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Temperature offset","0.0000","K" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Temperature factor","1.0000","" +"Menu/Expert/Sensor/Calibration/","Calibration factor ","1.8568","" +"Menu/Expert/Sensor/Calibration/","Zero point","23","" +"Menu/Expert/Sensor/Calibration/","Nominal diameter","DN15 / 1/2"","" +"Menu/Expert/Sensor/Calibration/","C0","-3154.409","" +"Menu/Expert/Sensor/Calibration/","C1","1.1562e+09","" +"Menu/Expert/Sensor/Calibration/","C2","-532481.6","" +"Menu/Expert/Sensor/Calibration/","C3","100329.3","" +"Menu/Expert/Sensor/Calibration/","C4","0.0000","" +"Menu/Expert/Sensor/Calibration/","C5","0.0000","" +"Menu/Expert/Sensor/Calibration/","A0","0.0000","" +"Menu/Expert/Sensor/Calibration/","A1","0.0000","" +"Menu/Expert/Sensor/Calibration/","A2","0.0000","" +"Menu/Expert/Sensor/Calibration/","A3","0.4839","" +"Menu/Expert/Sensor/Calibration/","A4","0.0000","" +"Menu/Expert/Sensor/Calibration/","Calibration date/time ","16.01.25 05:52","" +"Menu/Expert/Sensor/Calibration/Recalibration/","Calibration factor ","1.000","" +"Menu/Expert/Sensor/Calibration/Recalibration/","Confirm settings","No","" +"Menu/Expert/Sensor/Calibration/Logbook/","Calibration counter","1","" +"Menu/Expert/Sensor/Calibration/Logbook/","Select calibration log entry","1","" +"Menu/Expert/Sensor/Calibration/Logbook/","Timestamp ","16.01.25 05:52","" +"Menu/Expert/Sensor/Calibration/Logbook/","Calibration factor ","1.857","" +"Menu/Expert/Sensor/Testpoints/","Oscillation frequency 0","602.845","Hz" +"Menu/Expert/Sensor/Testpoints/","Oscillation frequency 1","0.000","Hz" +"Menu/Expert/Sensor/Testpoints/","Frequency fluctuation 0","3.6734e-06","" +"Menu/Expert/Sensor/Testpoints/","Frequency fluctuation 1","0.0000","" +"Menu/Expert/Sensor/Testpoints/","Oscillation amplitude 0","100.0","%" +"Menu/Expert/Sensor/Testpoints/","Oscillation amplitude 1","0.0","%" +"Menu/Expert/Sensor/Testpoints/","Oscillation damping 0","238.72","" +"Menu/Expert/Sensor/Testpoints/","Oscillation damping 1","0.00","" +"Menu/Expert/Sensor/Testpoints/","Oscillation damping fluctuation 0","1.4919e-05","" +"Menu/Expert/Sensor/Testpoints/","Oscillation damping fluctuation 1","0.0000","" +"Menu/Expert/Sensor/Testpoints/","Signal asymmetry","-2.0","%" +"Menu/Expert/Sensor/Testpoints/","Torsion signal asymmetry","0.0","%" +"Menu/Expert/Sensor/Testpoints/","Sensor electronic temperature (ISEM)","35.7","°C" +"Menu/Expert/Sensor/Testpoints/","Carrier pipe temperature","21.7","°C" +"Menu/Expert/Sensor/Testpoints/","Exciter current 0","0.0042","A" +"Menu/Expert/Sensor/Testpoints/","Exciter current 1","0.0000","A" +"Menu/Expert/Sensor/Testpoints/","RawMassFlow","0.7014","kg/h" +"Menu/Expert/Sensor/Testpoints/","Reynolds number","inf","" +"Menu/Expert/Output /Current output 1/","Measuring mode","Forward flow","" +"Menu/Expert/Output /Current output 1/","Response time","1.0000","s" +"Menu/Expert/Output /Current output 1/","Trim ","Off","" +"Menu/Expert/Output /Current output 1/","Status","76","" +"Menu/Expert/Output /Current output 2/","Measuring mode","Forward flow","" +"Menu/Expert/Output /Current output 2/","Response time","1.0000","s" +"Menu/Expert/Output /Current output 2/","Trim ","Off","" +"Menu/Expert/Output /Current output 2/","Status","76","" +"Menu/Expert/Communication/PROFIBUS DP configuration/","Address mode","Software","" +"Menu/Expert/Communication/PROFIBUS DP configuration/","Ident number selector","Automatic mode","" +"Menu/Expert/Communication/PROFIBUS DP configuration/","Bus termination","Off","" +"Menu/Expert/Communication/PROFIBUS DP info/","Profile version","3.02 ","" +"Menu/Expert/Communication/PROFIBUS DP info/","Baudrate","Not available","" +"Menu/Expert/Communication/PROFIBUS DP info/","Master availability","No","" +"Menu/Expert/Communication/Physical block /","Static revision","0","" +"Menu/Expert/Communication/Physical block /","Strategy","0","" +"Menu/Expert/Communication/Physical block /","Alert key","0","" +"Menu/Expert/Communication/Physical block /","Target mode","Auto","" +"Menu/Expert/Communication/Physical block /","Mode block actual","Auto","" +"Menu/Expert/Communication/Physical block /","Mode block permitted","136","" +"Menu/Expert/Communication/Physical block /","Mode block normal","Auto","" +"Menu/Expert/Communication/Physical block /","Alarm summary","0","" +"Menu/Expert/Communication/Physical block /","Software revision","01.00.02","" +"Menu/Expert/Communication/Physical block /","Hardware revision","V1.00.00","" +"Menu/Expert/Communication/Physical block /","Manufacturer ID","17","" +"Menu/Expert/Communication/Physical block /","Device ID","Promass300/500DP","" +"Menu/Expert/Communication/Physical block /","Serial number","X10F9F02000 ","" +"Menu/Expert/Communication/Physical block /","Diagnostics ","524288","" +"Menu/Expert/Communication/Physical block /","Diagnostics mask","0","" +"Menu/Expert/Communication/Physical block /","Device certification"," ","" +"Menu/Expert/Communication/Physical block /","Factory reset","Cancel","" +"Menu/Expert/Communication/Physical block /","Descriptor"," ","" +"Menu/Expert/Communication/Physical block /","Device message"," ","" +"Menu/Expert/Communication/Physical block /","Device install date"," ","" +"Menu/Expert/Communication/Physical block /","Hardware lock","Unprotected","" +"Menu/Expert/Communication/Physical block /","Feature supported","9","" +"Menu/Expert/Communication/Physical block /","Feature enabled","9","" +"Menu/Expert/Communication/Physical block /","Condensed status diagnostic","On","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 1","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 1","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 2","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 2","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 3","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 3","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 4","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 4","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 5","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 5","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 6","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 6","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 7","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 7","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 8","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 8","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 9","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 9","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 10","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 10","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 11","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 11","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 12","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 12","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 13","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 13","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 14","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 14","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 15","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 15","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 16","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 16","0","" +"Menu/Expert/Communication/Web server/","MAC address","00-07-05-1C-A9-A5","" +"Menu/Expert/Communication/Web server/","DHCP client","Off","" +"Menu/Expert/Communication/Web server/","IP address","192.168.1.212","" +"Menu/Expert/Communication/Web server/","Subnet mask","255.255.255.0","" +"Menu/Expert/Communication/Web server/","Default gateway","0.0.0.0","" +"Menu/Expert/Communication/Web server/","Web server functionality","On","" +"Menu/Expert/Communication/Web server/","Login page","With header","" +"Menu/Expert/Communication/WLAN settings/","WLAN MAC address","FF-FF-FF-FF-FF-FF","" +"Menu/Expert/Communication/WLAN settings/","WLAN subnet mask","255.255.255.0","" +"Menu/Expert/Communication/WLAN settings/","2.4 GHz WLAN channel","6","" +"Menu/Expert/Communication/WLAN settings/","Select antenna","Internal antenna","" +"Menu/Expert/Discrete inputs/Discrete input 1/","Channel","Empty pipe detection","" +"Menu/Expert/Discrete inputs/Discrete input 1/","Invert","Off","" +"Menu/Expert/Discrete inputs/Discrete input 1/","Fail safe type","Off","" +"Menu/Expert/Discrete inputs/Discrete input 1/","Out value ","1","" +"Menu/Expert/Discrete inputs/Discrete input 1/","Out status","Uncertain","" +"Menu/Expert/Discrete inputs/Discrete input 1/","Out status","0x78","" +"Menu/Expert/Discrete inputs/Discrete input 2/","Channel","Low flow cut off","" +"Menu/Expert/Discrete inputs/Discrete input 2/","Invert","Off","" +"Menu/Expert/Discrete inputs/Discrete input 2/","Fail safe type","Off","" +"Menu/Expert/Discrete inputs/Discrete input 2/","Out value ","1","" +"Menu/Expert/Discrete inputs/Discrete input 2/","Out status","Uncertain","" +"Menu/Expert/Discrete inputs/Discrete input 2/","Out status","0x78","" +"Menu/Expert/Analog outputs/Analog output 1/","Set point value","0.0000","" +"Menu/Expert/Analog outputs/Analog output 1/","Set point status","0x18","" +"Menu/Expert/Analog outputs/Analog output 1/","Fail safe time","0","" +"Menu/Expert/Analog outputs/Analog output 1/","Fail safe type","Off","" +"Menu/Expert/Analog outputs/Analog output 1/","Out value ","0.0000","" +"Menu/Expert/Analog outputs/Analog output 1/","Out status","Bad","" +"Menu/Expert/Analog outputs/Analog output 1/","Out status","0x0","" +"Menu/Expert/Analog outputs/Analog output 2/","Set point value","0.0000","" +"Menu/Expert/Analog outputs/Analog output 2/","Set point status","0x18","" +"Menu/Expert/Analog outputs/Analog output 2/","Fail safe time","0","" +"Menu/Expert/Analog outputs/Analog output 2/","Fail safe type","Off","" +"Menu/Expert/Analog outputs/Analog output 2/","Out value ","0.0000","" +"Menu/Expert/Analog outputs/Analog output 2/","Out status","Bad","" +"Menu/Expert/Analog outputs/Analog output 2/","Out status","0x0","" +"Menu/Expert/Analog outputs/Analog output 3/","Set point value","0.0000","" +"Menu/Expert/Analog outputs/Analog output 3/","Set point status","0x18","" +"Menu/Expert/Analog outputs/Analog output 3/","Fail safe time","0","" +"Menu/Expert/Analog outputs/Analog output 3/","Fail safe type","Off","" +"Menu/Expert/Analog outputs/Analog output 3/","Out value ","0.0000","" +"Menu/Expert/Analog outputs/Analog output 3/","Out status","Bad","" +"Menu/Expert/Analog outputs/Analog output 3/","Out status","0x0","" +"Menu/Expert/Analog outputs/Analog output 4/","Set point value","0.0000","" +"Menu/Expert/Analog outputs/Analog output 4/","Set point status","0x18","" +"Menu/Expert/Analog outputs/Analog output 4/","Fail safe time","0","" +"Menu/Expert/Analog outputs/Analog output 4/","Fail safe type","Off","" +"Menu/Expert/Analog outputs/Analog output 4/","Out value ","0.0000","" +"Menu/Expert/Analog outputs/Analog output 4/","Out status","Bad","" +"Menu/Expert/Analog outputs/Analog output 4/","Out status","0x0","" +"Menu/Expert/Analog outputs/Analog output 5/","Set point value","0.0000","" +"Menu/Expert/Analog outputs/Analog output 5/","Set point status","0x18","" +"Menu/Expert/Analog outputs/Analog output 5/","Fail safe time","0","" +"Menu/Expert/Analog outputs/Analog output 5/","Fail safe type","Off","" +"Menu/Expert/Analog outputs/Analog output 5/","Out value ","0.0000","" +"Menu/Expert/Analog outputs/Analog output 5/","Out status","Bad","" +"Menu/Expert/Analog outputs/Analog output 5/","Out status","0x0","" +"Menu/Expert/Discrete outputs/Discrete output 1/","Set point value","0","" +"Menu/Expert/Discrete outputs/Discrete output 1/","Set point status","0x18","" +"Menu/Expert/Discrete outputs/Discrete output 1/","Invert","Off","" +"Menu/Expert/Discrete outputs/Discrete output 1/","Fail safe time","0","" +"Menu/Expert/Discrete outputs/Discrete output 1/","Fail safe type","Off","" +"Menu/Expert/Discrete outputs/Discrete output 1/","Out value ","0","" +"Menu/Expert/Discrete outputs/Discrete output 1/","Out status","Bad","" +"Menu/Expert/Discrete outputs/Discrete output 1/","Out status","0x0","" +"Menu/Expert/Discrete outputs/Discrete output 2/","Set point value","0","" +"Menu/Expert/Discrete outputs/Discrete output 2/","Set point status","0x18","" +"Menu/Expert/Discrete outputs/Discrete output 2/","Invert","Off","" +"Menu/Expert/Discrete outputs/Discrete output 2/","Fail safe time","0","" +"Menu/Expert/Discrete outputs/Discrete output 2/","Fail safe type","Off","" +"Menu/Expert/Discrete outputs/Discrete output 2/","Out value ","0","" +"Menu/Expert/Discrete outputs/Discrete output 2/","Out status","Bad","" +"Menu/Expert/Discrete outputs/Discrete output 2/","Out status","0x0","" +"Menu/Expert/Discrete outputs/Discrete output 3/","Set point value","0","" +"Menu/Expert/Discrete outputs/Discrete output 3/","Set point status","0x18","" +"Menu/Expert/Discrete outputs/Discrete output 3/","Invert","Off","" +"Menu/Expert/Discrete outputs/Discrete output 3/","Fail safe time","0","" +"Menu/Expert/Discrete outputs/Discrete output 3/","Fail safe type","Off","" +"Menu/Expert/Discrete outputs/Discrete output 3/","Out value ","0","" +"Menu/Expert/Discrete outputs/Discrete output 3/","Out status","Bad","" +"Menu/Expert/Discrete outputs/Discrete output 3/","Out status","0x0","" +"Menu/Expert/Discrete outputs/Discrete output 4/","Set point value","0","" +"Menu/Expert/Discrete outputs/Discrete output 4/","Set point status","0x18","" +"Menu/Expert/Discrete outputs/Discrete output 4/","Invert","Off","" +"Menu/Expert/Discrete outputs/Discrete output 4/","Fail safe time","0","" +"Menu/Expert/Discrete outputs/Discrete output 4/","Fail safe type","Off","" +"Menu/Expert/Discrete outputs/Discrete output 4/","Out value ","0","" +"Menu/Expert/Discrete outputs/Discrete output 4/","Out status","Bad","" +"Menu/Expert/Discrete outputs/Discrete output 4/","Out status","0x0","" +"Menu/Expert/Discrete outputs/Discrete output 5/","Set point value","0","" +"Menu/Expert/Discrete outputs/Discrete output 5/","Set point status","0x18","" +"Menu/Expert/Discrete outputs/Discrete output 5/","Invert","Off","" +"Menu/Expert/Discrete outputs/Discrete output 5/","Fail safe time","0","" +"Menu/Expert/Discrete outputs/Discrete output 5/","Fail safe type","Off","" +"Menu/Expert/Discrete outputs/Discrete output 5/","Out value ","0","" +"Menu/Expert/Discrete outputs/Discrete output 5/","Out status","Bad","" +"Menu/Expert/Discrete outputs/Discrete output 5/","Out status","0x0","" +"Menu/Expert/Discrete outputs/Discrete output 6/","Set point value","0","" +"Menu/Expert/Discrete outputs/Discrete output 6/","Set point status","0x18","" +"Menu/Expert/Discrete outputs/Discrete output 6/","Invert","Off","" +"Menu/Expert/Discrete outputs/Discrete output 6/","Fail safe time","0","" +"Menu/Expert/Discrete outputs/Discrete output 6/","Fail safe type","Off","" +"Menu/Expert/Discrete outputs/Discrete output 6/","Out value ","0","" +"Menu/Expert/Discrete outputs/Discrete output 6/","Out status","Bad","" +"Menu/Expert/Discrete outputs/Discrete output 6/","Out status","0x0","" +"Menu/Expert/Discrete outputs/Discrete output 7/","Set point value","0","" +"Menu/Expert/Discrete outputs/Discrete output 7/","Set point status","0x18","" +"Menu/Expert/Discrete outputs/Discrete output 7/","Invert","Off","" +"Menu/Expert/Discrete outputs/Discrete output 7/","Fail safe time","0","" +"Menu/Expert/Discrete outputs/Discrete output 7/","Fail safe type","Off","" +"Menu/Expert/Discrete outputs/Discrete output 7/","Out value ","0","" +"Menu/Expert/Discrete outputs/Discrete output 7/","Out status","Bad","" +"Menu/Expert/Discrete outputs/Discrete output 7/","Out status","0x0","" +"Menu/Expert/Application/Inventory counter/","Totalizer value ","143.1107","kg" +"Menu/Expert/Application/Inventory counter/","Totalizer overflow ","0","" +"Menu/Expert/Application/Inventory counter/","Unit ","kg","" +"Menu/Expert/Application/Concentration/Mineral content determination/","Control mineral content determination","Cancel","" +"Menu/Expert/Application/Concentration/Mineral content determination/","State mineral content determination","Not done","" +"Menu/Expert/Diagnostics /Sensor module/","Hardware revision","V2.00.00","" +"Menu/Expert/Diagnostics /Sensor module/","Module name","Promass F","" +"Menu/Expert/Diagnostics /Sensor module/","Serial number","7082176","" +"Menu/Expert/Diagnostics /Main electronic module + I/O module 1/","Software revision","10002","" +"Menu/Expert/Diagnostics /Main electronic module + I/O module 1/","Build no. software","4","" +"Menu/Expert/Diagnostics /Main electronic module + I/O module 1/","Hardware revision","V1.00.00","" +"Menu/Expert/Diagnostics /Main electronic module + I/O module 1/","Module name","C302-01","" +"Menu/Expert/Diagnostics /Main electronic module + I/O module 1/","Serial number","0354327648","" +"Menu/Expert/Diagnostics /Main electronic module + I/O module 1/","Bootloader revision","44","" +"Menu/Expert/Diagnostics /Sensor electronic module (ISEM)/","Software revision","20102","" +"Menu/Expert/Diagnostics /Sensor electronic module (ISEM)/","Build no. software","4","" +"Menu/Expert/Diagnostics /Sensor electronic module (ISEM)/","Hardware revision","V2.00.02","" +"Menu/Expert/Diagnostics /Sensor electronic module (ISEM)/","Module name","V312-02","" +"Menu/Expert/Diagnostics /Sensor electronic module (ISEM)/","Serial number","0357579730","" +"Menu/Expert/Diagnostics /Sensor electronic module (ISEM)/","Bootloader revision","40","" +"Menu/Expert/Diagnostics /I/O module 2/","Software revision","10001","" +"Menu/Expert/Diagnostics /I/O module 2/","Build no. software","0","" +"Menu/Expert/Diagnostics /I/O module 2/","Hardware revision","V1.00.00","" +"Menu/Expert/Diagnostics /I/O module 2/","Module name","U300-01 ","" +"Menu/Expert/Diagnostics /I/O module 2/","Serial number","0357885718","" +"Menu/Expert/Diagnostics /I/O module 2/","Bootloader revision","10011","" +"Menu/Expert/Diagnostics /I/O module 3/","Software revision","10001","" +"Menu/Expert/Diagnostics /I/O module 3/","Build no. software","0","" +"Menu/Expert/Diagnostics /I/O module 3/","Hardware revision","V1.00.00","" +"Menu/Expert/Diagnostics /I/O module 3/","Module name","U300-01 ","" +"Menu/Expert/Diagnostics /I/O module 3/","Serial number","0357885442","" +"Menu/Expert/Diagnostics /I/O module 3/","Bootloader revision","10011","" +"Menu/Expert/Diagnostics /Display module /","Software revision","10108","" +"Menu/Expert/Diagnostics /Display module /","Build no. software","0","" +"Menu/Expert/Diagnostics /Display module /","Hardware revision","V1.00.00 ","" +"Menu/Expert/Diagnostics /Display module /","Module name","A300 ","" +"Menu/Expert/Diagnostics /Display module /","Serial number","0357508457 ","" +"Menu/Expert/Diagnostics /Display module /","Bootloader revision","10007","" +"Menu/Expert/Diagnostics /Min/max values /","Reset min/max values","Cancel","" +"Menu/Expert/Diagnostics /Min/max values /Electronic temperature/","Minimum value ","22.1","°C" +"Menu/Expert/Diagnostics /Min/max values /Electronic temperature/","Maximum value ","35.7","°C" +"Menu/Expert/Diagnostics /Min/max values /Medium temperature/","Minimum value ","19.9","°C" +"Menu/Expert/Diagnostics /Min/max values /Medium temperature/","Maximum value ","22.9","°C" +"Menu/Expert/Diagnostics /Min/max values /Carrier pipe temperature/","Minimum value ","19.9","°C" +"Menu/Expert/Diagnostics /Min/max values /Carrier pipe temperature/","Maximum value ","23.9","°C" +"Menu/Expert/Diagnostics /Min/max values /Oscillation frequency/","Minimum value ","525.4","Hz" +"Menu/Expert/Diagnostics /Min/max values /Oscillation frequency/","Maximum value ","602.9","Hz" +"Menu/Expert/Diagnostics /Min/max values /Oscillation amplitude/","Minimum value ","1.8","%" +"Menu/Expert/Diagnostics /Min/max values /Oscillation amplitude/","Maximum value ","100.2","%" +"Menu/Expert/Diagnostics /Min/max values /Oscillation damping/","Minimum value ","237.6","" +"Menu/Expert/Diagnostics /Min/max values /Oscillation damping/","Maximum value ","268640.9","" +"Menu/Expert/Diagnostics /Min/max values /Signal asymmetry/","Minimum value ","-2.0","%" +"Menu/Expert/Diagnostics /Min/max values /Signal asymmetry/","Maximum value ","-1.9","%" +"Menu/Expert/Diagnostics /Min/max values /Torsion signal asymmetry/","Minimum value ","1.0e+34","%" +"Menu/Expert/Diagnostics /Min/max values /Torsion signal asymmetry/","Maximum value ","-1.0e+34","%" diff --git a/01-Documentation/Endress+Houser/CO2/adjuntos/500DP_parameter_Mixer.csv b/01-Documentation/Endress+Houser/CO2/adjuntos/500DP_parameter_Mixer.csv new file mode 100644 index 0000000..a33aa72 --- /dev/null +++ b/01-Documentation/Endress+Houser/CO2/adjuntos/500DP_parameter_Mixer.csv @@ -0,0 +1,595 @@ +"Device tag","Serial number","Firmware version","Fieldbus Type" +"Promass300/500DP","X10F9F02000","V1.00.02","53" + +"MENU PATH","PARAMETER TEXT","PARAMETER VALUE","UNIT" +"Menu/Operation /","Web server language","English","" +"Menu/Operation /","Display language","English","" +"Menu/Operation /","Access status","Maintenance","" +"Menu/Operation /","Locking status","Temporarily locked","" +"Menu/Operation /Display /","Format display","1 value, max. size","" +"Menu/Operation /Display /","Contrast display","50","%" +"Menu/Operation /Display /","Backlight","Enable","" +"Menu/Operation /Display /","Display interval","5","s" +"Menu/Operation /Totalizer handling/","Control Totalizer 1","Totalize","" +"Menu/Operation /Totalizer handling/","Preset value 1","0.0000","kg" +"Menu/Operation /Totalizer handling/","Control Totalizer 2","Totalize","" +"Menu/Operation /Totalizer handling/","Preset value 2","0.0000","kg" +"Menu/Operation /Totalizer handling/","Control Totalizer 3","Totalize","" +"Menu/Operation /Totalizer handling/","Preset value 3","0.0000","kg" +"Menu/Operation /Totalizer handling/","Reset all totalizers","Cancel","" +"Menu/Operation /Weighted averages/","Reset weighted averages","Totalize","" +"Menu/Setup /","Device tag","Promass300/500DP","" +"Menu/Setup /System units/","Mass flow unit","g/min","" +"Menu/Setup /System units/","Mass unit","g","" +"Menu/Setup /System units/","Volume flow unit","l/min","" +"Menu/Setup /System units/","Volume unit","l","" +"Menu/Setup /System units/","Corrected volume flow unit","Nl/min","" +"Menu/Setup /System units/","Corrected volume unit","Nl","" +"Menu/Setup /System units/","Density unit","g/ml","" +"Menu/Setup /System units/","Reference density unit","kg/Nl","" +"Menu/Setup /System units/","Temperature unit","°C","" +"Menu/Setup /System units/","Pressure unit","bar","" +"Menu/Setup /Medium selection/","Select medium","Gas","" +"Menu/Setup /Medium selection/","Select gas type","Carbon dioxide CO2","" +"Menu/Setup /Medium selection/","Pressure compensation","Off","" +"Menu/Setup /Communication/","Device address","22","" +"Menu/Setup /Analog inputs/Analog input 1/","Channel","Mass flow","" +"Menu/Setup /Analog inputs/Analog input 1/","PV filter time","0.0000","" +"Menu/Setup /Analog inputs/Analog input 1/","Fail safe type","Fail-safe value","" +"Menu/Setup /Analog inputs/Analog input 1/","Fail-safe value","0.0000","" +"Menu/Setup /Analog inputs/Analog input 2/","Channel","Volume flow","" +"Menu/Setup /Analog inputs/Analog input 2/","PV filter time","0.0000","" +"Menu/Setup /Analog inputs/Analog input 2/","Fail safe type","Off","" +"Menu/Setup /Analog inputs/Analog input 3/","Channel","Density","" +"Menu/Setup /Analog inputs/Analog input 3/","PV filter time","0.0000","" +"Menu/Setup /Analog inputs/Analog input 3/","Fail safe type","Off","" +"Menu/Setup /Analog inputs/Analog input 4/","Channel","Density","" +"Menu/Setup /Analog inputs/Analog input 4/","PV filter time","0.0000","" +"Menu/Setup /Analog inputs/Analog input 4/","Fail safe type","Off","" +"Menu/Setup /Analog inputs/Analog input 5/","Channel","Mass flow","" +"Menu/Setup /Analog inputs/Analog input 5/","PV filter time","0.0000","" +"Menu/Setup /Analog inputs/Analog input 5/","Fail safe type","Off","" +"Menu/Setup /Analog inputs/Analog input 6/","Channel","Temperature","" +"Menu/Setup /Analog inputs/Analog input 6/","PV filter time","0.0000","" +"Menu/Setup /Analog inputs/Analog input 6/","Fail safe type","Off","" +"Menu/Setup /Analog inputs/Analog input 7/","Channel","Mass flow","" +"Menu/Setup /Analog inputs/Analog input 7/","PV filter time","0.0000","" +"Menu/Setup /Analog inputs/Analog input 7/","Fail safe type","Off","" +"Menu/Setup /Analog inputs/Analog input 8/","Channel","Mass flow","" +"Menu/Setup /Analog inputs/Analog input 8/","PV filter time","0.0000","" +"Menu/Setup /Analog inputs/Analog input 8/","Fail safe type","Off","" +"Menu/Setup /I/O configuration/","I/O module 1 terminal numbers","26-27 (I/O 1)","" +"Menu/Setup /I/O configuration/","I/O module 1 information","Profibus DP","" +"Menu/Setup /I/O configuration/","I/O module 2 terminal numbers","24-25 (I/O 2)","" +"Menu/Setup /I/O configuration/","I/O module 2 information","Not configurable","" +"Menu/Setup /I/O configuration/","I/O module 2 type","Current output ","" +"Menu/Setup /I/O configuration/","I/O module 3 terminal numbers","22-23 (I/O 3)","" +"Menu/Setup /I/O configuration/","I/O module 3 information","Not configurable","" +"Menu/Setup /I/O configuration/","I/O module 3 type","Current output ","" +"Menu/Setup /I/O configuration/","Alteration code","0","" +"Menu/Setup /Current output 1/","Assign current output 1","Mass flow","" +"Menu/Setup /Current output 1/","Terminal number ","24-25 (I/O 2)","" +"Menu/Setup /Current output 1/","Current span","4...20 mA NAMUR","" +"Menu/Setup /Current output 1/","Signal mode","Active","" +"Menu/Setup /Current output 1/","0/4 mA value","0.000","g/min" +"Menu/Setup /Current output 1/","20 mA value","250000.0","g/min" +"Menu/Setup /Current output 1/","Damping output 1","1.0","s" +"Menu/Setup /Current output 1/","Failure mode","Max.","" +"Menu/Setup /Current output 2/","Assign current output 2","Density","" +"Menu/Setup /Current output 2/","Terminal number ","22-23 (I/O 3)","" +"Menu/Setup /Current output 2/","Current span","4...20 mA NAMUR","" +"Menu/Setup /Current output 2/","Signal mode","Active","" +"Menu/Setup /Current output 2/","0/4 mA value","0.000","g/ml" +"Menu/Setup /Current output 2/","20 mA value","1.000","g/ml" +"Menu/Setup /Current output 2/","Damping output 2","1.0","s" +"Menu/Setup /Current output 2/","Failure mode","Max.","" +"Menu/Setup /Display /","Value 1 display","Mass flow","" +"Menu/Setup /Display /","0% bargraph value 1","0.0000","g/min" +"Menu/Setup /Display /","100% bargraph value 1","250000.0","g/min" +"Menu/Setup /Display /","Value 2 display","None","" +"Menu/Setup /Display /","Value 3 display","None","" +"Menu/Setup /Display /","Value 4 display","None","" +"Menu/Setup /Low flow cut off/","Assign process variable","Mass flow","" +"Menu/Setup /Low flow cut off/","On value low flow cutoff","4333.333","g/min" +"Menu/Setup /Low flow cut off/","Off value low flow cutoff","50","%" +"Menu/Setup /Low flow cut off/","Pressure shock suppression","0.0","s" +"Menu/Setup /Partially filled pipe detection/","Assign process variable","Off","" +"Menu/Setup /Advanced setup/Calculated values/Corrected volume flow calculation/","Corrected volume flow calculation","Calculated reference density","" +"Menu/Setup /Advanced setup/Calculated values/Corrected volume flow calculation/","Reference temperature","20.0000","°C" +"Menu/Setup /Advanced setup/Calculated values/Corrected volume flow calculation/","Linear expansion coefficient","0.000000e+00","1/K" +"Menu/Setup /Advanced setup/Calculated values/Corrected volume flow calculation/","Square expansion coefficient","0.000000e+00","1/K²" +"Menu/Setup /Advanced setup/Sensor adjustment/","Installation direction","Flow in arrow direction","" +"Menu/Setup /Advanced setup/Sensor adjustment/Zero point adjustment/","Zero point adjustment control","Cancel","" +"Menu/Setup /Advanced setup/Sensor adjustment/Zero point adjustment/","Progress","100","" +"Menu/Setup /Advanced setup/Totalizer 1/","Assign process variable","Mass flow","" +"Menu/Setup /Advanced setup/Totalizer 1/","Unit totalizer ","kg","" +"Menu/Setup /Advanced setup/Totalizer 1/","Totalizer operation mode","Net flow total","" +"Menu/Setup /Advanced setup/Totalizer 1/","Failure mode","Stop","" +"Menu/Setup /Advanced setup/Totalizer 2/","Assign process variable","Mass flow","" +"Menu/Setup /Advanced setup/Totalizer 2/","Unit totalizer ","kg","" +"Menu/Setup /Advanced setup/Totalizer 2/","Totalizer operation mode","Forward flow total","" +"Menu/Setup /Advanced setup/Totalizer 2/","Failure mode","Stop","" +"Menu/Setup /Advanced setup/Totalizer 3/","Assign process variable","Mass flow","" +"Menu/Setup /Advanced setup/Totalizer 3/","Unit totalizer ","kg","" +"Menu/Setup /Advanced setup/Totalizer 3/","Totalizer operation mode","Reverse flow total","" +"Menu/Setup /Advanced setup/Totalizer 3/","Failure mode","Stop","" +"Menu/Setup /Advanced setup/Display /","Decimal places 1","x.xx","" +"Menu/Setup /Advanced setup/Display /","Display damping ","0.0","s" +"Menu/Setup /Advanced setup/Display /","Header","Device tag","" +"Menu/Setup /Advanced setup/Display /","Separator",".","" +"Menu/Setup /Advanced setup/WLAN settings/","WLAN","Enable","" +"Menu/Setup /Advanced setup/WLAN settings/","WLAN mode","WLAN access point","" +"Menu/Setup /Advanced setup/WLAN settings/","Network security","WPA2-PSK","" +"Menu/Setup /Advanced setup/WLAN settings/","WLAN IP address","192.168.1.212","" +"Menu/Setup /Advanced setup/WLAN settings/","Assign SSID name","User-defined","" +"Menu/Setup /Advanced setup/WLAN settings/","SSID name"," ","" +"Menu/Setup /Advanced setup/Concentration/Concentration settings/","Liquid type","Off","" +"Menu/Setup /Advanced setup/Concentration/Concentration unit/","Concentration unit","°Brix","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","Coefficients set name","Coef Set No. 1","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","A0","-7.2952","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","A1","15.1555","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","A2","-11.6756","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","A3","4.4759","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","A4","-0.6615","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","B1","0.7220","E-3" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","B2","38.9126","E-6" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","B3","-1.6739","E-9" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","D1","-0.0975","E-2" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","D2","-0.3731","E-4" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","D3","0.2957","E-3" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 1/","D4","-0.1721","E-5" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","Coefficients set name","Coef Set No. 2","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","A0","-7.2952","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","A1","15.1555","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","A2","-11.6756","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","A3","4.4759","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","A4","-0.6615","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","B1","0.7220","E-3" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","B2","38.9126","E-6" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","B3","-1.6739","E-9" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","D1","-0.0975","E-2" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","D2","-0.3731","E-4" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","D3","0.2957","E-3" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 2/","D4","-0.1721","E-5" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","Coefficients set name","Coef Set No. 3","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","A0","-7.2952","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","A1","15.1555","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","A2","-11.6756","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","A3","4.4759","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","A4","-0.6615","" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","B1","0.7220","E-3" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","B2","38.9126","E-6" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","B3","-1.6739","E-9" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","D1","-0.0975","E-2" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","D2","-0.3731","E-4" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","D3","0.2957","E-3" +"Menu/Setup /Advanced setup/Concentration/Concentration profile 3/","D4","-0.1721","E-5" +"Menu/Setup /Advanced setup/Petroleum/","Petroleum mode","Off","" +"Menu/Setup /Advanced setup/Petroleum/","API commodity group","A - crude oil","" +"Menu/Setup /Advanced setup/Petroleum/","API table selection","API table 53/54","" +"Menu/Setup /Advanced setup/Petroleum/","Temperature correction source","Internal measured value","" +"Menu/Setup /Advanced setup/Petroleum/","Shrinkage factor","1.0000","" +"Menu/Setup /Advanced setup/Petroleum/","Meter factor","1.0000","" +"Menu/Setup /Advanced setup/Heartbeat setup/Heartbeat base settings/","Record application reference data","Cancel","" +"Menu/Setup /Advanced setup/Heartbeat setup/Heartbeat base settings/","Status","Done","" +"Menu/Setup /Advanced setup/Heartbeat setup/Heartbeat base settings/","Plant operator","--------------------------------","" +"Menu/Setup /Advanced setup/Heartbeat setup/Heartbeat base settings/","Location","--------------------------------","" +"Menu/Setup /Advanced setup/Heartbeat setup/Heartbeat Verification/","Select reference data","Factory water calibration","" +"Menu/Setup /Advanced setup/Configuration backup/","Operating time","0d14h45m50s ","" +"Menu/Setup /Advanced setup/Configuration backup/","Last backup","0d00h00m01s ","" +"Menu/Setup /Advanced setup/Configuration backup/","Configuration management","Cancel","" +"Menu/Setup /Advanced setup/Configuration backup/","Backup state","None","" +"Menu/Setup /Advanced setup/Configuration backup/","Comparison result","Check not done","" +"Menu/Setup /Advanced setup/Administration/","Device reset","Cancel","" +"Menu/Setup /Advanced setup/Administration/Reset access code/","Reset access code","","" +"Menu/Diagnostics /","Actual diagnostics","Ok","" +"Menu/Diagnostics /","Previous diagnostics","C485 Measured variable simulation (Warning)0d11h46m38s Deactivate simulation (Service ID 147)","" +"Menu/Diagnostics /","Operating time from restart","0d03h18m34s ","" +"Menu/Diagnostics /Diagnostic list/","Diagnostics 1","Ok","" +"Menu/Diagnostics /Diagnostic list/","Diagnostics 2","Ok","" +"Menu/Diagnostics /Diagnostic list/","Diagnostics 3","Ok","" +"Menu/Diagnostics /Diagnostic list/","Diagnostics 4","Ok","" +"Menu/Diagnostics /Diagnostic list/","Diagnostics 5","Ok","" +"Menu/Diagnostics /Event logbook/","Filter options","All","" +"Menu/Diagnostics /Event logbook/","Clear event list","Cancel","" +"Menu/Diagnostics /Device information /","Device tag","Promass300/500DP","" +"Menu/Diagnostics /Device information /","Serial number","X10F9F02000","" +"Menu/Diagnostics /Device information /","Firmware version","01.00.02","" +"Menu/Diagnostics /Device information /","Device name","Promass 300","" +"Menu/Diagnostics /Device information /","Order code ","8F3B15-CE06/0","" +"Menu/Diagnostics /Device information /","Extended order code 1","8F3B15-AAILABBFAASAF","" +"Menu/Diagnostics /Device information /","Extended order code 2","MWAA1+ED","" +"Menu/Diagnostics /Device information /","Extended order code 3","","" +"Menu/Diagnostics /Device information /","ENP version","2.02.00 ","" +"Menu/Diagnostics /Device information /","PROFIBUS ident number","0x156F","" +"Menu/Diagnostics /Device information /","Status PROFIBUS Master Config","Active","" +"Menu/Diagnostics /Measured values /Measured variables/","Mass flow","0.0000","g/min" +"Menu/Diagnostics /Measured values /Measured variables/","Volume flow","0.0000","l/min" +"Menu/Diagnostics /Measured values /Measured variables/","Corrected volume flow","0.0000","Nl/min" +"Menu/Diagnostics /Measured values /Measured variables/","Density","0.0013","g/ml" +"Menu/Diagnostics /Measured values /Measured variables/","Reference density","0.0013","kg/Nl" +"Menu/Diagnostics /Measured values /Measured variables/","Temperature","20.4","°C" +"Menu/Diagnostics /Measured values /Measured variables/","Pressure value","1.0132","bar" +"Menu/Diagnostics /Measured values /Output values/Current output 1/","Output current 1","4.00","mA" +"Menu/Diagnostics /Measured values /Output values/Current output 1/","Measured current 1","0.14","mA" +"Menu/Diagnostics /Measured values /Output values/Current output 2/","Output current 2","4.02","mA" +"Menu/Diagnostics /Measured values /Output values/Current output 2/","Measured current 2","0.12","mA" +"Menu/Diagnostics /Measured values /Totalizer 1/","Totalizer value 1","-3.1453","kg" +"Menu/Diagnostics /Measured values /Totalizer 1/","Totalizer status 1","Good","" +"Menu/Diagnostics /Measured values /Totalizer 1/","Totalizer status (Hex) 1","0x80","" +"Menu/Diagnostics /Measured values /Totalizer 2/","Totalizer value 2","0.0554","kg" +"Menu/Diagnostics /Measured values /Totalizer 2/","Totalizer status 2","Good","" +"Menu/Diagnostics /Measured values /Totalizer 2/","Totalizer status (Hex) 2","0x80","" +"Menu/Diagnostics /Measured values /Totalizer 3/","Totalizer value 3","-3.2007","kg" +"Menu/Diagnostics /Measured values /Totalizer 3/","Totalizer status 3","Good","" +"Menu/Diagnostics /Measured values /Totalizer 3/","Totalizer status (Hex) 3","0x80","" +"Menu/Diagnostics /Analog inputs/Analog input 1/","Out value ","0.0000","" +"Menu/Diagnostics /Analog inputs/Analog input 1/","Out unit text","g/min","" +"Menu/Diagnostics /Analog inputs/Analog input 1/","Out status","Good","" +"Menu/Diagnostics /Analog inputs/Analog input 1/","Out status","0x80","" +"Menu/Diagnostics /Analog inputs/Analog input 2/","Out value ","0.0000","" +"Menu/Diagnostics /Analog inputs/Analog input 2/","Out unit text","l/min","" +"Menu/Diagnostics /Analog inputs/Analog input 2/","Out status","Good","" +"Menu/Diagnostics /Analog inputs/Analog input 2/","Out status","0x80","" +"Menu/Diagnostics /Analog inputs/Analog input 3/","Out value ","0.0013","" +"Menu/Diagnostics /Analog inputs/Analog input 3/","Out unit text","g/ml","" +"Menu/Diagnostics /Analog inputs/Analog input 3/","Out status","Good","" +"Menu/Diagnostics /Analog inputs/Analog input 3/","Out status","0x80","" +"Menu/Diagnostics /Analog inputs/Analog input 4/","Out value ","0.0013","" +"Menu/Diagnostics /Analog inputs/Analog input 4/","Out unit text","g/ml","" +"Menu/Diagnostics /Analog inputs/Analog input 4/","Out status","Good","" +"Menu/Diagnostics /Analog inputs/Analog input 4/","Out status","0x80","" +"Menu/Diagnostics /Analog inputs/Analog input 5/","Out value ","0.0000","" +"Menu/Diagnostics /Analog inputs/Analog input 5/","Out unit text","g/min","" +"Menu/Diagnostics /Analog inputs/Analog input 5/","Out status","Good","" +"Menu/Diagnostics /Analog inputs/Analog input 5/","Out status","0x80","" +"Menu/Diagnostics /Analog inputs/Analog input 6/","Out value ","20.4383","" +"Menu/Diagnostics /Analog inputs/Analog input 6/","Out unit text","°C","" +"Menu/Diagnostics /Analog inputs/Analog input 6/","Out status","Good","" +"Menu/Diagnostics /Analog inputs/Analog input 6/","Out status","0x80","" +"Menu/Diagnostics /Analog inputs/Analog input 7/","Out value ","0.0000","" +"Menu/Diagnostics /Analog inputs/Analog input 7/","Out unit text","g/min","" +"Menu/Diagnostics /Analog inputs/Analog input 7/","Out status","Good","" +"Menu/Diagnostics /Analog inputs/Analog input 7/","Out status","0x80","" +"Menu/Diagnostics /Analog inputs/Analog input 8/","Out value ","0.0000","" +"Menu/Diagnostics /Analog inputs/Analog input 8/","Out unit text","g/min","" +"Menu/Diagnostics /Analog inputs/Analog input 8/","Out status","Good","" +"Menu/Diagnostics /Analog inputs/Analog input 8/","Out status","0x80","" +"Menu/Diagnostics /Data logging/","Data logging","Overwriting","" +"Menu/Diagnostics /Heartbeat/Performing verification /","Year","10","" +"Menu/Diagnostics /Heartbeat/Performing verification /","Month","January","" +"Menu/Diagnostics /Heartbeat/Performing verification /","Day","1","" +"Menu/Diagnostics /Heartbeat/Performing verification /","Hour","12","" +"Menu/Diagnostics /Heartbeat/Performing verification /","Minute","0","" +"Menu/Diagnostics /Heartbeat/Performing verification /","Start verification","Cancel","" +"Menu/Diagnostics /Heartbeat/Performing verification /","Status","Not done","" +"Menu/Diagnostics /Heartbeat/Performing verification /","Overall result","Not done","" +"Menu/Diagnostics /Simulation /","Assign simulation process variable","Off","" +"Menu/Diagnostics /Simulation /","Current output 1 simulation","Off","" +"Menu/Diagnostics /Simulation /","Current output 2 simulation","Off","" +"Menu/Diagnostics /Simulation /","Device alarm simulation","Off","" +"Menu/Diagnostics /Simulation /","Diagnostic event simulation","65533","" +"Menu/Diagnostics /Simulation /","Diagnostic event category","Process","" +"Menu/Diagnostics /Simulation /","Diagnostic event simulation","Off","" +"Menu/Expert/System/Diagnostic handling/","Alarm delay ","0","s" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 046","Alarm","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 140","Alarm","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 144","Logbook entry only","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 374","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 302","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 441","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 830","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 831","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 832","Logbook entry only","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 833","Logbook entry only","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 834","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 835","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 842","Off","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 862","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 912","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 913","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 944","Warning","" +"Menu/Expert/System/Diagnostic handling/Diagnostic behavior/","Assign behavior of diagnostic no. 948","Warning","" +"Menu/Expert/System/Administration/","Activate SW option","6661876","" +"Menu/Expert/System/Administration/","Software option overview","Concentration","" +"Menu/Expert/Sensor/System units/","Date/time format","dd.mm.yy hh:mm","" +"Menu/Expert/Sensor/Process parameters/","Flow damping","0.00","s" +"Menu/Expert/Sensor/Process parameters/","Density damping","0.00","s" +"Menu/Expert/Sensor/Process parameters/","Temperature damping","0.00","s" +"Menu/Expert/Sensor/Process parameters/","Flow override","Off","" +"Menu/Expert/Sensor/External compensation/","Temperature mode","Internal measured value","" +"Menu/Expert/Sensor/Sensor adjustment/Density adjustment/","Density adjustment mode","1 point adjustment","" +"Menu/Expert/Sensor/Sensor adjustment/Density adjustment/","Density setpoint 1","1.0000","g/ml" +"Menu/Expert/Sensor/Sensor adjustment/Density adjustment/","Execute density adjustment","Ok","" +"Menu/Expert/Sensor/Sensor adjustment/Density adjustment/","Density adjustment factor","1.0000","" +"Menu/Expert/Sensor/Sensor adjustment/Density adjustment/","Density adjustment offset","0.0000","" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Mass flow offset","0.0000","kg/s" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Mass flow factor","1.0000","" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Volume flow offset","0.0000","m³/s" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Volume flow factor","1.0000","" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Density offset","0.0000","kg/m³" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Density factor","1.0000","" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Corrected volume flow offset","0.0000","Nm³/s" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Corrected volume flow factor","1.0000","" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Reference density offset","0.0000","kg/Nm³" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Reference density factor","1.0000","" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Temperature offset","0.0000","K" +"Menu/Expert/Sensor/Sensor adjustment/Process variable adjustment/","Temperature factor","1.0000","" +"Menu/Expert/Sensor/Calibration/","Calibration factor ","1.8568","" +"Menu/Expert/Sensor/Calibration/","Zero point","23","" +"Menu/Expert/Sensor/Calibration/","Nominal diameter","DN15 / 1/2"","" +"Menu/Expert/Sensor/Calibration/","C0","-3154.409","" +"Menu/Expert/Sensor/Calibration/","C1","1.1562e+09","" +"Menu/Expert/Sensor/Calibration/","C2","-532481.6","" +"Menu/Expert/Sensor/Calibration/","C3","100329.3","" +"Menu/Expert/Sensor/Calibration/","C4","0.0000","" +"Menu/Expert/Sensor/Calibration/","C5","0.0000","" +"Menu/Expert/Sensor/Calibration/","A0","0.0000","" +"Menu/Expert/Sensor/Calibration/","A1","0.0000","" +"Menu/Expert/Sensor/Calibration/","A2","0.0000","" +"Menu/Expert/Sensor/Calibration/","A3","0.4839","" +"Menu/Expert/Sensor/Calibration/","A4","0.0000","" +"Menu/Expert/Sensor/Calibration/","Calibration date/time ","16.01.25 05:52","" +"Menu/Expert/Sensor/Calibration/Recalibration/","Calibration factor ","1.000","" +"Menu/Expert/Sensor/Calibration/Recalibration/","Confirm settings","No","" +"Menu/Expert/Sensor/Calibration/Logbook/","Calibration counter","1","" +"Menu/Expert/Sensor/Calibration/Logbook/","Select calibration log entry","1","" +"Menu/Expert/Sensor/Calibration/Logbook/","Timestamp ","16.01.25 05:52","" +"Menu/Expert/Sensor/Calibration/Logbook/","Calibration factor ","1.857","" +"Menu/Expert/Sensor/Testpoints/","Oscillation frequency 0","602.969","Hz" +"Menu/Expert/Sensor/Testpoints/","Oscillation frequency 1","0.000","Hz" +"Menu/Expert/Sensor/Testpoints/","Frequency fluctuation 0","3.4850e-06","" +"Menu/Expert/Sensor/Testpoints/","Frequency fluctuation 1","0.0000","" +"Menu/Expert/Sensor/Testpoints/","Oscillation amplitude 0","100.0","%" +"Menu/Expert/Sensor/Testpoints/","Oscillation amplitude 1","0.0","%" +"Menu/Expert/Sensor/Testpoints/","Oscillation damping 0","237.89","" +"Menu/Expert/Sensor/Testpoints/","Oscillation damping 1","0.00","" +"Menu/Expert/Sensor/Testpoints/","Oscillation damping fluctuation 0","1.2975e-05","" +"Menu/Expert/Sensor/Testpoints/","Oscillation damping fluctuation 1","0.0000","" +"Menu/Expert/Sensor/Testpoints/","Signal asymmetry","-2.0","%" +"Menu/Expert/Sensor/Testpoints/","Torsion signal asymmetry","0.0","%" +"Menu/Expert/Sensor/Testpoints/","Sensor electronic temperature (ISEM)","35.5","°C" +"Menu/Expert/Sensor/Testpoints/","Carrier pipe temperature","20.5","°C" +"Menu/Expert/Sensor/Testpoints/","Exciter current 0","0.0042","A" +"Menu/Expert/Sensor/Testpoints/","Exciter current 1","0.0000","A" +"Menu/Expert/Sensor/Testpoints/","RawMassFlow","-4.3209","g/min" +"Menu/Expert/Sensor/Testpoints/","Reynolds number","inf","" +"Menu/Expert/Output /Current output 1/","Measuring mode","Forward flow","" +"Menu/Expert/Output /Current output 1/","Response time","1.0000","s" +"Menu/Expert/Output /Current output 1/","Trim ","Off","" +"Menu/Expert/Output /Current output 1/","Status","76","" +"Menu/Expert/Output /Current output 2/","Measuring mode","Forward flow","" +"Menu/Expert/Output /Current output 2/","Response time","1.0000","s" +"Menu/Expert/Output /Current output 2/","Trim ","Off","" +"Menu/Expert/Output /Current output 2/","Status","128","" +"Menu/Expert/Communication/PROFIBUS DP configuration/","Address mode","Software","" +"Menu/Expert/Communication/PROFIBUS DP configuration/","Ident number selector","Automatic mode","" +"Menu/Expert/Communication/PROFIBUS DP configuration/","Bus termination","On","" +"Menu/Expert/Communication/PROFIBUS DP info/","Profile version","3.02 ","" +"Menu/Expert/Communication/PROFIBUS DP info/","Baudrate","1.5 MBaud","" +"Menu/Expert/Communication/PROFIBUS DP info/","Master availability","Yes","" +"Menu/Expert/Communication/Physical block /","Static revision","1","" +"Menu/Expert/Communication/Physical block /","Strategy","0","" +"Menu/Expert/Communication/Physical block /","Alert key","0","" +"Menu/Expert/Communication/Physical block /","Target mode","Auto","" +"Menu/Expert/Communication/Physical block /","Mode block actual","Auto","" +"Menu/Expert/Communication/Physical block /","Mode block permitted","136","" +"Menu/Expert/Communication/Physical block /","Mode block normal","Auto","" +"Menu/Expert/Communication/Physical block /","Alarm summary","0","" +"Menu/Expert/Communication/Physical block /","Software revision","01.00.02","" +"Menu/Expert/Communication/Physical block /","Hardware revision","V1.00.00","" +"Menu/Expert/Communication/Physical block /","Manufacturer ID","17","" +"Menu/Expert/Communication/Physical block /","Device ID","Promass300/500DP","" +"Menu/Expert/Communication/Physical block /","Serial number","X10F9F02000 ","" +"Menu/Expert/Communication/Physical block /","Diagnostics ","0","" +"Menu/Expert/Communication/Physical block /","Diagnostics mask","0","" +"Menu/Expert/Communication/Physical block /","Device certification"," ","" +"Menu/Expert/Communication/Physical block /","Factory reset","Cancel","" +"Menu/Expert/Communication/Physical block /","Descriptor"," ","" +"Menu/Expert/Communication/Physical block /","Device message"," ","" +"Menu/Expert/Communication/Physical block /","Device install date"," ","" +"Menu/Expert/Communication/Physical block /","Hardware lock","Unprotected","" +"Menu/Expert/Communication/Physical block /","Feature supported","9","" +"Menu/Expert/Communication/Physical block /","Feature enabled","9","" +"Menu/Expert/Communication/Physical block /","Condensed status diagnostic","On","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 1","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 1","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 2","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 2","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 3","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 3","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 4","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 4","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 5","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 5","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 6","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 6","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 7","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 7","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 8","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 8","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 9","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 9","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 10","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 10","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 11","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 11","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 12","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 12","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 13","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 13","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 14","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 14","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 15","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 15","0","" +"Menu/Expert/Communication/Address shifting configuration/","Slot shifting 16","0","" +"Menu/Expert/Communication/Address shifting configuration/","Index shifting 16","0","" +"Menu/Expert/Communication/Web server/","MAC address","00-07-05-1C-A9-A5","" +"Menu/Expert/Communication/Web server/","DHCP client","Off","" +"Menu/Expert/Communication/Web server/","IP address","192.168.1.212","" +"Menu/Expert/Communication/Web server/","Subnet mask","255.255.255.0","" +"Menu/Expert/Communication/Web server/","Default gateway","0.0.0.0","" +"Menu/Expert/Communication/Web server/","Web server functionality","On","" +"Menu/Expert/Communication/Web server/","Login page","With header","" +"Menu/Expert/Communication/WLAN settings/","WLAN MAC address","FF-FF-FF-FF-FF-FF","" +"Menu/Expert/Communication/WLAN settings/","WLAN subnet mask","255.255.255.0","" +"Menu/Expert/Communication/WLAN settings/","2.4 GHz WLAN channel","6","" +"Menu/Expert/Communication/WLAN settings/","Select antenna","Internal antenna","" +"Menu/Expert/Discrete inputs/Discrete input 1/","Channel","Empty pipe detection","" +"Menu/Expert/Discrete inputs/Discrete input 1/","Invert","Off","" +"Menu/Expert/Discrete inputs/Discrete input 1/","Fail safe type","Off","" +"Menu/Expert/Discrete inputs/Discrete input 1/","Out value ","0","" +"Menu/Expert/Discrete inputs/Discrete input 1/","Out status","Good","" +"Menu/Expert/Discrete inputs/Discrete input 1/","Out status","0x80","" +"Menu/Expert/Discrete inputs/Discrete input 2/","Channel","Low flow cut off","" +"Menu/Expert/Discrete inputs/Discrete input 2/","Invert","Off","" +"Menu/Expert/Discrete inputs/Discrete input 2/","Fail safe type","Off","" +"Menu/Expert/Discrete inputs/Discrete input 2/","Out value ","1","" +"Menu/Expert/Discrete inputs/Discrete input 2/","Out status","Good","" +"Menu/Expert/Discrete inputs/Discrete input 2/","Out status","0x80","" +"Menu/Expert/Analog outputs/Analog output 1/","Set point value","0.0000","" +"Menu/Expert/Analog outputs/Analog output 1/","Set point status","0x18","" +"Menu/Expert/Analog outputs/Analog output 1/","Fail safe time","0","" +"Menu/Expert/Analog outputs/Analog output 1/","Fail safe type","Off","" +"Menu/Expert/Analog outputs/Analog output 1/","Out value ","0.0000","" +"Menu/Expert/Analog outputs/Analog output 1/","Out status","Bad","" +"Menu/Expert/Analog outputs/Analog output 1/","Out status","0x0","" +"Menu/Expert/Analog outputs/Analog output 2/","Set point value","0.0000","" +"Menu/Expert/Analog outputs/Analog output 2/","Set point status","0x18","" +"Menu/Expert/Analog outputs/Analog output 2/","Fail safe time","0","" +"Menu/Expert/Analog outputs/Analog output 2/","Fail safe type","Off","" +"Menu/Expert/Analog outputs/Analog output 2/","Out value ","0.0000","" +"Menu/Expert/Analog outputs/Analog output 2/","Out status","Bad","" +"Menu/Expert/Analog outputs/Analog output 2/","Out status","0x0","" +"Menu/Expert/Analog outputs/Analog output 3/","Set point value","0.0000","" +"Menu/Expert/Analog outputs/Analog output 3/","Set point status","0x18","" +"Menu/Expert/Analog outputs/Analog output 3/","Fail safe time","0","" +"Menu/Expert/Analog outputs/Analog output 3/","Fail safe type","Off","" +"Menu/Expert/Analog outputs/Analog output 3/","Out value ","0.0000","" +"Menu/Expert/Analog outputs/Analog output 3/","Out status","Bad","" +"Menu/Expert/Analog outputs/Analog output 3/","Out status","0x0","" +"Menu/Expert/Analog outputs/Analog output 4/","Set point value","0.0000","" +"Menu/Expert/Analog outputs/Analog output 4/","Set point status","0x18","" +"Menu/Expert/Analog outputs/Analog output 4/","Fail safe time","0","" +"Menu/Expert/Analog outputs/Analog output 4/","Fail safe type","Off","" +"Menu/Expert/Analog outputs/Analog output 4/","Out value ","0.0000","" +"Menu/Expert/Analog outputs/Analog output 4/","Out status","Bad","" +"Menu/Expert/Analog outputs/Analog output 4/","Out status","0x0","" +"Menu/Expert/Analog outputs/Analog output 5/","Set point value","0.0000","" +"Menu/Expert/Analog outputs/Analog output 5/","Set point status","0x18","" +"Menu/Expert/Analog outputs/Analog output 5/","Fail safe time","0","" +"Menu/Expert/Analog outputs/Analog output 5/","Fail safe type","Off","" +"Menu/Expert/Analog outputs/Analog output 5/","Out value ","0.0000","" +"Menu/Expert/Analog outputs/Analog output 5/","Out status","Bad","" +"Menu/Expert/Analog outputs/Analog output 5/","Out status","0x0","" +"Menu/Expert/Discrete outputs/Discrete output 1/","Set point value","0","" +"Menu/Expert/Discrete outputs/Discrete output 1/","Set point status","0x18","" +"Menu/Expert/Discrete outputs/Discrete output 1/","Invert","Off","" +"Menu/Expert/Discrete outputs/Discrete output 1/","Fail safe time","0","" +"Menu/Expert/Discrete outputs/Discrete output 1/","Fail safe type","Off","" +"Menu/Expert/Discrete outputs/Discrete output 1/","Out value ","0","" +"Menu/Expert/Discrete outputs/Discrete output 1/","Out status","Bad","" +"Menu/Expert/Discrete outputs/Discrete output 1/","Out status","0x0","" +"Menu/Expert/Discrete outputs/Discrete output 2/","Set point value","0","" +"Menu/Expert/Discrete outputs/Discrete output 2/","Set point status","0x18","" +"Menu/Expert/Discrete outputs/Discrete output 2/","Invert","Off","" +"Menu/Expert/Discrete outputs/Discrete output 2/","Fail safe time","0","" +"Menu/Expert/Discrete outputs/Discrete output 2/","Fail safe type","Off","" +"Menu/Expert/Discrete outputs/Discrete output 2/","Out value ","0","" +"Menu/Expert/Discrete outputs/Discrete output 2/","Out status","Bad","" +"Menu/Expert/Discrete outputs/Discrete output 2/","Out status","0x0","" +"Menu/Expert/Discrete outputs/Discrete output 3/","Set point value","0","" +"Menu/Expert/Discrete outputs/Discrete output 3/","Set point status","0x18","" +"Menu/Expert/Discrete outputs/Discrete output 3/","Invert","Off","" +"Menu/Expert/Discrete outputs/Discrete output 3/","Fail safe time","0","" +"Menu/Expert/Discrete outputs/Discrete output 3/","Fail safe type","Off","" +"Menu/Expert/Discrete outputs/Discrete output 3/","Out value ","0","" +"Menu/Expert/Discrete outputs/Discrete output 3/","Out status","Bad","" +"Menu/Expert/Discrete outputs/Discrete output 3/","Out status","0x0","" +"Menu/Expert/Discrete outputs/Discrete output 4/","Set point value","0","" +"Menu/Expert/Discrete outputs/Discrete output 4/","Set point status","0x18","" +"Menu/Expert/Discrete outputs/Discrete output 4/","Invert","Off","" +"Menu/Expert/Discrete outputs/Discrete output 4/","Fail safe time","0","" +"Menu/Expert/Discrete outputs/Discrete output 4/","Fail safe type","Off","" +"Menu/Expert/Discrete outputs/Discrete output 4/","Out value ","0","" +"Menu/Expert/Discrete outputs/Discrete output 4/","Out status","Bad","" +"Menu/Expert/Discrete outputs/Discrete output 4/","Out status","0x0","" +"Menu/Expert/Discrete outputs/Discrete output 5/","Set point value","0","" +"Menu/Expert/Discrete outputs/Discrete output 5/","Set point status","0x18","" +"Menu/Expert/Discrete outputs/Discrete output 5/","Invert","Off","" +"Menu/Expert/Discrete outputs/Discrete output 5/","Fail safe time","0","" +"Menu/Expert/Discrete outputs/Discrete output 5/","Fail safe type","Off","" +"Menu/Expert/Discrete outputs/Discrete output 5/","Out value ","0","" +"Menu/Expert/Discrete outputs/Discrete output 5/","Out status","Bad","" +"Menu/Expert/Discrete outputs/Discrete output 5/","Out status","0x0","" +"Menu/Expert/Discrete outputs/Discrete output 6/","Set point value","0","" +"Menu/Expert/Discrete outputs/Discrete output 6/","Set point status","0x18","" +"Menu/Expert/Discrete outputs/Discrete output 6/","Invert","Off","" +"Menu/Expert/Discrete outputs/Discrete output 6/","Fail safe time","0","" +"Menu/Expert/Discrete outputs/Discrete output 6/","Fail safe type","Off","" +"Menu/Expert/Discrete outputs/Discrete output 6/","Out value ","0","" +"Menu/Expert/Discrete outputs/Discrete output 6/","Out status","Bad","" +"Menu/Expert/Discrete outputs/Discrete output 6/","Out status","0x0","" +"Menu/Expert/Discrete outputs/Discrete output 7/","Set point value","0","" +"Menu/Expert/Discrete outputs/Discrete output 7/","Set point status","0x18","" +"Menu/Expert/Discrete outputs/Discrete output 7/","Invert","Off","" +"Menu/Expert/Discrete outputs/Discrete output 7/","Fail safe time","0","" +"Menu/Expert/Discrete outputs/Discrete output 7/","Fail safe type","Off","" +"Menu/Expert/Discrete outputs/Discrete output 7/","Out value ","0","" +"Menu/Expert/Discrete outputs/Discrete output 7/","Out status","Bad","" +"Menu/Expert/Discrete outputs/Discrete output 7/","Out status","0x0","" +"Menu/Expert/Application/Inventory counter/","Totalizer value ","147.8158","kg" +"Menu/Expert/Application/Inventory counter/","Totalizer overflow ","0","" +"Menu/Expert/Application/Inventory counter/","Unit ","kg","" +"Menu/Expert/Application/Concentration/Mineral content determination/","Control mineral content determination","Cancel","" +"Menu/Expert/Application/Concentration/Mineral content determination/","State mineral content determination","Not done","" +"Menu/Expert/Diagnostics /Sensor module/","Hardware revision","V2.00.00","" +"Menu/Expert/Diagnostics /Sensor module/","Module name","Promass F","" +"Menu/Expert/Diagnostics /Sensor module/","Serial number","7082176","" +"Menu/Expert/Diagnostics /Main electronic module + I/O module 1/","Software revision","10002","" +"Menu/Expert/Diagnostics /Main electronic module + I/O module 1/","Build no. software","4","" +"Menu/Expert/Diagnostics /Main electronic module + I/O module 1/","Hardware revision","V1.00.00","" +"Menu/Expert/Diagnostics /Main electronic module + I/O module 1/","Module name","C302-01","" +"Menu/Expert/Diagnostics /Main electronic module + I/O module 1/","Serial number","0354327648","" +"Menu/Expert/Diagnostics /Main electronic module + I/O module 1/","Bootloader revision","44","" +"Menu/Expert/Diagnostics /Sensor electronic module (ISEM)/","Software revision","20102","" +"Menu/Expert/Diagnostics /Sensor electronic module (ISEM)/","Build no. software","4","" +"Menu/Expert/Diagnostics /Sensor electronic module (ISEM)/","Hardware revision","V2.00.02","" +"Menu/Expert/Diagnostics /Sensor electronic module (ISEM)/","Module name","V312-02","" +"Menu/Expert/Diagnostics /Sensor electronic module (ISEM)/","Serial number","0357579730","" +"Menu/Expert/Diagnostics /Sensor electronic module (ISEM)/","Bootloader revision","40","" +"Menu/Expert/Diagnostics /I/O module 2/","Software revision","10001","" +"Menu/Expert/Diagnostics /I/O module 2/","Build no. software","0","" +"Menu/Expert/Diagnostics /I/O module 2/","Hardware revision","V1.00.00","" +"Menu/Expert/Diagnostics /I/O module 2/","Module name","U300-01 ","" +"Menu/Expert/Diagnostics /I/O module 2/","Serial number","0357885718","" +"Menu/Expert/Diagnostics /I/O module 2/","Bootloader revision","10011","" +"Menu/Expert/Diagnostics /I/O module 3/","Software revision","10001","" +"Menu/Expert/Diagnostics /I/O module 3/","Build no. software","0","" +"Menu/Expert/Diagnostics /I/O module 3/","Hardware revision","V1.00.00","" +"Menu/Expert/Diagnostics /I/O module 3/","Module name","U300-01 ","" +"Menu/Expert/Diagnostics /I/O module 3/","Serial number","0357885442","" +"Menu/Expert/Diagnostics /I/O module 3/","Bootloader revision","10011","" +"Menu/Expert/Diagnostics /Display module /","Software revision","10108","" +"Menu/Expert/Diagnostics /Display module /","Build no. software","0","" +"Menu/Expert/Diagnostics /Display module /","Hardware revision","V1.00.00 ","" +"Menu/Expert/Diagnostics /Display module /","Module name","A300 ","" +"Menu/Expert/Diagnostics /Display module /","Serial number","0357508457 ","" +"Menu/Expert/Diagnostics /Display module /","Bootloader revision","10007","" +"Menu/Expert/Diagnostics /Min/max values /","Reset min/max values","Cancel","" +"Menu/Expert/Diagnostics /Min/max values /Electronic temperature/","Minimum value ","19.6","°C" +"Menu/Expert/Diagnostics /Min/max values /Electronic temperature/","Maximum value ","38.8","°C" +"Menu/Expert/Diagnostics /Min/max values /Medium temperature/","Minimum value ","17.9","°C" +"Menu/Expert/Diagnostics /Min/max values /Medium temperature/","Maximum value ","24.9","°C" +"Menu/Expert/Diagnostics /Min/max values /Carrier pipe temperature/","Minimum value ","18.9","°C" +"Menu/Expert/Diagnostics /Min/max values /Carrier pipe temperature/","Maximum value ","24.9","°C" +"Menu/Expert/Diagnostics /Min/max values /Oscillation frequency/","Minimum value ","525.4","Hz" +"Menu/Expert/Diagnostics /Min/max values /Oscillation frequency/","Maximum value ","603.1","Hz" +"Menu/Expert/Diagnostics /Min/max values /Oscillation amplitude/","Minimum value ","1.8","%" +"Menu/Expert/Diagnostics /Min/max values /Oscillation amplitude/","Maximum value ","100.2","%" +"Menu/Expert/Diagnostics /Min/max values /Oscillation damping/","Minimum value ","236.4","" +"Menu/Expert/Diagnostics /Min/max values /Oscillation damping/","Maximum value ","268640.9","" +"Menu/Expert/Diagnostics /Min/max values /Signal asymmetry/","Minimum value ","-2.0","%" +"Menu/Expert/Diagnostics /Min/max values /Signal asymmetry/","Maximum value ","-1.9","%" +"Menu/Expert/Diagnostics /Min/max values /Torsion signal asymmetry/","Minimum value ","1.0e+34","%" +"Menu/Expert/Diagnostics /Min/max values /Torsion signal asymmetry/","Maximum value ","-1.0e+34","%" diff --git a/01-Documentation/Endress+Houser/Comparative.xlsx b/01-Documentation/Endress+Houser/Comparative.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..77c01f6d53a7175d849a23cc6aa0c947dc646acd GIT binary patch literal 19844 zcmeIaWpo@%vNbBQ7%gTCEoO_EnVFfHnaN^iW?O8r#mvmi%*@hjpELLKjOVmwuG99AO{f8$6kcJ?k;_y#oR3@?Y z!=${LIU2z@8i9`#CK(Gp*#w#BApQKhR)S(XD;}b;DmBC9E~8wAwe*f#Wtm~%{!x9w zN}u0oyk%$v0}A}*XuuD8;AJ((+Pzb$ouR5Wk9;!^zD^;K%iV9F*3n1(){e5RW1le@MUuDmD4#0lFo=c#ga;xF7OQ|>9a;!bg) ziT@muM0t#HV%236L9oLYGId?usj&KmR;nI64Lk8L`YM8;L7Ka#r7hfU6%U<_7c*I+ zv{SJ4vIT^?2zE#pfp@L0&Z_mtX6kdO4{pQ{W)q@-gh!=KVECnU>h|b#%mFPJ-)w#0?GbIr>;|?Bf0^6BMIoUFn~_2V{c^XKuh!M z^?y6_|HVD{-i-C)!M)=0NkPmI0V{uu{R z5i0;x#HZE!WoUVoGxBJF;BJelEc_!12T{FCd2sTRof8BFseO{LUD;+2lJo5C>|Lse zxEq;sYcxe^V@a;W;5w1;^rc`m;y8^878G(JPB0o*s-JqFl-ip9Lj~|GzrtyGa8(0K z&Qbh$y3c%4(IFg9D4XQTR4VF#gTBdPh39}J!R;fKl7cClS(Sd4Jv*VBj-h48wP1QX z@~bDcbjE-@A=AePhH;U8lAK!~^;)LO;Y_z47O3vhfr~-^aQu=rKz#e}P6Eq$lmG<= z1k?lt1cU(4jH@NBi;ca7zKxB=uc%k1v~0c2jOax>;UgOa^ej6->{LVCqb8aZ0T$Z8 zw?%p?0ji#7z#MlFr+D&d!RK7I-oY$vZWOJGBpxT5jnTo_^~G&^W)3tyEZo^J9=M)* zE-7#8bamj(joFTHSw5{EwOnXe_>M^7Za@CKokJVOjR$>e4a8SD@}zLC6pTQLMonOr zw@el0GYkRtcRlj+7i{(F}=53FJ zbB`AfcGSkur@k-vJJ)6T#oS-$hH4=g7(jK2T8tV>e8CP^4uE&D^D5nQKe?3m?JAeJ z13cA$J`gXyvWo&E{{18Wqr%xi_jJAw)GBZka^Lwz@fUK8u#i}2=wb9Zvy<^6G1IP^ zqh=3^o3>E%snh&Q4$ncfWROV5+ESnJ_=Pn5RBo4V6dl9FZp3$Qyd+*BGN-4A5%})v zk*s~*zr-V!NZzTpO-%W(n>@13T!(Spt)C1Y8L<$k-_dvW9_}u%=4l@Hm2g z7XJz(!2@}vi}RuS9yKpUPab;da95fh9QlG5?>wr=v4)3$_0aWp>zy3Z4yWIHQ&9Vi z-J3}=(=p?N^oa-Ys5~tYm)Dorv_;p^MfFzGVXE>`I2+39U^R*038ZM7D>+XuqKNzcJAAH#1Z^n0H)|GJN@{e^}U-z_3Fax%V>-! zjYItXYWw@(1$18JqF-P9F(_QWPEpOFU;TdX$(^x%i5>gs)s5}*%@xC|lk&?C7r!^= z+!ESGw>t(QkJOA8fM57;uW`tZx{C?$CzGH+Kv+PKzyPoDcXa)C-|;_@78o#W23-4p z_fZxvV*!XXz2^a55Zljr1#Tobk?TM}2XvoJwL6TM*+#DL0u1%*7C+V7j36$n;!m*n%y^g7NXA z6p5~S=*7VVOwf#54~(RH*1UUfqg}*4(wU%Q33EtXw-Ce4vg=-U67>0!=25zxNy~(H z*{=7^M0(`raz}@he%kW^*u#GtmMmlXIx@iIRylxxFaTHlD;znP8W}k{(EfFz{}q=q z;+L)S=@5g@RhC?;Jn>-zaZu$+tn%)x>x#9p8Nn!-jji?zX4{_OV+s=O#+N^ptKtL;6g8EZili)gU=)!R_|v?7k^TKDHIGp94=x=GJ!tk7KTFKF})1C zJkv2;dc-E74*D{N!p+NYY~M!h(?uE)PI*}W)=VeYMRj5{-NB;x(v*|xXkR9B*{(CQDPoLl}w!XPD1&U}X3EZ{&K2B^U{2ZhS^LBeb-XD+NJ>5RN-JR!o z_j3RN2sdb zhSWXXP>B&hf<`JVAxKIpK}>p=G$4sXC6~hLjWnLk?)CNd(I8NDUXF4Osz-kdR)00L zToo8a=SlR0=v%a*Uq>^wRF5dL_+Ul8)nE!_4EHr0eHz~z6^I{L7>FONxEC=DSWVei zj8W2Wi%zxWn8=%10~UJYEIp>+gFkO#7ewUo2fYfIkn$I`&7E|yIO1$1eEfdrv{08vVO5=Dbd5HceauF0P{ zVK@JRZHs^iNxB5L7{;uh2L<+n>@J_!j~8v%J7Fp#9O;x;s5#16(7>=qvY9}bX@tp7 zx9B#%z&l|jT0TuK!qkL($*GnIi-<^Z)KehBRQ6*y@25fo9`PfQ!B?_E%-&EmXZbp( zMxu0G;j)P#%b@fsL0m~kIx%|L<3*(6TFlZlP?nBSZfYC9R4DBFA&lE90|&avPU7B< zpE0<0;_1~#TFv^Kh1R22#oR7Lf$0Le#{MMc6%ld>NA7mNE`*3j4R|)^h*FZ_2$C5NDu9PkyMlpNfgfMY9x*o3KiX zb%H!j_W`ZZ`K@olQ=evKCl#%FSH=aOF_5rCTs>+trQMTS+PaXIuD;xdL`_%#1m zYtPD-LX`rV+5h!%1+z4(9?dTjwDdE^cTMYgyLt()q(Msc`zO1&Fi;x`jx42LI35ul z@csat)25Y%8ut+#y~I!_Zt9@;fI;}8TFm^loYp>e%ho=mx!Q33DvgSfI~DwD4d;I; z2DDVlj1kb}FW`4bWm&p_@9iSo7pN)0m3H`xoweI7-Mj!Xcv6m( zDPzksvr77^XjX&vVvHd!?i(J3Gk|Wg>wf75&~S_+)xVk)>E{Jj+CLII$Ho1|GhH!h zqMsQphph*r|4(rGu0=_vT<`K?!ivOUfF)aJqMG2-IOlCFjRmRhyro7 zKx7fK0v3Cm~r3$O#0U^>LN8@D)i*n;~v|p@Yo$f zRUVFfi6d_VLj5TU8AdA(d9Mq#NlHa9FhiINfjwAq+RwhC6#FWY<3aHyP6=teoKyCO zcM#MFL6JRXRLDv|*zO*Rwons=sl%FHrDPU_7M_$ng&2d=bi_Z`xoA}NwH67pm#YL= zMweKSWn{s4V$%$+b~XiG=0kv8T)^Own&W81{!2+JULC4hNN$)K&mEzkHSnxxQ5Zx^ z=B8gBgg71N0M0K<)96`>k9e^n zf;AOKsm%}W+Y~p?QJzM|m9(c*qo0|0&>Ae!8f1@v5`C(shH|YjsEDm!l5`wTvVvlm zMEdpcQ|LD2zC+)XBu^$8qBsX2%ksLK*i^)hP_W92kZ}U>Pa>1M<(&A5LogU|n(6$2 z7r=_D8r3EaynmsX(S-QrGXM(i3`9Cs<-bQ=qbSK7B$k9&+iw;PJ@dX^XA6wA_Tk7; z#W!KZA|ydbAPMYU@hb~kN|o$#tO^6^I`(pioOwA7hX}(XbIYOnbY!*^F)RBVC-(4h zPL>xLuVzjZ7p@myQun8@Ou>%d4_{S*tf~Ap_o+2Q+~8Zpb1`jV!Q6{oepk&?z%BnY+PZ$FoqdD&Kk-R2LIb*s7gng@;}4)^Lc)alcW=m5{-Xj$ z0ete*&}A1C@Ym*j+s0MCtn&iyGbrV(^8P1Bp@{>5MbiFxZA4P~_;OiY`!alXq7g#n z94z*Hv)$O4kDNPA`<3ADRHoQk(e4g#dq1CcF}3p~phuWn{&8L(4<*9e3Aia_!e1-e ze+{G@O^vLKX#aZsYYcUwJ{pbPfZ7f*@XkA;H8*nLp~p5+%yM_;zL}`CBPx~PHYwq^=1vv{Zt4r(v=dFQOCdzb#9fATTYOnSe$y}tQ$}=N1NqR){(L+7 zYzq`MHsw={%ntCGd#wB+Umb-BUBoVKRvehOhAoo8hX#GMOc+lncLQZOuXeRadMVC? z4U8FSUhq*U_gd8n%*!*YnP`lWSh8;r#*!IkyTr-ldi(o+!UJ_Ubbd5+$L@5~89LGf ziC2i-@|_4;<19Yfw`;2u+yg-=OGFxR*y-(>H0UYWA;!|x8P=a~Mf95SEN`)a6q+05 zG~R7)F@ds1H^dlej57K14;#91G(e1!;a4-2Wos@;Uh8nj_=*=1j+4AWhi>Lwvh7wd z;jq!xd>K3qAl9$Dy^D=E;mEpKTrO_qDp8}TT7ZQjNcWo$j7wLo_YSBHI~Q}2*UXq- z=jcMv$wGsz91qFSIOU%8sr$woF+h1iF_oG4%roOYWbxtL%lDFC$)_^3+{uO^)95WA z1OV|@o`o#?7}$C8+KQ=PgOJ*rh+gyAlbU}2xdu9Ml=z9Z{c*4Nx>ASpeLS4D&Gqs{ z=OC1ZDDm5m9eBGRRKu?q_dIXsmF)uWulMWT4_7kQEmYe&uh;jLZLep=Gu`r(l9yNG zI;~GnrO7^z-S_VgQ@O35FKS`4CsITm`DrE%@VY^<6c%0v6;~wnKkAu_Z9qD5C`Kz9 z0?W*$G}(ITr(b;YrP>Br)8VRV%o5TsEHT&%k+TGjW;5}k$pCjP*{4u*{UM%oHrV?; z!Xx4`$l?rGnhGLXnY=*dNS-Y;ROmWkQ*e_+ER_F=#alXb`;a?-=EpI8CKSyhf9^Qh zk--tuV4!q4FGV1{8LYQjGo*hh^)e2Rkk^=|3>Psv^T(tQ#_(6jT~v%~{ggol$wN?4 zYKt2pszNkzCKmLR+rsjG#mRwoOlipES`5)(oHm1p2=v6v#mmu)?DetylMcyaL?dpP zY&-h_kp17{8Kv?V?iAeM3Bo4HRcIdQ8&pEuAb2(mE1R?B^_!k=zivPgH!>6w^4`!= zZeHwqb)DWe8pB9xsug|Kr)<6ha}pNusjKCG4n+*6z05$o*-?N9;Fh6IM=!t^j8TIB zN?C=c%b|Sh#ZSyvRJkY>E25}Q;31skiIBa0Th~+5Cl=AmJ^FdWiPEtc1TBA?4ZnKP z4bzoB7dX(>4r@0S47YFt?{wN7ORv=V(Bm*_zOL%!p40+%Znq}ALL!EMCCRVnt*<^+ z*H}sxYy?cfaYwx2lYUb>;-u4TXnBS`jK?IJwQt|Rk&Av>OT{BwC;!E8cJckAu2!_h zW%CWk^VQI19gPY8naaX4>?H*oiLA6U^1PLW!}5~r`+fOnTb<|f#0oQ016<@W>PY|- zlMn*vsZ{l>0kij3>oYgZ&_b#@qdoEHTy)@k+9L+|XjZ~v%E}pN5t8Q7z8@6Tio7mS z0GLX9E(LqIE%dX1-{Pg_kmjv?UV_8|GeftrNTTMn6?3-oC4IKZa;CA*;J74NHAUYm zxFx62c9l{ggJVr1g1I;LQSj-MWt}yo>0){enUryS37cpwb3i3QuFKdOLU>ewkVffx zqj^6HuhlWC>$&hn{n{t%)Wn8)o6x4{p4u#UN{ieiqm2 zndG1)Y}X}1y^Oe^M5(TaAtqM_|AtLY_TlF<9#mVFTc={%Z$dKZ`ZZY4Smk#i7j@Ev z^Y)+;L#h5G2OsBLA;ZT67&Dw(Kb&B98)fich`yc$Eq;vBF%~zZe6y05peVr7$23A? zQTu!?BZ-O>I@x%9xW66@Dk1rCaKK6T@J)U&$i4G*YQS&aiZ;I2e?)Qdyb#Ii@B~fX zGl?pr9qY0I!a}SK#3ftkT7t=l@)AQJ^ozRR-C2e>D>o#A$~bvOh!vw6lFvMaLe^`! zKm{SbL6R^lE%~lxR;Lu-;uO7$26n>Pl?iyjS(@$78PvPX;j?3lx_V7Hd=8<>+Nm&_ z^fSw+&F`LHmE?q|mDSGLvK%?x{d^0SE=8#Y((#cuJqulVL3v{FbkYCk!fxK8|0=YJ z)k&TAEZUm5Wt3V&m$Aj9kcO6(^o&!bwecMMaMn_Ro&kB|QXL`AI}B{OgL6vyuJ!<< z3dMQtCUiO2seAh^cI(q8OIQl;X8P|l7EbL`);H#f+WB%Y!jT>LcirQDSz%i_v0l$~ z!PB4W$J%}AwmEe8deT8FIT-O&njU}Vnzz`r`9ty_Q-+>|gELLyv$<}F=AcITyDz{% zBzDr7Dj#iDshKsHw+?->gzv^fIo)f#ZwjG-Wj#O$*|sApV}kH4eQp&loUeqV7`-dO zj|!0UIsj#**wE{T-xzkCR~oYQSMsevWG2jo?AB`i{Nem_>D!5vI$ZJCDjqpXtIxuwTwP zs20hzK;rw~?!QxQ*8b2fF<#DmR#)mi7gmE=9E*#KEsqQ2P=V(N25wZ49XrQe_NmO$ zZ9t8S90+=qEy6g9gz3_QjDqdPt3=0n!zk~^>y-Ya`i_TIH;eTCp&99$MO(W?Pw-Jo za~&wxo5RRk0p(b|`~;}dAfF&d;UW>(v|PQf+fsa4xi(71HNvSqxEhw+CKOT>xzHJ5 z;ltR6Xn|CWDSu|T?W94UPr$lKr(cyF26zV4rjU=%U+fca)DvxcJSe^eGy2M{N2XJr zCZW>AaV^vTsIALR3|cy*;J&y^C%wf=$m}p&Gy=QP!7@;*YbWVjV^DeKGjUEEth7k1 z@op;JzfgQRqRGO)5j0w442WmtzSLyEXkV=k#%N29=X6vjKbw{~=Gf2IbwZ#*;&5btjeu zCW+C;Ud+G-k5)ySvq`%``H?f!|CmPv?hs~avcf0Wg+7A{Hl#=iVGN#TE!&YC532Q1 zs|mcOzkWR5%oa7oFIfjXmnAhWl_g!fPa7{}(wtpwt;db?2N!pZ72FHm3AV0@XG@i& zEPUmN!u7lXH8E7rIqN1q!)EqdhM~_tj=F6r5s2dfY?=}x5D?10`k<+vy^*1UqrI86 z$zNSDLiPVpY8a3U{p#rb+Qqgl14B;L9ewa~O*e_Lra`J-70D^S-j|{s;O`8x*Jc## z#+-r=2<+Jgcc(I<8@+9Q`?l$KEKTNyR+vu=LIa}&t(GY?uTrXGjN}+R7&j|^Rbx8d ze9*nMpS`DL0_0@mg0_l1{f5=AWjBsJ7pXW*Lda2wZG0i4)vHy?M%nB!CZ*7?7ALtK z428*;>uxrdcS#(cle{&awI4vt<%Unam#I23N@xK4ACmbv#Q2Ge^u|j$HNRB zNmQ;Dam_z!+tj=MQm6fVvLkMxjiKGu{jRF%A(=O_y&N|zo#J({Shw#d=nR>~V=b78 zXz%(}CVfSLdEBSzsmUBmkp^Cpum?vSm{MYtBkr0h{U`MHOrl|dB12bOxn9xv#?`R# z?cw$<8XaD})2{d#*dddJ5zr$IUZclslgbkkb^aHPta??=!cl7x!JUZ@v_k8R`}Hlt z%zWD)c(w-+3rnv!h~#kK{TCZ{_?FuyzHfgb=3Fv9Q`hL<2hOGlj=obJNp0&6mV>?} z7Kdl$&;;$)?J%{AJS~%*vK2eROb6wcCp`VJftf2>(r@nhIFJu2(n zk_?DvLwR3N+yhvegR8ES48Pk2hNss7>Ltp(ubamdklRuZ%m#h3-T=tkqMBjAk(1q% z4tEi&Vn7-uya7zWJ=~#XBP!>3hnYv!k&SzqnH@ra?47MB2*J;8*e*^U#(`>sZjwQt zufTdc79XMXO&$rhfWZQUV+s$J(qbde`{LmHJq|bgM+i9YStegeH&5$$uy~8fRudDE)g0!wBwjX23 zX}ih+rB$vrny58|dpF#S{l{|wHH%KJba&Y2?Mv6d_P028w0tktMc2LnIhzqX*w=-8 z(m{^or{uidf~5=Oo(*xWbG^?;SSnd)GJIe0Nmxk^F?!TAbeHka#P9um{3h%SsvgX| z-lqdy@ZI0u(c3t1E%(lscvuxTl(!|IapexbQ zHkKYN2CZ3cCU4m_SSyNUs5vlRoats1S_y$6;65-zGIo2uXBOd}Akq-omf2dcD|1VXw}V zVr(>0Cp;bKVjPqfSlByWKE!yZu6n@!r-4LC#w}0_zcxOH3ju>0i8ah#W08w^W4_7ZXAUxU5vLVEG!E^%uY+P)P zcTIeTvglr%oA3eBzRzV24r{Eq+Z@Ip`6vA6bJ6a2j5PPAk|-v3fqCL#&^0i)u3yS{{e))L>nFwk#Ka+ZoOhPdL1 z#@gD*z|qXc`fvXow``7051^i4ydVhpL8+T9nyZhe*&nKk{8Ca#t!Txe)K3@C=JYtG zu+k@rkBDx1*|Ax;VzAdC;if#V-x(QOR#0 zBQB|lJ_2*Lcgd2g=^X_YA{fY#ONe7bYhP5P<|WN_&3&1li0@s4nSQIKq_!{B23p8HVq?C*DdB2(4;!xZ{1NrfbcnBIwt4 zEJt-~(s_3UEU8YUnPrJiZ4UJx$okb!MTvJc^bQybrIpzs(W*z#AlKU6Xekg}+fhV$ zK;RC&)zgJ{ac|3jXyp=bA@OSTD!t#TBc!Hdy8BKChmDzr#)Yy`V$)+;~ zqCze5ULKkWnBv+KG*~z$a{av5hhRh!v@&9%x+0mI^*I+FN%&$foAl(!F21<}oDw!?Qi~8>NhJ_fBQ`I|$Fyhkr7U)ki-pZh&cM0hZSO72qB9 z^Z|ox+P_YJbCZdyQOnGTLFX_xxL~UeQei0Mn3v#jWP~tGRxzu2$uPos^Mbc3;^LNI zUiVQ{CgrZJe9IhWoDMISBepktr)?E2<9)aFR?OT@ooyy*dDK?dwU<6VvSe4S-V;*a zO6%#d-*w&JPfy2rS}|{mhg@Y>Z?Jt>U{~Gij>0p)Ir&UG7y0SbmzUlGRi2s6x{MwC zSjS|XnWgARsWi93_EA=y?`=o=R`=|1B0D*kiFfi@V{y}V=Bo9l>N?k#^7Insw>38p zk@m0Wt1y>KXcec+r?#N_rOwTDL2jL*3qz^n&Oi33gx-tMeC9xCH2mjt4(GOS9=@m$ z?3>{c3=#&Z;@P5*Bjr&+8m8Iuo2I>-dPG)i+PW#QPv1wM-z;F?Kk#utB20AkTQc-5 zdT&u%tt&lU9Q%;j88=@d|M2clImdl|wmsNDc*lz5;FKKWZ^U(+^|5SUIbWisqoos3hYv_ z5OY5x*bST}BJxAtqpt3jrFap<^~}$J^GvhEFG_4ke9GS-ytcw$W?g(mVswxCSP)}_ z#lge^?FS8drig{;Nq9j=McvqML$rN)UtzCSqDqNl>OXDHixyRL#nWXVit7`jg2!=6 z$d(ld>R}l4VuagO(1_-ElQ!`*R$nL31kZc=&3uq@jRYs%lteaR+f{`!MI1&7R|=i_ z6oo|Me-$V%t#8iE&9 zf6$G+YR(%IRr?2?n-3q+scx`fbbge;io_NWK%>eaNf7hV6Vdgj#-)&^eoSq=_;55% zRoM(;1{1e|^;I>Fn5qL-A_5YD@e>s02n<1}9uo9dyS%Lnf3PEyIGzpYCj2LmZ!lQ) zk>K3u`)-|3QLIWhX@nd6;gIeLBII4wpQv&ryM8w3_&t$~9*^;E`G1h1D%~Dqx5}JG zZO4aCY_h076}xNfi|V{Dsx^QUIns+KKYr4y;5@4(zYF(9O1oRzur%37hmbHDN(;}* zhlyGK=X?MNm)+(mfIGGX465<|cE@&3M)q!se|Ngy@Biv~5%Dt7>2!#_=ZR0aG3Q{S zpNJ>pW@(^~w7-8}`rbd}2VB<6TsKM~H+#MYd?({8bQH;QcRqR$+0?{!J>(8vn2LgQ ziAGb+TfktD7djB#-?N4&fla}nE(VO$B6R%or>E5el%kI>!M69$t5(HDh+RQw#-``UH0LR?*9!fhjSJw* zc%z~hkTSB$)jJi5clag{Ep?EwqD&Ww3K?W@r6T%7;gnFzA`|6w*uI&5%;E2wAcbZu z^QGJ(CR_>@NsM3(ajU@HIL$4R<{0-+dM@O81|h>C%TEbl@}Ce#N$SwUXe z2hzL}O{}Kj==IfoE-@$y=hEex>SZfLAths@ER8G;?IWG{m(|xp3rleNf=GbOupM0eVW}lxtE9W%3G$pOJZWX!B zb_Vms4gC}O!m>7|^m%XR*756zjVvAK>e1_s>++01^D)P1N$r?>G*LBidm+j^9 zZ(uo*-Hm*`Aa*rYJSyP($Plr4vp}|CGN7gi+O^ba4?WkXBTJjW6iH*n&;~GFDX`!C zhV9nDWEK-Oan!#v3zMtk5%@9JO0==Gm;sT5a3Xw*B;2HADJ~KZXH~q*bqkaP*OXft zduZQ1YQnWe|Mo2(rvD6ulf-3g0L3&rk9pJwi%lh_`@@VTkX1-p)S)>3(OC!O>0&WA zR3CSaOAp0Nto>SE`^|d zjgoL+n}CLN-t5U^mwt^6blZjA)p@xC_h6`uzWLBUfj=et%(R2o zX+-p5tYEs%aY;3S!0qdvbO@x-V=0VX5NomRdp@KZT|>9xnz%LoEZUSsNTWW7cxWMuR|5)qx+s@?DPdFS3cFJVjGg0VeIx8D zoeqtDt>10FXq2>7V`F|mr&B9l{sR`1If5)BKOQ}qE06-5*iJ_c=x%>)papxM$P5a@yjd7N@ z+)Fy#zuBX=Cf%oB>2$FpUn~L%pbmUFbGsJMNH~|I}QXQ7x6l>VQXpJq!z%PRbW8gt4~*l(>xBE2r2DQ#ja3S3=}??-{06 zdNsX(WmHlpihL(MjkBGhlD-vS_)dBtO2TRJMaF zLx?&psl*I}@8Yxz(4D6ASLTCKH;!Lhn=)_(L_^Xs(R_}0$aq(%S|RFZy$#zAOW+Fc zoWJ1!p8tTA&q_%>_b}RMm}zx3f0K;1ddXoZi9+xcp$AUpR%JN)OdfCmw3#(G)n?IG zW{gIO(D(t~2(=##SN+1l9A&^8J4vPI5h1{+pD=N2jRb?8cN~kFX!?!5%3N1oQc9MG z<(;;zYbJ#J_OJ;!iOxRtf*Z`|!$T|rxqt}XTSL>*g}s^L9kn=@?2@mwTLF}e!;{LW zM6X|>&cip0PyMdQAkW}eEn8ABLkOED0dciIqQ?R;Z;5JRsnltny++^851n+~1d_7+ zw6auZE()&MJamnlml5K-puGNp|tT+fM4NbW))+o1>ze^#9#lNzICt;&l5qE8JGo!7E@{(CfzC0S6Fs|mN4D^_yO-Z!F7f=@4Lq&$i&-XC zgJ>Q}jUen?=Uxmf-I}(fLEB1Kys}a@D_Vpnze#u@rAp|4JKKPWTurwK-!f($A0%9D zodc`fklP&4f&VBjnoI_cCe%oN*EpMsXWpjenDOL|6-Oc#%zpDfJN@7#up}DIM0uoM zP{L^4#eKW={gd!m9Vr@ z9_Q#UExX@dO2I|EYwLugDu>CfyoKKs9Xi>GPWO)?5}t)+a*~Ii$lgA+=9yff5BcmT zA%EAIeu%}R9HZbt@#zj~zp=9k+gHwjz8QR0t3*$WH&$){ro`aQwrN2(nFjKv_@X1ZXy4Iss5(S zFCzidJZ(uS*<^jW-}=(7GDd>^`EVcAl|waj{PP%^ozyXDmUi!U-YD6bWbyHWeh~XE zuoLUZa)xK1WI|04S@L5v7QWC%sn+DnD(+MYu+D3D?YjC3zNF6@MSEUvIn6~P52vq| z%P8t}ME;zGyL0kuT};D`Yifui+T+^9LBd)aYNc__l>zrUTzSN?PX6bu;pcFQ#)Nl| zcPcJwJ+`gsXQW4t$6na-w!X@S?C8U9_c}x43Fj3JE{j3q`O2?bYzCEIbauUlkZGH0 zgDHKoYF;ER`Md>p+1}L`6W^!V^ZF^<^BYT0o61JJTHfE2+M##yFgaZ2*XrC>rqP<>3ze3lUIC3hhdIxm2^($d z7&wnJ`pi^>D96vz$h3nPjl$I_m(K1)FNUnkOtIH0@8wb2sa-$KpK=Ylnlsx1jcU2h zF4+w1RhxuATzValt7?8Ms+^vtTN!F+%BEqkx!OLvj;k6hhfQR>-d4Ax>{y@K6I2(O z3o{>@(>L<*whqRYt3%E2syYe z4LL8AVLSKOMR(&{egwo?Gh(SA+1wIo?b@vh=y_W(j*ASJi z^WVoG6FHNQv(rpO$JWl~C!aOFuYzdreG*J8GM3N~68gn#gk6~rV~4ok8?{FQ@bPwc zUK_SVQ(APt$#DB1wR__$9t&I{m}m0_duK|&2|fxv2jRXYuynfoosV8AFctNxCfWIKPxJZ2z)-zhAvB@z-n8<@1zx z-Shn^=fe1Nt#zJL_5S5g-Ylwz@#8ukt-}867uP15yxW`P$Cw}KPHue;tl4hCcVD@$ zVMp)hMu!3C!~S=bwU<vnZ~S+UljHW4@%w#UZ4QVFN5CYbGC>uI z+fV$oc_yM#_g!;8uQr6_(G*|R(<)xZsc|Wx{rqR>*x?b5?_G2)&C~kwy!P4o*Y)vB z_hI&=HnEAH%HYkh+$+@x#n4NWj^ zKPV%!BhO@Brq}e9It;USS2&Fc(1mp105^EFGJ$MM`Z z_4xFR*n|b+`qF}vdRfr%F>olO6Y6C9TR~QGh*p}F9#EgLhZMv&k(5lK12Ro#@YFw& z9}Oq?`U{ZFHPw;H4-vtfvK>)|K~CItx(+mZxdZ0m-cD;RlF?pAPVyrAce_@%QZg%Z zwM@<-Et6rs(vQdC)p422E5*tt@O`yyh3)DQY*u-+vi!VhOYF7IN#U}1+nVE~T>CfQ z?JE8Fbe=P&%ng}~8K2la9(0c-pbV+8TMAGz_~z93Gu4tcub9Q{$Wj&Z&*!CcsYewe zCMhq{mrYj*iM-5y7{u`ePH|&^%jVSFrzbE@cmOkrDHXee&m1d?MinFH97;s9TSdj1 zV?uj$pbBRCOJ2Q&dx1`GuaYO%YH^qgwRJw@J{-3dK6k(VBMm@PdT+iDm_)M!mR~Ub zYqBkCZ)5B5|7*r=7|jK!fI$qt=YI=m)Ji()kw&!)=_8HFl`zXGjoDSzJ&Yhu=0EhQ zlq{~DzFe_87jb&2MSh&%#&G;_6Sbn4cgzu3YSvfubx_I7h( zm`p&hl2%S54vlnFLZv&|^g1qFOXS0PvZD%T!%fdH^{!?{xI%ikS7*B)u|={WKb%3t zwO@6Pu$9q(?Hmm*#Eo)a;9H+9M#L2E_g-^!wK2EBnYfeF=FA+m>lg3#BZ8G}EUU}C z?C>u`1|0;((A3BB>FAh!M&NUbC(&y|E?(*Q09E}ro$#bw?!gaGpb4M`83|A*WoTpY zm*!{5=SvqU(zX`JhofN)m8;_9J>z_$y|ch z$H46z@yjtHrKSa?mijLqkzcCa+z(5G`JI~eeZwLcyI^Hi()EdkKovW&G14{%TbA{N z%9kIU&cQC8@21?TJUc$N{grzB=TeyvS*?2^!0_k+WCh~C8=ju6?f=@{@3p~< z_)frf4uA@9&^!3x3IU>G+%SR|C0Mg?9A+xsDQy_(BILRshM{4xCsub<9@Ue~Y3x=q zt+6kM>)B%JTBjDtbr^%-I-!Te=$P)v;>RpOjT-A&UdWgv7bJ}v)rb(pc7;4X^1~Qd z5rc$AmYd%YmlM)b6AbHBL8Vmh$`lFaVpt=wF~1LCwZI#z58c(&G_n6U@LAkKl8eq1?yJ@Yqo2u`3j9nZ0JU8Tu)qi-Eu^iO)P$g5wDZQ-D@ z`@Pf^OQ{8^+ywfaaA3?k{IlcwT_r-Ps0d?bn`5igt#}kNYf%j*Ja1pmds{mo7PX5#+EO^^QKrUTFY&wq2%8%jr@WrueV%f!a{ z3k@v&(EbgJxOeH9dG0d#u5uflYH&>>yfI%YFfEHW)w7vB5OF4%S=lA9jP*-~ZofB9 zgwo^M@wlRW)mIb1&*vfQEh>gmW0zrOD~CbuV+xjbV{$nWwW_f!?urB6MOVnchTB}( z`E;~cyz_23UmuX0&p7_o@&zduPX^i{vLW^(s(^@GKtlKzT1T4c^PC}mFDGgqK+FC+ zo;dQbxpx7+Ap^7>574cDuYmvE_W!dE{=dby04@E`5jfr%20{-DzR|qFk+70E=8715 z=&FX+^0jfJ&XIw!*GwUe?CB0ohLY-p9_sO}V3nt<>?~zbfoVeV3t2>zJH7}g&;I!= z8cKL%YbJS~-)DxC=G{E5P0K>6%N^v>JV9o5uIr{uKVty7AwlKtObWhW@`-k^hPFXPNMCq_2R~*Z;So z;XhIStdaSRGKKcHTlu46=1+h>Q*M6)^Z>|8z-|0a!2MJ7&rHGJqN0F`onNAV<_-Rd z@MoINZv?o{f9l{LlXm_D{4@3CHy||GUx0rk!u%=!XKuuAd2))ssxz_*48phjITdKE?lU;{O`d{VDxtr2H*kF7)qDT)Gk^VptzLc?$+Yk;z5gB307QE9D=o_XprJ=#i5X*!2-qI5?n%ym7oQJ z+f83P-#z30JooGoMzS~AYp-d~oby>L5wA6rp5Q#gxpnK-6M(Y3_N`m@E^pns>+$Fg z_6n3LFCF`K+g)2p_EzNxH5z+z&-Ru2t6R6KVsS4m?qkm%zf(4HzjX`0^UvSyUQo$f z>_uV^1w#)Vkd248g`4#)B{yqp7k4|52T<=3_7?OHfcz_6AK*6pVJ3C2@48fN{0?$) z_LoH1UM91NelquXJa>QcP6E$-HP383J4BGfhVl9Pd#Shh>50U4?_{`-h^fsiKF)9l zn#X-m7!f-xA48hzElSnkI(00c-O#>zF*!-LRJj=@^Pum5LmLtUulT-Sj30)m{KWapN>4T3f`+X|`w z*MsESF`?73LFbqQy^KSg0V$ymG~*nxm&+kC=LsNAUsiRhdiiOeyIj*w6-SfM`36%l zoL5Mra$&Yr-P6Rb3**sYvp4I`7b!WCPZ+Qfg$OG_O+i@C=98r_q5w^3tu z>Btg5j42)U--;*(UT#j`00B9o0c%@Je4M4{zdH%2p3Mt8M?^$xf*f`mz(;eHKjB@E z6Yzr08}|Ya=VeGW(_UX4wp|&R*q*>zFQBVJXDKbL9G0PDWhGu96nQzbo2SPKI|o7H zog3Kimq0~f9PBIHjd#EfW|*H*ynK#SiN6Woi7mh1-<5_m6#n(hgga? z?sAd`wZH%};wo`EvY8ss$d~ON8Knb(&*;+p5}&KQWlzM*A3se8!UdLt+P+Z%pFanS z$BDjXz>h#$OuHS@Cme6sMua6shGTTPY(~G`P~Uw;c<SInIzh26B)cAOPLuNNcrGL#24=p;yxTje0I*HpQR`1oB%uxD{`DsWlB zb43Zbp%gJn`h-Dj9DyW8XB+i@&#IV(9(e3}c27sj%Q^CXg4F7ZG!=No>&VEzo#ofo zoe6Zk%Ubjs)}TvjVOr~h&u0D^t{z-fc*?PL@LzC541_V0CZ&xs7@)& zDdMzv=KuzXdOz4XsPpZ874>+-5Sk)rNJlN*ed)O&XXyxNvR(l+84_sP)mRvMcAQhD(Bkt!w!$)xfH@kq)v7=WiQLXJUBPc%qHBgdAW!)Cc{nt0! z(ZIE_d*~1`$Yw@*+wY{dvmRKGvLxqUt}{9eELp832|{dD*1f|eC_=BH;!owqr-+GQ z0K^eYezl^olX>K|FaA(raY7K;iLy5LB6mM){RcsSM_!XMZTv_DGz+aK@3tuvYM06` zmBHRELB!XterI1YAEV2l#z!R9HC*8qKEap{|JxW`R5!5N|{vPKQNGdR#PRX(lAj@J2da}unSog-A$nv$q_eo?V^35g#$YUB%m z!t=v?9(Sy!qDBMvp#ewghrqy$mML{U->YRV2;iJu##uvcj|+DxB2pcoGOUj;^@9$i zuLhkxh|5nVA4gC}YPYb!X3tHunCI=(_@+%WfTrFSU{BST{*Qc}$-Si`g^1O0eJkb( zb_GrydE=u~a;XtWg*eVcq+IwaX$EsL$f$v_TQIUXBa67dA6NG)Jq3W_tg$N}%t+)r zDCKTPdrC~)DriGhxxd;ytyKpT5p1LM1Q$g)H zU_3U`_+a;0cCYCc)2t6;znWTIAl5s@bEC;DEq6{_9B@Fc*bgWo<<98=2EzN;x_3jjg3iC6<6U6Z0Ys{*yK=u4S0Ty{m?b znu|EImhVfEMJXF`O19`W7c%26YB#Ghk)1?_tas+Eil*K@C zAmoYEEFgf!Ap@gjMTW_|k`*{YlQr!~j+qTG4q;(bIvVn3=*AEe<(D)|?`jQ`$Gydx z;0t57$$?H{{89eGfSWAUoK`w8dl<10$`4PzVhnsQp)C;7Oxmr?F4ky-FxzVV*i3qz z9=`h6RT-oErs+%z!PD&=o1NCOzIG^^D7W6E2m&kA4B$>Lro`(|ptB4`Q$+2O85Pos zgNwt1hgkIUYG0v^AH_MXzL9!Cr@db%8hXxP>MuBCrTSL7OD8-rhA>VZrJk)s2h?H? z&Q>Sd3qk3cUXl(X{?_DetR~^DMJv6U*GEg&Ve!&y=a(thp-&HTBrQdATqk~v{f_sZ z=8VuOoQP^k^jPW96@bfk9k4LlZi03SGJuTNiFz{FckRTpQVxJFH3tzuAV@8pl&eW6 zyQ3zJfC&9Sq880EOv1w}rs_Ya;PlOIrI*?AkQAvZU%?ifDtGOpFQ($3pK8fbgVq~i zT>D+z%uMB5QJmn^BqHo6Sd>CxcWwS6B@11*O(AeMGNp!eG`E?L*V4x0MiIER_Ku`P z72|XH`8t{Uc?L^%?>2B-US(_xG59M$%h*xaIPwK)MzNrrec6UEk1DJ7v+vd^X{wZT zyl~zsZC?1*rMv=jTk5Pv!M#Gj>Kpi4a%VY&PRKify^DcS`V|-#a925SpRg3trYCRg zIL%i@$Qz$PDs*o6SG}~+s^f#anB}|nRI=TR%kOPFgwt_^6}>Ld>)OA*9G}fOAA%*y ztuR_1DILy^1IC!zeDdJs7tKo-RjH?#Lj)iH&CW@XiqlU`+Q;rl)^s4F<*TDMbF4O( z+0Jmax}e6=N-X!|20gG1REGBe=!u5WnCcRB?29BixDMUdn zWW%B_qUnkr>bde3z0iR5xVeZfOW(knZR$9m%J}Ho%z_P2qX)8&ML4!?J+Qx$QnJ{v zls&$EL8HpBrt855W5}UmdYCFGXv4BUVzq=3KD>UMvB;DXpFmOGMn<;$nb*aozs=ua zh`3lWWzmi#&ZBC!;9hekw#Xp7H~chuQv#lIgIK~GKOtUnJn7U(_$qVJVRm(ZP6^sK zbC(`&T@fcTt^;pnOI_TYYRZXiMrT-Y({zY#>g1fM7B_n>_Ux#flW4Y;6ntHx)&s6B zo1NDsSc1>k($0G0J(1;YgbE|og7AWSmO>FslXUnAoP8z-Q1o*dUBxRsZ_6cuz3Mqsm%@D*i{1=5@;3(a?5{c+9D*0 zaQ-p!!4Q8z5=mZF{awUf3?_<45PW9!Jx?X>>ckmPy;sZEMg7Wns9Pg+dwO z;J71m^t8zrJigMwO8;g#W-V$(ZOHRSZ~Xl+#9cA$!A#j2K(4!mbbkf4-2=y3Y?k0M zyOBPD69jGLB+4Ze{V8y}_N9-zS{{40yxHTKe|K^0tZJf~d2@X?tVJ3(NVGNm1YzPE zQmC^0r|4ZWKDd2m0N`Vl2)6IlVazqo)Sgz7Fepw|+5UJfqKY&Y@lJKI%f zgsy|<1V(AG@hUv(d~u83;H1RyK__qo8}n2gleEj)lr5Fk*ZF#LF$)DmbD)Hc&ldD`rDA~zQcDBNyHohY;_x9U923o5%=R`KJ!B0 ztk9$Ufd~tQ2RS+HBOe!kyP1`RPm7+*t)DF~&te2f=U*1sGF5Lu-EdMwJN}L8c5GH$ zl8|fxjiT=U>76*kSYHKQ7B7J>`_Hi8*l*jGPn}L*acRC)VFELCS&F@0;W#)RZT)Q^ za|vUsSL`xt@#&|tV+C~&k>r8=FT#eMcLw#H{jYY`^6D%ni+Yml+fD~x-$->JFvM{l zi0^*U zs%kK#9nJL{B?D=iyos#dQLwr{2p45JrTeQj&P~g!N&|j@UUd^-8^SbB=UO ztJs?ZLwD8U<5h?&W+oy8%9oK#H}-tXED+OGzw?*_-I!O$@_aW;2K+|MATA5dvKuE; zJh?C6x-dqv_e)4(5#e@eH z8=Oh;*tN)0^Xk`SJ#?B*Bje(H>>DBN?IQ!lk?`O z$@s6Yex}rpk=0?n{%Q#L^lwxD*R=$;{m#jS{bj5EzbuAD7xfZza9+QTwnP0j&jPk; z9OQc{_wWCr^Z(D#0RLA>hh8P={du~Zx}^(H+rCoUkwnhT&Gm-kfW?2z$D^ho1$Ah2 z;II5PhYhQ?UU9Iu^8&eyHl(OElE5;wQ zPE~m3zZasGoGb!7{oRRs#5EML@?vDAVAvb$XooM;`5r<_TrJ%nWv2@xGbR)P3 zJIdNUg>1{MydWj92cvDo#!<1gH?4IkpF>!m( z;oGAU+eeQEDgoNCII?NnYMI$%!MHcd+K!2t7k!D8*KvN@Gm5G1Wp%sE(COh!MeP%* z?cHTaMfs6=8DfP|T7;u_Xcy#$D&qS*F_^QUpj9!JxDBeMYX&h)*4~vNc3`6n;PE)$ zlV&QFO$DJ<;*F8KS1vlAoEDnPV5!TCQP%Lr3AjQg%di z)c2MPkJPmlzG!OXQ{9f!t=>VeOA0E`CjWfXl)rVa_l>e3=UN8LRe3iqG?^WbFHZDZ zM=jz@p9wsRTtKc1vaDx^w4If773ZD!6+gXs=`b4=H}T9|d{KGzmrd2NV}$-J^Zo-! zG?7)P_oqC9Tw}O?M}U6KLNG^Tl=#a;lV0A( z_G+nvTH~;L!}$!}@^J`RwDe@tTR?};=5TTboAP#RE#5P-ED$#2@y6760#>qZBF99y3a<=aJyW{xKcr{=HczW$0+L^PSr&2^JRzxtu`H3fuJM=_UDXeY=H z)wwEbr{1ZUqaP5D9XAuVJ7Y$D|ESINf7tB^n!_*0fc4W?ZnPn`Qn_@`wsmpyx zsK^(t<@-i3@FVo&QWS^aF9V94WtH> z)O(fIjB)D;E+?7IMtzR-4gG>F>)HD&^2lQw%tu;cFZHb=#IEYv*6b%?e!xmDhdeDX zCbQixBb&iTnO$W;{mewa$e4m;he@?SX>FZyO;yD9vceUV2O+nXdDA|J?%{h7F~;dB zy!PNXEk{i$!J_~M%m{A=b78w8kHfp&o*vz2SJkO^@*Q7=Wb#Q+rm5dI zevjC- z1HNjV<;?LNN&N`x)x>#{=jKkojI}rJbPH4E+xAJv>c{X~$}eA*B~S@JpKMCq$VDqT zH$j1W7#=<|CjzZ+0DUR4!rIr-X}O;sAn`gx!?k0k}yl_3b2uA1#e8$&zE1JW&%jEvhu zb`k)nP3}!HVXC7yhrF^n9;Zef8m!8EDm)3wp!n)h4vINM{QlZ zb5g7R&-^?=Ku|du`*0kJ!+kG`3fJ1knbnxLy~wx7J=$2!{T0pxYSY%<^s~9|s=ITI zJ&Su<6LkyqMtJEr3z%Kr>yQ3Iak8~PNJkLQSZ#H_d|a=};#0_f>;th7^!zlqp^>Wp zSUrBpxVE>%8)+uvOB7770KM~b9JMTPbhU*6?%&pUBi7YhS%&OIH#;+-5gfT@ibnO59{}+ zC%l zuKHe?=X}JT9&zKg+FsMJfL`|dc%Qxay`hGUk6fsr)M?k&y$8snEJc(XUfiANVa3JD zsKtpQphfxTQN5F=U|p#4oJLocW&)5jAaCI_T3y?VOVtoaFPOH|sRLI!3j>PU2^6!Q zTZVEQvnSG8%T9QFunl()Y)Ei~VHu*sJvRwWJA+Qp6s zAVvGW6cZLuRuR(>&JpLE{Zv`ETzhEZf>%A<=rp4~NHokHouM_t9{j4$Mj~ECOWvP@ zUnHADl>V~9QzS`8_Cb_?@|dhv9&RFm5xXv}c%LFg>Ze9w0*%)yj*~ruRwW|z@+Xrs zV@q>gQLLyy$kw1__Id8?y<&useswnsYozCk)XLZl(f3VGN(e!T9<=OyxKlcfn}1YC zMFwYt4Q;n|pS4SdXibm&`~(-qn3gi#?CVI=wA;=rN;!+&T!G+$_got zzmTC4^F8jB@zV#eiThwy34$(FS@vPQ0$8q4g?o<A(?S!A)yV9pOzP zcF%>WI2-+&dD=@1W&*n^bp40lqJEzm2`)C_g5e#+SjsahlVn$a z-tD+~!urg4g_3(tjx_LL-9~;Ri{hjTT}7C#bFBK|1U*p=rI0oy6UT%diIt@dCpIfh zkRyy|Ue0=q=|Z$W64mM|&Xn5<+%NwACdD7lfByv}0_>Q!eHU0_D*9GTLeVl@pCb$d z!-VMheR^Q1i)=eXaW~Q*qrhr?dXNA2Uxf|?G&rZq{f3566cNL?+r zFIU!mEU~fLt>Z?`;1D2WEn~BKs}8Kdk2MUf^I#bdN)}tw!?F2>xVw1$?3skjq3;ot zB;W!Xgi#7QP-k&fdSl~w@}u}>dtT)nuG;#-ia5olX(8je9ePgq<+Mk@hoWE4Aa%dx z^gD2P*Datt_4lfPg}lvIa&vAQ(##-Z@cQ`W=cE}t3z!b-LAN4(D(`W)2*>F;0YIVo zXgbvCU?W&DqgeC9nA6VZZ-bj{u9h{y>$^yj=qh4y7MMJ@yhAYB`Ss@MjG$&ZzA@xE z*tig(j3X538~!mXUa3bogBcqVA=;0%nfe)adUYp^S9ud|lZJ+PsB^W84tn84HFbGF zhCY6h7oKQO9@|`HsC%kt?WK4qr!Q-o+)h{~C42W%j2#2RrG7Lpow&2wr})$QRi1i( z{3lcu17g77S0Y58h&v~{#5+w`ZBKfq8l{0{Bp56bqs$4bDdl>ZTZ9fC(Nsxk(Q@Tc zT8bDoNn2tIhB`zZp*xS`#C@DYu0HWtt^6^(Y%xPonYU_btu}Mf#cNM-f>~kmUkxIn z-^Fo%{cU;q)Y7&;*an{#`L&;BnsZHoGVCMq!w>2z->wk35i)PB1>z5!R04 zU8*s_dEv>=JJx+oAhq&+Ieo?X0?F+<{X|nZxU(zpaYWNLE2Kj8FWu|$*Jwlb^`jIY zeaz*UkV->A{jc`s{k&|}lR~bL&Dged_s4j`&H0`t2YQ9EsUY$jSsHYObj>w#G6F%j zLvOj&s`#!7pPYS%1j|Lv%6y!E?+G7xAot?%iP}e@_by~nuY+WQDX6$3Z3%HncXdBu zoeHOVYn*OCoyK`DLW{*`YGMu zdIU008c{_FXjEMBNLH5_f9f^=r%3GXd88DbOxUGN4q0Zow=_V3i*BB>Uf~|(peN4Y z9BmFwo&7A`;_yAz;i+$`{WtfuT|*eBF25m6iB_=uGa)B2gqZO)kz=DMk*+?=VD+22 z39%;wPvtx*1v!_4tmPexCBa^QCp9rm!o!K*&nK&@w~OA9w{L2d#q7Mvcx#p`0KT`i zQP(GD!W*XY?f8eNokB$C7w^~h71#PhUtzCl1-Ev~s~FmZI$p+#1gttUein(idCVRu zT0d2zNX4p_pjB!gi?seqwVcD1U+s{+rhL#YAZ~|88YispkfP+SF7TKMw4`gQ__-t{ zZ?bm4nPh;CqX6jMWC$JOH^%4Dc`EP(b!)3XUS;YIfD)(brG;)t*&0l+ZFmj4i9j$7 z+q$b_U_m#^*v5V{{rpc8Zh-F^@UuJ!#>AT-3T(~+hvr@YF}&@YQ_jSsEj3z5EEM;c zH4#vd6z7o=JixLBQX5SM*inu^*E-lHHIKx0S?7>8XmbtA{smoQY}*be!)|^m$pqLe zuBT!#8suH{l+M1Jw8dvvCx$=c(V z>W!<2Q(C@z>P%Rwj1cqk(O;Wkn)rlVic+?)EzF2_>&Z&c*?z*(#kFSd)!sf9mi}ck zQUyo;$JUvTMX~>PX)ll2Q{`(f*rt6zShf)_+MMXr-XOXDfXY zO?N%d2Q+PXJKR)ZPua-pZE9e!m)FT;00mwUVmCJZbu@rnGsOcG{T}~&VThZ0?&j{l zXD{$mf&YCb|Ns3n>h*%fg3W^E@9BHj#%c^>Fqq4JO)cZUGf<=9hd*m_gnR5SmnN`j zWJv~Yc2y0g@S3&-Ud`1x8U%mNw;jzE3pigz>j;jf>9CFFNcin{oN*acj&&MTe#XOo zwZ(O%NBv8N2#83)3Xcl!pP>^7)c8U~wJmi@i{T#jCnI?;vj+D{F}|F~JCxGy>qBRU zzxen^vLw7WzF)Uy$BfkXOeqHCk0QsZpKk7-b4uM3u{~F0=%@p^%oY7i#@)I|X zp`l@DO`&e`*k=S#Q*StyK;0z<2UQO^RSu;)4!mHLogHq|p1Lmp)7m<#WoUih&;tuH+7CvLL!5Ilc^M?k#*bNuyE)7H^S zH6NN^5%JWjZCYom5^th0eRC^@MgqJ(l-Bu>V4IqHrVX@LVIor3^pCW+)R_6D1i<2h=n3G!XIw7w*5l`=0A1N}uLb0_F$~A>F=i%$) zWUzs?tC6dVruV~At#YcrRdMUP{2i<=qPM0m{F)hsD;8#V=w^|=moG>Ag9F&`G1T+Z z0UjU^w5h=swH;g_lKVW z&0q`AkApfv_!L`1l8dATxNhXFUV7WXo`$O zV9QOrp6snWnRTxoX;HmMQyBPJ*oBGLvG7s-RC z^S7G4Rad6H1Riwr^J3M_&Nt>OyTBXsu;TpI+VZL|Qm+w)347cc8nN@KY2OOzrOHIv zDqHCLb+Q*{S7&FDU1}h!SQ~InW+CNT2u6VK1zZbjrr1csHg~(<>%)()HK6?ac)LNY zr>taZd=vAef#n`%E;A@y29Gn-m~YAZo<@76Zf1YP4%?+vrQj2Gregj~Ytob&wb^z3 z>#n%Ya{PTHZV_p{$A zFIoyI@VOuyql;AK=b<5akktSvee_<780;JO2woHo?yfQW*weBd5u!#ba8QvF9h?!mDn7dyJQ)OPh3rX zlJ+D8m!M|qtr`1EkR{vQva%k-A3k80$;WqJ(C)1cYg z!JHxYyOeDsWIt>gIUR?1T9NKQcu$_-R{Jd#Hltz~)sL3cpGD`z8t*KAb)fCci=DHo zve|Sdgfc~zDsgvunDX#NT7}N7@TEY+e+e#S$l$j=IZ$IgaQbuRBw0NWSP3c(;Z>TtS=DzeEqH6(P!~;Q-&6`!O&s;)!TXDE0me{t$u!1GI{ng zpmDrM-7KK?X~N2|%Y#A|0EE(72=88Et`L(*R3@XE3t_%gUhGH0vAq0zc|O4vaNeOp zZ^H1`r;@5i%2rminRbH!n3^s>551eDss(*$TBf=Q3&!n}O%3tH%&qUlp0))uJFZT? z6Vrk*RfHkZ4thmIh`iX)mnFI_h7)TO)k^wLvZW0xej`$quad+|7PORcDFU4FAR@W& z_|BKKyq=6RTCPKrAMTqkJchR@e*z*E+m?;in8SI9DnmYpE6lp=-z%q0OSgc%!!FrG z;!=!&<{MfhMT#V4q=hV0y#|uwxBC#8G-STxg|iX}tLYvmqk7LpiRcf{c0QGMAJk`e ze>xf&z^}SI=ujUVuLcwwCPP_O=0o2%)V==7#~kXRY$p?(#MD*W1T_K45a1^V=Z=Pp zgNx7!`jo=;J=FaQM%*Ie9e8CsKWBKD8-n>KLEo(t8#fg(QIU{Mfh?V{}+}U zl694mb&N9gj3Q0!R*t|;R!gu{AwYq0UfXJlwcBaa353u{HJ%8`X807x@hs{oaehK8 zK9G~!)MTuCTD(ZUe&3M$e3RGO>=~PnGQ4)e?UP1n*v$J9y&;d&9zG&V%uo$|5&P|Y z8~x%?%j|aZ$QHaRL%lNm$9pN+OM=t)tRnCNNN1SdJoh+06MxAzm&pEo`4iJuh7OY$ zPv*W7fu3Kc<>QhSvN#aM*7LaI&k;ox%VBoKvU)i0g^pD-n?@ZBJ`me*OB-QAr5$km zK3e>grF(K4DyS!A3Xd^7)7Dx~v=8;=p#St#z)RVXy-SR&C^W^K(@45oSJYYUH+z6{ z%#&NJiDQ2SxHE<;+gW1;VGdHNin3EEG_FwfqIlMuX(>iZnu^l;6W7aMpW0e{Y-Z2n z_VatSxjxh&WG_HR*ldzUmyuB|=6X>U{$x++zC#^J5xJKMh%UYTzNsSQX>xRyY7N?g zIW)_fze=8D(?#CgAlLb&YDTojUrLM8ugYZYa$JA)KDxlS5c!P`PVe-)j$J#Z%<;3J z(D4gp{vyS%5TVfLO=8O-cF_hBvI5I87%lVI4Fa^IxR8f%Fj2RSevZ8J17Ez7s<&e3 zsW|go#h9m~+AXezcWdjbGCdIXjA?f8(pn1@{#*RdxMfGEzdT#7(}ie~`(Y6>$zDEi zBcH)M>3LUXkp|j8g>a6)a2kncwQ(;>KtP);U`N(l z34o0?1x8G|@HyEiW3h3*y+zdrvTmZiF|{o1X_mo*iqMaDkW|_8Fi@6^Uzwyxj}f7g zZYE`1);C`3-pExNu4)ny(jw4slo>^h=j=HdblP`-?Q)bT`a$_Tn4H}BOO>DrVT*Oa zzHJxm=`MHb#2B5kp@|uRvHh~+Q3cq(bnOvCC6JhaIS&*nJA6k;O)Hr|sD@uC&*pU) zpR>cfVL}hJEcxQwq=VN4SU>Af1mxfbzUpsV9&2bjZGi#98Og-0ZG%0z2{SamrzYTzn;p&6J{gl>r zYP&3fYWdE{`#L8)6ukPf{2Bg{-MSA96u|5Y1-JNj4Z8{&{>Cx*a#|%*tD2G3INt3F z_TvJBl0FX$MEzqSPLL2cpY0tr&{LPiCQod?7JT6~nOHQD%-RScQK^CbVy@7PFphf$ z=j5_5bvfu6`s67vpA0oSQq=QBrM)P2S!fWLZF^Hl=;DZ1M{+L~@kHCOuF$dni@#MP zK^T}Pf`!Y1Q?CqY>>$?B_-g6;zlBF*(ygS(mJNJGtLL_GD4rpZRcUK+&qje$Calb zKM?K7cU-ST_@87AcXYF+8{}nLYKb~yQOo3AhdR!!70th0jQqUhJ9{#HvnjBfJ<@c# zU1uWWcB3M);$!Gyz#}y%Pget~HDGIDwnpONg@b8#opmWHaw5HYb)aSAGfh4j)ABl&G~dv?AFUUmRb8MQ<`D67&^G?)%ngmta#|0Q)@)Fi&}7sO85h9z_x(z zWb$3rNM*NopNhC5yh@rA4Xbq_2q&?z;k9svk%6if{Ieu(yzZ!On-IinB|g#T?dXIQ z4ePVl29y>KvO_=mUcq@3=Re8ME2z8|(RLAoDrjnvUt!hy#Dll%mCXuk2nm&8Yo9Vn zuluHfWhwv`tu54(n2C@)C?RADgDR-p8YJ8IQc1aW>$p$#;gaRY4DQ&MQg4#pza6*h z0&e6>>hDD2xKH5kNnu^;{v{awTi369o=Hp+X1t^d@cN3ntmAvw8U&N zzx*h_3uOP)Qh1G2j9IjnaIKBNp`!Yk+O3|n&w~*Eea_q5Q2U=To2ivdFSZx7xN(ad zd1l=9pBq%V9#1*YQBX(`r2-wpt>N!}`h&ccg4^nQ^s-Zk4C3oL^)i2OsF!hu^9;=- zCw-GNP!TbPI-e7a_sZ?dPIgg3K0hzTDjEQxO7-CiYQKkH z_O>Xh{$$*VA>}y`)xLae_=aJVw=j`A@nuI=H(WpbPqddXRN{T~+W&n(_h~2WNVg#+ zUP~#qbI)9Kd4a>K{6Vmwkk^ZnE-F6t$4|F>f0kE-dd3!XsB2N2v-5YZE8q}_hjvUB zt2Oa=ta5|V`=zyiN=dS<`%0MsQ@5Vz=za?)(?~f1;h52>VKrVK&R~nL;d@3rjTqyq zIJ4Uz1Ceg!MOME*oI6`HuU#FVxW!}Cpv(isKkN8e{E$K~(B8ysoFuq9m2jwzt6A+^ z9Rf#DKoQXBJJ#ENP8uprbos^}$lY=GeMILY)sH@88QxO!LeWHw6RfzgZ7wWEixy z+E0FY!UZ&eIknH7m>Iz?^$x&S2h&q6Cj-^6Upyv~L5FkR2x3ND_xK0^?||y8*i1gz z!#|V&ziCyo`aP?Uc=>iww{NXPEJycZLrG{FYU+F-!3EJ#akqlh0(5^TvBl1c_cEN!~(9*p}sLM9tgC z&H9xS;Q08mmglV0q_3^8aXkB=7VI4;r=GWz^s8dTE1CIMkyFHcy(RJ?$j^}zglfr4 zdi0l2>c1aE{c1Y#;(GjaTZY;&kem9}yOgMVE$2ay=II;Zhe*dK0`Q&a-TIgIN&)tM zxdo+_^gl-S^=u~+i$zt5%W#$l4!>|6SaIT5a^bFIv2avsb9&pW=vl~W3?$D~a7|VE zbgpp2y>`m<|6=97V_u$v`KkA$h%UVZXp`>pkMx->w!u{Kil)=IrqKx~{h-Gp@Mxj4 zKm#vRJ#hheWqj9W$LYYOp$oV?lDG_#kjc`&aH3Dnyjtj@K2rt0DuYQ*7EV`oVE*N> z5^p0NhmW?Vjj7&T0zeti22|Eo#mLukwUb0Gq>0{B1Asi;VUHdei$e^Idr~jm*eEqM zhdl0So!81{_vG4rijk~Im3#lNK>X^5@LO$+xFxuJ;9w+My7X@yV@EPaV4X7b`m^5MD8Fp{2yceH&7}n z8EgxIrltcyaZ5=$21#0j>L6EHGS3#*$*z5J7SY)R;Id!D%F#Ev>H$p%eUbO!T;W>x zEL#lC`2SlnIdxEO)1*=kMtG9!G;_8ti8A{@(9*@U5HQ(wLOyQWa>@2}!wPslYjeFd zJeL4;0c+CAl>KjVWuSzQ_t$&oE}P1R(jz?_z=Jvq*8L;Imfj@cXisvs#*alQXQ+wI zFI^o`J6#wTqYDiqt*L#cusY)ZC_izmbKlFskdp{atk(3lbYY6zkXxMUjIGlEb-pXK zjb&&lnukrLoL7T$Xd#ZcCOZRV#Sj12NS=R;bcOX6y$aMaxtSK6ZAm8%&8zBuILiM5 zsfry}%N1#&6KAaR>RO!*1o>D5YZ3j`bk8Le@u+L&z>ekp=+N1vfQhA}oo$Yz(pCT~s^H|)ydzjFw|&OuHMk`{C6I#e-hUWRK!4NnoMYlbV7ekm$cY`v`}vgtA(`dNV1C~EI~aB6?uqtJZ$6O zWeFCkFlqvyZH*H-8b5<$MVK7;^9$)e2Y&=sHJvwawRD`d?@E|Y1U|QfR{u%hCxoPeyCBn9whZ9#h`>JI&Jf&Ry9y~*nmOM~= z0ryn6t=ZZvSzb$DSNlF4X#4mCj=^eI^CQq`G1;Eq}jrn(K;EXCnKQ`MX?4X+6p zjGWnVr1H;px7Bo1_;0;9%ZaV4O%TaA@TYO2sh54hIuZbeqxJt`@;W*BHiu5pz;=4eGk{M_*03c>(>U7 z22=P?RTCDv&JnRvY;MSA>&51A6N7?okXno>UDf_o{rdN_L)$vU zf5C*4{~X>`glh7HoSJ+oHxPpOtq-ABdShwCp1Ym?ZohhXytCNs=i@UyVk+0{_2kJO zs?qPHQp(Q@Th@iyO^>u+U!$;V3`99YY6mRZeOOr{p0IKt4^yHW(at427;$$l)#nE_ z3D_h#fSXW`4oizTQZM@=^S1CRSD`3MJ}+UTI#(5MFcAlr4aDC+I9TY2PiU7NA4ygw+uM)bo4 zs;uMmqsMuHh~-N4DNXqyf-yYaO2ozV1_&RmNW%Zu4Yj`s!C{~!X}{y4{y$4g;tE5X ztpR@L=i+`%^AZv!^KEhyZC1`74N@SCnTo)AyQWZ$Jq$>G)?Df)^`O?cE zZ!-|vS;{GDvDuqe(&xuSX@Y#QW=@maTBQDo;QI{J1A;3*g~I!2G0KRuwEZrO{m2VRdOI+vM)zOX^)EIJS~^NGkBzb02YgjU!NFIiSb zdjs2LRRXhkTMaIJYKn7TLWklH6jY#YOsEOjR8I8r?y?XaOzlUR|6} zi+%$wwZi4(g0BMLt8|Q(?<2YwrCJ>KvKLp!uCFfesb_+Ie-B*#Oh6~@bNV|kt~0E! zE!_}Dpss6y_-3f}TtcwLF&9=0hZS4d*_n@K|Gc_5rj=CIl=0mBG!I*@csPb#qiYDl@U7iipl>sYQ~-D*)i- zp%Cc*swZZmAv$85DlEV0U9`7J`pN5Kh z%&-cCXCMN~u3W;&7zyPJFXxT=6=T2;=ST|KpY1nEMVrPE!}0{#ipuz_L?y(z>{T&S zNsVcbv2{|j`@`0MGbrm_tZ7zyj*!Kg+o(wyNl8(`3C&tZpKwu>lwa7zIT~uXgOXC) z=JIS@4I0`fmY~8kPRtTheT9FaGhvphA= za>3BLx~i&n1B0!D2F`LWYXqrS2UX_kEHA^Si;nrY`xKBB+Vr%-*m?Ldw`j0s8 z)1pJr*iQ8Fr<~u(_U59*g2>nsYH3<}Y-x6W9<{iLLLvd&Tfcvg+KCGqsAt%ZreV6fUcAy~bjFo}=|p^(u1J4e8_wyCWn!hPEoT5mEf zYXyL!qMMehqBdC8<|XAhuM^Q+r7Yt#fY#} z6k>JYW5d_3VS)J)w0g9uS&tguet);ocv^%BvDa5s^{5vAvoHGp)&cJ$eAh%5jZFLyMZI2kOy;CD%B!b4?BC(^jlh|Uf z=ej@N&;9(q&(Ev>)gRY&InVQbp2v9{#~bRlfx*aDS3P?5qKncOSY z38Q3EEuFTD*RcqXz?W_rv&5t&xb4iBOebY~W{#v~jQ5wKorGWO!;2BU*zjpach&C4 zT^?%3z$dvpOr0boU<4d%9K(xDsZmgLgll`+SPEznb_Vqy=euZ+ls{0k=_$Ye1x88k zgo*yQWoSJ6!5NN%)cYKc4E#<%Qaj?Q_x0J?sbV&uj}ym;q#@Gi$N*%D%<1T~jj7({ z;-b;cq9eDw3H!0^LsR5hgg3+5#t{ll_eKwq$+5$Pb;BL)C2>zIL|?43o^U;`lIEO7 zQPfupQ5{}B=_?4gwl=AqA%wEhCfGR~gK0bYZPRVV#GaV=-)asRuURde56nn3Bv%``pWP5ARIL!A3xnG+%WJ$v$;&qvN9AS>E zh?DJAd)UZ$nRIk8NGQ?)t|}s`LZ%8y=540rB z3?!UXl{2Cf6N0AGEA+)hPIUSi4d&$FJzD&c6K@a0)FEkJFkhgBAWa1SecQ<3@4HW^ zb9qUj{;&6kl8}^012E{hi)A7=u8iLiu2sE(t(k~-4O1ekyI2Aw72_bkf4LiXZWt2- zjyFgf$1&{M2Pfi{tI=_FDlEj^>+9YU_CqBi>l%t&S!qmCq|-JbGs1Lc5vY*}R9ZyY zJYi+&CCKNKOz}jDfknEhVS=G$f|(hs(W~1jpjugsho>9qb6S!2s0r^|6ESU(VCAye zb=Ob9=(SLgA9QUWj7a=jmE5+&co6Vauz7qsVKY7)pGJ!^xuNU(XWs`?){ljxY$ ziIl@W1#7$yx&vemO0bGeicjU>;o?b&eeD3J?gZ?i%oHM6x{|4plsajTnS+i2XhdaJ zng-!2F^zGZJy(-i5bM9J^i$~o=zK~|{yni?+q}|UZ4nt3-q(Z(aqT|c{&k|ea^Pnf zZL67Nt9_tG=L~lBo;-noHwC$#1UGbSmFltv*Vi6SRVN-T$W6bF2&yezD=gj9ckK=E zFrv(GZ613fD8VH?2TioY)iPl}KaJl>N$e-o00Deu&TJekA&Aj)xeZB*!c0W9sEfDR zgbK!WI>C`z6p40@8bXTnYWY-Zi%J$P)lOHZY5S7BqWa;pssUeSC`xXy2j$< z`5bF{&qNGo{TpBs2WUsDC_I_V>>v9k)kOHKfGej?*^fLcfBX%H^tzU(@|>2GT-SO^ zQki45*n@v-;Pzj3>k!F1x;z8SVwXf8_$TVA`#Q9~I3s!I$MQk>?BB!F%Gs%uE)dFu z=@s!HS|KDjd1xmr*{y9`udUjrEpPsdoZNBe*nV`$wLq_g)oc-(N_ENn%xZwjQ$`t` zW%aRY`Osci3n|mDn8tzv1=_qBZDUVFETJo+#Y9gQv%;gXkgXU@8onZD{(CO^S`lZP z;q@cmu(oo-ve~o;)@shLI4zm-CDAnSt=1>or{8B1nk7m~5q$X$PxtzpJJTaC=vg<& z6$Z~}%HUYdH5Ash++z%ss+oz%J{?q?qM6kM!x`mGthen7cco8hhg*QtYP0Jkn_2=T zq;LYG11amsYM6y7z3g$&QmE-@%}lO#m3p$Q@)Jqi4p(#3owr$_IQNe&$af0w1OjZs zyZbf0b2P|LY&yf1$b#)Qs6@rhAGJSiXIR_>QVfa36r^7H*$XmX4a$VCI-QfT()}JC z#eZchxvZvNQ>+|+kIg%DwFbE>O~pSpE!CzO4b;_6^!LrfWTK zyu60I9yPq4(N~V8tUt}R^=3Kp^?#R#rF&zI7W}^4ehr7`&bUqobn(DU6)6P|_P1Cm zQ={bVg8`o48^m>+x!#(@v)%#vR(Su--kc|!bG)#!!uE&VQMz9vLdP0p1@6TrQ^G%} zZwrS0K?J8hI{`2tv>@*G1j7x0<8B(ZCqtTJQ~XM6I9&c`(z}C}ohbf%PAIE&VN3Gw6LZ0uwDq#vrvZ}GDWx1#y9;4y z#U)C6XgLyFES2|8SSAsTB)KG7dNi`UnM>Gw0L73Cf& zkRLrZB`KNi@^sO-SBD={=JJNsaCD_5p_Nz*XD@aZdF_oG0Xlk4?j1{Gs-W&Xs~r`T-u8z_k@|!%lkbP`C{%aY?NJ4ThaNpI{UWsHq~HN-r>DrCuKnI z!@2{^LMt1QNS0$)v;CZ5(40`;!}hOQp`&%S2lMeCLqC*^bT+GRdx3lbxOGs10l;Ad zJW*Q*_VEqi>!X)7^#=ej_C<7QQJC3l6=kI=F!ff&E)#Fo^Si5hSf$T>wW~bs8|mNr zQ#6=(doQnN;%0f}_vrBc<)>zE5-`jqrw4=OVv&z3f0+F_G&vAe$jxR{>9E25UdxVA z98NmQ0} z3)^Oi>}0H@ulk$1*Y;k;DPl`rxcsFkJ9ptdP+hlf-cD;Ivg~^{DxR6B^bl~3u|jee zYY@S7KU7qh{}3xbE~9RAE^>%o=H^}EW9##>-2;I72bEMuNJQBpuI&zCa0u z^yG!yB_s}JJP11sy75bOvUENUIa*R zo7f9Lni&<0!>^0Gi(*QA07!c^6(V>$3%y z$-1nDMUo@yqw`;7-zVG`JvTTKuKnf7&8rIGejW4Y&E&z$B_@@hs?CS4*+0p)GPyYK zY8=7s17FPEkZpcrvRMFdQtl8xHNG;%{sO-_?U4Tv^iWOsl|-BH!XLI7>_L%S>8y44 znJV6SL(O^55iAJIADi;?`!UUmwrK(=gC;Kof3A-q+l6kTu8|qk|7=cF$n8Js^LE8s zYv`mJ`{(pML6hiYxyM^#g0O&@F{_HLK{azexEvOX7W= zF2;8-C|JPK%$%4oxr$Y6^4>Vvr0$9HD`^o-Y0-)7f4hPPOKr=6!9C2Ua7nDmVDvb@Q8TUB>1& zGBepym~kr3^b0+aDy0?fZPJ~&ezDKYt$j$zwxb^lNIU2Ktra*f_In8#^h(&cqyIin zFHJyk*YY`infda-)f2ZW8D04}*@gd7YxBM9vRCdYGk@rclpEWpW$VUq!`|oa2Wr{9 z)Q)A7>2&6}`0#1h-)ha=xwr09p7F}wunlX{yJaB$hj$Db+i8EfHMOzaS~-67roQo& znCGG#?=2LXFo_E<2OMSDxrtxfnSQudYsh`)hR0{N+*gl&v-V4J%;ZznXXTcQWBrr;Czxp>m$B;nXz6TNtes!OdLb$1Py2WkAeHp%X`JVReB%36XH zY#atc4%N$jwk>#FZS&(Co>HU6lu}bLDd?vwkCPQb4en`PQ=6cg8Pn?%*kqo+{u1iB z)en>qS!tn-W3Id_iJ_nZuY_{@5y*q9R9fC*LMIxjvs#M8IDd|6uo&C|;6*+b6=yRaTj}Df~TDB!{pqvh7$-PrwX<58!5b&xQWX6o zO4TJU&IL2xk*XeRPHX95=fXKBTJ7$Cc`T-B*%0y{UfW>JEj7u|Nt0Uyxs^*kc4uU0 zk1KBvX-1cFPD|(LWma|m*y_5-QTs4r?z!egF1mjbCh(Ha3$@E~#WcS-$LfB~kc&)} z&sVaSnPH>!ly}_MT^?0ANi*?qrTyv-XDQMvGtTp36G~`7GTQ>KK61~WMZPIK{XJDI zWrzpoa2GuDnuy@k3!;{29xn+kylWkWbu)2nJo~Gxd;Ix$K_^l_})IV zFslSNFajeEd?tIdQ3=~eSLAVr!$?fEk{mN}yj#U(V##cnW;V4l(pXg(rwEz$miJPS z^E&D4v6>2_`xV!?YPkO_Ivk7KE924V-IaFmNRi1cQ7o@g%p0jK?XMLc#y!FNIJy5! zYmUO})Au%OqNYZM*7_?f+Q!}XL(Epm1Nm)LeA5L$hiAdVHSV|!<>a-P+MlYfKAKwG zUd{C>U0=q*kLLe4Dk7naLD=38(@V+mHM&aGW#c!?rDPr9z*c$iZS=ff2cDsX`%LZm zK1H?Tg#`gP^t9;yy8TZE+k;#7{dkKi1c0gMO?qG@HDoj{-Zu*5km7$Xh~U9i5$I0? zOKo4i1x2)MJ+Ln4!+yH@UCJhft^AtHui}J{l3uh_y9^^KjY}M|mDomivpZ3VGRb^m zI!{a!igbUFX@X-QO|@Q8=k-RP4f+>8C(g{==2@<9m=*5zC+d^~pR zUaL-sepmTr4q_d9k(A-((hvFqrM^z@j=Q+jehPX0_2I%hgHmD6`4=;%Tki`q4DKy? zkK{J#T|zwiWB#SN!G^grFNv-vsxI6Q^jwIvyJq(VKEidGSm34NkNNW4*}gpEVRKh7 zR1%kaSE}bxerxZR(eIK!#99}jTV8)z|FoZar(eY!M9VEwM|0f!W1H+Xn)WH# za+90C)H&hz8joRSK%9K{7Bdl=7?QN8_p<`$wkHf$uMa-}^b+Yx6e~^kgso%n$}e8Q zog?8BKj5PxEeiK0`sYW6Rz@bMBZC_FZ}sT5^4zxa!h>vN-HBH~8$P$Hr_0UEXjaUJ zWL#GSg-!-pGsX1L?@gmZU{GfqdQMih&;-q;O;5Tdhfpot!wjFRQng_~c#gPb3*C&6 zwx0F2+V!^33kY1pCpc{Xh>|!J?zq>sL@8;=PFnq~*6R!G5&yfHgWx>&HgW+jEFkxp zAL?Lfi{hr#2lQLTq{ngI#vrT+^Q3W%>kHklKts=>BVm+c1CI-(&IRYo+nha8!ZEaf zRcf7fZ1EMA2X*ok8SoNGf+}v#KvFQL`Yt2VTIpwc}AC(h>@x>suTH%LmNG6fA z#?D7$PG#+U74MnYW<P`yb_gZu6bFel^?N!=!S?|8w z0|(=#TUo8|q*oKA9xV4d|D7DtIh`u-)y}_Mm{_yl?A65fd%9w@O`$5Vd_8flD{SBU ztsNZkQ`1_4e&oLLE8l28C^DJCV-*#8t&J>aucE{=-ahWu<`YX<7@_P8lq%zS2DTzYOWY5r5l#^G9>u!&$ z?nx|3*6;P~P{$0R1k&IY^LT`7IP6RAgYC=Z<-i8F&hLF_^62J5?+w*|Hhz`)`WY(T z(~ORpe7!qL{)dYIvU`npBH;DvTE_1tD>Y?+ePrdz)U%bL2-5O)dLCr&G7-fDmMi)C zHV^Yc9w(4GgO`kA4QIQ7J-VqeoV!DEG%rcxUE&Mdb|2)`^A{pjXU^O} zU10mriI$@Mkh9k4oD;+{anT#^)RV$(YlXEuom1Uy`G&fi zxog0sf5S$aVep~h@Y8edKO>snS{b1#ZlB}w9DGVPvW4h?a^r1wQu#`?J0BI^7gfL3 zqfk^#sapBu{5AGjp8zSQ?(0kT0H@*~zfRq`ehz5IpSDUQjaF&H!&?Nf!R z#-OXw%x5QtMmW~sP^_#;;oOQt92Q?*vVEVxD0BH1ToRg05d+#Foe4&ngZ*yE`L@nR zwcT6fM8G%6Om{!P4oG9hN`YV5cC36Ec8mkG3I4Gq-a`+o8_z z8TsXr3TF>hifBvORtEb=UXvgyQs8`ce^y|IV_kU3x0|96v6oKGD)&rY{-8X2C-7a) zTkH3O8^D6lwUPF+8{n&B)V_P!k`|W##4SG-9SnCZXuKfaCM(QtFT9ZA6U+2nt zcSz*;;Hl-p8^U=C31l{Rvmx`u=a8^J{iAX$s_fSouafP_LmcDwn;a0VSNTv(ZbZl( zjwio9f=$%TxL+Q`|1%s{JdV$@n%Md$v>+uq5vrPEFMA%a@v%BOhgeR2w4p^*UF^@6 z3$ay2j9J_(;UE0*#Ug4bYP{!~Yfkl#_Ixu|y({-poU92gOi%6>j2E1VD1ZGrIZ5bD z{d2;rq-pcUG&lA}i;0&=+t6Ya9d@s;G&5vKen9|cLYUZF_NFYp`Y)%VQAW^0iahJzDhQ59(M$i@xj_MsR)0XbimKGNsVfk78X@ny=xm{)1m9!0-or3I%L&6Ry z@qh=4T!dMc!t(H(xUx?{)hRiFzw(7d&P44XqU;)`%zp2`2CLgSxrJbg8uBKLOh%S` z<@Sp>5ebo$@aHi9I7~$ccwn~p+X-AG6~QWYTx1$-0{&KqYZ@I`q`7$b%GTB+mDQES zEM;+}XoM?zcB*=x)|{5pE(Y~+0VgHiGKl9fGEe?9IJt;_)F|&LF(LmENjH-*_yzZr zSpTLik#(F5Opu9h0SbfO_v-;6dGe{smoo^fjEz@v=OQP=`=Y{C=bpvZ8F>?;qiThwPYbEAKHna~6-{#auxlb*Yra5?6(v3`8Co~ZNv1gSS-G31YT zMUje28?+prxpPG#A#)x%K9(G}>(ljAT0EXPP1|a-t3Jro$#;H_ zRp&yg2L&28%t}vL*dymOMvr&FI6i-W{F;IddiE$p6XlDk?2pV|=bS!oP+Tw<)%t}6M6+~NTJ@;Bc!zd;aL_w!3KN&; zS#{g2{-fw}<#ZjGwm*hIEJOBTUr=}%$$k^n7ekYhLqAD1aRr#LFs$2MPFh($?ebNh z{R@k=6iAjF06r(QIBAt5F)*v7j9UgS05Fu3v=8j!M>9o*wQ}+>55F7B=JLda`Z&93+izO3K)O%x8#=m z@cz#CpElhkoMp~mg`lZ+uaOTxPCB9XEPkgr@;4hI%G-8BIoPDCM%wz~(`RK> z^V!oDZ=)~(AbwN)4|+moGo0PB^^&vRx^rxq=$884BEg2lQ+;i5Ip%Z3H#<{yZk7AA zxxTw$jDp8Qa$PZF?zV3U3141+44)I?#z|SQ6Wlug6KtaxfXvbuTA#u3?5bV9ZPM4H zx;ORMHJe-(bAzWja_t|fAEMlG956J?C%v%e?-EMf=D53FYGt9RR+i+=O6>c-dORZ`$6y6$%d;_DfQN5Uto#rI?8x68_W zHnMP~wdmaUp^t%8ptk3`UCMmxpGG05!hxy5TX(7a*W>IFN{V9^sa&{*RF9<17UMn# z`TfN&X<;+D!EDK)%99Ap=i{E79bA;JGtVmdct4<5)6}I;w4Lfy422f-YK8H$`T7QT z{S~}frc%cCbZG9HxBOL~;W(GG>8Gc|55{P4Ff_p8iIr|y?{f!D1W@s^NY<1k5!goJ zp4A?yMaaD4<~XLTqhA*W@QOPuyBV>!XntW;f;eOnOdwC*0-z<-Q708+cwrfZ50m~w z`)$lc zy}7soBex(M68bK=ct_Ho9)?^x+#XOCDO_aaah;+sBzLn`y>GQ_+o1lyO$=SLI;48I5-7FM}^tNL{3z&z26;qXu(%&DK{i!Nd#c*=9(ucbGYP*88 zbsZ|}vj;{Y)+EjXmwVM@FxeP1Xa=5mWi<3l=wi*rVXvjNcN9i(9GqYRPBAyi(Cc;v z2;7j?C>}7#;eqRwRLDLO_)59F9(k&7G}6Rma0){VH^Dq#Wf|Nkn?9U4E%)5j3aCKD z=iFbJiE-Tj?3Ul%zJlAl-4Y^w>dqf4Jr~WADf_>(SL1z89D+_jhHzEn#Lj}#*{Lqh z!{LeV)@)45rjiWH^~SLxAN;Th$Y_#mI5kX^dfX4x72^0fX_7QBFz_IJvMwjiz(yR$JycW~$*f}pO z)eAdkQ{;m+U-rxYY%%2vRo#x->{^{GnYd$O@b|Q6&x`2sMd6;c`YT+{;dJFsTPtVq z5&LGsf=5Z5W3;8Zq7uM0(V{HetLWthjMLx1D267a|7L197vEu-!V6H#t&@3pc*+$; z6tei`t1BLUuj7x|h5TGkWR@>Re8<#11Xxt5eq%2HJhKf+^@WG%!y}j@DzXe`{vlV4 z4=xTr=N^$}UZb5TXdXRb{^u(;cDL+G3ZA;oKjZX=s1EGs+JJ9YJ+Ii}NmmsGud{j( zL~hjI{E{JdC$K!;@ow+<U>bp!dO{@W0t7{}tzprTP0IGavVWYd#+L{J;G{~Jnd$d7Wqclv07_q|< zR#CpnQNEMBh_=19)msfXg{-@_n&uEo=cT&l?uQOq9!!`DV<*`;C$u{J@;XLmVu~D} zAImPwICpZOwiMFYaw*|l`CP3*i+PM)?ZBr|gG&SSN~8NPYpDXqiOCRq-@@cAI|l*h zJb9m=+qy%H2bw6co~S$k0aiUJL11ei$_Oj?*y_ygS0|o#CA=3K^gaK}?;lp9dbhMuA`0<8EQaQI#@y{!1&sAUl9OPUF9!KVLYik(U2bg}B5>8BZzblV5Rwq}nu zuu0VLOYVqbp4A#2?R0!a6)jjyEXez4eqyK;n3$d1>6?SqCai>ViO~n^!L?PxEsTY{ zWac!Db(2r-gbCBxw)h2&B<2Vt4ku{~hS26q2ux1p(AaEKdjhIQe=0GvRv8fUx>@i8 z6nI8uXA=OX(=AddHB2$cMA-Nm#N#R;JV*c-=sBke3;^v~dJ#U#!HX`;F4f|4|0mA= z`C$q9M0FiQc=_A)NnANN5h^|rtUcS8bhW`ip{4}>y4LgV@YKpW>D=K;S?_#$h;l&k zjKI9uFV6#nc-Fg26(F#j4I=Tcvx?iyKc5JL5EAs_nIzrb>NY5rIBAJ zxOsUKl8_Lv(Ojt~iEIp90aWT4#}c;c>axa68iG$>7CG*Vt@r{Fa~FN+E-LDYHKCfB zEty$raHDLUNNU=`LEc&&+EDp9ewcVygjTe5QaZMfKR`*U+_=^tS3xQCWrgnzHE=wu zdGbwzzspPC?T%EH`WJ#djO1A6a@~6LqaSugiFbsFb?Fy8d|4=}CnBLEkSHtTepU+S ze>(;^F!re9VW_-orT}*3i&Y=$H7vy+nb{-m86ob~z_$-~)K^{*`$YPop(fa~lE z*&d((FJ$~a{+*6U=jl0}*#@TP6nXAr3HxK-S~?|+8Fg8W4z#SVUkZ@g0=wvHbKms)xpI%k|I6%{RX{>}0dG7Yj76k)= zTB%%rDMDT%JHPR*2PSL+pj!eaw^-DW7ACO}tJL43U0w+e^}-d~nl&X?a;a z?#&Op?M_)xRs}X^aDrpn;)-E7xsrNj{Y(PkVZJ@6+H~? z(vEmBQeMWdYP-6UKKAYZ`Gm`@x}cNqn3we#BD7%s;Mb<>jf0)Xvb_yky_DF`Q8Z46 z##P#iGbe>q@7wnpq~Nz&qpLU&*70ZJ*WImi)SIInO|AcWK#zg1~_Z-U+u!8exRC`FxFAb}M)D zl8%H~-G2-*>R!f8=uE6LD**KFdwITU{Ia;!d=Db{R-dlK9)?dV7{QJzZbX%-P z+aSPw5j!~S%<{dD0lJF9!cJ9pm)Yr0o&Yx)>oGS-5=lZqaDmHXtTxuLiJG9z`AD!l z%n(rc9&9fI4jzs?)$daw!MRfj%i`KXJ&{5$qD6bdf%qvF*ZM2bkVyZIw`l=Lg!mcZM=@7qW5P|7o(4Z*N+yr+r_FvM*)g97^2m$FBs92sXFTitjo6 z!wUlFp`lG{Z~F#JS??wY3=Osm8(;VNG_!2jMn4yY(dO0;T@^dp+Ih*VRp4H|!#$xI zIKA5rm^1yX8#Mq*5L8(fm$5OlaX6CI-5#4(5Z+uvvsqqcIOk!$9yR?lQf>aTb>{($ zeHPo0fLaLLrvu}b2UG)Lxe8JMt2XQY@G_t*Js^wy?{D#msvLCe;lBFa;c~!25~ELo z8cx<_yJw!{Mp4`rUMYn7Dt?0G9+7zf?L>v#jS( zKGha9XntVyobu)0SzHv5*|{3@0Oe_Ahs^&z zKoxd%Et*v5FNgV_tbEUye{QYzE%C%D>m90fPBc0!$`U&p>A#s7yq>!-k7q0$CS|0a z3`#8E4tKFhClQNi`AmP?^-Y*)&`M-WUqkKeC}zrkf7v&~&y#vTg6(9y71YRF8Fvjl-}uLXR#9zdtjah|clK~<%TZQu=jh42n&sy)EbeO+@(?5Jl>U@FXO z>yD!LR;z9)b>@OR?lefx)sFMXzbK8z&VRr}!@ZZ;*%}~d=#%ekdJwx*C?$Y0?H}Qj zuerq&Dcrykw2@H)P_O}!-tBd;w9$;_HQpiT|EelaNxm^lhBRleEXXScP*960M*Uk6 zB~hR&sq{m%I7sV?4DKJ2KYR=r^$3g&)mAXb$m;LRt>XijgeBu}Tssr8aU6`>qUf`U z@3ny_$HnYZfquQssBVkhxzUIQ>4hy+um4eBn0-t<2!A-yWeta~uxAAR_SAo}HR@oG za3!blikYnqrlLjCdZ*t_m8MYsv_gFAUG0=;AGw3`CXHbGPtQ5% z=zEzYlvCs#P$<=P9pqOm0~IkW1{?xBvpWl^k@=af;=24k!@wm~%Vpc`Nk{9DeNlNw zxUY*v#!YJZd5~?yM5&BPdYBP_fjrtmPHKzS| z1LpfOQjb1ms%{JFxF*66aS6+M~Z)FNz7|C2?9g z!$*hVdl!&+@b>9Q~5og(d zl}5>uCAzCX;qJApOC5Mz^^;inqsG(VsS$4K_L|9#*Q2F7OPn+)tN`WeTtL)?+4-*z z=4#L5_I>;ChZ@uNVHx+~d)j^Y4Z9WZlg%(y1f0U2fuL&7PUSBIuM3{+we?~D`5M97 zi}?62;*o{1=OWuM$|P4R|@G$e>RSBpAcp7?bkc>(*K4y|NIY_a1HiTU$E z?;leH7Xsfu{;ipL+%4e{ys{8|(xD%`E;JokNJY#?5Eu<>&6@;9E5W6-OnBOwKF7*x zQV-F62$ad&*HOKDvxA2VhIC=2FZ$_RCsU}w@4*!hU)}y|VZTUb(yk-nQ+dKC#wu&= zRU%hlH#o5*g<|LozaoPX)bJ$M^U1i!0n~L~asD7bO?yLiH`9$=ZT2eXe^Wq*zdA4J zFQ6Hyp1j|pdsd)<4Q7Q#RcB!;-}LpCH8uF`b0i)ICA2MggFuN72pWBvJJW~5$5V&$ z4Q!8a)+EI0(lGwz(#oa;u??%=dwjTgrQxt!+ZsOosZV*E;c!e(Q4MhJUEoD*$N-_9 z>tMa>U<0?dTJumRd=3x)@NTN-&ZglM(ro&$tw$i!GVP?6q;VZq*zUsl#D5!0?hJdM zO4;xHoO<|9q&V-%r^k@(Pmmr)#VTWvw_;Eih1>)9_*Z1Si1pGk?lK4!%d|yNJ^mGW z2}FR8vzLj+07(S&zu)$|j>PY=NG_%8+=Wign|r{Xy0dQVPz_OvnCyw%VhEOuI3OqI zazEW1m+L|9OlwC3txbc2-#nqRLa;x6b$LQggpcNm{H>F5YsHn+@2DO`$YS4u=)SQ3 z`e8&caP4J@d7ng}Yg4r=T|{_;espKvj}G7)tl~S_19td>pr*d;;%Vpl>zNsAg1H2S z+y&uBL~zVYZkV@}JZ@-laLQF&-v^L7rxH%C0)}<&pKix=Gs;58>V!r7wFP8xmq;3b z0C`mC=DE?1bk`pFvYE=B|Nbo{Z-11+0XuSqfaB)=wK6zr zhpEbW4Jcaycgp~$f$P?AIug*&iD*xX%Hwn@*(-wC5ebhe3K7SFz0InbM`NJO;5}{q zp1s4FzM$=V)sq>)jQtH_-_fQ_-xFou-jc;dSCWYaK*LlupG6fGu4B^-_abh=rjGAB zh(l`K>DA0#d4=Z5CRTkZngdYu-va$zt1Jco zx!og@jX^Z(N}QN1WOei04jb#m%Hvb3_);EX6f$o1KA>wjRQf8JK+ zx30wR&IIiMpX)=Uc(fep>Nff+qxy2*u$8$1GdsI1l)MCj9JF+yjy6mDgJm2jQ~2%q zXm;EYQ3IyBF@{tP-rCXxdN;vM>%EQ%_7enog10YqbG35ecqupO1lm;Ghut140TkK| z+hY+|*svSZ5fVT#^6XPR(b00R?pw&h+srMXhpKiMcOJv1H_%)bArJ0stC_NHWmpa{ zHh4>z0dc?7!Z)fn3lUt9LMad{p5_~#&3Og*G^D*sAuzjZ#WX{{8#Cp1z$x z#rbcxQjOZ2mF<|0izvPO4J-4XfBC|X0A{OsOiGNj?@HP^R5yH?EElXB0o>OF zDuoA=iV{}w_@!k`5_WwajB42DEJp+JoTBWoJpsf-Po{kEF_zsrO`p*W%-WmXGL`l{ z7C(N??Mzuumxz;t>J%K|`k5+)vUU}(^Dq?@+b2{z>xtaFBt^=v?8$FbU4Z?%zdoOn z%wzyo4Fv?b^4?ssxI*8SDC@s3lI-`~4t{C4%*yp*4Gm#pwS1gWHoyNT z(|T?<1CB*ASb9pjo*cGra)+xP-Ad7UM2=!5(VFFYV8HN579<>e&-#ubceQkVgKgUBa* zWmvo#U`h9Xb{94kr= zz1$vuV-ee<4#58?IjjJRDD3YN@%4jArmZnv5kBVvl#=IsJUOZZaOChjQ>Fv6O9lI4 zbH`w&fJ=h0ofc{7VR-}K1LD!$x)>@;*q?V$H@!tjm~WlUag*rQ<>6keMFcble*gp{ z|M_{>>!`b$u7m;Xcqhrz&^4uT@KKL0CGY$`2YJ=|fM$u#pdDgMe5b7T{|S*J2C+|N zM^p-+h#CGo7>qz+4>!1A4O-pHA}H(ztr#Wl=iNkyVO5~pB?}n=ZWL@S;e21Z(m{t{ zrrF^(7uD$!dPCn#R(3b)D|ek7RrT2GNb%@i@jIpA)lR^(Bs&TugX>;Td=QbBbkfM$ z@yh%L=?RR1$IVA^ad}Zhv#E<7}0wT zk55|m2uI9q2SY~sxW z3|jG>19CVQ30d(Q?K4dPTq2w*DwBBth^6|jvb2J|k^h)A5+14 zp2Cm+Uwh?l4&bDnEu67R@1fKcRkH=F0oExpCl)AF?{cYULgFoTbrZ{5|NCA_!Lk8k=@|$VzOdz-xUPJ-E@tGe;@Q&8+!0 zQXf;|XLmV$O&YD$Itxn+w`+tgdk4o-J9~Q*WgPT$J9b_J7MRaeDN7xIvcf1;$3+ZX zKd~bX&}4V={tl*E%Lr%VXDu^$)03(rM<#1{xQwQ&0VFQ-PD(tr_uyMd zj7QzJgwWbPUARt((;^kia7Y{F6)yrH#!8w`Vp0<81Hl%2gX3?Y)P!xN%hEqBjHpcl z5&oIWs{Z;q0$ruiOEbd0nNPSjoaR(Spv9{m9BSbei0^rrkffEsCQFmr(EX& z71*p;HZRP_-jJw$=-SVy5X5z4Tz3Aa8XZ5q&u0VQBv$825|P~X0wVrkH|Muc^#;vt zCSj9<;r}Y%B+b9}09;|aSi$|TkwVe`zz-5_HML>&1Ay*L!Z zerP*Lu>d(}c9mz}mxob?gfqO#tm_AtM6Ulu1gAVtE8TvVlmgNBf7#F2h?Z|t0uYGO z?r5R*&=-+Y0EyjjY5pt0RlvUkaGZt?m+6Ih|HoAd*pppID^H;)VO9xM(Sc&sb6w*! zh*oKPaoL7{I>kcJ9ZR5-N&R1{7%`~&ER|REbz=wnJlD|*r!ATZZ;3^%$J|DONK&ae zPMXig)5qs?m&whwVPMl(c*a}(v<)2RW`j@~Lq-GD1@0|;k|PFmQd%gP@zpGS_~cUG z+Id|GM0c?&74XO?dPr#r>MAOdEPDvmgg28vF7|{;fd}LGlub19^|;%th5ri%yc2rk z0vJsz`7$d;2TIk=flLE}=^-@sxGw3g&am1ovMEcwwvI%317V%)S3m`TeOWm`yc~8W zl1Y75%)}@=v!J$PO6MBs0O)NAE7JZWM%E|4e_j9_Q;JBBH5~JX6L|h|@Gq8`5YRHt z?bvrf0FCf?9auKz(XZapowot$w+VD+FkSfm z$slYSE^G)DHcFx9sydkH@@^W+EQxA8?1=2u3D*gqOyuAi804sd+X-ia{yj6#_9pAX zp7+JTS}}@%w-+4{{%vz}Gvr|pAX zLo$QD)>5py)OnXH^6QONQ2Dh3s#xf+&IA$SZ#oL7VnYdkOehc-`)Ri`D&Ah-!R3Yx z?Ia2g8~;VrR;5^4b!RdFG04VtPEF`U_iR(coxlY42_*mwZ|H7ZnEjt2o&# z$yQyM$ciJ3g04JSj8S8k$QUk4aR!n?>{?9)eR8yc_Khm`9cZ2!Fkg=oS>0;^!x3hp zHh!f`2j&FPG40%*tqJWM`~Z;Wpe?8Wy6)xUqtbj=qKf~2Ds1B-MD9Uk2ghAzhCL?od-(rH>#anvhXgM?&i$! z_NiiQ`7BQ;{KaVh9l_oUWW8FkEoY++EUYhu^)EX>3je?d^El?%iErb>Q95MX$w64~ zz(q#u-j`5nkKSkoGq3qVp`x_M3z2K@>IH6GbUFM*ja{7Litc&F9w`JHFmk^1wf4^rHiC z>e*7Ut!39pb)MxOwGfG3HzC^H*NzPCV5)Uboe(nm$znW@ceoP(4by{)Jn8_MCq)&wn5D>jx<$ z`3|5S9-jMx7dW5nH&zTnaVvN%wzq!=(4AP!Fv|MAL%DR`>W)EqX3FKF4< zRS(yu!vX>oVh>0DE7%PPmXelc=EXVpfP;Y<&i^R@vMjGL1b!rU3p-HxRa50Ohd#>L zH=pIuIVH-!6msuJyhcQ$Z3por>+G+UH&W5wS5HaC)p8M);5C(V5F!75^Ko0t2z?>iPs_}1Hu_ox;im{Kd0AZifIwR z1sc#Z5V3)RBnK#r3YVGc*Jn;O#!Hpw?Hqp!&L8f>6T5OQlj+V4{42>cSrFIf%1k+W3F}-Z zQrGR^R6D-U7jz`<_TPPE^LhLQ5^Y@TWA@|rP1gN_ikF++pV^rZL)Rt+yO`|rzsTZ5 zk2UL|0B_;Z`MhDy?HtUDU4W?SD|GM-@c0slr3#z?>k0nCCxG~(pgTS}s`|mPz(U6Z z2Agc&c-w9F;NZ+u3UGnJ2_s*%RPWF_Yi5owZ1zUSH#_v_$^PV$^yT!(l={pg$xNPf z%hq}+ndz*H+U)`RS`LS8Pt=W*#krFquir?NvYTCI0x7&U3;#dty#-KQTNfru3_{QZ zcSr(+;O>y1!4urw-KDVv4Nh<;!3pl#5IndvE{#Js8lZ7|hunMr``?*=rsh?>nR!$1 zQAyP)x;cBFb@pECTe839${8rscN?2Vm~40kuxn#Ar4i)E_~s%<^&!Tb`)vVfUn2vQ zYk-+u1bM%{sv$xZg!1&bT z{+JN)OZO}jQP{_4g|rR2-AlXL51++R6{o`Yw6OXKZ}{82 zA8cEE?(ekRqVpmLw^3nqKO=g@B@HsQ7%;J7#5go8J5C}gC(ackp1A0vR5jLQS|iLR zv_cD(D=K_a!i)|+uq0I1(Jsb@zN}!?zc6~rV%^QS@nP11=L%$y9}KWZliV*#(c=M* zuy(wrZj)k1%ddKm?%D?;gOr-@0y<@W>Ng|btjbLe;Kv-Q=6g!dFsoHWaa;M8sQHe` z0Az4kO=-8$c z&I}7AEK_9jZoHq~l;c~JnWQ#;h@3|9F?%z@W#LgJoYbhkZ#ON{zVKX@5op|Uc&ROX zIZA+aF62&WjgMHZFw zwkJPsfJmh3$I+xekD~1_4h~kkJkq8T{Sr^3Ju321D!2E@Jn{)y&5!p~w3vZjoD~Jw z-@i(F5V)hBsNp9Cy<`1qK#-t{=J(X@H^cNp<2#0F+A-;40)gZV67&!KE(2^&k&yP3 z0Jb_nr3pT&QGr9Z(Cti!Il;M|+hbAOO4~A>&87Mv_#(U{4>+m9#r@(nJ2mLE^b-I# z0VTn8)e=f&7wmdj9n@Tt%2sq)^rdYp<4v3GCGMC~xLf*)}_D=hW>X*U`jrWc-VxpP9a5@eNuP*V&^YAShp^0OM>{Zg$uTR>b-tx2+BmkAT4y-RLI=$8Z5 zQMk4X0q9=aHBC{*<(J}4yY0F~(2yruHC@Qoo~J)h6O888;nKRgP^H^*-kalvZ7|ku z$+?PM_pNjORi5y+uh31^aBK#c^H%BVRj&k_Reo=ITg6U|gTIM|umrd5mTWKGMmBP> zx=2zJefD*pC`fs_<~?Tkd*JjINp|BahSgs}l8B1eRQXU2jg70kdmMYsyAqBZkeonP z?~-+nM4Fr=&u`hKj)wUIj8B!!&#%NleJdYF2{rQu-Tf}_Q6W1|k1x9ACF(6))i}VP z4q(I%-ADR(NdYiDp1FZS;3Y+}MJ4Z!%ZItPBNJ1gm0wqL$8H?$RK6I1u*l{;%`~s5 z3|r_d`Exy{jOp4INpcfZC^sRKP^Uw+!%!(C-CD&t&GFTd}fS_&_ymXe9o zY|Q37Hq=}_I?t*T&?7uVso1lwXMo_d=7WW9wCM`ytE5{+LZ_tMSw-ai53 zBX5?2_LjY%KTN*heGcL29!I{apSVS_rLO#EY|ivo&V2$?0?O54pSxc( z3QwbJq6vOUz|OkXpEYt3pAO8O@WTcTvPJ?V?|*K=t@y2}up2)^OLZ2|JtX}+q~DCV z_Y@4sSiyLOHS2Vph|0w>Y5Rniu)IXy{6uiB@P;h9y^4c~g|4=)gtMw804^VBYA9jO zm7m)rH(I^+Y`B`N?)rXNG(kRqBWjmm9fh@5)~##RSP@-o3He|U%VkSUIHuJvA+ONb z)KpjON#(h1=cGWt1zHqkJiom@$n?IEyuHeu#_~~6pao>MCRXy8Yy*$c^sQ{G6{HB0 z=Pl4ar^ZjN0AHSpCXtLySe~j}0G}~#A1cB*(fBZz^-v4gC=-L|)7Tn|Qo+OuM*=BF zG6XdbwRDRy1Hl3QCS%VKvx7&^|7}5iQ8KT1Nn7}NGoOuy_&Wi1m%HS$3;)ADpZhOretCu!+@J9&=Y3T+9Km)OGxfMMahNd2H=n^P_ zJkoXZU^@V(z~!Qbq(g+f%v)6_<2p{1ZSr%P^2%3Vrxw_IN`7EF^8PTb$9Q5FS{<+X zB939FW-B7F8iU>jC+d4}j-xd(FPXbwHO+?=! z|J22YgIBzPX$5!&`i*X8Nx{nXfiXRc9GCa=+BGO2<-bXn)qg)IT=3lvm4B9no_WeL^dH(dybOJPhHB!@d$2+k<|YA|B3|8wE%enE$;&#IGaB6ZvrWih9wCOz@BvMpt3l5%rZ&J?|o z$cvHTFz!UIxnDouz7U_+>zYzsN2xPVs%Q@Z6#rO6onrD;UfZF(2{AxGG#4gxUUqx7 zZs)VQO}Fj4`T2GgumI1ZW|MToh7P|x?S4?^8Cgg*Ixx!_KUx?WxRl#h`J-g%G(s%iq>X) zlQ%HW7ofoil+y=?+WpHp1BIk79Z7@u`?5z%3s@v~^-EML5BlFXJn{1|H!Bf|!)Omz zUqnK}dJfPG13}Tt9r&uJt82}}KEX}|KCLnVD@5y^mz@`&Uhmd8M%;5K;#yFUp?!iu>B%C9+Z>@!hOU|qRZ$?2Pvbcl;@@AhzMX%& zPb((cKM{Q->^@})@mV!(U2_ll32bafJ~}b_p&zc(oH-6?{FiKoIZ{L~C8=Nb zzFm>xxgRbSs8L|!%9-xnSsd!ReP?Lrm15DFg<*ccP8<(|WrUaUIP4kiLe|03%^S_U zPNM20CHU-zRpEgT77eips?xCRgmR_vcu9K6#wYIN{ZIEKm3tp?Op*qllJzD z`kqEEE)I^mv-nwA#Xl>Xf#Rg;zAX1Vpx8WVWrr*<`AbGg!2IQS^zQ%_*mzB=b$%SjoBqhd?``#QyTg{3GYJ+fw*!U-k0QhAtpl&>&{9E zy@?Q`;QXs$+(Am&C~ebM6B84{*LBRg``36~eOrwqH(&O~6rOz{=%dnEb5?vzCryvI zxu5q3+odca3m6}J73juyUS%eqDdchpgfoLN_exGxyCj&x)Ni>yAQE!vM(Lemxp8xB zdZo1qns%=vD4Hvbwhz-EEF?1N);q4VvG!@c)h~8`(CwsiBJ~=wiDyO(#9vCkf4@49 zYQ=6xaBW;g+4&r8i>(DZz9ZmG#}x^E{>V~%QS!$hWal4IALLDatPccSbnGeV8?f_o zdjos^U7N$h&II; zql4|EO7<9l9o2qsJ{j=xb$Q%Q`hXtmcF+-NlY(V2g!%aphU{v z#icUo6hy@rF3%4|cyq$i>gkAQm+nFgoJ6M#OLS+B);?WaLq z6@%$zcfhm_ytl&tdVw~Qf(SaZ`TZyT01zZSrxZH84)}ShWTa|BTRJQSeWNQ@?CW`a zS++ZU@m5hgU~yZ>@r<&fFJB>@$NR7ocv5Cv9^c)qiM!fB&U=*6>FH!u2f=b4wZnEj zuN86W-qZgT-GInYMj`-jn1ESV064z;&HpkCtx~n+v^ym}EW5U3f7e!+&9S@+%t~t` z2@vVGhnIB1fXeFLaJ|^{YM?oTsOHXA0dVl?Y^kJky2M+Mj8=hE(B*Kt5T{4pX|dn= zW_|{6S{E9eD12bJvMkIkXDi!ILORc`wN_s#e*G8MF;FT26g2{b(CNayH}efuh)gH5 z5Gyj?`b?j~)3p$=r|bFl_o^7K8kEolYSe}uI1r@z4m2;B3E5W4Qhf>`saOX89HaoK zD*Y&jh z9F5@fkxA+44w0d%0!}&~>-6Gk5uM%P8oJxm!!-Cr;0L^hFOMv=09JpiKE*z#Y{*?l zD4hzM)x#LS;+qWll|+C6Uc?(HE-+Kb6ac7e@0fnITb#FPe5Q%sX#;GthY!F0m4^BV zr^c290sO+I?uDDVr2x$_dwvLjY`@uBARUlm8P zPk_de8GJ5=oA38Cbi9F``P?>fYlmnhKp~UQ;qdIkioP3$b5mbstkIN>`tijEr(Gwo zB`kXS+6Q*y15x1z+uT0o<{jU;`wo?mL9+lWz~bUua>BDz!X`#0OD9!L5pY@1^+S${ z_5Q@_e+)a0IB~7vxOjcKPbT1lSOSvM!x?#ziAfV}H@3d%RXLRGR3OM4nx4DEWHy@K z)%szVQ(dvo3u=&y=6oXtJpm&K-dl&?@;)YWbP>Yp2z#R@DbqPwlRC+$b=$_zUt3bf zKri4794{Zb`O<;Hq|;cS@>jv4zT!vtb#&6)UL;Lf(boyRmZCC`wI9C@UIa&y3b8nz z>1#Ob^_?yzac@^NFkh{#^G3A_oE~uF3xK^2(p>rpI<3DAdvcd*pLNqKFoV_`a;86T zATL4}_^~KveF5;g`uiNStiZ1pLH?%MRLeAKprSyh!H-$%uZ{~jcbzf;76qW5LLj~& zqNa-sBVI>t!sgSHvZnFvA{$$Tr`2~ywiWJTP%0r%ik5c0r&Xm2X7}B#RC~_N5CT1f zUf`iE`W(+p>4HpGQ%=9rhw{y)05rc8yk0;9Rj^<><1zHRrkX)S(TGZNE8wI7D$iWy zuiC^UTz!ymv(NR#vj3%5##mnC3cj5~QCa^6>(IRF4UnITs4dDMI3`V3A##OcAeIzJf8p*(>`jpIxea5yH+?*TsVX=9`90n9vMkm z?}Oo6_PZ?zpuTBHl5|lG<)SEf%d6@tz~8c3^1c?9ex1>JuNS-RW`?sU!@vZbLyNcI z#Dlx25J9(O4IR9Pc0dZcN;Yr(X&3j0sOVf&I?*>DS%zwo%zL^X>j0!1Kt})H$h?6j z1Mz^(2IB6kvlIO4=!{xbj@gLnucT#XE$>qxtE4)iW$v|=_n_; zmwL;}=&VoF(2r|?#sz8W=8AEuOn+bjq>oa7r-5&%!K^3Xwme@5v=+?dbwLaizUYbE z;V-wdKONdzZj1bOlh6iD_|`JH+&1LhbQvNlu`&<+IPvxS%JA>k zG4NwIgy_FDVSf6LCd`3R-2XcIQ1PdQ2kx2lf9Q1(W%=1%6I%`!F;9Nm@R!08Pjq)C zp!bpX0)Hqv3d+qt!t)_pQbQQ^uC^!xaA7)W=@{rTy{Fb~3&P49yW~&h7igK45BQMw zL?1*Ogz_q24}%%wje23Z?5{_hp)N@5oE70YLej|U$TAO;c&72>O5x-Fnj+Zvp%DI) zUwRYwkbcB8af7j#G0f?ZclM$yr@eNB9_G0jx_=abK?#NFU4(Pg9!QFn)9!V`at3q!-yN~ z%nS5ncNsSm;>0;mPHq3H`p?E8R?#9sP)@1=3Fn6Htk;(4I0jacy89YH1e(-e5 zJ$6VF5AQK6r~VyUTJkX&$V)8AkIDtXJNQgga_exT@{rwwlI@M|LHMZz-cdQ*{Xi({ zgF1d871JiJRA6hFq{|tj6q4lS!Ic z7!N(><21urm+_>2Wo)tISz?Rj=wmAJyiFEsa`t0u-~*v?G7z&wR5a;N*w>`?G!bdB zyWw0(qlXo}hb>_}tM$kujLvq$P0V$vCE9%OBO9dwwco zqQk2T;U(x%0TmC0lOG$Uc~}J^C$)E14pOD$bG~Uv$@x)>K|Zq5x*7RC>5*&nKv z8o=04>GBvGZV@H0G`}d97TGR*_$(NkLV=aAo2MOuS40@g|2)F~nd$Ssk1XyMsv&Ln z>9zt*EguY1PSSJp4=f#RD;JMeP8lNOY#_ZCv9iARH7IiyNy$PL{Mf~y@;+lCXMej& z0R3kJ)`qQOx@_X__aM)j&R5`E9VRJ$zy?odMQIHsO~3~NGtM<0c`~9x-o=R-=X^0T zEW>`|NJsFzpB$X-v(JZc(@i|E5ljIMBgLh1PC>b0QZX69ksjq)M16?5CMG)*gPJ`PWpf|(vUU`wZ-ly_S#JZ+MI>@x)naN`@1F2h5KJ2pPXDV~wV zm~^HD|NPG3M>p!oBx3SDWiUvyR6GUq$c4CN>NP%?M2Q5q-DPG)+lhIg!|=xw7{Ws5HwXJEP}_^3f8`;e3ZzDXp7f@PM?wMf2vTda(o${uFj(~yU+o( zNpeN7FtQR9ICloPi@wp5;XQYyHk`MnBl)I|DGKdv$D~|*M0B{pCrEUQ{lv2h&om&P z(GorNfuhv%wc$?(l0B$QPh5d6fdTugLDO@_$MV7Fd>D&Xcwx|pLX5U&FL#=(pU@WR zCIyR&J+^=|^tYqpCw_bi#$UiupijWC5`lw`8pb;&5syL4n1IPV z*xetuRYS}~w^m$+R-qz2frRvnl3fDQkFRYqOjGn)%lJ56Z5D5ha~55%CNOuV8b`^U zDo&qq!!RCaa6P~_q-)fkzxuW;Z#07nT;-l3p0Z$l8EnWCbNSU_`aZ=*BkbdB&nQB(E6dHu z;sF}gw{CkKuE1Co=JrR7ft%l^OYv}3>qn6OTpxbwe=HDbB^+DweN$@_*-yBpX*Kkt zNyH}j1F?qjZKWQkgeM!bgLg97D-J(*R+6r#k)xPiD)9csXr_d{#k3F** z(kg0SUSSThMJvG?x+e{xn}7hQ{o$(C3=duzIjC_j=r0frV^UQqf z@WT-7&wE=RRuPY?7dW0%UZtOb%S-Kiw8yx^Xvt0Rijz|NU8(|iZh+Mo;uA)s*N2gA z=95ag$F5X6HAbnB<2<-tB=iY4&lHTjS0(+NQZE+bFnF3W5sqJiT`z0u}7Ssl6)!G)@hMZEg!wE%ylaqcZ9riGyr(`mTBWS#PC;@8$+6mf$$CLn`2@Y+N$y296rM8l z#LbLZAs6*u>cE?1Ad#1!TP%@Ln*H>7nkdU-h_cWN!zWfzERxwN+D>RLBBUuy>bm8J zJOP<^rj`g&5QOQY^x#aENYsYhgN|DJNH)I;lbG&Xdxk#W0_i(P)PyR1eW8UoL*gG6 zXe6ZPDTWIk&Ig8Uk3j_OIvX3T%Ojsm#2;Z*RMbFGa&a5pY!f{_`t?kr1{-+svS!wK ziHv!NG<_$?CNnBk2LgxSc0)jOxxLo3xR57ZiSqc_4+do=Jl})GVKbuI;(;c@&h_-l z7gy;vKogFBO_3~=D;Z*6Qu;2%qezZ}%xe+cp+I{cS(I+!fPqyDc~t&(2u|V5!z0G* zxaT(!&yTeacH5qw_)cKIzpi74qL^v|T2I4Y{r$K!I8uHQI_TcS+rpF)1SBVQmh>_t{s(N+{KsgJ&0 zE)bP4b?E%*Sa}D{zbA>~zE|X$fp&3tlB;qP7oC@JX9Y&ys|qu`35n+9QnVm}9nI;_ zj1K{<65GTARt>B4vNN0ALM*7gfr2<;x*}-kw$J)B`qDM*QJz0kP!6q8hly6doOVPm z3EMT>ihSNN_mx9-?lEsQMm6i!iD?V(Qnd4lDifr1W(D>^q|SBAK!;=#yOLxW*i;;1 z5e8iESIF|?vKDcyUbQiIzTB^G;D}VmOr|@T{AtP;HXO#|jh{%)FC)g>mNt|2TpmnH zOB!ZQq(qW4^2Bwf;HSX*KJ1ygneR1u?^IVtlV}5u^H1Q3$3uRO%1=l*sjZI!&~v<;J{c0)BTiD;Qp;Z8 zt2w$Cv>7=sdNuNj^DPMYLr}PQ6#I#qB^A+OA@}oG*B-y#;DeK2a_+8JbJl$cE`?r)DTNf-ER=|=P-3er@{P&N3_x=AvuAe9C z_Qa4r_M`msUkdNo6_cnS^4ov8tEV*_t$#fi(g4q&QC{FN2h{(+b`5x_!C|4KQD(g4 z%$odJxsMUTZ?R0g3t^uVurpp*>E-7OjD82BoOZrjO`OI}3Vb?QPW)V{6PjpHsFON( zS#$cvY^j2p7qe;%xq9_&A4L74I}fbco&ynlUkWDX?@19FzBpE|OJHdrrQ64>`-P%q z&U^NILE&^Rr0UWOk8G_3cRS8uK=@1TCAmwivBE+tuH2$gy9LC6aH4eeX#gFn43I+$ zuV6jTOPq42&~E0+OZ;wp&B_>?WOL}9y-}CwzBh~5b4f5yPcep&S661b1=aV-DIxt{ zuOE92ck=3tJrh=syKC0;AYe|x>IHF%lNKmXaqhjq($MB+-QDAdEI6|J%IHrO(pKuh zY7qYO@JzTM&=mEQYyuiC+_=idU@~H?NiE+M3-#m%E1l#J{Ev(^HPjQgeA$wLJ7|`cny7Qsp@4VL@vdO&R<<>vN?%~d@@9?VmHVSZ`<5H zJ;hnt7D>?!i)xiVuZb+b&3d}iRQSq3eJ%T~6G|z=wXaltRMiGim(>QX?&8 zrBW%jtYdz`1KDjyv*=&re!jdiyI*+q{`UOM9#A#q@;2%5fitw0R~s>D)_cCBEEkR^gjGz$vfx3S>48uFSV^iy{wnD8Q%|Ad#B+7Ga*ox8 zimPh&BwG&AxMkFm;mSA1v9lr7gFqeM+sCRpl`V68{u3jQl+0z;YAv1#v)cZdxrzk} zj+vXbbKSNs&@ez#Lwg`O+fUGkBz3b_H(I~YrG0KrWXiVPHm@S*Cm9OQYYxMHw$3ha zwel0B5I0Y4?#Jbf?ulwGt8#LFJ8cj5R?{p^r7v;w`uZ^S<*80# z82EZ@TYT&NPkC!u*)8l|xTE@E!N}!At120epxLkJWAgygH|qsK0+QcQlz96VpV&m3 z3AK=jDpV>Tx$`G!AtaHsay)1Bu}MsD zWc~%Ei$TvYu$Fz$-()I3%4g-uqll_Gk(aEPHm$?*RMglEMD1H}8i*L51GmjcBW)8dMG694g%T!U0C_l2~y zJ1vWJ`0!q2SmNq5FCP(?`G)mIX-H`hMa@WOGE|D}Ij>Fxy-%DJEUfFZh5Gn2Tcll) zei5!jQFR3pE`Qtsu3c0M5UQs02aO0>bwm_*)T-HRN3!l<>x`!e&B8dG;$3aIhbrdC z#e)HD%LxfINr!~+En3DtbfKRr{I9B2iRgcucc3OCd=ydXsl6JMy08#)sp;xeytr63 z=e;Vg>4et3TV_Zr(n_7ABql4_F<+YAqi@6CaQ|gm~`w=PJt7q*^aRU4p#j=XJws1=@dyw-o}d0 zey-3!+wKckuHkvj%E!+8B(E!z;mK2%yjyJj_+24Ruwqq59qs%C$Hj?4l(2@e1&CL| z^g?a{duVX%UQk^iKC+9oY0TH!Ens!+LhSyOMj0RtHrlVyhmg$RnpSqx{Lgh=-xVHP zafwW0`N7TW`Hxv@N4y$S48J=d+)f^@z-TsVGjQ_UVuo3H6IetEx|gR_Y+O|hl0vBr zBLGGrah(EIbVC&xo-lLrTb8!6Ec6V^|7k9#e;6=8@Nv)qbx%aKjtVGx10Q^ zfj6nNM&hknuYIHZtQ%1|Ni69xg&0+WT0WpwCx&WxRM(;K+p5*X`4~_0xP`LR#3~f1 z=x+<+-Aa4`y(5ZUp7ha-{H^R7)|Q{DzF?LNF*~Ak+Ur9QN36M^u3`&~cioqajCO|G z;c8&DE9<)}$3BcLBo^qes=mU{6x^U08AHtasLm8Du*7N?SC^Yf&HKYSdwIG}lqMVD zoC6Is%VtF`J9+xfKIC^8VTrsR4N^4UUfHC3{vm4XS%ce3)@cs{ceO>Y7JEy}k5|0Y zS-C`~Nh6UlV#Dd-qb9(GOM8CuS#=O9O_YZ|_(B5~q8b+YGb7Xt+l1WJDMSC$38o~e z4X<+E{UR#1I_XgQV_XyUI97uPhWx}Q58j~?%RGN!7$|le9Uh;LVFwaVCMM+?FJXI} zf*F~pzgsU$(Su41axm+Me}0KQaJh`##;1-G6`#{Kt}IzI$kLr2nDc z{kpAl;}&#O4sP!`x|hXp_WIQ#rCz&g!aM5*LwHZqV|)$mM<(LV{$7%eq2x;v($7Cf zf2P2pAH(QGUZ8yAKuL(j#g##%z`p8m>U^ZEHh~z|QfnQMnc%&-cE)#hadDB0Q{wYg zJ4IKxHws|oH`QWyvm1SO=VOS;+!bwLGyeY{{J%gXZx*kYZm;w@Sp3M(jgdbxeb)WD zUz|jx&D{K}Jz0KPc=3z}@#Xd2V!@gpu36LuCglMC~8<-%j$n^^U1@ zvx=YNA>Tod5gF2J;QPn?ij8i2f2EczNY4+ExKRi-wh9uGMII59z5B;~=;wq9eVW({ z;&u}=eU70{t&O1N#9sGXv(^%UROkK4J!tImE8))9fMDpeVAsA;d3N>Z!&@gf75^A1zvI_kNOO<&HnIv4#s{Sw@x#SAs}x@ju`h?9i0y1_@WiS)y!MxN#J zr=^XC8J=DBVAk}a#Ij8+HK%LE!&x(C+xa01+ETp?+dkPvR{oo+#7R$o*BQ^_bLqzs z?IFBI>omtn9io&6XK!Fd{x5HOFIgzd=&bJyJe8u zTU%c*r&@8u{f9-&qgquweh?f^}{+Mk4Ucsi)cnShc7$39>B(Pq4NG zsql8qmBTyBTKfxON*tlO@-zXk^rMFLYR_Qbi?VFSECNbp@MkCk@uq1BEYRm&R-Iyb zmxI|+o7uh>0zStbDjdN9hL30qgc%|6}8Jc(JwU2)}l z9ZwIsCo&NXlS`CjtkV-?M*N7KZ0%_ptFJpY-)y>G7hY?=2yLKi9HW=A$jH-*#ASXf z$viAvng;%EpM7S2S<#G20_AQJB25-|bgfSIn9HwpvTYoSb7j(d31OES{{E|LwYF(~ z{b&ICs)>i7#P_CVZht1DCx6`e{zH8M+oYde5!X>rU!NFK(|u^GN*(PBZ_AT)s3pR* zM*HS5qVH~V_>+t6x6eJUf-y32&|fCvm&KbAFx@0*lO;_0c0Edlty{26`)XTEt(>iF zY*Msb>{)vqHl5P*kN32VwT@aw;5qRn%2d@?<_g%*-%Ai`wm(=|c}Kq&{jTg;AZ!q7 zl8`-BMk*MuJs9cMAE_;%e9RLv>q67?oGe}8ScLELX{2tmjUwg=fyv`2$nHL*f=zY_q$!SPp^DBeFQPA4Uy7kl_xq_RE6uLHdyLQAM zmd?2=FoQ|JG?eiE_@``wQV&)YlCHr)UFTML^G;FPn`SP}MIYxF$`IRowG>D%UY*9jBEOw5=B7K|EZ0)!yeqb4k#+Vv^r1dh-I;wIIXy z17z4S=cZL<;o0UQIoO8wO%%1s<(LdJ_-rK%s9+eVeR=yuK$a^A2VCO&xd2fEU4;pj ztjGo3sig%;yW00!gy7?c>9;Y?j4sW$?Ols8{I~>Rxzsu)tWQ2XVF1y`YZX>n=BSL7 z3a#TzM98J9MuHJKvrM+^6M_U1c8#Lz=v6Z7^Az6>g8NKR?0j6|FdN}p>a5c{np!^ z&%iSYF~Gs<x9+rXDs;4ZD^c>9K*7Fqmnzfn9a3H&QbHFhg*_?)*ZY z`OPapU}#g^VOegYnwGzx?HEt@Zuem8Bk~A>(MYE9*{gZl2;{deIH^7?)U$v#TVx95 z^DRB*?Ny4k%_{k`j%0jBO-cr{(3ULHe7DaTe7`^ZdOOO0Y6Z?^M$lwW|Co_6<^DAF zTZ{-Q(016j%15KAj8UO7!_HurX8rGFnXk1br@tAuor~g%ghLTq4nUs3*J?dk+~}aa z(qnyW)Fj8DPmMe8_Y&WCyu3IzzTJ7kHOFZ6bF4QGYIStt?77RQ)H0$1slItpt<$4< zEAinVcy?a<^r~O&&^owX2<`UWv$iKxAm58r-%EEM!D)w6(>mY&OarFHvq8PFs|MKm zZwm}4(3$%M^+@TZ(Usx~7KL%InM3;A1io7pW-~H|wFdH&mTZM`Guhf{^YKxS_Cxe} z_~sX^wxR3Ur+^u}_Fs0_zTR6DpjBrzGf|gUrI!!83QIqbhtWcHkSjhC+9PRloG`u?FEN zKiPS3f|;e8LqD+SATZrK;|O{NE?jy2I<|xivdcKCrEyMHl51+!6d2aJt{U9Msh!sx zL(eQhC4$oNfm$!j=o|)a6)d=|O~p5BG(;X!<{6zEyaN+o6#%R;XYYKbZ)ShGoGsl+ zv)Vtr=Y`lVvb%Z(xQceyXNQ0paW*@8Yf@)CKL@H7oYtc95N8gM{TGrc_vdXV3T`0=gi5YEbIz6)&7{aRlFTS$V zYhNw+%4J{p_9CkF`s%dHVKrXZ=eP^JA|!PXiHUV2S}gJppt1d~(ap-O?BEi7>|nP& zI;8I#;n@tJw0}cX#TL#yEv=r6JmfA1kwtwM`}~{$0}>aMn*S?5__}}NwQBUAu(Tf?`kT7DIjar; zXc_Iz=KtDjdqsty?6#ZLZdOvV4gU0xcFvuQwg?zN2 zPk6Fpp3TQAa^0I0^Pr>TP2VH`Oq$j7%w}y5E|NKamqxd1yrUYKVSJtG>4D5w^H?#o~EpCNh8|XVqhh>)(-PCUcYAeDZDREB8=xR z`t#$>!d7>(x#eaKujjNcK5dGihw1WYWf6QF3W3s%qM->|TzfXtM|f&Qxwg#d-G~m+ zmnBt|!4s6Y5(VRZ8o0rSxGyi&S{|gC3p}`2=Y*l0^g@?U}s2H>1!T^ z2E$coigl*;f!fqSLi_pH$x3%>4X5pDS>vaCsQ#@(u1?r$SZb#4*;Z54LGM1aZ09`% zip;Gv>>;?)k?i)w^jKr*az8k`V*y;dry~Svota$_CXDQv*uNR9x(Ve?pY7Rl z(nGWp{T^^0HfT4js#=u1gQ?KAv*eUjhj;NkNsXRp8f^?}+j_F&!2P3Yoyg4-wVwl}NJ$LqYxO{lTz{A;Ba+n$Z!Ecs4J zbaNJg2n`^nG}t3mmSovIJ8tLw;Ifv~^*!t6^8tV{*uDt(wkz`Gc}0Th-)g9ch%BgWOEU?>p~Q266sC&oOph#Yq?)k3nm(L`aR4|GSLgKP>UZ-Y~Zi7y1j> z7X?!!m>&?`83Lqu3=qd9wIewLw&;JlO#T}(r#&|2A>I+TCG8kBXn~-rvx?T=ZBHEV zj})5N-ZuNV@R9{^S?huYX_IGEESY>#%ik8fJhJz6k(SQ0PPHLowQY!!ZtW_*sOoPU z=CUJ9}jCT!5# z89Vx6nuR7HVr9(JhgI?9uXR}=zP}M4cGvgdE-bXg+$#nxUtnZmlx^`V@I_ggnzYIp8!5=c|P*g_bO6@KVE#cnj&8bY7Am)?` zz#o~A(3Lt>%4~fQigWdG{6D8qK#`eAivl>ZR#X%QGYd zs`ACOx_B?~Uzk*r&$?$fQrnBGIu>_G{%GOmkit>dqbto@t}d;zVW-fUFCV9ha;Ei= zY)NeO?Z+3Z4jp1lwzzltHvm?`ASz=uvK5Rsm(A_znpduMW77JfDz?yCfi%+$ZtfIQ ze;BEhSjK(b+*6kt=@YP{s*-mjEPpVg6y;_9-;K$v<2fC>+J4}2GbM;vE#zL+E7X_5 zq7d>rUr)4KXp9$@rv@xquhNX@oq7kNf@?FY1^xHW+yfh>5qV|lf;Ao{tM2KZo~tVk zHKsib848UIOlCIcX(X<%zTbR2#`6H3(k(jTo=fs8Pr@de)NO>>(lSn9aw6Q9T>I_& zh@tKoaXT)$4Kcg*EGm$Jx717v0*H_R=k)+y{VK*kEGl46Z(zV19K`tP+@^^!o}0z( zZP^fL%^P)O;&2dWIWeo7QN!tc{4v+5KdY|(2{TydSkjh9kmo@bLBZUA9q7OZBO%_{ z1GF3r>S__tu^}gw)Y_U4>^102-)}$0zmRoHB5U<27%N%0AO>f&*7+WL@l$aWOXOyX`Gw@BInCzn1$m8~Q)BoU_he1b=CUtCNmHn@u&7wr7905-_{ zXx&#pTDgqydBm=;;z@X{B<+?1EsXKi0FquuPEe|CcdfhglcYDFFTcOztE2zZLk z{Em&!_KtwpEtgFHc0bL{?_nnhN`%CWu3MyaS zwW@Bu$O6H1J7dAa-7&iCpWe0*9QFEXYB;lS)6r;IS<6B8l>!izUhTir4}h8g{P8>A z_(b0>a19TP&Gy^#vdcd#JKl(L%t|Crm8ChYBWXPCP+J^ybmM}0ZJZAa*Q?Ah67l@z~VD_kL59{a;VT;#8Sr}y6)U@0d9UDE%$C&Gw_Z@`W3 z-rv(G&jX@OETq&%R&M*-c5cKyd(c(mV4S?Nzi+DEvv#>38wb`Zn(sc)H;cw~yy=_x zw@LnYu*hG}5x+};-nu}f+;`Hi&Njq_ty)ygkh@!$`@QyY6oz;J0Qy5D zP!k*7hO?cjVco_A;edR|KXX(!+`?xTY|!)G{&=&h3PJUJ&yu8X6ni)DWA2-4;r!Kz z+d*!|jysWfheE9qW4;Tx8W^$rW)X-n%l_A?Co_6e*!;?!dJm;F+}9qDf7jGkVW79(=3PReonm;s=`!HDo$6T z>}`|tHm7G(mJ1NZk44T(d|xAJ$ChvvEB>!ph#iF$E6Rx3eXGb1@g$w|$Rn4uSYO%( za=poK-it9u|0zPPmUJz}7E~|3QU1%N1Lw^Kxm0ZM`=280uJ^EOJEs%_zqs?KyFJt@SPTacZd_Uq;s0Ve;I z4HW3b0)NJ1ci!7Ry@{^2wb8z2@okB?(;gSkz)F&gDfHK&g)aiV^V*Vy7y=zkf=x9( z5LkI^y>iZv#1s++Mb#R|?7}+^S*xU(4?mfS{KMDoHJ(|K16-2dJ9Hu+P$@S5x1DWZ zxAOdK5Yd z$^k}R+@TaR+_@#*f-+h4E3Iob=iPY^zW&{0dkdmP=%k)`R9#06`APKt^vOgqUFRJ} z1|J72t`B};(#%&~Bfj_U&>w@_<(|W@#`Duhff0>Rh`#ghbg z@fWcCv(hw105ptyNo2=cZ?c&NGO>QwJ#L^J6zl@LTY_t@#Lc6^w;ya)fsi$H>LdYM zf3OH-Yh;hDj*L!IMt8NfzFCm6UsMe8J?Qv-^NTV8Z{lXKWEJa1ijPaX4Rde%#P);Z z?9n=7_;;!Nk}WK(T@7t6Xr#xP8@BR?8eA+7WSO1&`!n-*hFqqrC%C7Hn@r)gy96<` z(vTdp`aIuGOY^RC#5knj8kCW-9|Ca@ekH5uZ)bAS=8u;cVNO7o((MKU!ml&;YPQrG z(~K{-@KqV%{_A?=*F9#=o31#s&cOzqc28YTC)ptD%2e)DAcGR$Q5U(*ap)yt7j{-f zeJ?)YC2@C3U=g+Sb%DK1FQfqi*_XE{WU3_sAFlj!v&*tv+s7p9&^RPvmwt|>R~eWB zP7t?7Dchq4V`$^s*jF@x+r^R;opyj9F#=l(VMh1?HvIYWbg*6qW^GOc=FUxXTs&{4 z(nANM>Ou;(cLB1WS{Rtm?DMRl8MZL=!Txni9P*!PKME>c>1qB^iHHKhQ6I9@3|Y+aB9t7x z>ze97?H?904bvf|H$i-Zb7+&Y36t(sCgrY^*{W+GXU?17;z>n)Nz(77n{r@?^)Gq? zxR_cW@UwS|8)9mc$CEF}*IwwJ>y(4uP4y5ESTC6|UjbGc5`EKa%l4B1hd@C;u^Ahh&`7DwkiUg)up)t?V1Hlb$J zZs$a}&)FtjMRX~;0-ZuDjK2}_Teu}eg?qn6Mm647Y@~~E$WpDQrJ7}&K9r#6-(Bkr z+nRAm5Q#HU-q=pOFr!Tkf3OKLdc-?x-0I*Jx3&DX^***km`5AaDO|N#OHA#seT_uq z%jmW)vvSndTH2=q9yV)2`~HO#6Hn3?dp}KeWWB6caVEN6T_EO$Z+je=illVx&s;tW zTzQt~U|;|k0YvC`io<>ZfczFA-TxW=uV(Z}z!79xXxgP@2_ObaIXoaA%xk?grmOFo z$!wlElQBs-d$Va$&We_gX)2-&d2<7iQyZ0}p0AE;_Q)EkePj_?D4UR?y@Bv4wy+WZ zJ)?tQybq*)W*akQ(M1LA0H9^iT`W@%gT|E#Eak=Hl$gTB1)AkO@=P);_aSz=QSMD| zjHX7wqWjvGMZ#^~D|}uCR?=1!3WMn#sq_S*1KB2uk82Ik^I~a}zKQ2%j)=A&`e%c& z=>9{*sYfLW7I(feUq+hHeiNn}U6nn-Lt}?sX3sCL6KM@>)$?X*v9RQeV&dks;~;{u z|5&GNJzFI&UqVOKgtWq+ASkOiD7j9V@N_|;BhZ7OO7@F%f*Lc+u$?|kxDlZCgy>Pf z4i@A0GU9gs_$S-_0UqMQo@IWyZ~+~DxN7dZG1+0ZIt=BkAj@wIT368az@Hw$l+Twi zoz9HT1vF0~lTi9mn$S*WozG5jsMt(`j_>#GeSR#t9KYm>_9F zi>`~_>-?MeeX*eSbu}vBE^kK|89k*ZcM=EQLYi#u)<>Z3^3GC>ZKa7gKXP6|^I9(r zV<3fHX4wSdM7j`qrFeFPP0)Hczy5UtSEr+LZ{%m#X<-n2g%HM8St|FGX$7@5_jyft zEOuNGDl?X#gG8E88uQy97<=Fj~sC zeXD&6^~NNOVLr50$$!m#w9)NeNxSiWQvqbvU0)uP>5OJVWFA=XDz;j>8)|}h&n7hA z7fe%C0wv(U=#>N23r+o=CoG+zSIAuDE6A4rrSK%*S{()1+ZaXGNg z;FZtO+3J`A1B=f1ri~Ug25`l!F)I$xm_vhrl?ZyPcY-opo(3)d!UGPnmeUK>q~-Ut zKR=hPzEJS+Tw!$h<4gQXPGjn*c#X4BG&`c*@1dqL8Y$esCXD%rGX2I?XeTHetg`lD z7%e3I^sF@hkW&SBmBpC<4W!0`D$QS0lgw=*nxgJzmZ(|^;R0A!7^zz z&1mbk$w|sZv6Q{Yrpji9!AtyG4yrFzvtTS_Ot1v8VPjmTJHltmv%}@SR&W zY6rG2uU(%FPvJc^=gd_PG+1K31ibzuHekX#y23k_Igvjqk5xde&r` zn=QDjr9))B^}#1wxx;Q27%_T-PO?uN4CHppt_t9r>cYw);p_VLL6E4V+;VKjXZ6nu zxvm3q$KL41@fIWk7H?kIK6?=Nxlao>Z=FhX2 z4!)dXX9i|vO4qq-vF$H Internet <---> Home Assistant con ZeroTier (172.25.215.168) <---> Red local (192.168.88.0/24) +``` + +## 2. Requisitos previos + +- Raspberry Pi ejecutando Home Assistant OS +- Acceso a la interfaz de administración de Home Assistant +- Cuenta en ZeroTier Central ([https://my.zerotier.com](https://my.zerotier.com)) + +### Información de la red en este ejemplo + +- **Red local**: 192.168.88.0/24 +- **Router local**: 192.168.88.1 +- **IP local de Home Assistant**: 192.168.88.130 +- **Red ZeroTier**: 172.25.0.0/16 +- **IP ZeroTier de Home Assistant**: 172.25.215.168 +- **IP ZeroTier del cliente Windows**: 172.25.77.122 + +## 3. Instalación de add-ons necesarios + +1. Abrir Home Assistant y navegar a **Configuración** → **Add-ons** +2. Instalar los siguientes add-ons: + - **ZeroTier One** (del repositorio Community Add-ons) + - **Advanced SSH & Web Terminal** (del repositorio Community Add-ons) +3. Configurar el add-on **Advanced SSH & Web Terminal**: + - Editar la configuración del add-on + - En la sección `packages:`, añadir `iptables` + - Guardar y reiniciar el add-on + +## 4. Configuración de ZeroTier + +1. Crear una cuenta en ZeroTier Central ([https://my.zerotier.com](https://my.zerotier.com)) si aún no tienes una +2. Crear una nueva red (botón "Create Network") +3. Anotar el Network ID (16 caracteres alfanuméricos) +4. Configurar el add-on ZeroTier en Home Assistant: + - Abrir la configuración del add-on + - Añadir el Network ID a la configuración: + + yaml + + ```yaml + networks: + - 'tu_network_id_aquí' + api_auth_token: '' + ``` + + - Guardar y reiniciar el add-on +5. Autorizar el nodo de Home Assistant en ZeroTier Central: + - Ir a la página de la red en ZeroTier Central + - Buscar el nodo de Home Assistant (aparecerá con un nombre similar a su dirección MAC) + - Marcar la casilla "Auth" para autorizarlo + - Anotar la dirección IP asignada (en este caso 172.25.215.168) + +## 5. Configuración de rutas en ZeroTier Central + +1. En la red ZeroTier, ir a la sección "Managed Routes" +2. Añadir una nueva ruta: + - **Destination**: 192.168.88.0/24 (tu red local) + - **Via**: 172.25.215.168 (la IP ZeroTier de Home Assistant) +3. Guardar los cambios + +## 6. Configuración de iptables para NAT + +1. Verificar que el forwarding de IP está habilitado: + + bash + + ```bash + cat /proc/sys/net/ipv4/ip_forward + ``` + + Debería devolver `1`. Si devuelve `0`, necesitarás habilitarlo. +2. Identificar las interfaces de red: + + bash + + ```bash + ip -4 addr show + ``` + + En este ejemplo: + - Interfaz de red local: `end0` (IP 192.168.88.130) + - Interfaz ZeroTier: `ztyxazlaou` (IP 172.25.215.168) +3. Configurar las reglas de iptables: + + bash + + ```bash + # Permitir forwarding entre ZeroTier y la red local + iptables -A FORWARD -i ztyxazlaou -o end0 -j ACCEPT + iptables -A FORWARD -i end0 -o ztyxazlaou -m state --state ESTABLISHED,RELATED -j ACCEPT + + # Configurar NAT (masquerading) para los paquetes salientes + iptables -t nat -A POSTROUTING -s 172.25.0.0/16 -d 192.168.88.0/24 -j MASQUERADE + ``` + +4. Crear un script para hacer las reglas persistentes: + + bash + +```bash + + mkdir -p /config/scripts + cat > /config/scripts/zerotier-nat.sh << 'EOF' + #!/bin/bash + # Limpiar reglas existentes para evitar duplicados + iptables -F FORWARD + iptables -t nat -F POSTROUTING + + # Configurar forwarding + iptables -A FORWARD -i ztyxazlaou -o end0 -j ACCEPT + iptables -A FORWARD -i end0 -o ztyxazlaou -m state --state ESTABLISHED,RELATED -j ACCEPT + + # Configurar NAT + iptables -t nat -A POSTROUTING -s 172.25.0.0/16 -d 192.168.88.0/24 -j MASQUERADE + + # Registrar que el script se ha ejecutado + echo "ZeroTier NAT configurado el $(date)" >> /config/zerotier-nat.log + EOF + + chmod +x /config/scripts/zerotier-nat.sh +``` + +5. Crear una automatización en Home Assistant para ejecutar el script al inicio: + - Ir a **Configuración** → **Automatizaciones** + - Crear una nueva automatización: + - Disparador: "Start-up: Home Assistant started" + - Acción: "Call service: Shell command: Execute" + - Comando: `/config/scripts/zerotier-nat.sh` + - Añadir el shell command en configuration.yaml: + + yaml + + ```yaml + shell_command: + zerotier_nat: /config/scripts/zerotier-nat.sh + ``` + + +## 7. Configuración del cliente Windows + +1. Descargar e instalar ZeroTier One desde [https://www.zerotier.com/download/](https://www.zerotier.com/download/) +2. Unirse a la red ZeroTier: + - Hacer clic derecho en el icono de ZeroTier en la bandeja del sistema + - Seleccionar "Join Network" + - Introducir el Network ID y hacer clic en "Join" +3. Autorizar el nodo del cliente en ZeroTier Central +4. Verificar que se le ha asignado una IP en la red ZeroTier + +## 8. Pruebas y verificación + +1. Desde el cliente Windows, abrir un símbolo del sistema (CMD) y probar la conectividad: + + ``` + ping 172.25.215.168 + ``` + + Debería responder la instancia de Home Assistant. +2. Probar la conectividad con la IP local de Home Assistant: + + ``` + ping 192.168.88.130 + ``` + + Debería responder también. +3. Probar la conectividad con otros dispositivos de la red local: + + ``` + ping 192.168.88.1 + ``` + + Debería responder el router u otros dispositivos de la red local. +4. Verificar que puedes acceder a servicios en la red local a través de sus direcciones IP. + +## 9. Solución de problemas comunes + +### No hay conectividad con la red ZeroTier + +- Verificar que ZeroTier está en ejecución en ambos extremos +- Verificar que ambos nodos están autorizados en ZeroTier Central +- Verificar que no hay firewalls bloqueando el tráfico UDP en el puerto 9993 + +### Se puede hacer ping a la IP ZeroTier de Home Assistant pero no a la red local + +- Verificar que la ruta está correctamente configurada en ZeroTier Central +- Verificar que el forwarding de IP está habilitado +- Verificar que las reglas de iptables están correctamente configuradas +- Comprobar los logs del sistema para errores relacionados con iptables + +### Las reglas de iptables no persisten después de un reinicio + +- Verificar que el script se está ejecutando correctamente al inicio +- Comprobar los logs en `/config/zerotier-nat.log` +- Asegurarse de que la automatización de Home Assistant está configurada correctamente + +### Conexión intermitente + +- Verificar la calidad de la conexión a Internet +- Comprobar si hay otros servicios compitiendo por el ancho de banda +- Verificar si hay limitaciones de tráfico en el router + +--- + +Este proceso te permite acceder de forma segura a tu red local a través de ZeroTier desde cualquier lugar, sin necesidad de abrir puertos en tu router ni configurar DNS dinámico. \ No newline at end of file diff --git a/01-Documentation/SIDEL/SIDEL - FLD.md b/01-Documentation/SIDEL/SIDEL - FLD.md index 41c66ac..354e76b 100644 --- a/01-Documentation/SIDEL/SIDEL - FLD.md +++ b/01-Documentation/SIDEL/SIDEL - FLD.md @@ -1,8 +1,11 @@ 15 del messe enviare FDL +Nel Project Code va aggiunto il codice   EXMU01U==F==  quando è Filler e  EXMU01U==M== Quando è Mixer +![[Pasted image 20250417164020.png]] Password 9991 Password 737373 -SIDEL Password PLC Sidel123 \ No newline at end of file +SIDEL Password PLC Sidel123 + diff --git a/01-Documentation/SIDEL/adjuntos/Pasted image 20250417164020.png b/01-Documentation/SIDEL/adjuntos/Pasted image 20250417164020.png new file mode 100644 index 0000000000000000000000000000000000000000..f184d076707f31512ced9c740c7593afe7997031 GIT binary patch literal 24452 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 L>A?y$Z9@JF0y9R7 literal 0 HcmV?d00001 diff --git a/01-Documentation/Windows/WSL - Uninstall.md b/01-Documentation/Windows/WSL - Uninstall.md new file mode 100644 index 0000000..fff6cfb --- /dev/null +++ b/01-Documentation/Windows/WSL - Uninstall.md @@ -0,0 +1,12 @@ + +**3.** **Remove WSL from Windows 11** + +1. Open Settings. +2. Click on System. +3. Click the Optional features page. +4. Click the “More Windows features” option under the “Related settings” section. +5. Clear the “Virtual Machine Platform” option. +6. Clear the “Windows Subsystem for Linux” option. +7. Click the OK button to uninstall the features. + +[How to uninstall WSL on Windows 11 - Pureinfotech](https://pureinfotech.com/uninstall-wsl-windows-11/) diff --git a/03-VM/22 - 9.3841 - Sidel - Tilting/Software/FC622 - FC Scale Speed wGap.md b/03-VM/22 - 9.3841 - Sidel - Tilting/Software/FC622 - FC Scale Speed wGap.md index 091e161..6b9ef11 100644 --- a/03-VM/22 - 9.3841 - Sidel - Tilting/Software/FC622 - FC Scale Speed wGap.md +++ b/03-VM/22 - 9.3841 - Sidel - Tilting/Software/FC622 - FC Scale Speed wGap.md @@ -30,4 +30,17 @@ ELSIF #Type = #"Scaled with gap" THEN ELSE #"Speed Scaled" := 0.0; END_IF; +``` + + +```pascal + +IF #"Bottles From Start Infeed" < #"Fixed Paramters"."Number of Slots on Main Chain" / 4 OR #Status."Low Speed" THEN + #Status."Chain Request Speed" := #Recipe."Low Speed"; +ELSIF #Status."High Speed" AND #"Bottles From Start Infeed" > #"Fixed Paramters"."Number of Slots on Main Chain" THEN + #Status."Chain Request Speed" := #Recipe."Over Speed"; +ELSE + #Status."Chain Request Speed" := #Recipe."Production Speed"; +END_IF; + ``` \ No newline at end of file diff --git a/04-SIDEL/00 - MASTER/MIXER/SIDEL - Mixer - Equivalences.md b/04-SIDEL/00 - MASTER/MIXER/SIDEL - Mixer - Equivalences.md index b41cd80..6e0ac0f 100644 --- a/04-SIDEL/00 - MASTER/MIXER/SIDEL - Mixer - Equivalences.md +++ b/04-SIDEL/00 - MASTER/MIXER/SIDEL - Mixer - Equivalences.md @@ -20,3 +20,8 @@ NORGREN Valve has Analog Input and Ouput to control PCM306 - Gas Pressure Inject NORGREN : Gasatura Produtto CO2 +P_gPPM303_VFC_StatusWord := PEW Inverter P3 +P_gPPM303_VFC_ActualValue := PEW Inverter P3 + 2 +P_gPPM303_VFC_ControlWord := PAW Inverter P3 +P_gPPM303_VFC_Refvalue := PAW Inverter P3 + 2 + diff --git a/04-SIDEL/00 - MASTER/MIXER/SIDEL - Mixer - Master - IO Tags.md b/04-SIDEL/00 - MASTER/MIXER/SIDEL - Mixer - Master - IO Tags.md index 4736917..85f2554 100644 --- a/04-SIDEL/00 - MASTER/MIXER/SIDEL - Mixer - Master - IO Tags.md +++ b/04-SIDEL/00 - MASTER/MIXER/SIDEL - Mixer - Master - IO Tags.md @@ -1,5 +1,5 @@ -| Tag Name | Type | Data Type | Tag Comment | +| Master Tag | Type | Data Type | Description | | -------------------------------- | ------ | --------- | ----------------------------------------------------------------------- | | AI_CIP_CIP_Total_Time | Inputs | Int | "AI_CIP_CIP_Total_Time" | | AI_CIP_SetPoint_Temeperature | Inputs | Byte | "AI_CIP_SetPoint_Temeperature" | diff --git a/04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/E5.007363 - Modifica O&U - SAE196 - Notes.md b/04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/E5.007363 - Modifica O&U - SAE196 - Notes.md index 027cd4d..35e7655 100644 --- a/04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/E5.007363 - Modifica O&U - SAE196 - Notes.md +++ b/04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/E5.007363 - Modifica O&U - SAE196 - Notes.md @@ -9,3 +9,9 @@ * Conduct. SMARTEC S - RISING - 250P1 - Node 16 * Conduct. SMARTEC S - SANITISING - 250P4 - Node 17 + + +* Check M1509.3 + * DI_AuxVoltage_On ? +* + diff --git a/04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/SAE196 - IO Adapted.md b/04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/SAE196 - IO Adapted.md new file mode 100644 index 0000000..b0b62e6 --- /dev/null +++ b/04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/SAE196 - IO Adapted.md @@ -0,0 +1,84 @@ +| IO | Master Tag | PLC Description | Master Description | Certeza | +| ------ | -------------------------- | ------------------------------------------------------------------ | ------------------------------------------- | ------- | +| I0.0 | DI_AuxVoltage_On | AUXILIARY CIRC. ON AUSILIARI INSERITI | Electrical Panel Restored | Alta | +| I0.1 | DI_PB_HornReset | SIREN RESET RESET SIRENA | PB Horn Reset | Alta | +| I0.2 | DI_AlarmReset | RESET RESET | PB Machine Reset | Alta | +| I0.3 | DI_PB_Machine_Stop | MACHINE STOP ARRESTO MACCHINA | PB Machine Stop | Alta | +| I0.4 | DI_PB_Machine_Start | MARCIA MACCHINA MACHINE START | PB Machine Start | Alta | +| I0.5 | DI_Emergency_Pilz_On | PRESENZA TENSIONE VOLTAGE PRESENCE | Pilz Emergency | Media | +| I0.6 | DI_LSN301L | SONDA LIVELLO MINIMO DEAREATORE 1 DEARETOR 1 MINIMUM LEVEL PROBE | LSN301_L - Deaireator Tank Minimun Level | Alta | +| I0.7 | DI_Min_Syrup_Level | SONDA LIVELLO MINIMO SCIROPPC SYRUP MINIMUM LEVEL PROBE | - Syrup Tank Minimun Level | Alta | +| I1.0 | DI_LSM302L | SONDA LIVELLO MINIMO SERB.STOCCAGGIC STORE TANK MIN LEVEL PROBE | LSM302_L - Product Tank Minimun Level | Alta | +| I1.5 | DI_RMM301_Closed | VALVOLA CHIUSA VM1 CLOSED VALVE VM1 | RMM301 - Feedback OFF (VM1WATER) | Alta | +| I1.6 | DI_RMP302_Closed | CLOSEDVALVEVM2 VALVOLA CHIUSA VM2 | RMP302 - Feedback OFF (VM2 SYRUP) | Alta | +| I1.7 | DI_RMM303_Closed | VALVOLA CHIUSA VM3 CLOSED VALVE VM3 | RMM303 - Feedback OFF (VM3 CO2) | Alta | +| I2.0 | DI_PPN301_Ovrld | WATER PUMP OVERLOAD TERMICO POMPA ACQUA | PPN301 - Deaireator Pump Overload | Alta | +| I2.1 | DI_PPN301_SoftStOvr | AVARIA POMPA ACQUA WATER PUMP FAULT | PPN301 - Deaireator Pump Softstarter Ready | Media | +| I2.2 | DI_PPP302_Ovrld | SYRUP PUMP OVERLOAD TERMICO POMPA SCIROPPC | PPP302 - Syrup Pump Overload | Alta | +| I2.3 | DI_PPP302_Contactor | AVARIA POMPA SCIROPPO SYRUP PUMP FAULT | PPP302 - Syrup Pump Feedback | Media | +| I2.4 | DI_PPM303_Ovrld | OVERPRESS.PUMP OVERLOAD TERMICO POMPA SOVRAPRES. | PPM303 - Product Pump Overload | Alta | +| I2.5 | DI_PPM303_Contactor | OVERPRESS.PUMP FAULT AVARIA POMPA SOVRAPRES. | PPM303 - Product Pump Feedback | Media | +| I3.5 | DI_UPSAlarm | ALLARME UPS UPS ALARM | UPS Alarm | Alta | +| I3.6 | DI_UPSsupply | ALIMENTAZIONE DA BATTERIE BATTERY POWER SUPPLY | UPS supply OK | Alta | +| I3.7 | DI_UPSBatteryReady | BATTERIA TAMPONE PRONTA BUFFER BATTERY READY | UPS Battery ready | Alta | +| I4.3 | DI_Emergency_Pressed | ALARM ENABLING ABILITAZIONE ALLARME | Electrical Panel Emergency Button | Media | +| I4.4 | DI_Log_Sidel | ABILITAZIONEALLARME ALARMENABLING | Log son usuario Sidel | Baja | +| I5.0 | DI_SyrRoom_SyrPump_Running | POMPA SALA SCIROPPI INMARCIA SYRUPS ROOM PUMP RUN | From Syrup Room - Syrup Pump Running | Alta | +| I7.1 | DI_Air_InletPress_OK | AIR PRESSURE GAUGE PRESSOSTATO ARIA | Air Pressure Switch | Alta | +| I7.2 | DI_HVP301_Sensor | SENSORE VALVOLA SCARICO SCIROPPC SYRUP DISCHARGE VALVE SENSOR | GCP301 - Manual Syrup Valve Closed (NO) | Alta | +| I7.3 | DI_FSS301 | FLOW GAUGE FLUSSOSTATO | FSS301 - Local Cip Return Flow Switch | Alta | +| Q0.0 | DO_HMIPowerSupply | RIPRISTINO ALIMENTAZIONE HMI HMI POWER SUPPLY RESTORE | Cut Power to PC | Alta | +| Q1.0 | DO_SyRm_SyrupReques | RICHIESTA SCIROPPO SYRUP REQUEST | To syrup Room Syrup Request | Alta | +| Q1.1 | DO_SyrupRoomWaterReq | WATER REQUEST RICHIESTA ACQUA | Syrup Room - Water Pump Request | Alta | +| Q7.0 | DO_Horn | ALLARME ACUSTICO ACOUSTIC ALARM | DO_Horn | Alta | +| Q7.1 | DO_PB_Green_Lamp | MACHINE START MARCIA MACCHINA | PB Machine Start Lamp | Alta | +| Q7.2 | DO_Red_Lamp | MACHINE ALARM ALLARME MACCHINA | DO_Red_Lamp | Alta | +| Q7.3 | DO_Yellow_Lamp | ROTAT. LAMP ROTALLARM | DO_Yellow_Lamp | Alta | +| Q7.4 | DO_PPN301_Run | COMANDO POMPA ACQUA WATER PUMP CONTROL | DO_PPN301_SoftStartPower | Alta | +| Q7.5 | DO_PPP302_Run | SYRUP PUMP CONTROL COMANDO POMPA SCIROPPO | DO_PPP302_Run | Alta | +| Q7.6 | DO_PPM303_Run | COMANDO POMPA SOVRAPRESSIONE OVERPRESSURE PUMP CONTROL | DO_PPM303_Run | Alta | +| A16.0 | DO_RVM301 | SFIATO SATURATORE | MIX - Deaireator Level Control | Media | +| A16.1 | DO_AVN348 | DEAREAZIONE ACQUA | MIX - Deaireator Inlet | Alta | +| A16.2 | DO_AVM382 | RICIRCOLO PRODOTTO | Mix - Product Recirculation though chiller | Alta | +| A16.3 | DO_AVN373 | SCARICO DEAREATORE | MIX - Deaireator 2 Drain | Alta | +| A16.4 | DO_AVN374 | SCARICO SATURATORE | MIX - Deaireators Connection Drain | Alta | +| A16.5 | DO_AVP363 | SCARICO SCIROPPO | MIX - Syrup Line In H2O | Media | +| A16.6 | DO_AVS332 | DIVOSFERA SATURATORE | MIX - CIP Wash Venturi | Media | +| A16.7 | DO_AVN349 | TROPPOPIENO DEAREATORE | MIX - Deaireator Bypass 1 | Media | +| A17.0 | DO_AVS337 | TROPPO PIENO SATURATORE | MIX - CIP Drain | Media | +| A17.1 | DO_AVM396 | SFIATO ARIA POMPA PRODOTTO | MIX - Steril Air Inlet | Media | +| A17.2 | DO_AVS331 | SCARICO SERPENTINA | MIX - CIP Venturi | Media | +| A17.3 | DO_AVM317_1 | RICICLO SCIROPPO START-UP | MIX - CIP to Syrup Tank Inlet | Alta | +| A17.5 | DO_AVM341 | INTERCETTAZIONE INIETT.CO2 | MIX - CO2 Inlet | Alta | +| A17.6 | DO_AVN329 | DIVOSFERADEAREATORE | MIX - Deaireator 2 Tank Spray Ball | Alta | +| A17.7 | DO_AVN325 | DEAREAZ. ACOUA IN RISCACOUO | MIX - Vacuum Pump PPN304 Water In | Alta | +| A18.0 | DO_AVS331 | ASPIRAZIONE VENTURI | MIX - CIP Venturi | Alta | +| A18.1 | DO_AVS332 | LAVAGGIOVENTURI | MIX - CIP Wash Venturi | Alta | +| A18.2 | DO_AVS333 | INGRESSO SANIFICANTE 1 | MIX - CIP Caustic | Alta | +| A18.3 | DO_AVS334 | INGRESSO SANIFICANTE 2 | MIX - CIP Acid | Alta | +| A18.4 | DO_AVS335 | INGRESSO SANIFICANTE 3 | MIX - CIP Peracetic Acid | Alta | +| A18.5 | DO_AVS336 | RICIRCOLO SANIFICANTE | MIX - CIP Recirculation | Alta | +| A18.6 | DO_AVS337 | SCARICO SANIFICANTE 1 | MIX - CIP Drain | Alta | +| A18.7 | DO_AVS338 | SCARICO SCAMBIATORE | MIX - CIP Heater | Alta | +| A19.1 | DO_AVP317_1 | DIVOSFERA SCIROPPO | MIX - CIP To Syrup | Alta | +| A19.2 | DO_EV67_SyrupLineDrain | SCARICO TUBO SCIROPPO | MIX - N10_O101_ | Media | +| A19.3 | DO_AVN374 | SCARICO SATURATORE | MIX - Deaireators Connection Drain | Media | +| A20.0 | DO_RVN301_Level | GALLEGGIANTE DEAREATORE 1 | MIX - Deaireator Level Control | Alta | +| A20.1 | DO_AVN347 | INVASAMENTODEAREATORE1 | MIX - Deaireator Tank Start CO2 Injection 1 | Media | +| A20.2 | DO_EV03_SyrupLvlCtrl | GALLEGGIANTE SCIROPPO | MIX - N10_O06_ | Media | +| A20.3 | DO_EV04_SyrupFillUp | INVASAMENTO SCIROPPO | MIX - N10_O07_ | Media | +| PEW100 | P_AI_LTM302 | LIVELLO SERBATOIO DI STOCCAGGIO STORAGE TANK LEVEL | LTM302 - Product Tank Level | Alta | +| PEW102 | P_AI_PTM304 | SENSORE PRESSIONE SERB.DI STOCCAGGIO STORAGE TANK PRESSURE SENSOR | PTM304 - Product Tank Pressure | Alta | +| PEW104 | P_AI_RVN304 | CONTR.PORTATA CO2 PER DEAREAZIONE AIR VACUUM CO2 FLOW CONTROL | RVN304 - Deaireation Valve | Alta | +| PEW106 | P_AI_PCM306 | CONTROLLO PRESSIONE SERBATOIO CO2 CO2 TANK PRESSURE CONTROL | PCM306 - Gas Pressure Injection | Alta | +| PEW108 | P_AI_TTM306 | PRODUCT TEMPERATURE SENSOR SENSORE TEMPERATURA PRODOTTO | TTM306 - Chiller Temperature | Alta | +| PEW112 | P_AI_TTN321 | TEMP. H2O DEAREATORE H2O DEAREATOR TEMP. | TTN321 - Deaireator Temperature | Alta | +| PEW114 | P_AI_RVM301 | NORGREN PV VLAVE ANALOG OUTPUT USCITA ANALOGICA VALVOLA NORGREN PV | RVM301 - Product Tank Pressure Valve | Alta | +| PAW100 | P_AO_RMM301 | VALVOLA MOTORIZZATA ACQUA WATER MOTOR VALVE | RMM301 - Water Flow Control | Alta | +| PAW102 | P_AO_RMP302 | VALVOLA MOTORIZZATA SCIROPPO SYRUP MOTOR VALVE | RMP302 - Syrup Flow Control | Alta | +| PAW104 | P_AO_RMM303 | VALVOLA MOTORIZZATA CO2 CO2 MOTOR VALVE | RMM303 - Gas Flow Control | Alta | +| PAW108 | P_AO_RVN304 | AIR VACUUM CO2 FLOW CONTROL CONTR.PORTATA CO2 PER DEAREAZIONE | RVN304 - Deaireation Valve | Alta | +| PAW110 | P_AO_RVM319 | PRODUCT TEMPERATURE REGULATION REGOLAZIONE TEMPERATURA PRODOTTO | RVM319 - Chiller Temperature control | Alta | +| PAW112 | P_AO_RVS318 | SANIT. TEMP. CONTROL CONTROLLO TEMPERATURA SANIFICANTE | RVS318 - Local Cip Heating Valve | Alta | +| PAW114 | P_AO_RVM301 | USCITA ANALOGICA VALVOLA NORGREN SP NORGREN SP VALVE ANALOG OUTPUT | RVM301 - Product Tank Pressure Valve | Alta | +| PAW122 | P_AO_PCM306 | CONTROLLO PRESSIONE SERBATOIO CO2 CO2 TANK PRESSURE CONTROL | PCM306 - Gas Injection Pressure Control | Alta | \ No newline at end of file diff --git a/04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/SAE196 - IO.md b/04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/SAE196 - IO.md new file mode 100644 index 0000000..11574a3 --- /dev/null +++ b/04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/SAE196 - IO.md @@ -0,0 +1,170 @@ + +### IM155 IO +*** + +| Master TAG | IO | Sensor | Description | Descripcion | +| :--------: | :----: | :------: | ------------------------------------------------------------------ | --------------------------------- | +| | I0.0 | | AUXILIARY CIRC. ON AUSILIARI INSERITI | | +| | I0.1 | 300S2 | SIREN RESET RESET SIRENA | | +| | I0.2 | 300S3 | RESET RESET | | +| | I0.3 | 300S4 | MACHINE STOP ARRESTO MACCHINA | | +| | I0.4 | 300S5 | MARCIA MACCHINA MACHINE START | | +| | I0.5 | | PRESENZA TENSIONE VOLTAGE PRESENCE | | +| | I0.6 | | SONDA LIVELLO MINIMO DEAREATORE 1 DEARETOR 1 MINIMUM LEVEL PROBE | | +| | I0.7 | | SONDA LIVELLO MINIMO SCIROPPC SYRUP MINIMUM LEVEL PROBE | | +| | I1.0 | 301B1 | SONDA LIVELLO MINIMO SERB.STOCCAGGIC STORE TANK MIN LEVEL PROBE | | +| | I1.5 | | VALVOLA CHIUSA VM1 CLOSED VALVE VM1 | | +| | I1.6 | | CLOSEDVALVEVM2 VALVOLA CHIUSA VM2 | | +| | I1.7 | | VALVOLA CHIUSA VM3 CLOSED VALVE VM3 | | +| | I2.0 | 40Q2 | WATER PUMP OVERLOAD TERMICO POMPA ACQUA | | +| | I2.1 | 40Q2 | AVARIA POMPA ACQUA WATER PUMP FAULT | | +| | I2.2 | 42Q2 | SYRUP PUMP OVERLOAD TERMICO POMPA SCIROPPC | | +| | I2.3 | 42Q2 | AVARIA POMPA SCIROPPO SYRUP PUMP FAULT | | +| | I2.4 | 45Q2 | OVERPRESS.PUMP OVERLOAD TERMICO POMPA SOVRAPRES. | | +| | I2.5 | 45Q2 | OVERPRESS.PUMP FAULT AVARIA POMPA SOVRAPRES. | | +| | I3.5 | 303A0/1 | ALLARME UPS UPS ALARM | | +| | I3.6 | 303A0/1_ | ALIMENTAZIONE DA BATTERIE BATTERY POWER SUPPLY | | +| | I3.7 | 303A0/1 | BATTERIA TAMPONE PRONTA BUFFER BATTERY READY | | +| | I4.3 | | ALARM ENABLING ABILITAZIONE ALLARME | | +| | I4.4 | | ABILITAZIONEALLARME ALARMENABLING | | +| | I5.0 | 305U1 | POMPA SALA SCIROPPI INMARCIA SYRUPS ROOM PUMP RUN | | +| | I7.1 | 307S2 | AIR PRESSURE GAUGE PRESSOSTATO ARIA | | +| | I7.2 | 307S3 | SENSORE VALVOLA SCARICO SCIROPPC SYRUP DISCHARGE VALVE SENSOR | | +| | I7.3 | 307F4 | FLOW GAUGE FLUSSOSTATO | | +| | | | | | +| | Q0.0 | | RIPRISTINO ALIMENTAZIONE HMI HMI POWER SUPPLY RESTORE | | +| | Q1.0 | | RICHIESTA SCIROPPO SYRUP REQUEST | | +| | Q1.1 | | WATER REQUEST RICHIESTA ACQUA | | +| | Q7.0 | 327H1 | ALLARME ACUSTICO ACOUSTIC ALARM | | +| | Q7.1 | 300S5 | MACHINE START MARCIA MACCHINA | | +| | Q7.2 | 300S3 | MACHINE ALARM ALLARME MACCHINA | | +| | Q7.3 | 327HO | ROTAT. LAMP ROTALLARM | | +| | Q7.4 | 327K5 | COMANDO POMPA ACQUA WATER PUMP CONTROL | | +| | Q7.5 | 327K6 | SYRUP PUMP CONTROL COMANDO POMPA SCIROPPO | | +| | Q7.6 | 327K7 | COMANDO POMPA SOVRAPRESSIONE OVERPRESSURE PUMP CONTROL | | +| | | | | | +| | A16.0 | FESTO | SFIATO SATURATORE | CARBONATOR BLOW-OFF | +| | A16.1 | FESTO | DEAREAZIONE ACQUA | WATER DEAREATOR | +| | A16.2 | FESTO | RICIRCOLO PRODOTTO | PRODUCT RECYCLE | +| | A16.3 | FESTO | SCARICO DEAREATORE | DEAREATOR BLOW-OFF | +| | A16.4 | FESTO | SCARICO SATURATORE | CARBONATOR DISCHARGE | +| | A16.5 | FESTO | SCARICO SCIROPPO | SYRUP BLOW-OFE | +| | A16.6 | FESTO | DIVOSFERA SATURATORE | CARBONATOR SPRAY BALL | +| | A16.7 | FESTO | TROPPOPIENO DEAREATORE | DEAREATOR OVERLOAD | +| | A17.0 | FESTO | TROPPO PIENO SATURATORE | CARBONATOR OERLOAD | +| | A17.1 | FESTO | SFIATO ARIA POMPA PRODOTTO | PRODUCT PUMP AIR BLOW-OFF | +| | A17.2 | FESTO | SCARICO SERPENTINA | TUBULAR EL. BLOW-OFF | +| | A17.3 | FESTO | RICICLO SCIROPPO START-UP | SYRUP RECIRCULATING START-UP | +| | A17.5 | FESTO | INTERCETTAZIONE INIETT.CO2 | INTERCEPTION CO2 INJECTOR I | +| | A17.6 | FESTO | DIVOSFERADEAREATORE | DEAREATOR SPRAY BALL | +| | A17.7 | FESTO | DEAREAZ. ACOUA IN RISCACOUO | RINSING WATER R DEAREATOR | +| | A18.0 | FESTO | ASPIRAZIONE VENTURI | VENTURI SUCTION | +| | A18.1 | FESTO | LAVAGGIOVENTURI | VENTURI WASHING | +| | A18.2 | FESTO | INGRESSO SANIFICANTE 1 | SANITIZING INFEED 1 | +| | A18.3 | FESTO | INGRESSO SANIFICANTE 2 | SANITIZING INFEED 2 | +| | A18.4 | FESTO | INGRESSO SANIFICANTE 3 | SANITIZING INFEED 3 | +| | A18.5 | FESTO | RICIRCOLO SANIFICANTE | SANITIZING SOLUTION RECIRCULATION | +| | A18.6 | FESTO | SCARICO SANIFICANTE 1 | SANITIZING BLOW-OFF 1 | +| | A18.7 | FESTO | SCARICO SCAMBIATORE | EXCHANGER DISCHARGE | +| | A19.1 | FESTO | DIVOSFERA SCIROPPO | SYRUP SPRAY BALL | +| | A19.2 | FESTO | SCARICO TUBO SCIROPPO | SYRUP PIPE BLOW-OFE | +| | A19.3 | FESTO | SCARICO SATURATORE | CARBONATOR DISCHARGE | +| | A20.0 | FESTO | GALLEGGIANTE DEAREATORE 1 | DEAREATOR 1 FLOATER | +| | A20.1 | FESTO | INVASAMENTODEAREATORE1 | DEAREATOR 1 MAX. FILL | +| | A20.2 | FESTO | GALLEGGIANTE SCIROPPO | SYRUP FLOATER | +| | A20.3 | FESTO | INVASAMENTO SCIROPPO | SYRUP MAX. FILL | +| | | | | | +| | PEW100 | 258B1 | LIVELLO SERBATOIO DI STOCCAGGIO STORAGE TANK LEVEL | | +| | PEW102 | 254B1 | SENSORE PRESSIONE SERB.DI STOCCAGGIO STORAGE TANK PRESSURE SENSOR | | +| | PEW104 | 270B1 | CONTR.PORTATA CO2 PER DEAREAZIONE AIR VACUUM CO2 FLOW CONTROL | | +| | PEW106 | 254B4 | CONTROLLO PRESSIONE SERBATOIO CO2 CO2 TANK PRESSURE CONTROL | | +| | PEW108 | 256U1 | PRODUCT TEMPERATURE SENSOR SENSORE TEMPERATURA PRODOTTO | | +| | PEW112 | 255U1 | TEMP. H2O DEAREATORE H2O DEAREATOR TEMP. | | +| | PEW114 | 259U1 | NORGREN PV VLAVE ANALOG OUTPUT USCITA ANALOGICA VALVOLA NORGREN PV | | +| | | | | | +| | PAW100 | 251U4 | VALVOLA MOTORIZZATA ACQUA WATER MOTOR VALVE | | +| | PAW102 | 252U4 | VALVOLA MOTORIZZATA SCIROPPO SYRUP MOTOR VALVE | | +| | PAW104 | 253U4 | VALVOLA MOTORIZZATA CO2 CO2 MOTOR VALVE | | +| | PAW108 | 270B1 | AIR VACUUM CO2 FLOW CONTROL CONTR.PORTATA CO2 PER DEAREAZIONE | | +| | PAW110 | 255B7 | PRODUCT TEMPERATURE REGULATION REGOLAZIONE TEMPERATURA PRODOTTO | | +| | PAW112 | 254B7 | SANIT. TEMP. CONTROL CONTROLLO TEMPERATURA SANIFICANTE | | +| | PAW114 | 259U1 | USCITA ANALOGICA VALVOLA NORGREN SP NORGREN SP VALVE ANALOG OUTPUT | | +| | PAW122 | 254B4 | CONTROLLO PRESSIONE SERBATOIO CO2 CO2 TANK PRESSURE CONTROL | | + + +## Profibus IO +*** +* Nodo 1 : PLC +* Nodo 8: Inverter 45U1 - Overppressure pump P3 + * PEW 1640-1659 + * PAW 1640-1659 +* Nodo 10: IM155 - 280A0 + * Defined on the IO table +* Nodo 12: Festo 283E1 + * Defined on the IO table +* Nodo 16: 250P1 - SMARTEC S +* Nodo 17: 250P4 - SMARTEC S +* Water Volumetric 251U1 - (Nodo 20) + * Volume Flow : E3080-3084 + * Totalizer Value: E3100-3104 - PAW: 3100 + +* Syrup_Mass_252U1 - (Nodo 21) - FTP302 - Flow Transmitter + * Mass Flow: 2030-2034 + * Density: 2045-2049 + * Concentration: 2050-2054 + * Temperature: 2055-2059 + * Totalizer Value: PEW2070-2074 - PAW: 2070 + +* CO2_Mass_253U1 - (Nodo 22) + * Mass Flow: 3200-3204 + * Density: 3215-3219 + * Temperature: 3225-3229 + * Totalizer: 3240-3244 - PAW: 3240 + +* Anton Paar 120U1 : ( Node 40 ) + * IN128 mPDS5>PLC_4_1 : PEW15000-15031 + * IN128 mPDS5>PLC_4_2 : PEW15000-15031 + * IN128 mPDS5>PLC_4_3 : PEW15000-15031 + * IN128 mPDS5>PLC_4_4 : PEW15000-15031 + * OUT128 PLC>mPDS5_4_1 : PAW15000-15031 + * OUT128 PLC>mPDS5_4_2 : PAW15032-15063 + * OUT128 PLC>mPDS5_4_3 : PAW15064-15095 + * OUT128 PLC>mPDS5_4_4 : PAW15096-15127 + +Tag for Anto Paar: + +| P_PDS_CO2 | Real | %ED15060 | +| ------------------ | ---- | -------- | +| P_PDS_Product_Brix | Real | %ED15084 | +| P_PDS_Temperature | Real | %ED15104 | +| P_PDS_Density | Real | %ED15112 | + + + +#### Master adaptation +*** + +| Master TAG | | | | +| -------------------------- | ---- | ------- | ------------------------ | +| P_FTP302_Flow | Real | %ED2030 | MIX - Profibus Variables | +| P_FTP302_Flow_State | Byte | %EB2034 | MIX - Profibus Variables | +| P_FTP302_Density | Real | %ED2045 | MIX - Profibus Variables | +| P_FTP302_Density_State | Byte | %EB2049 | MIX - Profibus Variables | +| P_FTP302_Brix | Real | %ED2050 | MIX - Profibus Variables | +| P_FTP302_Brix_State | Byte | %EB2054 | MIX - Profibus Variables | +| P_FTP302_Temp | Real | %ED2055 | MIX - Profibus Variables | +| P_FTP302_Temp_State | Byte | %EB2059 | MIX - Profibus Variables | +| P_FTP302_Totalizer | Real | %ED2070 | MIX - Profibus Variables | +| P_FTP302_Totaliz_State | Byte | %EB2074 | MIX - Profibus Variables | +| P_FTN301_Flow | Real | %ED3080 | MIX - Profibus Variables | +| P_FTN301_Flow_State | Byte | %EB3084 | MIX - Profibus Variables | +| P_FTN301_Totalizer | Real | %ED3100 | MIX - Profibus Variables | +| P_FTN301_Totaliz_State | Byte | %EB3104 | MIX - Profibus Variables | +| P_FTM303_Flow | Real | %ED3200 | MIX - Profibus Variables | +| P_FTM303_Flow_State | Byte | %EB3204 | MIX - Profibus Variables | +| P_FTM303_Density | Real | %ED3215 | MIX - Profibus Variables | +| P_FTM303_Density_State | Byte | %EB3219 | MIX - Profibus Variables | +| P_FTM303_Temperature | Real | %ED3225 | MIX - Profibus Variables | +| P_FTM303_Temperature_State | Byte | %EB3229 | MIX - Profibus Variables | +| P_FTM303_Totalizer | Real | %ED3240 | MIX - Profibus Variables | +| P_FTM303_Totalizer_State | Byte | %EB3244 | MIX - Profibus Variables | diff --git a/07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos en Python/Conversión LAD a SCL Siemens.md b/07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos en Python/Conversión LAD a SCL Siemens.md new file mode 100644 index 0000000..782808d --- /dev/null +++ b/07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos en Python/Conversión LAD a SCL Siemens.md @@ -0,0 +1,545 @@ +# Análisis Técnico y Guía para la Conversión Automatizada de Siemens LAD (TIA Portal v18+ XML) a SCL mediante Python + +**Resumen Ejecutivo** + +Este informe proporciona un análisis técnico exhaustivo y una guía práctica para el desarrollo de un script en Python destinado a la conversión automática de programas en lenguaje Ladder Diagram (LAD), exportados desde Siemens TIA Portal v18 y versiones posteriores en formato XML (SimaticML), al lenguaje Structured Control Language (SCL). Se examina en detalle la estructura de los archivos XML de exportación, la sintaxis y características del lenguaje SCL, las correspondencias lógicas entre LAD y SCL, las herramientas y librerías de Python relevantes, y los desafíos inherentes a este proceso de conversión. El objetivo es dotar al desarrollador de los conocimientos necesarios para abordar esta compleja tarea, destacando la importancia de los esquemas XSD oficiales, la utilidad de librerías como `lxml` para el análisis XML y `pythonnet` para la interacción con la API de TIA Portal Openness, y la necesidad de un enfoque incremental y validación rigurosa. Se identifican desafíos clave como la traducción de redes LAD complejas y la preservación de la legibilidad y estructura del código original, proponiendo estrategias para mitigarlos. + +--- + +**Sección 1: Deconstruyendo la Exportación XML de LAD de TIA Portal (SimaticML v18+)** + +La conversión de LAD a SCL comienza con una comprensión profunda del formato de archivo de entrada: el XML exportado por TIA Portal a través de su interfaz Openness. Este formato, conocido como SimaticML, encapsula toda la lógica, estructura y metadatos del bloque LAD. + +- **1.1 TIA Portal Openness: La Puerta de Acceso Programático** TIA Portal Openness es la interfaz de programación de aplicaciones (API) fundamental proporcionada por Siemens para automatizar tareas de ingeniería dentro del entorno TIA Portal. Funciona como una puerta de enlace que permite a scripts y aplicaciones externas interactuar con proyectos de TIA Portal, incluyendo la exportación e importación de bloques de programa, configuración de hardware y más. Es un paquete de opciones gratuito incluido en la instalación estándar de TIA Portal y no requiere una licencia adicional.   + + Un aspecto crucial de Openness es que se basa en el framework.NET (específicamente.NET Framework 4.8 o superior según la versión de TIA Portal). Esta base tecnológica tiene implicaciones directas para la interacción desde Python. Dado que Python y.NET operan en entornos de ejecución distintos, la comunicación directa entre un script de Python y las bibliotecas DLL de Openness no es nativa. Se requiere una capa de interoperabilidad, siendo `pythonnet` la herramienta comúnmente utilizada para este propósito, como se evidencia en varios proyectos comunitarios. Por lo tanto, la naturaleza.NET de Openness dicta la necesidad de utilizar un puente tecnológico para invocar su API desde Python si se desea automatizar el proceso de exportación/importación directamente, más allá de simplemente analizar archivos XML preexistentes.   + +- **1.2 Localización y Utilización de las Definiciones de Esquema SimaticML (XSD)** Para analizar (parsear) de forma fiable y precisa los archivos SimaticML exportados desde TIA Portal v18 y posteriores, es indispensable utilizar las Definiciones de Esquema XML (XSD) oficiales proporcionadas por Siemens. Estos archivos XSD definen rigurosamente la estructura, elementos, atributos, tipos de datos y reglas de validación del formato SimaticML para una versión específica de TIA Portal.   + + Las XSD se encuentran típicamente en el directorio de instalación de TIA Portal, bajo una ruta similar a `C:\Program Files\Siemens\Automation\Portal Vxx\PublicAPI\Vxx\Schemas\` (donde `Vxx` corresponde a la versión de TIA Portal, por ejemplo, V18). Es fundamental consultar las XSD correspondientes a la versión de TIA Portal utilizada (v18+ en este caso), ya que la estructura XML puede variar y evolucionar entre versiones. Por ejemplo, TIA Portal V19 introdujo extensiones en el esquema SimaticML para soportar tipos de valor con nombre durante la exportación/importación.   + + Confiar únicamente en la ingeniería inversa de archivos XML de ejemplo o en documentación de versiones anteriores (como el documento que describe la estructura para V13 SP1) es insuficiente y arriesgado. Los formatos XML evolucionan, y un script basado en información obsoleta o incompleta fallará al encontrar estructuras nuevas o modificadas. Las XSD son la fuente de verdad definitiva para la versión específica y deben ser la base para desarrollar la lógica de análisis del script Python, asegurando que pueda manejar correctamente cualquier archivo SimaticML válido generado por TIA Portal v18+.   + +- **1.3 Anatomía de una Exportación de Bloque SimaticML: Elementos Centrales y Estructura** Un archivo SimaticML que representa un bloque de código exportado sigue una estructura jerárquica bien definida. El elemento raíz es siempre ``. Dentro de este, se encuentra un elemento que define el tipo de bloque, como `` para un Bloque de Función, `` para una Función, o un `` más genérico. Cada bloque tiene un atributo `ID` que debe ser único dentro del archivo XML, aunque su valor numérico específico no suele ser crítico para la importación, siempre que sea único.   + + Dentro del elemento del bloque, dos secciones principales organizan la información: + + 1. ``: Contiene metadatos generales del bloque y, fundamentalmente, la definición de su interfaz (``). También puede incluir atributos como nombre, autor, versión, número de bloque, etc..   + + 2. ``: Contiene la implementación real del código del bloque, así como elementos asociados como comentarios (``) y títulos (``). Es aquí donde se encuentran las redes LAD.   + +- **1.4 Representación de Redes y Elementos Lógicos LAD (Contactos, Bobinas, Instrucciones) en XML** La lógica de programación LAD se organiza en redes (networks o rungs). En SimaticML, cada red LAD dentro de un bloque se representa mediante un elemento `<SW.CompileUnit>` ubicado dentro del `<ObjectList>` principal del bloque.   + + Cada `<SW.CompileUnit>` contiene a su vez: + + - Un `<AttributeList>`: Aquí se especifican atributos de la red, como el lenguaje de programación (`ProgrammingLanguage="LAD"`).   + + - Un `<ObjectList>`: Este contiene los elementos gráficos que componen la red LAD. + + Dentro del `<ObjectList>` de la red, los elementos lógicos individuales (contactos, bobinas, llamadas a funciones, operaciones matemáticas, etc.) se describen. Basándose en la documentación de V13 SP1 , estos elementos se representan probablemente como elementos `<Part>`. Cada `<Part>` tiene un atributo `UId` (Unique Identifier) que es único _dentro de esa red_ y se utiliza para establecer conexiones.   + + Un punto crítico es que la documentación proporcionada para V13 SP1 no detalla los _atributos específicos_ dentro del elemento `<Part>` que permiten diferenciar entre los distintos tipos de elementos LAD (por ejemplo, un contacto Normalmente Abierto vs. Normalmente Cerrado, una bobina de asignación vs. una bobina Set o Reset, una llamada a un temporizador TON, etc.). Esta es una brecha de conocimiento fundamental. Para desarrollar un script de conversión para TIA Portal v18+, es imprescindible determinar estos atributos diferenciadores examinando directamente las XSD de v18+ o analizando archivos XML exportados de esa versión. La estructura exacta y los atributos utilizados para definir el tipo y modificador de cada elemento LAD son esenciales para una correcta interpretación y posterior conversión a SCL.   + +- **1.5 Decodificando Conexiones: El Rol de `<Wires>` y `UId`** La estructura lógica y el flujo de ejecución dentro de una red LAD se definen por cómo se conectan sus elementos. En SimaticML, esta información se encuentra dentro del área `<NetworkSource>`, anidada bajo el `<AttributeList>` de un `<SW.CompileUnit>`.   + + El `<NetworkSource>` contiene dos sub-elementos principales: + + 1. `<Parts>`: Enumera los elementos lógicos (`<Part>`) presentes en la red, cada uno con su `UId`. + 2. `<Wires>`: Describe las conexiones (cables) entre los diferentes `<Part>`. Cada elemento `<Wire>` especifica los puntos de conexión que une, utilizando los `UId` de los `<Part>` y los nombres de sus puntos de conexión (referidos implícitamente como parámetros "in", "out", "operand" en ).   + + + La estructura definida en `<Wires>` es la que codifica la lógica de serie, paralelo y las ramificaciones complejas de la red LAD. Analizar correctamente esta sección es vital para reconstruir la secuencia lógica y las condiciones de ejecución en SCL. + +- **1.6 Representación de Llamadas a Funciones/Bloques de Función (`<CallRef>`, `<CallInfo>`)** Cuando una red LAD invoca a otro bloque (como una FC, FB, SFC o SFB), esta llamada se representa en SimaticML mediante el elemento `<CallRef>`, ubicado dentro del `<ObjectList>` de la red (`<SW.CompileUnit>`).   + + El elemento `<CallRef>` contiene atributos y sub-elementos clave: + + - Atributo `CallType`: Especifica el tipo de bloque que se está llamando (por ejemplo, "FB" para un Bloque de Función, "FC" para una Función).   + + - Elemento `<CallInfo>`: Contiene información específica de la llamada, cuya estructura interna varía significativamente dependiendo del `CallType`. Por ejemplo, para una llamada a un FB, `<CallInfo>` típicamente especificará el Bloque de Datos de Instancia (DB de instancia) asociado y contendrá las asignaciones de parámetros actuales para esa llamada específica.   + + + Nuevamente, el ejemplo proporcionado en es para V13 SP1 y una llamada específica a FB. La estructura exacta de `<CallInfo>` para diferentes tipos de llamadas (FCs, SFBs, SFCs, FBs sin instancia explícita, etc.) en v18+ debe verificarse consultando las XSD correspondientes.   + +- **1.7 Definiciones de Interfaz: Parámetros, Tipos de Datos y Atributos** La interfaz de un bloque (sus parámetros de entrada, salida, entrada/salida, estáticos, temporales, constantes y de retorno) se define dentro del elemento `<Interface>`, que a su vez está contenido en el `<AttributeList>` principal del bloque.   + + La estructura de la interfaz se organiza mediante elementos `<Sections>`, cada uno con un atributo `Name` que indica el tipo de sección (por ejemplo, "Input", "Output", "InOut", "Static", "Temp", "Constant", "Return").   + + Dentro de cada `<Section>`, los parámetros o variables individuales se definen mediante elementos `<Member>`. Cada `<Member>` posee atributos esenciales :   + + - `Name`: El nombre simbólico del parámetro/variable. + - `Datatype`: El tipo de dato (por ejemplo, "Bool", "Int", "Real", "Time", o el nombre de un tipo de dato PLC/UDT). + - `Remanence`: Indica si la variable es retentiva ("Retain") o no ("NonRetain", "SetInIDB"). + - `Accessibility`: Define el nivel de acceso (por ejemplo, "Public", "Private"). + + Además, un `<Member>` puede contener un `<AttributeList>` anidado con atributos booleanos adicionales que corresponden a las casillas de verificación en TIA Portal, como `ExternalAccessible` (Accesible desde HMI), `ExternalVisible` (Visible en ingeniería HMI) y `ExternalWritable` (Escribible desde HMI).   + + Finalmente, cada `<Member>` puede tener asociado un elemento `<Comment>` que contiene uno o más elementos `<MultiLanguageText>`, cada uno almacenando el texto del comentario en un idioma específico (identificado por el atributo `Lang`, por ejemplo, "en-US", "es-ES").   + + Es importante notar que versiones más recientes como TIA Portal V19 han ampliado el esquema para incluir soporte para características adicionales, como los tipos de valor con nombre, durante la exportación e importación.   + +- **Tabla 1: Elementos y Atributos Clave de SimaticML para Análisis LAD (Enfoque v18+)** + + +|Ruta del Elemento (Ejemplo)|Elemento/Atributo|Descripción (Contexto LAD)|Tipo de Dato/Valores Esperados|Referencia Base|Nota| +|:--|:--|:--|:--|:--|:--| +|`Document`|`<Document>`|Elemento raíz del archivo XML.|Contenedor||-| +|`Document/SW.Blocks.FC`|`<SW.Blocks.FC>` / `<FB>`|Define el tipo de bloque (FC, FB, DB, etc.).|Contenedor||Verificar tipo exacto en XSD v18+.| +|`Document/SW.Blocks.FC[@ID]`|`ID`|Identificador único del bloque dentro del archivo XML.|Entero (0-2147483647)||Debe ser único.| +|`Document/SW.Blocks.FC/AttributeList`|`<AttributeList>`|Contenedor para metadatos y la interfaz del bloque.|Contenedor||-| +|`.../AttributeList/Interface`|`<Interface>`|Define la interfaz del bloque (parámetros).|Contenedor||Contiene `<Sections>`.| +|`.../Interface/Sections/Section`|`<Section>`|Define una sección de la interfaz (Input, Output, Static, etc.).|Contenedor||Atributo `Name` especifica el tipo.| +|`.../Section/Member`|`<Member>`|Define un parámetro o variable dentro de una sección.|Contenedor||Contiene atributos y `<Comment>`.| +|`.../Member[@Name]`|`Name`|Nombre simbólico del parámetro/variable.|String||-| +|`.../Member[@Datatype]`|`Datatype`|Tipo de dato del parámetro/variable.|String (e.g., "Bool", "UDT_Name")||-| +|`Document/SW.Blocks.FC/ObjectList`|`<ObjectList>`|Contenedor para la implementación del código (redes), comentarios, títulos.|Contenedor||-| +|`.../ObjectList/SW.CompileUnit`|`<SW.CompileUnit>`|Representa una red LAD individual.|Contenedor||Contiene `<AttributeList>` y `<ObjectList>`.| +|`.../SW.CompileUnit/AttributeList/ProgrammingLanguage`|`ProgrammingLanguage`|Especifica el lenguaje de la red.|String ("LAD")||-| +|`.../SW.CompileUnit/AttributeList/NetworkSource`|`<NetworkSource>`|Contiene la definición de los elementos y conexiones de la red.|Contenedor||Contiene `<Parts>` y `<Wires>`.| +|`.../NetworkSource/Parts/Part`|`<Part>`|Representa un elemento lógico LAD (contacto, bobina, instrucción, etc.).|Contenedor||Atributos específicos definen el tipo.| +|`.../Part[@UId]`|`UId`|Identificador único del elemento `<Part>` dentro de la red.|Entero (21-2147483647)||Usado en `<Wires>`.| +|`.../NetworkSource/Wires/Wire`|`<Wire>`|Define una conexión entre puntos de elementos `<Part>`.|Contenedor||Referencia `UId`s y puntos de conexión.| +|`.../ObjectList/SW.CompileUnit/ObjectList/CallRef`|`<CallRef>`|Representa una llamada a otro bloque (FC, FB, etc.).|Contenedor||Contiene `<CallInfo>`.| +|`.../CallRef`|`CallType`|Especifica el tipo de bloque llamado.|String (e.g., "FC", "FB")||-| +|`.../CallRef/CallInfo`|`<CallInfo>`|Contiene detalles específicos de la llamada (parámetros, DB instancia).|Contenedor||Estructura depende de `CallType`.| +|`.../Member/Comment/MultiLanguageText`|`<MultiLanguageText>`|Contiene el texto de un comentario en un idioma específico.|Texto||Atributo `Lang` especifica el idioma.| + +  + +``` +*(Nota: Esta tabla se basa en la información disponible y las inferencias de los documentos. Es **crucial** verificar la estructura y atributos exactos consultando las XSD de TIA Portal v18+).* +``` + +--- + +**Sección 2: Dominando Siemens SCL: Sintaxis, Estructura y Buenas Prácticas** + +Una vez comprendido el formato de entrada (SimaticML), el siguiente paso es dominar el lenguaje de destino: SCL. Este lenguaje textual ofrece potentes capacidades para implementar lógica de control compleja. + +- **2.1 Fundamentos de SCL: Relación con IEC 61131-3 Structured Text** SCL, siglas de Structured Control Language, es la implementación de Siemens del lenguaje Structured Text (ST), uno de los cinco lenguajes de programación definidos en la norma internacional IEC 61131-3 para controladores programables. Está basado en el lenguaje de programación Pascal, lo que le confiere una sintaxis estructurada y familiar para desarrolladores con experiencia en lenguajes de alto nivel.   + + A diferencia de LAD (Ladder Diagram) o FBD (Function Block Diagram), que son lenguajes gráficos, SCL es puramente textual. Mientras que LAD y FBD son especialmente adecuados para la lógica de bits y la representación visual del flujo de control, SCL destaca en tareas que implican cálculos matemáticos complejos, manipulación de datos (arrays, estructuras), algoritmos y gestión de grandes volúmenes de información.   + +- **2.2 Sintaxis Esencial: Tipos de Datos, Variables, Asignaciones, Expresiones** La sintaxis de SCL sigue reglas claras y consistentes: + + - **Terminación de Instrucción:** Cada instrucción SCL debe finalizar con un punto y coma (`;`).   + + - **Sensibilidad a Mayúsculas/Minúsculas:** SCL no distingue entre mayúsculas y minúsculas en identificadores y palabras clave.   + + - **Multilínea:** Una instrucción puede extenderse a lo largo de varias líneas para mejorar la legibilidad.   + + - **Declaración de Variables:** Las variables (parámetros de entrada/salida, variables estáticas, temporales) se declaran típicamente en la sección de interfaz del bloque.   + + - **Asignación:** El operador de asignación en SCL es `:=` (dos puntos seguido de un signo igual). Ejemplo: `MiVariable := OtroValor + 5;`. El uso de `=` se reserva para comparaciones.   + + - **Expresiones:** SCL soporta expresiones aritméticas (`+`, `-`, `*`, `/`, `MOD`), lógicas (`AND`, `OR`, `XOR`, `NOT`) y relacionales (`=`, `<>`, `<`, `>`, `<=`, `>=`).   + + - **Tipos de Datos y Conversión:** SCL maneja una amplia gama de tipos de datos (Bool, Int, DInt, Real, Time, String, Arrays, Structs, UDTs). Pueden ocurrir conversiones implícitas entre tipos compatibles, pero a menudo se requiere una conversión explícita utilizando funciones como `INT_TO_REAL`, `WORD_TO_UINT`, etc., o la función genérica `CONVERT`. Las reglas para determinar el tipo de dato resultante de operaciones aritméticas están bien definidas (por ejemplo, `INT + DINT` resulta en `DINT`). Se recomienda el uso de constantes tipadas (por ejemplo, `INT#10`, `REAL#1.23`, `T#5s`) para evitar advertencias y asegurar la claridad.   + + - **Comentarios:** Los comentarios de una sola línea comienzan con `//`. Los comentarios multilínea se encierran entre `(*` y `*)`. Los comentarios son ignorados por el compilador y sirven únicamente para documentación.   + +- **2.3 Dominio del Flujo de Control: Sentencias IF, CASE, FOR, WHILE, REPEAT** SCL proporciona un conjunto completo de estructuras de control de flujo para implementar lógica condicional y repetitiva :   + + - **`IF`:** Ejecuta bloques de código basados en condiciones booleanas.scl IF <condición1> THEN <sentencias_1>; ELSIF <condición2> THEN // Opcional, puede haber múltiples ELSIF <sentencias_2>; ELSE // Opcional <sentencias_else>; END_IF; + - **`CASE`:** Selecciona un bloque de código a ejecutar basado en el valor de una variable (generalmente de tipo entero o enumerado). + + Structured Text + + ``` + CASE <variable_selectora> OF + <valor1>: + <sentencias_1>; + <valor2>, <valor3>: // Múltiples valores posibles + <sentencias_2>; + <rango1>..<rango2>: // Rango de valores (depende de la versión de TIA) + <sentencias_3>; + ELSE // Opcional, se ejecuta si ningún caso coincide + <sentencias_else>; + END_CASE; + ``` + + - **`FOR`:** Ejecuta un bloque de código un número determinado de veces, utilizando un contador. + + Structured Text + + ``` + FOR <contador> := <valor_inicial> TO <valor_final> BY <incremento> DO // BY <incremento> es opcional, por defecto es 1 + <sentencias>; + // Se pueden usar CONTINUE y EXIT dentro del bucle + END_FOR; + ``` + + - **`WHILE`:** Ejecuta un bloque de código mientras una condición booleana sea verdadera. La condición se evalúa _antes_ de cada iteración. + + Structured Text + + ``` + WHILE <condición> DO + <sentencias>; + // Se pueden usar CONTINUE y EXIT dentro del bucle + END_WHILE; + ``` + + - **`REPEAT`:** Ejecuta un bloque de código al menos una vez y continúa mientras una condición booleana sea falsa. La condición se evalúa _después_ de cada iteración. + + Structured Text + + ``` + REPEAT + <sentencias>; + // Se pueden usar CONTINUE y EXIT dentro del bucle + UNTIL <condición>; // El bucle termina cuando la condición es VERDADERA + END_REPEAT; + ``` + + - **Control de Bucles:** Las instrucciones `CONTINUE` y `EXIT` permiten controlar el flujo dentro de los bucles `FOR`, `WHILE` y `REPEAT`. `CONTINUE` salta al final de la iteración actual y procede con la siguiente. `EXIT` termina inmediatamente la ejecución del bucle.   + +- **2.4 Invocando Código Reutilizable: Llamadas a FCs y FBs en SCL** Una de las fortalezas de la programación estructurada es la reutilización de código mediante funciones (FCs) y bloques de función (FBs). SCL permite llamar a estos bloques de manera sencilla :   + + - **Llamada a Función (FC):** Se invoca directamente por su nombre, pasando los parámetros de entrada y recibiendo los de salida. + + Structured Text + + ``` + // Ejemplo de llamada a una FC llamada 'MiFuncion' + #Resultado := "MiFuncion"(ParamEntrada1 := #Valor1, ParamEntrada2 := 10.5); + ``` + + - **Llamada a Bloque de Función (FB):** Requiere una instancia (un Bloque de Datos de Instancia, DB de instancia) que almacena el estado interno del FB. La llamada se realiza sobre la instancia. + + Structured Text + + ``` + // Ejemplo de llamada a una instancia 'MiTemporizador_DB' de un FB TON + "MiTemporizador_DB"(IN := #CondicionArranque, // Entrada booleana + PT := T#5s, // Tiempo de preselección (5 segundos) + Q => #SalidaTemporizador, // Salida booleana (asignación con =>) + ET => #TiempoTranscurrido); // Salida de tiempo transcurrido + ``` + + + La asignación de parámetros se realiza utilizando el operador `:=` para las entradas y `=>` para las salidas al llamar a FBs. Es crucial gestionar correctamente las instancias de los FBs, ya sea mediante DBs de instancia individuales o como multi-instancias dentro de otro FB o DB global.   + +- **2.5 Aprovechando las Librerías y Funciones Estándar de Siemens** TIA Portal incluye una extensa biblioteca de funciones y bloques de función estándar para realizar tareas comunes (conversiones de tipo, operaciones matemáticas, comunicación, control de movimiento, etc.). Utilizar estas funciones estándar es altamente recomendable.   + + El editor SCL de TIA Portal facilita el uso de estas funciones y de las variables definidas por el usuario :   + + - **Autocompletar:** Presionando `Ctrl + Espacio` se muestra una lista de instrucciones, funciones, variables y palabras clave disponibles en el contexto actual. + - **Tarjeta de Instrucciones:** El panel "Instrucciones" permite navegar por las bibliotecas y arrastrar funciones o bloques directamente al código SCL. + - **IntelliSense:** Al empezar a escribir, el editor sugiere posibles completados. +- **2.6 Adherencia a las Guías de Programación de Siemens para un Código SCL Robusto** Siemens proporciona documentos detallados de Guías de Programación (Programming Guideline) y Guías de Estilo (Programming Styleguide) para el desarrollo en TIA Portal con S7-1200/1500. Seguir estas recomendaciones es fundamental para crear programas SCL que sean no solo funcionalmente correctos, sino también eficientes, legibles, mantenibles y reutilizables.   + + Algunos aspectos clave cubiertos en estas guías incluyen :   + + - **Nomenclatura:** Uso de identificadores (nombres de variables, bloques, etc.) únicos, consistentes y significativos, preferiblemente en inglés (NF001). + - **Comentarios:** Documentar el código con comentarios claros y útiles (NF002). + - **Estructura:** Organizar el proyecto y las bibliotecas de forma lógica (DA001). + - **Elección del Lenguaje:** Utilizar el lenguaje de programación más apropiado para cada tarea (DA002). SCL es adecuado para lógica compleja y datos, mientras que LAD/FBD pueden ser preferibles para lógica de bits simple o por razones de legibilidad para personal de mantenimiento.   + + - **Seguridad y Robustez:** Validar los valores de entrada (SE001) e inicializar las variables temporales antes de su uso (SE002) para evitar comportamientos indefinidos. + - **Rendimiento:** Considerar el impacto en el rendimiento de ciertas instrucciones o prácticas (PE001-PE016). SCL, junto con LAD y FBD, se considera adecuado para aplicaciones críticas en tiempo en S7-1200/1500 (PE015). + + La adopción de estas guías, aunque no obligatoria, mejora significativamente la calidad del código, facilita el trabajo en equipo y reduce errores. Al generar código SCL automáticamente a partir de LAD, se debe intentar que el código resultante siga estas buenas prácticas en la medida de lo posible, lo cual añade un nivel de sofisticación a la tarea de conversión más allá de la simple traducción sintáctica. Por ejemplo, generar nombres de variables SCL significativos basados en los comentarios o la estructura LAD, o estructurar el SCL resultante usando regiones (`{PRAGMA_BEGIN...END}`) para reflejar las redes LAD originales.   + + +--- + +**Sección 3: Salvando la Brecha: Mapeo de la Lógica LAD a Equivalentes SCL** + +La esencia de la conversión reside en mapear correctamente cada elemento y estructura lógica del programa LAD original a su representación funcionalmente equivalente en SCL. + +- **3.1 Traducción de Lógica Booleana Básica (Contactos en Serie/Paralelo)** La lógica booleana fundamental en LAD se representa mediante contactos en serie y paralelo: + + - **Contactos en Serie:** Representan una operación lógica `AND`. En SCL, se traducen utilizando el operador `AND`. + - LAD: `---[ ContactoA ]---------` + - SCL: `Resultado := ContactoA AND ContactoB;` + - **Contactos en Paralelo:** Representan una operación lógica `OR`. En SCL, se traducen utilizando el operador `OR` y, si es necesario, paréntesis `()` para agrupar términos y asegurar la precedencia correcta. + - LAD: + + ``` + +---[ ContactoA ]---+ + ---| |--- + +------+ + ``` + + - SCL: `Resultado := ContactoA OR ContactoB;` + - **Contactos Normalmente Abiertos (NO):** `-[ ]-` Se traducen directamente a la variable booleana correspondiente en SCL. + - **Contactos Normalmente Cerrados (NC):** `-[/]-` Se traducen utilizando el operador `NOT` antes de la variable booleana en SCL. + - LAD: `---[ /ContactoC ]---` + - SCL: `Resultado := NOT ContactoC;` + + Combinaciones complejas de serie y paralelo requerirán el uso adecuado de `AND`, `OR`, `NOT` y paréntesis en SCL para replicar la lógica exacta de la red LAD. El ejemplo de usuario en muestra un intento de traducir lógica Set/Reset, ilustrando cómo se combinan estos operadores básicos.   + +- **3.2 Implementación de Lógica de Bobinas (Asignación, Set, Reset) en SCL** Las bobinas en LAD determinan la acción sobre una variable booleana: + + - **Bobina de Asignación (`-( )-`):** Representa una asignación directa basada en el resultado lógico de la red (RLO - Result of Logic Operation) que la precede. En SCL, se traduce a una asignación simple `:=`. + - LAD: `---[ Condicion ]---( Bobina )` + - SCL: `Bobina := Condicion;` + - **Bobina Set (`-(S)-`):** Pone la variable booleana a `TRUE` si el RLO es verdadero y la mantiene así hasta que sea explícitamente reseteada. + - **Bobina Reset (`-(R)-`):** Pone la variable booleana a `FALSE` si el RLO es verdadero. + + Las bobinas Set y Reset no tienen un operador directo equivalente en SCL. Su comportamiento se implementa típicamente usando sentencias `IF`. Para una lógica SR (Set dominante) o RS (Reset dominante) común en LAD: + + - LAD (Ejemplo SR - Set tiene prioridad): + + ``` + ------(S) MiBit + ------(R) MiBit + ``` + + - SCL Equivalente (SR): + + Structured Text + + ``` + IF CondicionReset THEN + MiBit := FALSE; + ELSIF CondicionSet THEN + MiBit := TRUE; + END_IF; + ``` + + - SCL Equivalente (RS - Reset tiene prioridad): + + Structured Text + + ``` + IF CondicionSet THEN + MiBit := TRUE; + END_IF; + IF CondicionReset THEN + MiBit := FALSE; + END_IF; + ``` + + + El ejemplo específico de (`IF NOT Tag1 AND NOT Tag2 THEN MotorFault := TRUE; ELSIF TagReset THEN MotorFault := FALSE; END_IF;`) ilustra una forma de implementar la lógica Set/Reset combinada en SCL. La traducción exacta depende de la estructura LAD específica y de la prioridad deseada (SR vs RS).   + +- **3.3 Manejo de Instrucciones Estándar: Temporizadores, Contadores, Operaciones Matemáticas** Las instrucciones comunes en LAD se traducen a SCL de la siguiente manera: + + - **Temporizadores (TON, TOF, TP) y Contadores (CTU, CTD, CTUD):** Como se mencionó, estos son generalmente Bloques de Función (FBs) en TIA Portal. Su conversión implica: + 1. Asegurar que existe una instancia del FB (ya sea un DB de instancia dedicado o una multi-instancia dentro de otro bloque). La información de la instancia debería estar disponible en la exportación XML (implícito en la estructura `<CallRef>`/`<CallInfo>` para llamadas a FB ).   + + 2. Llamar a la instancia del FB en SCL, asignando los parámetros de entrada (IN, PT, CU, CD, R, PV, etc.) y leyendo los parámetros de salida (Q, ET, CV, etc.) usando la sintaxis de llamada a FB.   + + - **Operaciones Matemáticas (ADD, SUB, MUL, DIV, etc.):** Las cajas de instrucciones matemáticas en LAD se traducen directamente a expresiones aritméticas en SCL utilizando los operadores correspondientes (`+`, `-`, `*`, `/`). + - LAD: Caja ADD con entradas `Var1`, `Var2` y salida `Resultado`. + - SCL: `Resultado := Var1 + Var2;` + - **Instrucciones de Movimiento (MOVE):** Se traducen a asignaciones `:=` en SCL. + - LAD: Caja MOVE con entrada `Fuente` y salida `Destino`. + - SCL: `Destino := Fuente;`   + + - **Comparaciones (CMP):** Se traducen a expresiones relacionales en SCL (`=`, `<>`, `<`, `>`, `<=`, `>=`). + - **Conversiones de Tipo:** Las instrucciones de conversión explícitas en LAD deben mapearse a las funciones de conversión de tipo correspondientes en SCL (por ejemplo, `INT_TO_REAL`, `WORD_TO_UINT`, `CONVERT`). La estricta verificación de tipos en TIA Portal hace que este mapeo sea crucial.   + + + La instrucción `CALCULATE` de LAD, que permite expresiones complejas, tiene su equivalente directo en las expresiones SCL, que a menudo resultan más legibles para cálculos complejos.   + +- **3.4 Representación Consistente de Llamadas a Funciones y Bloques de Función** La conversión debe mapear consistentemente las llamadas a bloques representadas en el XML (elementos `<CallRef>` y `<CallInfo>` ) a la sintaxis de llamada SCL apropiada:   + + - Llamada a FC en LAD -> Llamada a FC en SCL: `NombreFC(Param1 := Valor1,...);`.   + + - Llamada a FB en LAD -> Llamada a la instancia del FB en SCL: `NombreInstanciaFB(ParamIn1 := ValorIn1,..., ParamOut1 => VariableOut1,...);`.   + + + El script de conversión debe extraer el nombre del bloque llamado, los nombres de los parámetros y sus valores/variables asignadas desde la estructura `<CallInfo>` del XML y formatearlos correctamente en la sintaxis de llamada SCL. + +- **3.5 Estrategias para Traducir la Estructura de Red y la Lógica de Rung** La traducción de una red LAD (`<SW.CompileUnit>` ) a SCL no siempre es una conversión uno a uno de instrucciones. La estructura visual de la red LAD implica un orden de evaluación y dependencias que deben preservarse en el código SCL secuencial.   + + - **Redes Simples:** Una red LAD simple que consiste en una serie/paralelo de contactos que activan una única bobina de asignación puede traducirse a una única sentencia de asignación SCL con una expresión booleana compleja. + - **Redes Complejas:** Las redes con múltiples ramas, condiciones intermedias, y múltiples bobinas (asignación, Set, Reset) presentan un desafío mayor. La conversión puede requerir: + - **Variables Temporales:** Introducir variables booleanas temporales en SCL para almacenar los resultados lógicos de ramas intermedias antes de usarlos para asignar valores a las bobinas finales. Esto ayuda a mantener la claridad y el orden de evaluación. + - **Estructuras `IF` Anidadas:** Utilizar sentencias `IF`, `ELSIF` y `ELSE` anidadas para representar la lógica condicional de las diferentes ramas. + - **Orden de Ejecución:** Asegurar que las asignaciones en SCL ocurran en un orden que refleje la evaluación de arriba abajo y de izquierda a derecha implícita en LAD, especialmente cuando el estado de una bobina afecta las condiciones en ramas posteriores dentro de la misma red. + + La conversión debe ir más allá de la traducción de instrucciones individuales y abordar la traducción del _flujo lógico_ representado visualmente en LAD. Las ramas paralelas que conceptualmente se evalúan "simultáneamente" en LAD (basadas en las condiciones precedentes) deben ser manejadas cuidadosamente en el flujo secuencial de SCL para garantizar que cada salida se active bajo exactamente las mismas condiciones que en el LAD original. Esto puede ser particularmente complejo para redes extensas o con lógica intrincada.   + +- **Tabla 2: Elementos/Instrucciones Comunes LAD y Equivalentes SCL** + + +|Elemento LAD (Visual/Nombre)|Representación SimaticML Típica (Clave)|Equivalente SCL (Fragmento de Código)|Notas/Consideraciones|Referencia| +|:--|:--|:--|:--|:--| +|Contacto NO `-[ ]-`|`<Part>` con atributos específicos (a determinar)|`VariableBooleana`|Usar el nombre simbólico de la variable.|-| +|Contacto NC `-[/]-`|`<Part>` con atributos específicos (a determinar)|`NOT VariableBooleana`|Usar el operador `NOT`.|| +|Bobina Asignación `-( )-`|`<Part>` (tipo bobina) conectado a RLO|`VariableDestino := RLO_ExpresionBooleana;`|Asignación directa con `:=`.|| +|Bobina Set `-(S)-`|`<Part>` (tipo Set) conectado a RLO|`IF RLO_ExpresionBooleana THEN VariableDestino := TRUE; END_IF;`|Requiere lógica condicional. Ver nota sobre SR/RS.|| +|Bobina Reset `-(R)-`|`<Part>` (tipo Reset) conectado a RLO|`IF RLO_ExpresionBooleana THEN VariableDestino := FALSE; END_IF;`|Requiere lógica condicional. Ver nota sobre SR/RS.|| +|Temporizador TON (Llamada)|`<CallRef CallType="FB">` con `<CallInfo>` (TON)|`"InstanciaTON"(IN := Condicion, PT := TiempoPreset, Q => SalidaQ, ET => TiempoET);`|Requiere instancia FB. Mapear parámetros IN, PT, Q, ET.|| +|Contador CTU (Llamada)|`<CallRef CallType="FB">` con `<CallInfo>` (CTU)|`"InstanciaCTU"(CU := PulsoContaje, R := Reset, PV := ValorPreset, Q => SalidaQ, CV => ValorCV);`|Requiere instancia FB. Mapear parámetros CU, R, PV, Q, CV.|| +|Instrucción ADD|`<Part>` (tipo ADD) con conexiones a entradas/salida|`VariableSalida := VariableEntrada1 + VariableEntrada2;`|Usar operador `+`. Verificar tipos de datos.|| +|Instrucción MOVE|`<Part>` (tipo MOVE) con conexiones a entrada/salida|`VariableDestino := VariableFuente;`|Asignación directa `:=`. Verificar tipos de datos.|| +|Llamada a FC|`<CallRef CallType="FC">` con `<CallInfo>`|`"NombreFC"(Param1 := Valor1, Param2 := Valor2);`|Mapear nombre de FC y parámetros desde `<CallInfo>`.|| +|Llamada a FB|`<CallRef CallType="FB">` con `<CallInfo>`|`"NombreInstanciaFB"(ParamIn1 := ValIn1, ParamOut1 => VarOut1);`|Mapear nombre de instancia y parámetros desde `<CallInfo>`. Usar `=>` para salidas.|| +|Lógica Serie Simple|`<Wire>` conectando salida de Part1 a entrada Part2|`Resultado := Cond1 AND Cond2;`|Combinar condiciones con `AND`.|| +|Lógica Paralelo Simple|`<Wire>`s creando ramas paralelas|`Resultado := Cond1 OR Cond2;`|Combinar condiciones con `OR`. Usar paréntesis si es necesario.|| + +  + +``` +*(Nota: La representación SimaticML exacta debe verificarse en las XSD v18+. La lógica SR/RS puede variar).* +``` + +--- + +**Sección 4: Herramientas: Librerías y Recursos para su Script Python** + +El desarrollo del script de conversión se beneficiará enormemente del uso de librerías Python adecuadas para el análisis XML y, potencialmente, para la interacción con TIA Portal. Además, existen recursos comunitarios y ejemplos en otros lenguajes que pueden ofrecer información valiosa. + +- **4.1 Análisis de SimaticML en Python: `xml.etree.ElementTree` vs. `lxml`** Python ofrece varias librerías para trabajar con archivos XML. Las dos opciones más relevantes para analizar la estructura SimaticML son: + + - **`xml.etree.ElementTree`:** Es parte de la biblioteca estándar de Python, lo que significa que no requiere instalación adicional. Proporciona funcionalidades básicas para analizar y construir árboles XML. Es adecuada para tareas de análisis sencillas. + - **`lxml`:** Es una librería de terceros muy potente y popular, conocida por su velocidad, flexibilidad y robustez. Se basa en las librerías C `libxml2` y `libxslt`. Una de sus mayores ventajas es su excelente soporte para XPath 1.0 , un lenguaje de consulta que permite seleccionar nodos dentro de un documento XML de manera muy eficiente y concisa. También maneja bien HTML (incluso si está mal formado) y ofrece características avanzadas como el análisis incremental (`iterparse`) para manejar archivos muy grandes sin cargarlos completamente en memoria.   + + + Dada la naturaleza jerárquica y potencialmente compleja de los archivos SimaticML , la capacidad de `lxml` para utilizar consultas XPath puede simplificar enormemente la tarea de extraer información específica (por ejemplo, encontrar todos los elementos `<Part>` con un cierto atributo dentro de una red específica, o localizar el parámetro `PT` de una llamada a un temporizador). En comparación, lograr lo mismo con `ElementTree` podría requerir una navegación manual más verbosa a través del árbol XML. Por lo tanto, para este proyecto de conversión, `lxml` se perfila como la opción más recomendable debido a su potencia y, en particular, a su soporte XPath.   + + Ejemplo básico de análisis con `lxml`: + + Python + + ``` + from lxml import etree + + try: + # Asumiendo que 'ruta_archivo_xml' es la ruta a tu archivo SimaticML + tree = etree.parse(ruta_archivo_xml) + root = tree.getroot() + + # Ejemplo de uso de XPath para encontrar todas las redes LAD + # Nota: El namespace puede variar, verificar en el XML real o XSD + namespaces = {'sw': '[http://www.siemens.com/automation/Openness/SW/NetworkSource/FlgNet/v4](http://www.siemens.com/automation/Openness/SW/NetworkSource/FlgNet/v4)'} # Ejemplo de namespace + lad_networks = root.xpath('.//sw:SW.CompileUnit[AttributeList/ProgrammingLanguage="LAD"]', namespaces=namespaces) + + for network in lad_networks: + # Procesar cada red... + print(f"Procesando red con ID: {network.get('ID')}") + + except etree.XMLSyntaxError as e: + print(f"Error al analizar el XML: {e}") + except IOError as e: + print(f"Error al abrir o leer el archivo: {e}") + + ``` + +- **4.2 Interfaz con la API de TIA Portal Openness desde Python (`pythonnet` y Wrappers)** Si el objetivo del script va más allá de analizar archivos XML existentes y necesita interactuar directamente con TIA Portal (por ejemplo, para automatizar la exportación de bloques LAD o la importación del SCL generado), se requiere una forma de llamar a la API Openness basada en.NET desde Python. + + La herramienta principal para lograr esto es `pythonnet`. Esta librería permite a Python importar y utilizar ensamblados.NET como si fueran módulos Python nativos. Varios repositorios en GitHub demuestran cómo usar `pythonnet` para interactuar con `Siemens.Engineering.dll` (la librería principal de Openness). La configuración inicial y el manejo de los objetos.NET desde Python pueden presentar cierta complejidad, incluyendo la necesidad de añadir la referencia a la DLL correcta y gestionar adecuadamente los tipos de datos entre los dos entornos.   + +- **4.3 Librerías Python Existentes para Interacción con TIA Portal** La comunidad de desarrolladores ha creado algunas librerías y ejemplos en Python para facilitar el trabajo con TIA Portal y Openness. Si bien ninguna parece ser una solución completa y oficial de Siemens, pueden servir como punto de partida o fuente de inspiración: + + - **`tia-portal-xml-generator` :** Esta librería se enfoca en la _generación_ de archivos XML (para DBs, FBs, OBs) que pueden ser importados en TIA Portal vía Openness. Podría ser útil si se necesita generar archivos intermedios, pero no aborda directamente el análisis de LAD XML ni la generación de SCL.   + + - **`TIA-Openness-From-Python` :** Contiene ejemplos prácticos que utilizan `pythonnet` para llamar a la API de Openness. Incluye código para generar lógica SCL y LAD e importarla, lo que lo hace muy relevante para comprender la interacción API desde Python.   + + - **`tia-openness-api-client` :** Intenta proporcionar un cliente Python más estructurado para la API de Openness. Aunque parece estar en desarrollo y requiere TIA Portal para funcionar plenamente, su código podría ofrecer una abstracción útil sobre las llamadas directas a la API. Depende de Python 3.11.   + + - **`Maroder1/TIA-openness` :** Otro repositorio con ejemplos de uso de `pythonnet` para controlar TIA Portal, incluyendo instrucciones de configuración del entorno.   + + + La existencia de estos proyectos subraya el interés de la comunidad Python en automatizar tareas de TIA Portal. Sin embargo, también sugiere que las soluciones pueden estar fragmentadas, incompletas o requerir adaptación, ya que no existe una librería oficial de Siemens para Python. El desarrollador probablemente necesitará construir sobre estos ejemplos o combinar enfoques.   + +- **4.4 Perspectivas desde Librerías C# (`SimaticMl`, `TiaUtilities`, `DotNetSiemensPLCToolBoxLibrary`)** Dado que Openness es una API.NET, existen librerías en C# que manejan SimaticML y la interacción con TIA Portal. Analizar su enfoque, estructura y lógica puede proporcionar información valiosa para el desarrollo en Python, incluso sin ser un experto en C#. + + - **`SimaticMl` por caprican :** Nombrada explícitamente como una "interfaz de librería para TIA Openness". Aunque el enlace directo al repositorio no funcionó durante la investigación , el mismo autor tiene otros repositorios relacionados como `TIA-Portal-openness-adapter` , indicando trabajo en esta área.   + + - **`TiaUtilities` por Parozzz :** Esta librería es particularmente relevante. Ofrece una API en C# para analizar archivos SimaticML, modificar valores y generar nuevos archivos, y lo más importante, declara explícitamente **soporte para Ladder Logic (LAD)**. Soporta TIA Portal V16 a V19. Si su código fuente está disponible (licencia GPL-3.0 ), examinar cómo representa internamente los elementos LAD (`ContactPart`, `CoilPart`, etc.) y cómo los analiza desde el XML podría ofrecer un modelo conceptual muy útil para implementar el analizador Python. Es el proyecto público más cercano funcionalmente al objetivo del usuario.   + + - **`DotNetSiemensPLCToolBoxLibrary` :** Una librería C# más amplia para comunicación S7/S5 y manejo de archivos de proyecto, que incluye soporte para proyectos TIA Portal a través de la API Openness y lectura de varios tipos de bloques. Menos específica para LAD-a-SCL, pero muestra patrones generales de interacción con Openness en C#.   + + - **`TIA_DB_Parser` :** Un ejemplo en C# centrado en extraer comentarios de XML de DBs usando Openness, ilustrando tareas específicas de análisis XML en el contexto de TIA Portal.   + + + El estudio de `TiaUtilities` , en particular, podría acelerar significativamente el desarrollo del analizador Python. Aunque el lenguaje es diferente, la lógica para identificar elementos LAD (contactos, bobinas, cables) y sus atributos dentro de la estructura SimaticML sería conceptualmente transferible. Entender cómo `TiaUtilities` mapea nodos XML a objetos C# que representan componentes LAD puede informar el diseño de las clases y la lógica de análisis en Python.   + +- **4.5 Explotando el Conocimiento Comunitario: Foros SIOS, Repositorios GitHub y Blogs de Automatización** Más allá de las librerías específicas, existe una gran cantidad de conocimiento distribuido en la comunidad de automatización: + + - **Foros de Siemens Industry Online Support (SIOS):** Son un recurso clave para preguntas técnicas específicas. Aunque ejemplos directos de scripts de conversión LAD-a-SCL parecen ser escasos o inexistentes , se pueden encontrar discusiones sobre la estructura XML, el uso de Openness y la sintaxis SCL.   + + - **GitHub:** Además de las librerías mencionadas, una búsqueda por temas como "TIA Portal", "Openness", "SimaticML", "SCL" puede revelar otros proyectos, scripts de ejemplo o forks relevantes. Siemens también aloja algunos proyectos relacionados con Openness en GitHub.   + + - **Blogs de Automatización y Foros Generales:** Sitios como DMCInfo , PLCTalk , o incluso Stack Overflow y Reddit (r/PLC) pueden contener discusiones, fragmentos de código o soluciones a problemas específicos encontrados durante el desarrollo, tanto en el análisis XML como en la lógica de conversión o la interacción con Python.   + + +--- + +**Sección 5: Navegando el Laberinto: Desafíos en la Conversión Automatizada LAD-a-SCL** + +La conversión automática de LAD a SCL es una tarea compleja que presenta varios desafíos técnicos y conceptuales significativos. Anticipar estos desafíos es crucial para desarrollar un script robusto y fiable. + +- **5.1 El Obstáculo de la Complejidad: Traducción de Redes LAD Intrincadas** Uno de los mayores desafíos radica en traducir automáticamente redes LAD complejas. Las redes con múltiples ramificaciones en paralelo, condiciones anidadas, saltos, y dependencias entre diferentes partes de la red pueden ser muy difíciles de representar de forma equivalente y, sobre todo, legible en SCL. La claridad visual del "flujo de potencia" en LAD no siempre tiene una traducción directa a las sentencias secuenciales de SCL.   + + Programas LAD o FBD mal estructurados pueden convertirse en "código espagueti", lo que dificulta enormemente una conversión significativa a SCL. Además, puede haber construcciones o patrones de diseño comunes en LAD que no tengan un equivalente SCL directo y elegante, requiriendo la implementación de soluciones alternativas o workarounds en el código SCL generado. La conversión debe capturar no solo la función de cada instrucción, sino la lógica global de la red.   + +- **5.2 Más Allá de la Traducción Directa: Lógica Implícita y Matices de Instrucciones** La conversión no es simplemente un mapeo sintáctico. Requiere comprender el significado semántico de las instrucciones LAD y sus posibles matices en comparación con sus contrapartes SCL. Puede haber comportamientos implícitos o suposiciones en la ejecución de LAD (como el manejo del RLO) que deben ser explícitamente codificados en SCL. + + La estricta verificación de tipos de datos en TIA Portal es un ejemplo: cualquier conversión de tipo implícita o explícita realizada en LAD debe ser replicada correctamente en SCL usando las funciones de conversión adecuadas para evitar errores de compilación o comportamiento incorrecto en tiempo de ejecución. Aunque no es el lenguaje de destino, el hecho de que STL (en versiones anteriores) tuviera capacidades de bajo nivel no fácilmente replicables en LAD/SCL sugiere que diferentes lenguajes pueden expresar la misma lógica de maneras fundamentalmente distintas, y una traducción superficial podría perder matices importantes.   + +- **5.3 Preservando la Fidelidad: Mantenimiento de Comentarios, Estructura y Legibilidad** Un desafío importante es transferir la información contextual del programa LAD original al SCL generado. Esto incluye: + + - **Comentarios:** Los comentarios asociados a redes, elementos y variables en LAD (almacenados en el XML como `<Comment>` con `<MultiLanguageText>` ) deben ser extraídos y colocados apropiadamente en el código SCL generado para mantener la documentación original.   + + - **Estructura:** Intentar preservar la estructura lógica del programa original puede ser beneficioso para la trazabilidad, pero puede entrar en conflicto con la escritura de SCL idiomático y eficiente. Una traducción literal de una red LAD compleja puede resultar en un código SCL funcionalmente correcto pero difícil de leer y mantener por humanos.   + + - **Legibilidad:** El objetivo final debería ser generar un SCL que no solo funcione, sino que también sea comprensible. Esto podría implicar tomar decisiones de diseño en el script de conversión para refactorizar ciertas estructuras LAD en patrones SCL más claros, posiblemente utilizando características de SCL como las regiones (`{PRAGMA_BEGIN... PRAGMA_END}`) para agrupar secciones de código correspondientes a redes LAD originales.   + + + Existe una tensión inherente entre lograr una equivalencia funcional perfecta y literal con el LAD original y generar un código SCL limpio, mantenible y que siga las buenas prácticas de SCL. El desarrollador del script deberá tomar decisiones sobre cómo equilibrar estas prioridades, quizás ofreciendo opciones para favorecer una u otra. + +- **5.4 Gestión de Identificadores y Referencias Cruzadas** El script debe manejar correctamente los identificadores. Si bien SCL favorece el uso de nombres simbólicos de variables (tags) , el XML utiliza identificadores internos como `ID` para bloques y `UId` para partes dentro de una red. El script debe asegurarse de que todas las referencias a variables, parámetros, instancias de FB y llamadas a bloques se traduzcan consistentemente del entorno LAD/XML al entorno SCL. Aunque los `ID`/`UId` del XML no se usan directamente en el código SCL final, son cruciales durante el análisis para resolver las conexiones (`<Wires>`) y las llamadas (`<CallRef>`). La unicidad de estos IDs es importante durante el análisis del XML.   + +- **5.5 Consideraciones de Rendimiento para el SCL Generado** Aunque LAD, FBD y SCL generalmente se compilan a código máquina eficiente en los controladores S7-1200/1500 , la forma específica en que se escribe el código SCL puede influir en el tiempo de ciclo del PLC. El script de conversión debería intentar generar construcciones SCL razonablemente eficientes, evitando patrones conocidos por ser intensivos en tiempo de ejecución si existen alternativas más simples (ver PE014 en ). Por ejemplo, una traducción excesivamente literal de lógica LAD compleja podría resultar en múltiples evaluaciones redundantes en SCL que podrían optimizarse. Cabe destacar que STL, en cambio, es emulado en S7-1500 y es significativamente más lento, lo que refuerza el valor de convertir _desde_ STL si fuera el caso, pero LAD/FBD/SCL son las opciones preferidas para el rendimiento en estas plataformas.   + +- **5.6 Enfoques Esenciales de Validación y Pruebas** Dada la complejidad de la conversión y el potencial de errores sutiles, la validación rigurosa del SCL generado es absolutamente esencial. No basta con que el código SCL compile; debe ser funcionalmente equivalente al LAD original. Las estrategias de validación deberían incluir: + + - **Simulación:** Ejecutar tanto el bloque LAD original como el bloque SCL generado en un entorno de simulación (como PLCSIM o PLCSIM Advanced ) con un conjunto completo de casos de prueba que cubran diferentes rutas lógicas y condiciones de contorno. Comparar las salidas y el comportamiento para verificar la equivalencia.   + + - **Casos de Prueba:** Desarrollar un conjunto de bloques LAD de prueba que incluyan específicamente las construcciones más complejas y problemáticas (ramas paralelas, lógica Set/Reset compleja, instrucciones específicas, etc.) para probar sistemáticamente la capacidad del script de conversión. + - **Revisión de Código:** Realizar una revisión manual del código SCL generado, especialmente para los bloques más críticos o complejos, para identificar posibles errores lógicos o ineficiencias que la simulación podría no detectar. + - **Verificación de Estilo:** Opcionalmente, utilizar herramientas como Siemens Test Suite Advanced o Project Check para verificar si el código SCL generado cumple con las guías de estilo definidas, lo que puede ayudar a mejorar la calidad y mantenibilidad.   + + +--- + +**Sección 6: Recomendaciones Estratégicas y Conclusión** + +Abordar la tarea de conversión automática de LAD a SCL requiere un enfoque estratégico y la conciencia de los posibles obstáculos. + +- **6.1 Un Enfoque por Fases para Desarrollar el Script de Conversión** Se recomienda un desarrollo incremental del script Python: + + 1. **Fase 1: Análisis XML Preciso:** Centrarse primero en analizar correctamente la estructura SimaticML utilizando `lxml` y las XSD de TIA Portal v18+. Crear clases o estructuras de datos en Python que representen los elementos LAD (redes, partes, cables, llamadas, interfaz) extraídos del XML. Validar exhaustivamente esta fase antes de proceder. + 2. **Fase 2: Traducción Básica:** Implementar la conversión de los elementos LAD más simples: contactos NO/NC, bobinas de asignación, lógica serie/paralelo básica, asignaciones MOVE. + 3. **Fase 3: Instrucciones Estándar:** Añadir soporte para la traducción de instrucciones comunes como temporizadores, contadores y operaciones matemáticas, incluyendo la gestión de instancias de FB. + 4. **Fase 4: Llamadas a Bloques:** Implementar la traducción correcta de llamadas a FCs y FBs, mapeando parámetros desde `<CallInfo>`. + 5. **Fase 5: Redes Complejas:** Abordar el desafío de traducir estructuras de red LAD complejas, implementando estrategias como el uso de variables temporales o `IF` anidados para preservar la lógica de flujo. + 6. **Fase 6: Fidelidad y Mejoras:** Incorporar la transferencia de comentarios, la estructuración del SCL (posiblemente con regiones) y la adherencia a buenas prácticas de programación SCL. + + Es aconsejable mantener una clara separación entre la lógica de análisis del XML y la lógica de generación del SCL para facilitar el mantenimiento y la depuración del script. + +- **6.2 Anticipación y Mitigación de Errores Comunes de Conversión** Los errores más probables incluyen: + + - **Análisis XML Incorrecto:** Debido a no usar las XSD correctas o malinterpretar la estructura. Mitigación: Basar el análisis estrictamente en las XSD v18+. + - **Mapeo Lógico Erróneo:** Especialmente en ramas complejas, lógica Set/Reset o condiciones dependientes. Mitigación: Validación rigurosa con simulación y casos de prueba específicos. + - **Pérdida de Contexto:** Olvidar transferir comentarios o nombres simbólicos. Mitigación: Incluir explícitamente la extracción y reinserción de comentarios en el script. + - **Errores de Tipo de Dato:** Conversiones de tipo incorrectas o faltantes. Mitigación: Prestar especial atención a los atributos `Datatype` en el XML y usar funciones de conversión SCL explícitas cuando sea necesario. + - **Manejo de Instrucciones Específicas:** Algunas instrucciones LAD pueden tener comportamientos particulares. Mitigación: Investigar y probar la traducción de instrucciones menos comunes individualmente. + + Implementar un manejo robusto de errores dentro del script Python es fundamental para identificar y reportar problemas durante el proceso de conversión. + +- **6.3 Manejo de Ambigüedad y Construcciones Intraducibles** Es posible que el script encuentre construcciones LAD ambiguas o que no tengan un equivalente SCL directo y limpio. El script debe tener una estrategia para estos casos: + + - **Marcar para Revisión:** La opción más segura es identificar estas secciones en el XML y generar un marcador o comentario en el SCL resultante, indicando que se requiere una revisión manual. + - **Traducción "Opinada":** Implementar una traducción basada en la interpretación más común o probable, documentando claramente la decisión tomada. + - **Configuración del Usuario:** Permitir al usuario configurar cómo se deben manejar ciertos patrones ambiguos. + + Es importante reconocer que lograr una conversión 100% automática y perfecta para _cualquier_ programa LAD imaginable puede ser poco realista, dada la flexibilidad y las posibles complejidades del lenguaje LAD y las diferencias inherentes con SCL. El objetivo debe ser automatizar la mayor parte posible del proceso, minimizando el esfuerzo manual requerido.   + +- **6.4 Resumen de Hallazgos Clave y Camino a Seguir** Este análisis ha establecido varios puntos clave para el desarrollo del script de conversión LAD-a-SCL: + + - La API TIA Portal Openness y el formato SimaticML son la base, y las XSD v18+ son esenciales para un análisis preciso. + - La estructura XML de SimaticML para LAD implica redes (`SW.CompileUnit`), elementos (`Part`) y conexiones (`Wire`). + - SCL es un lenguaje textual potente con sintaxis y estructuras de control bien definidas, y se beneficia de seguir las guías de estilo de Siemens. + - El mapeo de LAD a SCL implica traducir lógica booleana, bobinas, llamadas a bloques e instrucciones, prestando atención a la preservación del flujo lógico. + - Python, con librerías como `lxml` (para análisis XML) y potencialmente `pythonnet` (para interacción API), es una herramienta viable. Ejemplos en Python y C# (especialmente `TiaUtilities`) pueden ofrecer guías valiosas. + - Existen desafíos significativos relacionados con la complejidad de LAD, la preservación de la fidelidad y la validación. + + El camino a seguir implica un desarrollo incremental y metódico del script Python, comenzando con un análisis XML robusto basado en las XSD, seguido por la implementación progresiva de las reglas de traducción de LAD a SCL, y culminando con una validación exhaustiva mediante simulación y pruebas. La gestión de la complejidad y la búsqueda de un equilibrio entre la equivalencia funcional y la calidad del código SCL generado serán consideraciones constantes durante el desarrollo. \ No newline at end of file diff --git a/07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos en Python/Python Notes.md b/07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos en Python/Python Notes.md new file mode 100644 index 0000000..5faec19 --- /dev/null +++ b/07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos en Python/Python Notes.md @@ -0,0 +1,7 @@ +*** + +## Shrocuts +*** +* `Ctrl+K Ctrl + 0` : para minimizar o colapsar todas las funciones de una sola vez +* `Shift + Ctrp + P` : Add ignore -> Python : antes de crear el repositorio + diff --git a/07 - Desarrolo de Proyectos - Scripts - Visual Studio/Visual Studio Notes.md b/07 - Desarrolo de Proyectos - Scripts - Visual Studio/Visual Studio Notes.md new file mode 100644 index 0000000..b471cc1 --- /dev/null +++ b/07 - Desarrolo de Proyectos - Scripts - Visual Studio/Visual Studio Notes.md @@ -0,0 +1,5 @@ +*** + + +* Alt + P : para llamar a busqueda de metodos +*