docs/site/Rockwell/Optix/DotNet/tpPopulateIONetworkDisplay/index.html

421 lines
19 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="docmd is a Node.js command-line tool for generating beautiful, lightweight static documentation sites from Markdown files.">
<link rel="canonical" href="/Rockwell/Optix/DotNet/tpPopulateIONetworkDisplay/">
<meta property="og:title" content="tpPopulateIONetworkDisplay | docmd">
<meta property="og:description" content="docmd is a Node.js command-line tool for generating beautiful, lightweight static documentation sites from Markdown files.">
<meta property="og:url" content="/Rockwell/Optix/DotNet/tpPopulateIONetworkDisplay/">
<meta property="og:site_name" content="docmd">
<meta property="og:image" content="/assets/images/docmd-preview.png">
<meta property="og:type" content="website">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="tpPopulateIONetworkDisplay | docmd">
<meta name="twitter:description" content="docmd is a Node.js command-line tool for generating beautiful, lightweight static documentation sites from Markdown files.">
<meta name="twitter:image" content="/assets/images/docmd-preview.png">
<title>tpPopulateIONetworkDisplay : docmd</title>
<link rel="shortcut icon" href="../../../assets/favicon.ico" type="image/x-icon">
<script>// Source file from the docmd project — https://github.com/mgks/docmd
/*
* Initialize the theme from localStorage
*/
(function() {
try {
const storedTheme = localStorage.getItem('docmd-theme');
if (storedTheme) {
document.documentElement.setAttribute('data-theme', storedTheme);
// Also update highlight CSS link to match the stored theme
const highlightThemeLink = document.getElementById('highlight-theme');
if (highlightThemeLink) {
const baseHref = highlightThemeLink.getAttribute('data-base-href');
if (baseHref) {
const newHref = baseHref + `docmd-highlight-${storedTheme}.css`;
highlightThemeLink.setAttribute('href', newHref);
}
}
}
} catch (e) {
console.error('Error applying theme from localStorage', e);
}
})();</script>
<link rel="stylesheet" href="../../../assets/css/docmd-main.css">
<link rel="stylesheet" id="highlight-theme" href="../../../assets/css/docmd-highlight-light.css" data-base-href="../../../assets/css/">
<link rel="stylesheet" href="../../../assets/css/docmd-theme-sky.css">
<!-- Google Analytics GA4 -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-8QVBDQ4KM1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-8QVBDQ4KM1');
</script>
</head>
<body class="sidebar-collapsible"
data-theme="light" data-default-collapsed="false"
data-copy-code-enabled="true">
<aside class="sidebar">
<div class="sidebar-header">
<a href="/" class="logo-link">
<img src="../../../assets/images/docmd-logo-light.png" alt="docmd logo" class="logo-light" >
<img src="../../../assets/images/docmd-logo-dark.png" alt="docmd logo" class="logo-dark" >
</a>
</div>
<nav class="sidebar-nav" aria-label="Main navigation">
<ul>
<li class="" >
<a href="../../../" class="" >
<svg class="lucide-icon icon-home" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8" />
<path d="M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" />
</svg>
<span class="nav-item-title">Welcome</span>
</a>
</li>
<li class="collapsible" data-nav-id="#">
<a href="#" class="" >
<svg class="lucide-icon icon-rocket" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z" />
<path d="m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z" />
<path d="M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0" />
<path d="M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5" />
</svg>
<span class="nav-item-title">Getting Started</span>
<svg class="lucide-icon icon-chevron-right collapse-icon" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m9 18 6-6-6-6" />
</svg>
</a>
<ul class="submenu">
<li class="" >
<a href="https://docmd.mgks.dev" class="" target="_blank" rel="noopener">
<svg class="lucide-icon icon-scroll" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M19 17V5a2 2 0 0 0-2-2H4" />
<path d="M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3" />
</svg>
<span class="nav-item-title">Documentation</span>
<svg class="lucide-icon icon-external-link nav-external-icon" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M15 3h6v6" />
<path d="M10 14 21 3" />
<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" />
</svg>
</a>
</li>
<li class="" >
<a href="https://docmd.mgks.dev/getting-started/installation" class="" target="_blank" rel="noopener">
<svg class="lucide-icon icon-download" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M12 15V3" />
<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" />
<path d="m7 10 5 5 5-5" />
</svg>
<span class="nav-item-title">Installation</span>
<svg class="lucide-icon icon-external-link nav-external-icon" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M15 3h6v6" />
<path d="M10 14 21 3" />
<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" />
</svg>
</a>
</li>
<li class="" >
<a href="https://docmd.mgks.dev/getting-started/basic-usage" class="" target="_blank" rel="noopener">
<svg class="lucide-icon icon-play" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z" />
</svg>
<span class="nav-item-title">Basic Usage</span>
<svg class="lucide-icon icon-external-link nav-external-icon" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M15 3h6v6" />
<path d="M10 14 21 3" />
<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" />
</svg>
</a>
</li>
<li class="" >
<a href="https://docmd.mgks.dev/content" class="" target="_blank" rel="noopener">
<svg class="lucide-icon icon-layout-template" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<rect width="18" height="7" x="3" y="3" rx="1" />
<rect width="9" height="7" x="3" y="14" rx="1" />
<rect width="5" height="7" x="16" y="14" rx="1" />
</svg>
<span class="nav-item-title">Content</span>
<svg class="lucide-icon icon-external-link nav-external-icon" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M15 3h6v6" />
<path d="M10 14 21 3" />
<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" />
</svg>
</a>
</li>
</ul>
</li>
<li class="" >
<a href="https://github.com/mgks/docmd" class="" target="_blank" rel="noopener">
<svg class="lucide-icon icon-github" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4" />
<path d="M9 18c-4.51 2-5-2-7-2" />
</svg>
<span class="nav-item-title">GitHub</span>
<svg class="lucide-icon icon-external-link nav-external-icon" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M15 3h6v6" />
<path d="M10 14 21 3" />
<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" />
</svg>
</a>
</li>
<li class="" >
<a href="https://github.com/sponsors/mgks" class="" target="_blank" rel="noopener">
<svg class="lucide-icon icon-heart" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5" />
</svg>
<span class="nav-item-title">Support the Project</span>
<svg class="lucide-icon icon-external-link nav-external-icon" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M15 3h6v6" />
<path d="M10 14 21 3" />
<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" />
</svg>
</a>
</li>
</ul>
</nav>
</aside>
<div class="main-content-wrapper">
<div class="page-header">
<div class="header-left">
<button id="sidebar-toggle-button" class="sidebar-toggle-button" aria-label="Toggle Sidebar">
<svg class="lucide-icon icon-panel-left-close" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<rect width="18" height="18" x="3" y="3" rx="2" />
<path d="M9 3v18" />
<path d="m16 15-3-3 3-3" />
</svg>
</button>
<h1>tpPopulateIONetworkDisplay</h1>
</div>
<div class="header-right">
<button id="theme-toggle-button" aria-label="Toggle theme" class="theme-toggle-button theme-toggle-header">
<svg class="lucide-icon icon-sun icon-sun" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="4" />
<path d="M12 2v2" />
<path d="M12 20v2" />
<path d="m4.93 4.93 1.41 1.41" />
<path d="m17.66 17.66 1.41 1.41" />
<path d="M2 12h2" />
<path d="M20 12h2" />
<path d="m6.34 17.66-1.41 1.41" />
<path d="m19.07 4.93-1.41 1.41" />
</svg>
<svg class="lucide-icon icon-moon icon-moon" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401" />
</svg>
</button>
</div>
</div>
<main class="content-area">
<div class="content-layout">
<div class="main-content">
<h1 id="tppopulateionetworkdisplay">🖥️ tpPopulateIONetworkDisplay</h1>
<p>La classe <strong>tpPopulateIONetworkDisplay</strong> è una NetLogic che si occupa di comporre e mostrare nella UI la diagnostica completa di tutti gli IO rack remoti presenti nel sistema.<br>
Questa classe raccoglie i dati dai dispositivi remoti configurati e crea dinamicamente i pannelli di visualizzazione per ciascun rack IO.</p>
<hr>
<h2 id="panoramica-generale">🚦 Panoramica generale</h2>
<p>La logica si basa su:</p>
<ul>
<li>Un folder <code>CommDrivers</code> contenente i <code>TagStructure</code> relativi agli IO rack remoti.</li>
<li>Un layout UI (<code>IONodesDisplay</code> di tipo <code>ColumnLayout</code>) dove vengono aggiunti dinamicamente i pannelli rappresentanti ogni IO rack.</li>
<li>La comunicazione con ogni pannello remoto, che a sua volta usa la logica <strong>tpPopulateIORack</strong> per popolare i dettagli dello rack.</li>
</ul>
<hr>
<h2 id="funzionamento-principale">🛠️ Funzionamento principale</h2>
<table>
<thead>
<tr>
<th>Elemento</th>
<th>Descrizione</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Populate()</code></td>
<td>Metodo pubblico esportato che avvia un task asincrono per la composizione dinamica della UI.</td>
</tr>
<tr>
<td><code>populateTask()</code></td>
<td>Metodo che esegue la scansione dei tag di tipo <code>TagStructure</code> e costruisce i pannelli remoti.</td>
</tr>
<tr>
<td><code>getRemoteIONodes(UAReference r)</code></td>
<td>Metodo helper che crea un pannello remoto per ogni rack IO e ne avvia il popolamento UI.</td>
</tr>
</tbody>
</table>
<hr>
<h2 id="in-depth-funzioni-di-tppopulateionetworkdisplay">🔍 In Depth: Funzioni di tpPopulateIONetworkDisplay</h2>
<hr>
<h3 id="populate"><code>Populate()</code></h3>
<blockquote>
<p><strong>Descrizione:</strong><br>
Metodo esportato per avviare la composizione della diagnostica IO in modo asincrono, evitando il blocco del thread UI.</p>
</blockquote>
<hr>
<h3 id="populatetask"><code>populateTask()</code></h3>
<blockquote>
<p><strong>Descrizione:</strong></p>
<ol><li>Recupera il folder <code>CommDrivers</code> contenente i tag strutturati degli IO rack.</li>
<li>Pulisce il layout UI <code>IONodesDisplay</code> per prepararlo a contenere i nuovi pannelli.</li>
<li>Costruisce un array con i nomi dei tag attesi (<code>AB:1734_{slot}SLOT:I:0</code> da 1 a 64).</li>
<li>Filtra i nodi di tipo <code>TagStructureType</code> corrispondenti ai nomi attesi.</li>
<li>Per ciascun nodo valido, richiama il metodo <code>getRemoteIONodes</code> per creare il pannello remoto.</li>
</ol>
</blockquote>
<hr>
<h3 id="getremoteionodesuareference-r"><code>getRemoteIONodes(UAReference r)</code></h3>
<blockquote>
<p><strong>Descrizione:</strong></p>
<ol><li>Ottiene il nodo <code>TagStructure</code> di destinazione dal riferimento passato.</li>
<li>Estrae il nome del dispositivo remoto (<code>remoteIOName</code>).</li>
<li>Crea un pannello (<code>PanelType</code>) figlio del pannello <code>RemoteIO</code>, con nome uguale al dispositivo remoto.</li>
<li>Imposta la variabile <code>RemoteIOName</code> del pannello appena creato con il nome del dispositivo remoto.</li>
<li>Aggiunge il pannello al layout <code>IONodesDisplay</code>.</li>
<li>Effettua una pausa di 250ms (necessaria per problemi di sincronizzazione con dispositivi Rockwell).</li>
<li>Invoca il metodo <code>Populate()</code> della NetLogic <a href="./tpPopulateIORack.md"><code>PopulateIORack</code></a> contenuta allinterno del pannello per popolare i dettagli.</li>
</ol>
</blockquote>
<hr>
<h2 id="note-importanti">⚠️ Note importanti</h2>
<ul>
<li>La classe presuppone che i dispositivi remoti e i relativi tag strutturati siano correttamente configurati nel folder <code>CommDrivers</code>.</li>
<li>La sincronizzazione e il caricamento dei pannelli sono gestiti con una breve pausa, necessaria per garantire la corretta inizializzazione su dispositivi Rockwell.</li>
<li>Ogni pannello remoto utilizza la logica <a href="./tpPopulateIORack.md"><strong>tpPopulateIORack</strong></a> per il popolamento dei dettagli del rack.</li>
</ul>
<hr>
<p>Se vuoi vedere come funziona il popolamento di ogni singolo rack IO, dai unocchiata alla documentazione di <a href="./tpPopulateIORack.md">tpPopulateIORack</a>.</p>
<hr>
</div>
<!-- DEBUG: {"headingsLength":8} -->
<!-- TOC sidebar -->
<div class="toc-sidebar">
<div class="toc-container">
<h2 class="toc-title">On This Page</h2>
<ul class="toc-list">
<li class="toc-item toc-level-2">
<a href="#panoramica-generale" class="toc-link">🚦 Panoramica generale</a>
</li>
<li class="toc-item toc-level-2">
<a href="#funzionamento-principale" class="toc-link">🛠️ Funzionamento principale</a>
</li>
<li class="toc-item toc-level-2">
<a href="#in-depth-funzioni-di-tppopulateionetworkdisplay" class="toc-link">🔍 In Depth: Funzioni di tpPopulateIONetworkDisplay</a>
</li>
<li class="toc-item toc-level-3">
<a href="#populate" class="toc-link">Populate()</a>
</li>
<li class="toc-item toc-level-3">
<a href="#populatetask" class="toc-link">populateTask()</a>
</li>
<li class="toc-item toc-level-3">
<a href="#getremoteionodesuareference-r" class="toc-link">getRemoteIONodes(UAReference r)</a>
</li>
<li class="toc-item toc-level-2">
<a href="#note-importanti" class="toc-link">⚠️ Note importanti</a>
</li>
</ul>
</div>
</div>
</div>
</main>
<footer class="page-footer">
<div class="footer-content">
<div class="user-footer">
© 2025 Project.
</div>
<div class="branding-footer">
Build with <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z"></path><path d="M12 5 9.04 7.96a2.17 2.17 0 0 0 0 3.08c.82.82 2.13.85 3 .07l2.07-1.9a2.82 2.82 0 0 1 3.79 0l2.96 2.66"></path><path d="m18 15-2-2"></path><path d="m15 18-2-2"></path></svg> <a href="https://docmd.mgks.dev" target="_blank" rel="noopener">docmd.</a>
</div>
</div>
</footer>
</div>
<script src="../../../assets/js/docmd-main.js"></script>
<script src="../../../assets/js/docmd-image-lightbox.js"></script>
</body>
</html>