Wiki source code of 4. Structure and Modules Description
Last modified by Iaroslav Platonov on 2026/06/08 10:08
Show last authors
| author | version | line-number | content |
|---|---|---|---|
| 1 | {{html clean="false"}} | ||
| 2 | <style> | ||
| 3 | /* ── Disable XWiki automatic heading counters inside our content ── */ | ||
| 4 | .doc-content h1::before,.doc-content h2::before, | ||
| 5 | .doc-content h3::before,.doc-content h4::before, | ||
| 6 | .doc-content h5::before,.doc-content h6::before { | ||
| 7 | content:none !important; display:none !important; | ||
| 8 | } | ||
| 9 | .doc-content { counter-reset:none !important; } | ||
| 10 | |||
| 11 | /* ── Reading progress bar ── */ | ||
| 12 | #rn-prog { position:fixed;top:0;left:0;height:3px;width:0;background:#005AB4;z-index:9999;pointer-events:none; } | ||
| 13 | |||
| 14 | /* ── Page content wrapper ── */ | ||
| 15 | .doc-wrap { position:relative; } | ||
| 16 | .doc-content { | ||
| 17 | margin-right:224px; | ||
| 18 | border-left:1px solid #E8E8E8; | ||
| 19 | border-right:1px solid #E8E8E8; | ||
| 20 | padding:0 32px; | ||
| 21 | } | ||
| 22 | |||
| 23 | /* ── Right "On This Page" TOC ── */ | ||
| 24 | .doc-toc { | ||
| 25 | position:absolute;top:0;right:0;width:200px; | ||
| 26 | font-size:12.5px;line-height:1.55; | ||
| 27 | padding:20px 0 20px 16px; | ||
| 28 | } | ||
| 29 | .doc-toc.is-fixed { position:fixed;width:200px;overflow-y:auto;z-index:10; } | ||
| 30 | .toc-header { display:flex;justify-content:space-between;align-items:center;margin-bottom:10px; } | ||
| 31 | .toc-header strong { font-size:13px;font-weight:700;color:#222; } | ||
| 32 | .toc-toggle { background:none;border:none;cursor:pointer;color:#555;font-size:14px;padding:0 2px;line-height:1; } | ||
| 33 | .toc-toggle:hover { color:#222; } | ||
| 34 | .doc-toc ul { list-style:none;margin:0;padding:0; } | ||
| 35 | .doc-toc li { margin:0; } | ||
| 36 | .doc-toc a { display:block;padding:3px 0;color:#555;text-decoration:none;border-left:2px solid transparent;transition:color .12s; } | ||
| 37 | .doc-toc a:hover { color:#222;text-decoration:underline; } | ||
| 38 | .doc-toc a.toc-on { color:#222;font-weight:700;border-left:2px solid #005AB4;padding-left:5px; } | ||
| 39 | .tl1 > a { font-weight:600;color:#222; } | ||
| 40 | .tl2 > a { padding-left:14px; } | ||
| 41 | .tl3 > a { padding-left:26px;font-size:12px; } | ||
| 42 | |||
| 43 | /* ── Typography ── */ | ||
| 44 | .doc-content h1 { font-size:1.6em;font-weight:700;color:#222;margin:0 0 6px 0;border:none; } | ||
| 45 | .rn-meta { font-size:.8em;color:#555;margin:0 0 28px 0; } | ||
| 46 | .doc-content h2 { font-size:1.15em;font-weight:700;color:#222;margin:36px 0 10px 0;display:flex;align-items:baseline;gap:7px;scroll-margin-top:16px; } | ||
| 47 | .doc-content h3 { font-size:1em;font-weight:700;color:#222;margin:22px 0 8px 0;display:flex;align-items:baseline;gap:6px;scroll-margin-top:16px; } | ||
| 48 | .doc-content h4 { font-size:.93em;font-weight:700;color:#222;margin:14px 0 6px 0;display:flex;align-items:baseline;gap:5px;scroll-margin-top:16px; } | ||
| 49 | .doc-content p { font-size:.93em;color:#333;line-height:1.75;margin:0 0 12px 0; } | ||
| 50 | .doc-content strong { color:#222; } | ||
| 51 | .doc-content code { background:#f5f5f5;border:1px solid #E8E8E8;border-radius:3px;padding:1px 5px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:.82em;color:#222;line-height:1; } | ||
| 52 | |||
| 53 | /* ── Anchor icon ── */ | ||
| 54 | .anchor-icon { color:#E8E8E8;text-decoration:none;opacity:0;transition:opacity .15s;vertical-align:middle;margin-left:4px;display:inline-flex;align-items:center; } | ||
| 55 | h2:hover .anchor-icon,h3:hover .anchor-icon,h4:hover .anchor-icon { opacity:1; } | ||
| 56 | .anchor-icon:hover { color:#005AB4; } | ||
| 57 | |||
| 58 | /* ── Callout notes ── */ | ||
| 59 | .note { border-radius:6px;padding:12px 16px;margin:14px 0;border:1px solid transparent; } | ||
| 60 | .note-info { background:#e1f1f9 !important;border-color:#b3d4ee !important;border-left:4px solid #005AB4 !important; } | ||
| 61 | .note-warning { background:#fff4ec !important;border-color:#f5cba7 !important;border-left:4px solid #DD5600 !important; } | ||
| 62 | .note-tip { background:#e5f3df !important;border-color:#b7dba5 !important;border-left:4px solid #73A839 !important; } | ||
| 63 | .note-hd { font-weight:700;font-size:.85em;display:flex;align-items:center;gap:5px;margin-bottom:5px; } | ||
| 64 | .note-info .note-hd { color:#003d80 !important; } | ||
| 65 | .note-warning .note-hd { color:#a03d00 !important; } | ||
| 66 | .note-tip .note-hd { color:#3d6b1a !important; } | ||
| 67 | .note-body { font-size:.875em;color:#222 !important;line-height:1.65; } | ||
| 68 | |||
| 69 | /* ── Section index list ── */ | ||
| 70 | .section-index { list-style:disc;padding-left:20px;margin:0 0 20px 0; } | ||
| 71 | .section-index li { margin-bottom:12px; } | ||
| 72 | .section-index li a { color:#005AB4;font-weight:600;font-size:.93em;text-decoration:underline; } | ||
| 73 | .section-index li p { margin:3px 0 0 0;font-size:.875em;color:#333;line-height:1.6; } | ||
| 74 | |||
| 75 | /* ── Parent topic ── */ | ||
| 76 | .parent-topic { font-size:.82em;color:#555;margin:18px 0 24px 0;border-top:1px solid #E8E8E8;padding-top:10px; } | ||
| 77 | .parent-topic a { color:#005AB4; } | ||
| 78 | |||
| 79 | /* ── Accordion ── */ | ||
| 80 | details.acc { border:1px solid #E8E8E8;border-radius:4px;margin-bottom:5px; } | ||
| 81 | details.acc summary { display:flex;align-items:center;gap:8px;padding:9px 12px;cursor:pointer;list-style:none;background:none;user-select:none; } | ||
| 82 | details.acc summary::-webkit-details-marker { display:none; } | ||
| 83 | details.acc summary::before { content:'▶';font-size:.58em;color:#555;transition:transform .18s;flex-shrink:0; } | ||
| 84 | details.acc[open] summary::before { transform:rotate(90deg); } | ||
| 85 | details.acc summary:hover { background:#f5f5f5; } | ||
| 86 | .acc-num { font-size:.8em;color:#555;min-width:28px;font-weight:600; } | ||
| 87 | .acc-title { font-size:.9em;font-weight:700;color:#222;flex:1; } | ||
| 88 | .acc-body { padding:10px 14px 12px 14px;font-size:.88em;color:#333;line-height:1.7; } | ||
| 89 | |||
| 90 | /* ── Images ── */ | ||
| 91 | .fig { margin:12px auto 24px auto;width:fit-content;max-width:100%; } | ||
| 92 | .fig img { border-radius:4px 4px 0 0;border:1px solid #E8E8E8;display:block;cursor:zoom-in;max-width:100%;box-shadow:0 1px 4px rgba(0,0,0,.10);transition:box-shadow .15s; } | ||
| 93 | .fig img:hover { box-shadow:0 3px 12px rgba(0,90,180,.18); } | ||
| 94 | .fig-cap { font-size:.78em;color:#555;margin:0;padding:5px 8px;background:#f5f5f5;border:1px solid #E8E8E8;border-top:none;border-radius:0 0 4px 4px;display:block;width:100%;box-sizing:border-box; } | ||
| 95 | |||
| 96 | /* ── Lightbox ── */ | ||
| 97 | #rn-lb { display:none;position:fixed;inset:0;z-index:9998;background:rgba(0,0,0,.8);cursor:zoom-out;align-items:center;justify-content:center; } | ||
| 98 | #rn-lb.open { display:flex; } | ||
| 99 | #rn-lb-wrap { position:relative;cursor:default;max-width:92vw;max-height:90vh; } | ||
| 100 | #rn-lb-wrap img { max-width:100%;max-height:90vh;border-radius:5px;display:block; } | ||
| 101 | #rn-lb-x { position:absolute;top:-13px;right:-13px;background:#005AB4;color:#fff;width:26px;height:26px;border-radius:50%;border:none;cursor:pointer;font-size:15px;display:flex;align-items:center;justify-content:center; } | ||
| 102 | #rn-lb-cap { position:fixed;bottom:18px;left:50%;transform:translateX(-50%);color:#ddd;font-size:.78em;background:rgba(0,0,0,.55);padding:3px 12px;border-radius:14px;pointer-events:none; } | ||
| 103 | |||
| 104 | /* ── Back to top ── */ | ||
| 105 | #rn-top { position:fixed;bottom:60px;right:60px;z-index:9997;width:36px;height:36px;border-radius:50%;background:#005AB4;color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:0;transform:translateY(8px);transition:opacity .22s,transform .22s;pointer-events:none;box-shadow:0 2px 8px rgba(0,90,180,.3); } | ||
| 106 | #rn-top.on { opacity:1;transform:translateY(0);pointer-events:auto; } | ||
| 107 | #rn-top:hover { background:#0066cc; } | ||
| 108 | |||
| 109 | /* ── Toast ── */ | ||
| 110 | .rn-toast { position:fixed;bottom:66px;right:24px;z-index:9999;background:#222;color:#fff;font-size:.74em;padding:4px 11px;border-radius:4px;pointer-events:none;opacity:0;transition:opacity .18s; } | ||
| 111 | .rn-toast.on { opacity:1; } | ||
| 112 | |||
| 113 | /* ── Tables ── */ | ||
| 114 | .rn-table { width:100%;border-collapse:collapse;margin:8px 0 18px 0;font-size:.875em; } | ||
| 115 | .rn-table th { background:#f5f5f5;text-align:left;padding:7px 12px;font-size:.78em;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:#555;border-bottom:2px solid #E8E8E8; } | ||
| 116 | .rn-table td { padding:7px 12px;border-bottom:1px solid #E8E8E8;color:#333;vertical-align:top; } | ||
| 117 | .rn-table tr:last-child td { border-bottom:none; } | ||
| 118 | .rn-table tr:hover td { background:#f5f5f5; } | ||
| 119 | .sc { display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;background:#deeaf7;color:#005AB4;border-radius:3px;font-size:.8em;font-weight:700; } | ||
| 120 | |||
| 121 | </style> | ||
| 122 | |||
| 123 | <div id="rn-prog"></div> | ||
| 124 | <div id="rn-lb"> | ||
| 125 | <div id="rn-lb-wrap"> | ||
| 126 | <button id="rn-lb-x" onclick="closeLightbox()">✕</button> | ||
| 127 | <img id="rn-lb-img" src="" alt=""/> | ||
| 128 | </div> | ||
| 129 | <div id="rn-lb-cap"></div> | ||
| 130 | </div> | ||
| 131 | <button id="rn-top" onclick="window.scrollTo({top:0,behavior:'smooth'})" title="Back to top"> | ||
| 132 | <svg width="14" height="14" viewBox="0 0 16 16" fill="currentColor"><path d="M8 4l5 5H3z"/></svg> | ||
| 133 | </button> | ||
| 134 | <div class="rn-toast" id="rn-toast">Link copied ✓</div> | ||
| 135 | |||
| 136 | <div class="doc-wrap"> | ||
| 137 | <div class="doc-content"> | ||
| 138 | |||
| 139 | <ul class="section-index"> | ||
| 140 | <li><a href="#s-intro">1. Introduction</a><p>CENTO platform overview and purpose of this document.</p></li> | ||
| 141 | <li><a href="#s-structure">2. CENTO Structure</a><p>General architecture: web part and core system components.</p></li> | ||
| 142 | <li><a href="#s-components">3. Composition and Description</a><p>Detailed description of all 140 CENTO services grouped by function.</p></li> | ||
| 143 | </ul> | ||
| 144 | |||
| 145 | <!-- ═══ 1 ═══ --> | ||
| 146 | <h2 id="s-intro">1. Introduction <a class="anchor-icon" href="javascript:void(0)" onclick="copyAnchor('s-intro')" title="Copy link"><svg width="12" height="12" viewBox="0 0 16 16" fill="currentColor"><path d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"/></svg></a></h2> | ||
| 147 | <p>CENTO is a multifunctional software platform for data collection, processing, and display. It can be used to build various automated systems, including dispatching, electricity and energy resource metering, emergency event registration, power quality control, monitoring, and diagnostics.</p> | ||
| 148 | <p>This document describes the CENTO structure and lists all CENTO components, each with a brief description.</p> | ||
| 149 | |||
| 150 | <!-- ═══ 2 ═══ --> | ||
| 151 | <h2 id="s-structure">2. CENTO Structure <a class="anchor-icon" href="javascript:void(0)" onclick="copyAnchor('s-structure')" title="Copy link"><svg width="12" height="12" viewBox="0 0 16 16" fill="currentColor"><path d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"/></svg></a></h2> | ||
| 152 | <p>The general structure of CENTO is shown in Fig. 2.1. CENTO consists of two main blocks:</p> | ||
| 153 | <ul style="margin:8px 0 14px 20px;font-size:.9em;color:#333;line-height:1.75"> | ||
| 154 | <li><strong>Web part</strong> — provides data to users and contains system configuration tools. Information is delivered via a web browser.</li> | ||
| 155 | <li><strong>Core of the system</strong> — a set of applications running all CENTO components, responsible for collecting, transmitting, processing, and storing data.</li> | ||
| 156 | </ul> | ||
| 157 | <div class="fig"> | ||
| 158 | <img src="/xwiki/bin/download/CENTO%20Manuals/Structure%20and%20Modules%20Description/WebHome/Screenshot%202025-12-03%20at%2018.41.53.png" alt="Fig. 2.1 – The general structure of CENTO" style="max-width:100%;" onclick="openLightbox(this)"/> | ||
| 159 | <p class="fig-cap">Fig. 2.1 – The general structure of CENTO</p> | ||
| 160 | </div> | ||
| 161 | |||
| 162 | <!-- ═══ 3 ═══ --> | ||
| 163 | <h2 id="s-components">3. Composition and Description of CENTO Components <a class="anchor-icon" href="javascript:void(0)" onclick="copyAnchor('s-components')" title="Copy link"><svg width="12" height="12" viewBox="0 0 16 16" fill="currentColor"><path d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"/></svg></a></h2> | ||
| 164 | |||
| 165 | <h3 id="s-web">3.1. Web Part <a class="anchor-icon" href="javascript:void(0)" onclick="copyAnchor('s-web')" title="Copy link"><svg width="12" height="12" viewBox="0 0 16 16" fill="currentColor"><path d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"/></svg></a></h3> | ||
| 166 | <p>The CENTO web interface is built on the <strong>nginx</strong> web server, web application modules (PHP and executable services), and a web browser on the client side. Key infrastructure components:</p> | ||
| 167 | <ul style="margin:8px 0 14px 20px;font-size:.9em;color:#333;line-height:1.75"> | ||
| 168 | <li><strong>MongoDB</strong> — NoSQL database storing system configuration, event logs, mimic diagrams, and their components.</li> | ||
| 169 | <li><strong>InfluxDB</strong> — NoSQL time-series database storing data collected by the system.</li> | ||
| 170 | <li><strong>NATS</strong> — message broker for inter-component data exchange.</li> | ||
| 171 | </ul> | ||
| 172 | |||
| 173 | <h3 id="s-core">3.2. The "Core" of the System <a class="anchor-icon" href="javascript:void(0)" onclick="copyAnchor('s-core')" title="Copy link"><svg width="12" height="12" viewBox="0 0 16 16" fill="currentColor"><path d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"/></svg></a></h3> | ||
| 174 | <p>The core consists of polling and data transmission services, processing services, and auxiliary services.</p> | ||
| 175 | |||
| 176 | <p><strong>Polling and data transmission services</strong> collect data from information sources and transmit it to external systems via the message broker. Certain polling services include binary files <code>sed_metrology_XXX.bin</code> — the metrologically significant part containing data extraction mechanisms and register configurations for the polled devices.</p> | ||
| 177 | <div class="note note-info"> | ||
| 178 | <div class="note-hd"><span>ℹ</span> Note</div> | ||
| 179 | <div class="note-body">When metrologically significant files change, their checksum changes. Checksums are shown on the <strong>Services</strong> tab of <strong>System Information</strong> (Settings → System Information) and are calculated using the MD5 algorithm. Click <strong>Update Information</strong> to refresh.</div> | ||
| 180 | </div> | ||
| 181 | <div class="fig"> | ||
| 182 | <img src="/xwiki/bin/download/CENTO%20Manuals/Structure%20and%20Modules%20Description/WebHome/Screenshot%202025-12-03%20at%2018.47.38.png" alt="Fig. 3.1 – Updating checksums of metrologically significant files" style="max-width:100%;" onclick="openLightbox(this)"/> | ||
| 183 | <p class="fig-cap">Fig. 3.1 – Updating checksums of metrologically significant files</p> | ||
| 184 | </div> | ||
| 185 | |||
| 186 | <p><strong>Data processing services</strong> receive data from the message broker, process it, and write it to the database. Processing services include metrologically significant files <code>sed_metrology_YYY.bin</code> containing algorithms for calculating measured values. The <code>sed_calc_arch</code> service additionally has <code>sed_metrology_formulas.bin</code> for custom pre-calculation formulas marked as metrologically significant.</p> | ||
| 187 | <p><strong>Auxiliary services</strong> ensure the main CENTO services can perform their functions (license management, watchdog, scheduling, backup, replication, etc.).</p> | ||
| 188 | <p>The composition of CENTO services for a given installation depends on its configuration and is shown on the <strong>System Information</strong> tab.</p> | ||
| 189 | |||
| 190 | <!-- Service table by group --> | ||
| 191 | <p style="font-size:.875em;color:#555;margin:20px 0 12px 0"><strong>Table 1</strong> — CENTO software components (140 services)</p> | ||
| 192 | |||
| 193 | <details class="acc" id="s-grp-transfer" open> | ||
| 194 | <summary><span class="acc-num">5</span><span class="acc-title">Data Collection and Transmission Services</span><a class="anchor-icon" href="javascript:void(0)" onclick="copyAnchor('s-grp-transfer')" title="Copy link"><svg width="12" height="12" viewBox="0 0 16 16" fill="currentColor"><path d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"/></svg></a></summary> | ||
| 195 | <div class="acc-body"> | ||
| 196 | <table class="rn-table"> | ||
| 197 | <thead><tr><th style="width:40px">№</th><th style="width:200px">Service</th><th>Function</th></tr></thead> | ||
| 198 | <tbody> | ||
| 199 | <tr><td><span class="sc">1</span></td><td><code>sed_bus_dispatcher</code></td><td>Sequential Device Polling Management Service</td></tr> | ||
| 200 | <tr><td><span class="sc">2</span></td><td><code>sed_xml_reader</code></td><td>Service for processing received XML files 80020</td></tr> | ||
| 201 | <tr><td><span class="sc">3</span></td><td><code>sed_xml_send</code></td><td>XML file transfer service 80020</td></tr> | ||
| 202 | <tr><td><span class="sc">4</span></td><td><code>sed_archive_webapi</code></td><td>Web API service for transmitting archived data per CENTO protocol</td></tr> | ||
| 203 | <tr><td><span class="sc">5</span></td><td><code>sed_s2s_configuration</code></td><td>Configuration transmission service between CENTO servers</td></tr> | ||
| 204 | </tbody> | ||
| 205 | </table> | ||
| 206 | </div> | ||
| 207 | </details> | ||
| 208 | <details class="acc" id="s-grp-standard" open> | ||
| 209 | <summary><span class="acc-num">16</span><span class="acc-title">Standard Protocol Services</span><a class="anchor-icon" href="javascript:void(0)" onclick="copyAnchor('s-grp-standard')" title="Copy link"><svg width="12" height="12" viewBox="0 0 16 16" fill="currentColor"><path d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"/></svg></a></summary> | ||
| 210 | <div class="acc-body"> | ||
| 211 | <table class="rn-table"> | ||
| 212 | <thead><tr><th style="width:40px">№</th><th style="width:200px">Service</th><th>Function</th><th style="width:160px">Metrologically significant</th></tr></thead> | ||
| 213 | <tbody> | ||
| 214 | <tr><td><span class="sc">6</span></td><td><code>sed_modbus_rtd</code></td><td>Real-time data from devices using Modbus TCP / RTU over TCP</td><td><code style="font-size:.75em">sed_metrology_001.bin</code></td></tr> | ||
| 215 | <tr><td><span class="sc">7</span></td><td><code>sed_modbus_rtd_send</code></td><td>Send real-time data to third-party devices via Modbus TCP</td><td><code style="font-size:.75em"></code></td></tr> | ||
| 216 | <tr><td><span class="sc">8</span></td><td><code>sed_modbus_sync</code></td><td>Device time synchronisation via Modbus TCP / RTU over TCP</td><td><code style="font-size:.75em"></code></td></tr> | ||
| 217 | <tr><td><span class="sc">9</span></td><td><code>sed_snmp_rtd</code></td><td>Real-time data via SNMP (v1, v2c, v3) and ICMP</td><td><code style="font-size:.75em"></code></td></tr> | ||
| 218 | <tr><td><span class="sc">10</span></td><td><code>sed_iec103_waveform</code></td><td>Waveform files from devices via IEC 60870-5-103</td><td><code style="font-size:.75em">sed_metrology_393.bin</code></td></tr> | ||
| 219 | <tr><td><span class="sc">11</span></td><td><code>sed_iec104_rtd</code></td><td>Real-time data via IEC 60870-5-104</td><td><code style="font-size:.75em">sed_metrology_011.bin</code></td></tr> | ||
| 220 | <tr><td><span class="sc">12</span></td><td><code>sed_iec104_rtd_send</code></td><td>Send real-time data to third-party devices via IEC 60870-5-104</td><td><code style="font-size:.75em">sed_metrology_012.bin</code></td></tr> | ||
| 221 | <tr><td><span class="sc">13</span></td><td><code>sed_opcda_rtd</code></td><td>Real-time data via OPC DA</td><td><code style="font-size:.75em"></code></td></tr> | ||
| 222 | <tr><td><span class="sc">14</span></td><td><code>sed_opcua_rtd</code></td><td>Real-time data via OPC UA</td><td><code style="font-size:.75em"></code></td></tr> | ||
| 223 | <tr><td><span class="sc">15</span></td><td><code>sed_opcua_arch</code></td><td>Archived data via OPC UA</td><td><code style="font-size:.75em">sed_metrology_402.bin</code></td></tr> | ||
| 224 | <tr><td><span class="sc">16</span></td><td><code>sed_opcua_server</code></td><td>Data transmission via OPC UA</td><td><code style="font-size:.75em"></code></td></tr> | ||
| 225 | <tr><td><span class="sc">17</span></td><td><code>sed_dnp3_rtd</code></td><td>Real-time data via DNP3</td><td><code style="font-size:.75em"></code></td></tr> | ||
| 226 | <tr><td><span class="sc">18</span></td><td><code>sed_ftp_waveform</code></td><td>Waveform files via FTP</td><td><code style="font-size:.75em">sed_metrology_380.bin</code></td></tr> | ||
| 227 | <tr><td><span class="sc">19</span></td><td><code>sed_iec61107_rtd</code></td><td>Real-time data via IEC 62056-21</td><td><code style="font-size:.75em">sed_metrology_61107.bin</code></td></tr> | ||
| 228 | <tr><td><span class="sc">20</span></td><td><code>sed_iec61850_arch</code></td><td>Archived data via IEC 61850</td><td><code style="font-size:.75em"></code></td></tr> | ||
| 229 | <tr><td><span class="sc">21</span></td><td><code>sed_iec61850_rtd</code></td><td>Real-time data via IEC 61850</td><td><code style="font-size:.75em"></code></td></tr> | ||
| 230 | </tbody> | ||
| 231 | </table> | ||
| 232 | </div> | ||
| 233 | </details> | ||
| 234 | <details class="acc" id="s-grp-proprietary" open> | ||
| 235 | <summary><span class="acc-num">45</span><span class="acc-title">Proprietary Protocol Services</span><a class="anchor-icon" href="javascript:void(0)" onclick="copyAnchor('s-grp-proprietary')" title="Copy link"><svg width="12" height="12" viewBox="0 0 16 16" fill="currentColor"><path d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"/></svg></a></summary> | ||
| 236 | <div class="acc-body"> | ||
| 237 | <table class="rn-table"> | ||
| 238 | <thead><tr><th style="width:40px">№</th><th style="width:200px">Service</th><th>Function</th><th style="width:160px">Metrologically significant</th></tr></thead> | ||
| 239 | <tbody> | ||
| 240 | <tr><td><span class="sc">22</span></td><td><code>sed_satec_arch</code></td><td>Archived data and event logs from SATEC devices</td><td><code style="font-size:.75em">sed_metrology_7_8.bin</code></td></tr> | ||
| 241 | <tr><td><span class="sc">23</span></td><td><code>sed_satec_pq_journal</code></td><td>Power quality event logs from SATEC devices</td><td><code style="font-size:.75em">sed_metrology_106.bin</code></td></tr> | ||
| 242 | <tr><td><span class="sc">24</span></td><td><code>sed_satec_pq_report</code></td><td>Power quality reports from SATEC devices</td><td><code style="font-size:.75em">sed_metrology_106.bin</code></td></tr> | ||
| 243 | <tr><td><span class="sc">25</span></td><td><code>sed_satec_waveforms</code></td><td>Waveforms from SATEC via Modbus TCP / RTU over TCP</td><td><code style="font-size:.75em">sed_metrology_108_109.bin</code></td></tr> | ||
| 244 | <tr><td><span class="sc">26</span></td><td><code>sed_iec103_rtd</code></td><td>Real-time data from TOR 200 terminals via IEC 60870-5-103</td><td><code style="font-size:.75em">sed_metrology_391.bin</code></td></tr> | ||
| 245 | <tr><td><span class="sc">27</span></td><td><code>sed_sepam_waveform</code></td><td>Waveforms and time sync from Sepam via Modbus RTU over TCP</td><td><code style="font-size:.75em">sed_metrology_298_299.bin</code></td></tr> | ||
| 246 | <tr><td><span class="sc">28</span></td><td><code>sed_rtu_over_tcp_logikamp_rtd</code></td><td>Real-time data via LogicaMP RTU over TCP</td><td><code style="font-size:.75em">sed_metrology_121.bin</code></td></tr> | ||
| 247 | <tr><td><span class="sc">29</span></td><td><code>sed_rtu_over_tcp_logikamp_arch</code></td><td>Archived data via LogicaMP RTU over TCP</td><td><code style="font-size:.75em">sed_metrology_122.bin</code></td></tr> | ||
| 248 | <tr><td><span class="sc">30</span></td><td><code>sed_axis_video_journal</code></td><td>AXIS camera recording service</td><td><code style="font-size:.75em">sed_metrology_435.bin</code></td></tr> | ||
| 249 | <tr><td><span class="sc">31</span></td><td><code>sed_vzlyotmb_arch</code></td><td>Archives and event logs from Vzlet TSRV-043/027, IVK-TER</td><td><code style="font-size:.75em">sed_metrology_25_133.bin</code></td></tr> | ||
| 250 | <tr><td><span class="sc">32</span></td><td><code>sed_micom_waveforms</code></td><td>Waveforms from Micom via Modbus RTU over TCP</td><td><code style="font-size:.75em">sed_metrology_370.bin</code></td></tr> | ||
| 251 | <tr><td><span class="sc">33</span></td><td><code>sed_pulsar_arch</code></td><td>Archives from Pulsar via Modbus</td><td><code style="font-size:.75em">sed_metrology_342.bin</code></td></tr> | ||
| 252 | <tr><td><span class="sc">34</span></td><td><code>sed_rtu_over_tcp_a1800_arch</code></td><td>Archived data from A1800 meters via Modbus RTU over TCP</td><td><code style="font-size:.75em">sed_metrology_232.bin</code></td></tr> | ||
| 253 | <tr><td><span class="sc">35</span></td><td><code>sed_rtu_over_tcp_a1800_rtd</code></td><td>Real-time data from A1800 meters via Modbus RTU over TCP</td><td><code style="font-size:.75em">sed_metrology_231.bin</code></td></tr> | ||
| 254 | <tr><td><span class="sc">36</span></td><td><code>sed_rtu_over_tcp_acron_arch</code></td><td>Archived data from Acron meters via Modbus RTU over TCP</td><td><code style="font-size:.75em">sed_metrology_142.bin</code></td></tr> | ||
| 255 | <tr><td><span class="sc">37</span></td><td><code>sed_rtu_over_tcp_acron_rtd</code></td><td>Real-time data from Acron meters via Modbus RTU over TCP</td><td><code style="font-size:.75em">sed_metrology_141.bin</code></td></tr> | ||
| 256 | <tr><td><span class="sc">38</span></td><td><code>sed_rtu_over_tcp_bmrz_waveform</code></td><td>Waveforms from BMRZ terminals via Modbus RTU over TCP</td><td><code style="font-size:.75em">sed_metrology_110.bin</code></td></tr> | ||
| 257 | <tr><td><span class="sc">39</span></td><td><code>sed_rtu_over_tcp_bzp03_waveform</code></td><td>Waveforms from BZP-03 terminals via Modbus RTU over TCP</td><td><code style="font-size:.75em"></code></td></tr> | ||
| 258 | <tr><td><span class="sc">40</span></td><td><code>sed_rtu_over_tcp_kmp_rtd</code></td><td>Multitical 601 polling via KMP protocol</td><td><code style="font-size:.75em">sed_metrology_191.bin</code></td></tr> | ||
| 259 | <tr><td><span class="sc">41</span></td><td><code>sed_rtu_over_tcp_majac_arch</code></td><td>Archived data via Mayak protocol</td><td><code style="font-size:.75em">sed_metrology_152.bin</code></td></tr> | ||
| 260 | <tr><td><span class="sc">42</span></td><td><code>sed_rtu_over_tcp_mercury200_rtd</code></td><td>Real-time data via Mercury 200 protocol</td><td><code style="font-size:.75em">sed_metrology_251.bin</code></td></tr> | ||
| 261 | <tr><td><span class="sc">43</span></td><td><code>sed_rtu_over_tcp_mercury_arch</code></td><td>Archives and event logs from Mercury-230 via Mercury-230 protocol</td><td><code style="font-size:.75em">sed_metrology_202.bin</code></td></tr> | ||
| 262 | <tr><td><span class="sc">44</span></td><td><code>sed_rtu_over_tcp_mercury_rtd</code></td><td>Real-time data via Mercury 230 protocol</td><td><code style="font-size:.75em">sed_metrology_201.bin</code></td></tr> | ||
| 263 | <tr><td><span class="sc">45</span></td><td><code>sed_rtu_over_tcp_photon_rtd</code></td><td>Real-time data via Photon RTU over TCP</td><td><code style="font-size:.75em">sed_metrology_221.bin</code></td></tr> | ||
| 264 | <tr><td><span class="sc">46</span></td><td><code>sed_rtu_over_tcp_ref542plus_waveform</code></td><td>Waveforms and time sync from ABB REF 542plus via Modbus RTU over TCP</td><td><code style="font-size:.75em"></code></td></tr> | ||
| 265 | <tr><td><span class="sc">47</span></td><td><code>sed_rtu_over_tcp_set4tm_arch</code></td><td>Archive polling for SET-4TM / PSC meters</td><td><code style="font-size:.75em">sed_metrology_112.bin</code></td></tr> | ||
| 266 | <tr><td><span class="sc">48</span></td><td><code>sed_rtu_over_tcp_set4tm_rtd</code></td><td>Real-time data via SET-4TM RTU over TCP</td><td><code style="font-size:.75em">sed_metrology_111.bin</code></td></tr> | ||
| 267 | <tr><td><span class="sc">49</span></td><td><code>sed_rtu_over_tcp_tem104_arch</code></td><td>Archived data via TEM104 protocol</td><td><code style="font-size:.75em">sed_metrology_162.bin</code></td></tr> | ||
| 268 | <tr><td><span class="sc">50</span></td><td><code>sed_rtu_over_tcp_tem104_rtd</code></td><td>Real-time data via TEM104 protocol</td><td><code style="font-size:.75em">sed_metrology_161.bin</code></td></tr> | ||
| 269 | <tr><td><span class="sc">51</span></td><td><code>sed_rtu_over_tcp_vist_arch</code></td><td>Archived data via VIS.T protocol</td><td><code style="font-size:.75em">sed_metrology_172.bin</code></td></tr> | ||
| 270 | <tr><td><span class="sc">52</span></td><td><code>sed_rtu_over_tcp_vkt5_arch</code></td><td>Archived data from VKT-5 devices</td><td><code style="font-size:.75em">sed_metrology_312.bin</code></td></tr> | ||
| 271 | <tr><td><span class="sc">53</span></td><td><code>sed_rtu_over_tcp_vkt5_rtd</code></td><td>Real-time data from VKT-5 devices</td><td><code style="font-size:.75em">sed_metrology_311.bin</code></td></tr> | ||
| 272 | <tr><td><span class="sc">54</span></td><td><code>sed_vkt7_arch</code></td><td>Archived data from VKT-7 devices</td><td><code style="font-size:.75em"></code></td></tr> | ||
| 273 | <tr><td><span class="sc">55</span></td><td><code>sed_vkt7_rtd</code></td><td>Real-time data from VKT-7 devices</td><td><code style="font-size:.75em"></code></td></tr> | ||
| 274 | <tr><td><span class="sc">56</span></td><td><code>sed_rtu_over_tcp_vtd_arch</code></td><td>Archived data from VTD devices</td><td><code style="font-size:.75em">sed_metrology_182.bin</code></td></tr> | ||
| 275 | <tr><td><span class="sc">57</span></td><td><code>sed_rtu_over_tcp_vtd_rtd</code></td><td>Real-time data from VTD devices</td><td><code style="font-size:.75em">sed_metrology_181.bin</code></td></tr> | ||
| 276 | <tr><td><span class="sc">58</span></td><td><code>sed_uvp_arch</code></td><td>Archive polling for Promavtomatika UVP series devices</td><td><code style="font-size:.75em">sed_metrology_352.bin</code></td></tr> | ||
| 277 | <tr><td><span class="sc">59</span></td><td><code>sed_ce_arch</code></td><td>Archived data from Energomera CE series via IEC61107</td><td><code style="font-size:.75em">sed_metrology_362.bin</code></td></tr> | ||
| 278 | <tr><td><span class="sc">60</span></td><td><code>sed_alpha_arch</code></td><td>Archived data from Alfa-3 (Alfamera) devices</td><td><code style="font-size:.75em">sed_metrology_462_472.bin</code></td></tr> | ||
| 279 | <tr><td><span class="sc">61</span></td><td><code>sed_bug01_rtd</code></td><td>Archived data from BUG-01 devices</td><td><code style="font-size:.75em">sed_metrology_491.bin</code></td></tr> | ||
| 280 | <tr><td><span class="sc">62</span></td><td><code>sed_dymetic_arch</code></td><td>Archived data from Dimetik devices</td><td><code style="font-size:.75em">sed_metrology_552.bin</code></td></tr> | ||
| 281 | <tr><td><span class="sc">63</span></td><td><code>sed_irvis_arch</code></td><td>Archived data via Irvis protocol</td><td><code style="font-size:.75em">sed_metrology_442.bin</code></td></tr> | ||
| 282 | <tr><td><span class="sc">64</span></td><td><code>sed_karat_arch</code></td><td>Archived data from Karat devices</td><td><code style="font-size:.75em">sed_metrology_512.bin</code></td></tr> | ||
| 283 | <tr><td><span class="sc">65</span></td><td><code>sed_lis200_arch</code></td><td>Archived data from EK-260 / EK-270 (Elster)</td><td><code style="font-size:.75em">sed_metrology_452.bin</code></td></tr> | ||
| 284 | <tr><td><span class="sc">66</span></td><td><code>sed_rtu_over_tcp_sepam_waveform</code></td><td>Waveforms from Sepam via Modbus RTU over TCP</td><td><code style="font-size:.75em">sed_metrology_298.bin</code></td></tr> | ||
| 285 | </tbody> | ||
| 286 | </table> | ||
| 287 | </div> | ||
| 288 | </details> | ||
| 289 | <details class="acc" id="s-grp-sql" open> | ||
| 290 | <summary><span class="acc-num">3</span><span class="acc-title">SQL Database Services</span><a class="anchor-icon" href="javascript:void(0)" onclick="copyAnchor('s-grp-sql')" title="Copy link"><svg width="12" height="12" viewBox="0 0 16 16" fill="currentColor"><path d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"/></svg></a></summary> | ||
| 291 | <div class="acc-body"> | ||
| 292 | <table class="rn-table"> | ||
| 293 | <thead><tr><th style="width:40px">№</th><th style="width:200px">Service</th><th>Function</th><th style="width:160px">Metrologically significant</th></tr></thead> | ||
| 294 | <tbody> | ||
| 295 | <tr><td><span class="sc">67</span></td><td><code>sed_sql_rtd</code></td><td>Telemetry data from MySQL</td><td><code style="font-size:.75em">sed_metrology_211.bin</code></td></tr> | ||
| 296 | <tr><td><span class="sc">68</span></td><td><code>sed_sql_arch</code></td><td>Archived data from Microsoft SQL Server</td><td><code style="font-size:.75em"></code></td></tr> | ||
| 297 | <tr><td><span class="sc">69</span></td><td><code>sed_sql_arch_send</code></td><td>Recording archived data in an external SQL database</td><td><code style="font-size:.75em"></code></td></tr> | ||
| 298 | </tbody> | ||
| 299 | </table> | ||
| 300 | </div> | ||
| 301 | </details> | ||
| 302 | <details class="acc" id="s-grp-processing" open> | ||
| 303 | <summary><span class="acc-num">8</span><span class="acc-title">Data Processing Services</span><a class="anchor-icon" href="javascript:void(0)" onclick="copyAnchor('s-grp-processing')" title="Copy link"><svg width="12" height="12" viewBox="0 0 16 16" fill="currentColor"><path d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"/></svg></a></summary> | ||
| 304 | <div class="acc-body"> | ||
| 305 | <table class="rn-table"> | ||
| 306 | <thead><tr><th style="width:40px">№</th><th style="width:200px">Service</th><th>Function</th><th style="width:160px">Metrologically significant</th></tr></thead> | ||
| 307 | <tbody> | ||
| 308 | <tr><td><span class="sc">70</span></td><td><code>sed_controller</code></td><td>Telemetry reception and processing → InfluxDB</td><td><code style="font-size:.75em">sed_metrology_controller.bin</code></td></tr> | ||
| 309 | <tr><td><span class="sc">71</span></td><td><code>sed_events_calc</code></td><td>Event generation based on configured conditions</td><td><code style="font-size:.75em"></code></td></tr> | ||
| 310 | <tr><td><span class="sc">72</span></td><td><code>sed_calc_arch</code></td><td>Metering channel calculation</td><td><code style="font-size:.75em">sed_metrology_formulas.bin</code></td></tr> | ||
| 311 | <tr><td><span class="sc">73</span></td><td><code>sed_calc_rtd</code></td><td>Pre-calculated tag calculation</td><td><code style="font-size:.75em"></code></td></tr> | ||
| 312 | <tr><td><span class="sc">74</span></td><td><code>sed_round_arch</code></td><td>Metering channel calculation with rounding</td><td><code style="font-size:.75em">sed_metrology_round_arch.bin</code></td></tr> | ||
| 313 | <tr><td><span class="sc">75</span></td><td><code>sed_energy_calc</code></td><td>Server-level energy resource calculation</td><td><code style="font-size:.75em">sed_metrology_411_421.bin</code></td></tr> | ||
| 314 | <tr><td><span class="sc">76</span></td><td><code>sed_loadflow_calc</code></td><td>Mode calculation based on information model</td><td><code style="font-size:.75em"></code></td></tr> | ||
| 315 | <tr><td><span class="sc">77</span></td><td><code>sed_storage_writer</code></td><td>Archived data recording (metering and event logs) to InfluxDB and MongoDB</td><td><code style="font-size:.75em"></code></td></tr> | ||
| 316 | </tbody> | ||
| 317 | </table> | ||
| 318 | </div> | ||
| 319 | </details> | ||
| 320 | <details class="acc" id="s-grp-web" open> | ||
| 321 | <summary><span class="acc-num">29</span><span class="acc-title">Web Part Services</span><a class="anchor-icon" href="javascript:void(0)" onclick="copyAnchor('s-grp-web')" title="Copy link"><svg width="12" height="12" viewBox="0 0 16 16" fill="currentColor"><path d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"/></svg></a></summary> | ||
| 322 | <div class="acc-body"> | ||
| 323 | <table class="rn-table"> | ||
| 324 | <thead><tr><th style="width:40px">№</th><th style="width:200px">Service</th><th>Function</th></tr></thead> | ||
| 325 | <tbody> | ||
| 326 | <tr><td><span class="sc">78</span></td><td><code>php5-cgi</code></td><td>Web query service</td></tr> | ||
| 327 | <tr><td><span class="sc">79</span></td><td><code>nginx</code></td><td>Web server</td></tr> | ||
| 328 | <tr><td><span class="sc">80</span></td><td><code>sed_ui</code></td><td>Web resources processing service (js, css, html)</td></tr> | ||
| 329 | <tr><td><span class="sc">81</span></td><td><code>sed_rtd_analysis</code></td><td>Real-time data analysis</td></tr> | ||
| 330 | <tr><td><span class="sc">82</span></td><td><code>sed_auth</code></td><td>User authentication, authorisation, and access rights configuration</td></tr> | ||
| 331 | <tr><td><span class="sc">83</span></td><td><code>sed_auth_privileges</code></td><td>User privilege management</td></tr> | ||
| 332 | <tr><td><span class="sc">84</span></td><td><code>sed_api_gateway</code></td><td>Web request proxy to internal services</td></tr> | ||
| 333 | <tr><td><span class="sc">85</span></td><td><code>sed_dataset_configurator</code></td><td>Dataset management</td></tr> | ||
| 334 | <tr><td><span class="sc">86</span></td><td><code>sed_rtd</code></td><td>Real-time data subscription service</td></tr> | ||
| 335 | <tr><td><span class="sc">87</span></td><td><code>sed_rtd_archive</code></td><td>Archived data generation from real-time data</td></tr> | ||
| 336 | <tr><td><span class="sc">88</span></td><td><code>sed_system</code></td><td>System information user interface</td></tr> | ||
| 337 | <tr><td><span class="sc">89</span></td><td><code>sed_archive</code></td><td>Electricity and energy accounting analysis interfaces</td></tr> | ||
| 338 | <tr><td><span class="sc">90</span></td><td><code>sed_archive_integrity</code></td><td>Data completeness analysis interfaces</td></tr> | ||
| 339 | <tr><td><span class="sc">91</span></td><td><code>sed_pq_reports</code></td><td>Power quality reports</td></tr> | ||
| 340 | <tr><td><span class="sc">92</span></td><td><code>sed_pq_journal</code></td><td>Power quality logs</td></tr> | ||
| 341 | <tr><td><span class="sc">93</span></td><td><code>sed_ras_configurator</code></td><td>Emergency event logger configuration</td></tr> | ||
| 342 | <tr><td><span class="sc">94</span></td><td><code>sed_reports</code></td><td>Report generation, management, and user interfaces</td></tr> | ||
| 343 | <tr><td><span class="sc">95</span></td><td><code>sed_widgets</code></td><td>Drag-and-drop widget user interfaces</td></tr> | ||
| 344 | <tr><td><span class="sc">96</span></td><td><code>sed_menu</code></td><td>CENTO system menu display and configuration</td></tr> | ||
| 345 | <tr><td><span class="sc">97</span></td><td><code>sed_mnemonic_diagrams</code></td><td>Mimic diagram user interfaces</td></tr> | ||
| 346 | <tr><td><span class="sc">98</span></td><td><code>sed_configuration</code></td><td>System configuration interfaces (alerts, mail, formulas, device trees)</td></tr> | ||
| 347 | <tr><td><span class="sc">99</span></td><td><code>sed_devices_configurator</code></td><td>Device, tag, and channel configuration editing</td></tr> | ||
| 348 | <tr><td><span class="sc">100</span></td><td><code>sed_common_event_journal</code></td><td>Configurable event log interfaces</td></tr> | ||
| 349 | <tr><td><span class="sc">101</span></td><td><code>sed_device_event_journal</code></td><td>Device log service</td></tr> | ||
| 350 | <tr><td><span class="sc">102</span></td><td><code>sed_operative_journal</code></td><td>Real-time event log interface</td></tr> | ||
| 351 | <tr><td><span class="sc">103</span></td><td><code>sed_video_journal</code></td><td>Video camera log service</td></tr> | ||
| 352 | <tr><td><span class="sc">104</span></td><td><code>sed_marking</code></td><td>Dispatch tag management</td></tr> | ||
| 353 | <tr><td><span class="sc">105</span></td><td><code>sed_sounds</code></td><td>Sound alert management interface</td></tr> | ||
| 354 | <tr><td><span class="sc">106</span></td><td><code>sed_video_stream</code></td><td>Video streaming from cameras registered in the information model</td></tr> | ||
| 355 | </tbody> | ||
| 356 | </table> | ||
| 357 | </div> | ||
| 358 | </details> | ||
| 359 | <details class="acc" id="s-grp-system" open> | ||
| 360 | <summary><span class="acc-num">28</span><span class="acc-title">System Services</span><a class="anchor-icon" href="javascript:void(0)" onclick="copyAnchor('s-grp-system')" title="Copy link"><svg width="12" height="12" viewBox="0 0 16 16" fill="currentColor"><path d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"/></svg></a></summary> | ||
| 361 | <div class="acc-body"> | ||
| 362 | <table class="rn-table"> | ||
| 363 | <thead><tr><th style="width:40px">№</th><th style="width:200px">Service</th><th>Function</th></tr></thead> | ||
| 364 | <tbody> | ||
| 365 | <tr><td><span class="sc">107</span></td><td><code>nats</code></td><td>Message broker and service registry (service discovery)</td></tr> | ||
| 366 | <tr><td><span class="sc">108</span></td><td><code>influxdb</code></td><td>Time series database</td></tr> | ||
| 367 | <tr><td><span class="sc">109</span></td><td><code>mongod</code></td><td>Configuration and structured data database (event logs, requests)</td></tr> | ||
| 368 | <tr><td><span class="sc">110</span></td><td><code>sed_signals</code></td><td>Internal signal service (remote control, config update, manual polling, recalculation)</td></tr> | ||
| 369 | <tr><td><span class="sc">111</span></td><td><code>sed_debug</code></td><td>Debugging information access service</td></tr> | ||
| 370 | <tr><td><span class="sc">112</span></td><td><code>sed_graphql</code></td><td>Device status subscription service</td></tr> | ||
| 371 | <tr><td><span class="sc">113</span></td><td><code>sed_energy_calc_configuration</code></td><td>Energy resource calculation configuration management</td></tr> | ||
| 372 | <tr><td><span class="sc">114</span></td><td><code>sed_backup</code></td><td>Data backup service (cron-based)</td></tr> | ||
| 373 | <tr><td><span class="sc">115</span></td><td><code>sed_channels</code></td><td>Channel subscription service</td></tr> | ||
| 374 | <tr><td><span class="sc">116</span></td><td><code>sed_channels_data</code></td><td>Protocol status and latest channel data subscription service</td></tr> | ||
| 375 | <tr><td><span class="sc">117</span></td><td><code>sed_emission_archive</code></td><td>Emissions metering data service</td></tr> | ||
| 376 | <tr><td><span class="sc">118</span></td><td><code>sed_profile_archive</code></td><td>Metering data from InfluxDB via gRPC</td></tr> | ||
| 377 | <tr><td><span class="sc">119</span></td><td><code>sed_web_storage</code></td><td>Archived metering data access service</td></tr> | ||
| 378 | <tr><td><span class="sc">120</span></td><td><code>sed_watchdog</code></td><td>CENTO services launch management</td></tr> | ||
| 379 | <tr><td><span class="sc">121</span></td><td><code>sed_scheduler</code></td><td>Scheduled task launcher</td></tr> | ||
| 380 | <tr><td><span class="sc">122</span></td><td><code>sed_license</code></td><td>Licensing service</td></tr> | ||
| 381 | <tr><td><span class="sc">123</span></td><td><code>sed_monitor</code></td><td>System services and application monitoring</td></tr> | ||
| 382 | <tr><td><span class="sc">124</span></td><td><code>sed_telecontrol</code></td><td>Remote control service</td></tr> | ||
| 383 | <tr><td><span class="sc">125</span></td><td><code>sed_notificator</code></td><td>User event notification by e-mail</td></tr> | ||
| 384 | <tr><td><span class="sc">126</span></td><td><code>sed_waveforms_journal</code></td><td>Waveform log service</td></tr> | ||
| 385 | <tr><td><span class="sc">127</span></td><td><code>sed_storage_configurator</code></td><td>InfluxDB database configuration</td></tr> | ||
| 386 | <tr><td><span class="sc">128</span></td><td><code>sed_system_configuration</code></td><td>CENTO system configuration editing</td></tr> | ||
| 387 | <tr><td><span class="sc">129</span></td><td><code>sed_user_settings</code></td><td>User settings configuration</td></tr> | ||
| 388 | <tr><td><span class="sc">130</span></td><td><code>sed_system_event_journal</code></td><td>System event registration and provision (business logic and administration)</td></tr> | ||
| 389 | <tr><td><span class="sc">131</span></td><td><code>sed_tech_event_journal</code></td><td>Technological event processing and management</td></tr> | ||
| 390 | <tr><td><span class="sc">132</span></td><td><code>sed_information_model</code></td><td>System information model management</td></tr> | ||
| 391 | <tr><td><span class="sc">133</span></td><td><code>sed_events_configurator</code></td><td>System event configuration</td></tr> | ||
| 392 | <tr><td><span class="sc">134</span></td><td><code>sed_information_model_editor</code></td><td>Information model editing</td></tr> | ||
| 393 | </tbody> | ||
| 394 | </table> | ||
| 395 | </div> | ||
| 396 | </details> | ||
| 397 | <details class="acc" id="s-grp-backup" open> | ||
| 398 | <summary><span class="acc-num">6</span><span class="acc-title">Server Backup Services</span><a class="anchor-icon" href="javascript:void(0)" onclick="copyAnchor('s-grp-backup')" title="Copy link"><svg width="12" height="12" viewBox="0 0 16 16" fill="currentColor"><path d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"/></svg></a></summary> | ||
| 399 | <div class="acc-body"> | ||
| 400 | <table class="rn-table"> | ||
| 401 | <thead><tr><th style="width:40px">№</th><th style="width:200px">Service</th><th>Function</th></tr></thead> | ||
| 402 | <tbody> | ||
| 403 | <tr><td><span class="sc">135</span></td><td><code>sed_coordinator</code></td><td>Cluster host server selection via Bully leader election algorithm</td></tr> | ||
| 404 | <tr><td><span class="sc">136</span></td><td><code>sed_reserve</code></td><td>Backup server list display</td></tr> | ||
| 405 | <tr><td><span class="sc">137</span></td><td><code>sed_replicator</code></td><td>Log replication between cluster servers</td></tr> | ||
| 406 | <tr><td><span class="sc">138</span></td><td><code>sed_influx_replicator</code></td><td>Data replication (archives and telemetry) between cluster servers</td></tr> | ||
| 407 | <tr><td><span class="sc">139</span></td><td><code>sed_events_replicator</code></td><td>Event replication between cluster servers</td></tr> | ||
| 408 | <tr><td><span class="sc">140</span></td><td><code>sed_fs_synch</code></td><td>File replication (gob files, reports, waveforms) between cluster servers</td></tr> | ||
| 409 | </tbody> | ||
| 410 | </table> | ||
| 411 | </div> | ||
| 412 | </details> | ||
| 413 | |||
| 414 | <div class="parent-topic">Parent topic: <a href="[[CENTO Manuals>>doc:CENTO Manuals.WebHome]]">CENTO Manuals</a></div> | ||
| 415 | |||
| 416 | </div><!-- /doc-content --> | ||
| 417 | |||
| 418 | <nav class="doc-toc"> | ||
| 419 | <div class="toc-header"> | ||
| 420 | <strong>On This Page</strong> | ||
| 421 | <button class="toc-toggle" id="toc-tog" title="Collapse">«</button> | ||
| 422 | </div> | ||
| 423 | <ul id="toc-list"> | ||
| 424 | <li class="tl1"><a href="#s-intro" data-toc>1. Introduction</a></li> | ||
| 425 | <li class="tl1"><a href="#s-structure" data-toc>2. CENTO Structure</a></li> | ||
| 426 | <li class="tl1"><a href="#s-components" data-toc>3. Components</a></li> | ||
| 427 | <li class="tl2"><a href="#s-web" data-toc>3.1 Web Part</a></li> | ||
| 428 | <li class="tl2"><a href="#s-core" data-toc>3.2 Core</a></li> | ||
| 429 | <li class="tl2"><a href="#s-grp-transfer" data-toc>Data Collection (1–5)</a></li> | ||
| 430 | <li class="tl2"><a href="#s-grp-standard" data-toc>Standard Protocols (6–21)</a></li> | ||
| 431 | <li class="tl2"><a href="#s-grp-proprietary" data-toc>Proprietary Protocols (22–66)</a></li> | ||
| 432 | <li class="tl2"><a href="#s-grp-sql" data-toc>SQL Services (67–69)</a></li> | ||
| 433 | <li class="tl2"><a href="#s-grp-processing" data-toc>Processing (70–77)</a></li> | ||
| 434 | <li class="tl2"><a href="#s-grp-web" data-toc>Web Part (78–106)</a></li> | ||
| 435 | <li class="tl2"><a href="#s-grp-system" data-toc>System (107–134)</a></li> | ||
| 436 | <li class="tl2"><a href="#s-grp-backup" data-toc>Backup (135–140)</a></li> | ||
| 437 | </ul> | ||
| 438 | </nav> | ||
| 439 | |||
| 440 | </div><!-- /doc-wrap --> | ||
| 441 | <script> | ||
| 442 | |||
| 443 | (function(){ | ||
| 444 | var bar = document.getElementById('rn-prog'); | ||
| 445 | var top = document.getElementById('rn-top'); | ||
| 446 | window.addEventListener('scroll', function(){ | ||
| 447 | var d = document.documentElement; | ||
| 448 | var pct = d.scrollTop / (d.scrollHeight - d.clientHeight); | ||
| 449 | bar.style.width = (pct*100)+'%'; | ||
| 450 | d.scrollTop > 280 ? top.classList.add('on') : top.classList.remove('on'); | ||
| 451 | }, {passive:true}); | ||
| 452 | |||
| 453 | /* TOC active via IntersectionObserver */ | ||
| 454 | var links = Array.from(document.querySelectorAll('[data-toc]')); | ||
| 455 | var secs = links.map(function(a){ | ||
| 456 | return {el: document.getElementById(a.getAttribute('href').slice(1)), a:a}; | ||
| 457 | }).filter(function(s){return s.el;}); | ||
| 458 | |||
| 459 | var busy = false; | ||
| 460 | var obs = new IntersectionObserver(function(entries){ | ||
| 461 | if (busy) return; | ||
| 462 | entries.forEach(function(e){ | ||
| 463 | if (!e.isIntersecting) return; | ||
| 464 | var i = secs.findIndex(function(s){return s.el===e.target;}); | ||
| 465 | if (i<0) return; | ||
| 466 | secs.forEach(function(s){s.a.classList.remove('toc-on');}); | ||
| 467 | secs[i].a.classList.add('toc-on'); | ||
| 468 | var toc = document.querySelector('.doc-toc'); | ||
| 469 | var link = secs[i].a; | ||
| 470 | toc.scrollTop = link.offsetTop - toc.offsetTop - toc.clientHeight/2 + link.clientHeight/2; | ||
| 471 | }); | ||
| 472 | }, {rootMargin:'-8% 0px -60% 0px', threshold:0}); | ||
| 473 | secs.forEach(function(s){obs.observe(s.el);}); | ||
| 474 | |||
| 475 | links.forEach(function(a){ | ||
| 476 | a.addEventListener('click', function(e){ | ||
| 477 | var id = a.getAttribute('href').slice(1); | ||
| 478 | var el = document.getElementById(id); | ||
| 479 | if (!el) return; | ||
| 480 | e.preventDefault(); | ||
| 481 | busy = true; | ||
| 482 | secs.forEach(function(s){s.a.classList.remove('toc-on');}); | ||
| 483 | a.classList.add('toc-on'); | ||
| 484 | el.scrollIntoView({behavior:'smooth',block:'start'}); | ||
| 485 | setTimeout(function(){busy=false;}, 900); | ||
| 486 | }); | ||
| 487 | }); | ||
| 488 | |||
| 489 | /* TOC collapse */ | ||
| 490 | var tocList = document.getElementById('toc-list'); | ||
| 491 | var togBtn = document.getElementById('toc-tog'); | ||
| 492 | var collapsed = false; | ||
| 493 | togBtn && togBtn.addEventListener('click', function(){ | ||
| 494 | collapsed = !collapsed; | ||
| 495 | tocList.style.display = collapsed ? 'none' : ''; | ||
| 496 | togBtn.textContent = collapsed ? '»' : '«'; | ||
| 497 | }); | ||
| 498 | |||
| 499 | /* Lightbox */ | ||
| 500 | var lb = document.getElementById('rn-lb'); | ||
| 501 | var lbI = document.getElementById('rn-lb-img'); | ||
| 502 | var lbC = document.getElementById('rn-lb-cap'); | ||
| 503 | window.openLightbox = function(img){ | ||
| 504 | lbI.src = img.src; lbI.alt = img.alt; lbC.textContent = img.alt; | ||
| 505 | lb.classList.add('open'); document.body.style.overflow='hidden'; | ||
| 506 | }; | ||
| 507 | window.closeLightbox = function(){ | ||
| 508 | lb.classList.remove('open'); document.body.style.overflow=''; | ||
| 509 | }; | ||
| 510 | lb.addEventListener('click', function(e){if(e.target===lb)closeLightbox();}); | ||
| 511 | document.addEventListener('keydown', function(e){if(e.key==='Escape')closeLightbox();}); | ||
| 512 | |||
| 513 | /* Copy anchor */ | ||
| 514 | var toast = document.getElementById('rn-toast'); | ||
| 515 | var t; | ||
| 516 | window.copyAnchor = function(id){ | ||
| 517 | var url = location.href.split('#')[0]+'#'+id; | ||
| 518 | if(navigator.clipboard) navigator.clipboard.writeText(url).catch(function(){}); | ||
| 519 | else { var x=document.createElement('textarea');x.value=url;document.body.appendChild(x);x.select();document.execCommand('copy');document.body.removeChild(x); } | ||
| 520 | toast.classList.add('on'); | ||
| 521 | clearTimeout(t); | ||
| 522 | t = setTimeout(function(){toast.classList.remove('on');}, 1600); | ||
| 523 | }; | ||
| 524 | |||
| 525 | /* ── Sticky TOC via JS ── | ||
| 526 | Uses position:absolute→fixed switch. No placeholder needed because | ||
| 527 | .doc-content has a fixed margin-right — content width never changes. */ | ||
| 528 | (function(){ | ||
| 529 | var toc = document.querySelector('.doc-toc'); | ||
| 530 | var wrap = document.querySelector('.doc-wrap'); | ||
| 531 | if (!toc || !wrap) return; | ||
| 532 | |||
| 533 | var navbar = document.querySelector('.navbar, nav.navbar, #topBar, header'); | ||
| 534 | var navH = navbar ? navbar.offsetHeight : 0; | ||
| 535 | var footer = document.querySelector('footer, .xwikifooter, #xwikifooter, .bottombar, .sticky-container'); | ||
| 536 | |||
| 537 | function update() { | ||
| 538 | var wr = wrap.getBoundingClientRect(); | ||
| 539 | |||
| 540 | if (wr.top <= navH) { | ||
| 541 | /* Doc-wrap has scrolled above navbar — fix the TOC */ | ||
| 542 | var footerTop = footer ? footer.getBoundingClientRect().top : window.innerHeight; | ||
| 543 | var h = Math.max(0, Math.min(window.innerHeight, footerTop) - navH); | ||
| 544 | |||
| 545 | toc.classList.add('is-fixed'); | ||
| 546 | toc.style.top = navH + 'px'; | ||
| 547 | toc.style.left = (wr.right - 200) + 'px'; /* right edge of wrap minus TOC width */ | ||
| 548 | toc.style.height = h + 'px'; | ||
| 549 | } else { | ||
| 550 | /* Still in natural position */ | ||
| 551 | toc.classList.remove('is-fixed'); | ||
| 552 | toc.style.top = toc.style.left = toc.style.height = ''; | ||
| 553 | } | ||
| 554 | } | ||
| 555 | |||
| 556 | requestAnimationFrame(function(){ requestAnimationFrame(function(){ | ||
| 557 | update(); | ||
| 558 | window.addEventListener('scroll', update, {passive:true}); | ||
| 559 | window.addEventListener('resize', update, {passive:true}); | ||
| 560 | }); }); | ||
| 561 | })(); | ||
| 562 | |||
| 563 | /* ── Left panel navigation hints ── */ | ||
| 564 | (function(){ | ||
| 565 | var hints = { | ||
| 566 | 'Preface': 'Introduction to CENTO Software documentation', | ||
| 567 | '1. User Manual': 'Web interface guide — login, diagrams, analysis, logs, reports', | ||
| 568 | '2. Setup Manual': 'System configuration and setup for administrators', | ||
| 569 | '3. Metering Channels': 'Metering channel configuration and data collection setup', | ||
| 570 | '4. Structure and Modules Description': 'CENTO system architecture and module overview', | ||
| 571 | '5. Diagrams Development Manual': 'Creating and configuring SCADA mimic diagrams', | ||
| 572 | '6. Flexible Reports Guide': 'Building configurable tabular reports from metering data', | ||
| 573 | '7. Events Setup': 'Configuring event rules, thresholds, and notifications', | ||
| 574 | '8. Control Setup Manual': 'Setting up remote control and switching operations', | ||
| 575 | 'Network Diagram (CLOUD)': 'CENTO deployment topology for cloud installations', | ||
| 576 | 'Network Diagram (On-Prem)': 'CENTO deployment topology for on-premises installations', | ||
| 577 | 'Server Configuration Example': 'Reference server setup and configuration example', | ||
| 578 | 'Technical Requirements': 'Hardware and software requirements for CENTO deployment', | ||
| 579 | 'DEMO server': 'Access the live CENTO demo environment', | ||
| 580 | 'Release Notes': 'Changelog and version history for the CENTO platform', | ||
| 581 | }; | ||
| 582 | document.querySelectorAll('#leftPanels a').forEach(function(a){ | ||
| 583 | var text = a.textContent.trim(); | ||
| 584 | var hint = hints[text] || hints[text.replace(/^\d+\.\s*/, '')]; | ||
| 585 | if (hint) a.setAttribute('data-hint', hint); | ||
| 586 | }); | ||
| 587 | })(); | ||
| 588 | })(); | ||
| 589 | |||
| 590 | </script> | ||
| 591 | {{/html}} |