<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marco</title>
    <description>The latest articles on DEV Community by Marco (@pezzullo).</description>
    <link>https://dev.to/pezzullo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3920651%2F9ef050df-df52-4756-987e-57e731257437.png</url>
      <title>DEV Community: Marco</title>
      <link>https://dev.to/pezzullo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pezzullo"/>
    <language>en</language>
    <item>
      <title>PIC64-HPSC: what early radiation results mean for RISC-V firmware in space</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Fri, 30 Oct 2026 08:25:17 +0000</pubDate>
      <link>https://dev.to/pezzullo/pic64-hpsc-what-early-radiation-results-mean-for-risc-v-firmware-in-space-1gjk</link>
      <guid>https://dev.to/pezzullo/pic64-hpsc-what-early-radiation-results-mean-for-risc-v-firmware-in-space-1gjk</guid>
      <description>&lt;p&gt;&lt;strong&gt;Microchip's PIC64-HPSC&lt;/strong&gt; has reached another milestone in the development of next-generation spaceflight computing. In its update of &lt;strong&gt;October 27, 2026&lt;/strong&gt;, the company reports early radiation-characterization results for the &lt;strong&gt;PIC64-HPSC1000-RH&lt;/strong&gt; variant and progress in customer evaluations. For embedded-system developers, the interest lies in combining multicore RISC-V processing, fault management and onboard communications.&lt;/p&gt;

&lt;p&gt;The family was &lt;a href="https://ir.microchip.com/news-events/press-releases/detail/1250/microchip-unveils-industrys-highest-performance-64-bit-hpscmicroprocessor-mpu-family-for-a-new-era-of-autonomous-space-computing" rel="noopener noreferrer"&gt;introduced on July 9, 2024&lt;/a&gt;. The latest announcement concerns the platform's maturation. Understanding it requires separating architectural capabilities, experimental findings and the requirements of a particular mission.&lt;/p&gt;

&lt;h2&gt;
  
  
  The technical points behind the announcement
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Computing:&lt;/strong&gt; eight 64-bit SiFive X280 application cores, alongside dedicated system and security controllers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Radiation:&lt;/strong&gt; early TID characterization to 200 krad(Si) and SEL testing to 78.2 MeV·cm²/mg on the PIC64-HPSC1000-RH, under the conditions specified by Microchip.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Development:&lt;/strong&gt; customers in the Early Access Program are evaluating silicon and development kits; integration into a flight system still requires mission-specific verification.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What the announced results establish
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.microchip.com/en-us/about/news-releases/products/microchip-achieves-key-program-milestones-for-pic64-hpsc-spaceflight-computing-series" rel="noopener noreferrer"&gt;Microchip's October 27 announcement&lt;/a&gt; also describes system-controller operation during SEE characterization completed to date, without uncorrected errors or a need for external resets. That finding has a defined scope: the particular controller and the reported test campaign. It does not establish the absence of errors across every subsystem, workload or radiation environment.&lt;/p&gt;

&lt;p&gt;The engineering significance is the transition from a proposed design to measured behavior on silicon. Assessing a mission, however, requires the complete reports: samples and lots, supply voltages, temperatures, bias conditions, workloads, dosimetry and acceptance criteria.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inside the architecture: eight application cores, ten cores overall
&lt;/h2&gt;

&lt;p&gt;Despite the PIC name, PIC64-HPSC is a &lt;strong&gt;64-bit RISC-V MPU&lt;/strong&gt;. Its application complex contains &lt;strong&gt;eight SiFive Intelligence X280 cores with vector extensions&lt;/strong&gt;; an additional core manages the system, while a separate controller handles security. This explains why the product page lists ten cores overall while application-processing specifications refer to eight.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://ww1.microchip.com/downloads/aemDocuments/documents/MPU64/ProductDocuments/Brochures/PIC64-HPSC-Series-00005391.pdf" rel="noopener noreferrer"&gt;DS00005391D technical brochure&lt;/a&gt; specifies frequencies up to 1 GHz and different core and cache configurations. Functional separation matters: image processing, system supervision and key protection have different requirements even when they share a device.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F34fz9zpq6dxen1r6ht31.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F34fz9zpq6dxen1r6ht31.webp" alt="PIC64-HPSC processor and surrounding components on an onboard computing board" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;PIC64-HPSC: 64-bit multicore RISC-V processing for onboard systems. Conceptual illustration.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Vector processing: how to interpret the performance figures
&lt;/h3&gt;

&lt;p&gt;At the family's introduction, Microchip specified up to &lt;strong&gt;2 TOPS at int8&lt;/strong&gt; or &lt;strong&gt;1 TFLOPS at bfloat16&lt;/strong&gt; for vector matrix-multiplication operations across all eight cores. Those figures refer to particular operations and numerical precisions. They do not describe the execution speed of every algorithm or the performance of a complete onboard application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An engineering assessment&lt;/strong&gt; must account for transfers, memory access, synchronization, the operating system and power consumption. A classifier may benefit from vector operations; a pipeline dominated by acquisition and I/O may remain bandwidth-limited. Selecting a configuration requires measuring latency, energy and correctness on the actual workload, including fault conditions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The science: what radiation does to space electronics
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.nasa.gov/reference/jsc-radiation/" rel="noopener noreferrer"&gt;NASA's Radiation Hardness Assurance material&lt;/a&gt; describes environments that include particles trapped in planetary magnetic fields, solar-particle events and galactic cosmic rays. Orbit, inclination, duration and shielding change the exposure: two satellites described simply as operating in LEO can face substantially different radiation profiles.&lt;/p&gt;

&lt;p&gt;At least three phenomena must be distinguished: &lt;strong&gt;total ionizing dose&lt;/strong&gt;, &lt;strong&gt;displacement damage&lt;/strong&gt; and &lt;strong&gt;single-event effects&lt;/strong&gt;. Good behavior against one does not establish immunity to the others. As &lt;a href="https://www.esa.int/gsp/ACT/projects/radiation_hardness/" rel="noopener noreferrer"&gt;ESA's discussion of radiation-resistant circuits&lt;/a&gt; explains, semiconductor-process properties and design techniques affect a circuit's response. The RISC-V ISA defines executable instructions; the ISA alone does not make a chip radiation-resistant.&lt;/p&gt;

&lt;h3&gt;
  
  
  TID: 200 krad(Si) is an absorbed dose in silicon
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Total Ionizing Dose&lt;/strong&gt; describes absorbed ionizing energy per unit mass. In MOS devices, trapped charge in oxides and interface states can alter threshold voltages, leakage currents and electrical margins. The response also depends on technology, dose rate, temperature, bias and annealing.&lt;/p&gt;

&lt;p&gt;The physical definition and unit conversion are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;D = absorbed energy / mass
1 rad = 0.01 Gy = 0.01 J/kg
200 krad(Si) = 2,000 Gy(Si) = 2 kGy(Si)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;(Si)&lt;/strong&gt; identifies the reference material. These quantities describe absorption in silicon and must not be confused with a biological equivalent dose in sieverts. &lt;a href="https://www.nasa.gov/wp-content/uploads/2020/10/ksw_radiation_hardness_drivers_for_mission_success_-_what_we_have_learned.pdf" rel="noopener noreferrer"&gt;NASA GSFC material on radiation hardness&lt;/a&gt; provides context for the terminology and characterization process.&lt;/p&gt;

&lt;p&gt;The family documentation distinguishes a &lt;strong&gt;100 krad(Si) specification with testing to 200 krad&lt;/strong&gt; for the RH variant. The 2026 announcement reports an early characterization result at 200 krad(Si). Treating that figure automatically as a newly guaranteed operating dose would erase the distinction between an experimental result and a device specification.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo7nes8g806wisf5ka8gy.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo7nes8g806wisf5ka8gy.webp" alt="Scientific comparison of TID absorbed dose in silicon and SEL testing described by linear energy transfer" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;TID and SEL describe different phenomena: accumulated ionizing dose and response to a single-particle effect.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  SEE and SEL: why LET is not total dose
&lt;/h3&gt;

&lt;p&gt;A single particle may generate enough charge to disturb a circuit node. A &lt;strong&gt;single-event upset (SEU)&lt;/strong&gt; can change a bit; a &lt;strong&gt;single-event transient (SET)&lt;/strong&gt; produces a transient disturbance; a &lt;strong&gt;single-event latch-up (SEL)&lt;/strong&gt; can trigger a sustained parasitic high-current path. The outcome depends on the device and its protections: latch-up may require power interruption and can become destructive if the current is not controlled.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linear Energy Transfer&lt;/strong&gt;, in the density-normalized form commonly used in component testing, describes energy deposition along a particle's track:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LET = −(1 / ρ) · dE/dx
unit: MeV·cm²/mg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Consequently, &lt;strong&gt;78.2 MeV·cm²/mg&lt;/strong&gt; is neither accumulated dose nor the total energy of an arbitrary ion. Microchip's SEL result applies within its stated experimental conditions. Comparing devices also requires ion species and energy, penetration, angle of incidence, temperature, voltage and fluence. The &lt;a href="https://www.spenvis.oma.be/ecss/e_st_10_12c/ecss_09_01_00.htm" rel="noopener noreferrer"&gt;ECSS material available through SPENVIS&lt;/a&gt; distinguishes these effects and introduces cross-section as a measure of susceptibility.&lt;/p&gt;

&lt;h3&gt;
  
  
  From a test result to mission risk: cross-section and statistics
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;cross-section σ&lt;/strong&gt; expresses susceptibility to an effect, typically in cm² per device or per bit. For heavy ions, it is often characterized as a function of LET. A simplified event-rate model combines this response with the expected differential flux behind shielding:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;R ≈ ∫ σ(L) · φ(L) dL
Expected event count ≈ R · duration
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, &lt;strong&gt;L&lt;/strong&gt; denotes LET and &lt;strong&gt;φ(L)&lt;/strong&gt; is the differential flux consistent with the chosen model. This explains the method; it is not a calculation for PIC64-HPSC. The complete response curves and mission profile are unavailable in the announcement. Protons and other mechanisms may require energy-based models and separate contributions.&lt;/p&gt;

&lt;p&gt;Even “zero observed events” needs a statistical interpretation. Under an ideal-detection Poisson counting model, with zero events observed during fluence &lt;strong&gt;F&lt;/strong&gt;, the one-sided 95% upper bound is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;P(0 events) = exp(−μ)
μ95 = −ln(0.05) ≈ 3
σ95 ≈ 3 / F
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The derivation shows why observing no events places an upper bound on susceptibility rather than proving it is zero. Without fluence, monitoring coverage and test configuration, the announcement does not support a reliable numerical event-rate estimate.&lt;/p&gt;

&lt;h2&gt;
  
  
  RH, RT and Engineering Model: choosing the appropriate variant
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://www.microchip.com/en-us/products/microprocessors/64-bit-mpus/pic64-hpsc" rel="noopener noreferrer"&gt;official family page&lt;/a&gt; distinguishes radiation-hardened and radiation-tolerant devices for different applications. The table summarizes family-level information; the October 27 result concerns the RH variant specifically.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Family documentation: check the exact part number and documentation revision applicable to the design.&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Variant&lt;/th&gt;
&lt;th&gt;Indicative applications&lt;/th&gt;
&lt;th&gt;Reported radiation information&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PIC64-HPSC1000-RH&lt;/td&gt;
&lt;td&gt;MEO, GEO, deep space&lt;/td&gt;
&lt;td&gt;TID 100 krad(Si), testing to 200 krad; SEL approximately 78 MeV·cm²/mg in family documentation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PIC64-HPSC1100-RT&lt;/td&gt;
&lt;td&gt;LEO and New Space applications&lt;/td&gt;
&lt;td&gt;TID 50 krad(Si); SEL 42 MeV·cm²/mg.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Engineering Model&lt;/td&gt;
&lt;td&gt;Development and laboratory work&lt;/td&gt;
&lt;td&gt;The product table does not assign flight-applicable TID or SEL values.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A similar software environment makes development easier, but does not make laboratory models and mission devices interchangeable. Guaranteed conditions, qualification status and the documentation for the precise orderable part must be checked.&lt;/p&gt;

&lt;h2&gt;
  
  
  System reliability: lockstep, ECC and isolation
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://ww1.microchip.com/downloads/aemDocuments/documents/MPU64/ProductDocuments/SupportingCollateral/Dawn-of-HPSC-Era-in-Space-Computing-White-Paper.pdf" rel="noopener noreferrer"&gt;Microchip's technical white paper&lt;/a&gt; describes multiple protection layers: configurable &lt;strong&gt;Dual-Core Lockstep&lt;/strong&gt; pairs, &lt;strong&gt;WorldGuard&lt;/strong&gt; hardware partitioning, ECC protection and memory-interface error correction with scrubbing functions.&lt;/p&gt;

&lt;p&gt;In lockstep, paired cores execute together and a mismatch can reveal a fault. That supports detection, but does not automatically identify the correct result or replace a recovery strategy. Cores allocated to redundancy are not simultaneously independent throughput resources for the application.&lt;/p&gt;

&lt;p&gt;ECC corrects the error classes supported by its code and memory configuration. &lt;em&gt;Scrubbing&lt;/em&gt; periodically checks and rewrites corrected data to limit error accumulation. Hardware isolation constrains access between domains; meeting deadlines additionally requires analysis of scheduling, arbitration and contention for shared resources.&lt;/p&gt;

&lt;p&gt;These capabilities belong within a &lt;strong&gt;Fault Detection, Isolation and Recovery&lt;/strong&gt; architecture. NASA's &lt;a href="https://www.nasa.gov/wp-content/uploads/2015/04/techbul_19-01-1_120321-final.pdf" rel="noopener noreferrer"&gt;NESC recommendations on SEE&lt;/a&gt; emphasize considering both unrecoverable effects and recoverable errors, including recovery time. A system that restarts must also restore a coherent operational state.&lt;/p&gt;

&lt;h2&gt;
  
  
  Onboard networks and autonomy: data must reach the cores
&lt;/h2&gt;

&lt;p&gt;The design combines Ethernet TSN, SpaceWire, PCIe Gen 3 and CXL 2.0 support. The cited &lt;strong&gt;240 Gbit/s&lt;/strong&gt; Ethernet-switch figure describes aggregate internal switching capacity, rather than the rate of an individual port. RoCEv2 supports low-latency transfers with less CPU involvement. These interfaces connect computing resources to sensors and potential accelerators.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An illustrative design scenario&lt;/strong&gt; is an Earth-observation pipeline: acquisition, calibration, selection of useful regions, compression and downlink preparation. Local processing can reduce the volume sent to Earth. Actual benefits depend on the algorithm, required scientific quality and available energy; fewer transmitted bytes alone do not guarantee a better mission result.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9sf777ewl0c4dwpzpqig.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9sf777ewl0c4dwpzpqig.webp" alt="Satellite with articulated solar arrays, a high-gain antenna and optical instrumentation above Earth" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Satellite platform with articulated solar arrays, a high-gain antenna and optical and thermal subsystems. Conceptual application scenario. Earth: NASA/Goddard Space Flight Center Scientific Visualization Studio.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Implications for firmware and mission-software developers
&lt;/h2&gt;

&lt;p&gt;The evaluation platform and BSP allow development to begin before the final board exists. The &lt;a href="https://ww1.microchip.com/downloads/aemDocuments/documents/MPU64/ProductDocuments/Brochures/PIC64-HPSC-Evaluation-Platform-00005464.pdf" rel="noopener noreferrer"&gt;Evaluation Platform documentation&lt;/a&gt; describes a modular baseboard, expansion options and daughter cards. The official ecosystem includes Linux, RTEMS and hypervisors. Declared support must be checked against the versions actually delivered and the peripherals used by the application.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.nasa.gov/wp-content/uploads/2024/07/hpsc-white-paper-tmg-26jun2024-final.pdf" rel="noopener noreferrer"&gt;NASA HPSC white paper&lt;/a&gt; also discusses power management and partitioning: available processing capability changes with the mission phase. Software therefore needs explicit operating transitions, priorities and degraded modes.&lt;/p&gt;

&lt;p&gt;Five activities provide a useful engineering verification path:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Define expected fault behavior.&lt;/strong&gt; Establish which functions must continue, which may stop and which require transition to a safe state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate workloads and domains.&lt;/strong&gt; Allocate control, communications and payload processing; configure access rights, DMA, interrupts and timing budgets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Measure beyond averages.&lt;/strong&gt; Capture peak latency, missed deadlines and energy use during contention, memory corrections, timeouts and recovery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inject controlled faults.&lt;/strong&gt; Exercise corrupted data, stalled peripherals, resets and interrupted transfers; verify telemetry, state consistency and restart behavior. Such tests assess recovery logic without replacing physical irradiation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make configurations reproducible.&lt;/strong&gt; Track the BSP, toolchain, boot images, ECC and isolation settings alongside each test result.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In practical &lt;a href="https://www.siliconlogix.it/en/contact" rel="noopener noreferrer"&gt;embedded firmware and Linux integration work&lt;/a&gt;, hardware availability must be accompanied by software that can be measured, observed and recovered.&lt;/p&gt;

&lt;h2&gt;
  
  
  The engineering significance of this milestone
&lt;/h2&gt;

&lt;p&gt;Early PIC64-HPSC1000-RH results bring a platform combining vector processing, fault management and onboard connectivity closer to practical integration. For an actual project, the next step is to connect characterization reports to mission requirements and verify the entire chain: processor, memory, power supplies, board and software.&lt;/p&gt;

&lt;p&gt;The decisive question is &lt;strong&gt;which function the system continues to perform, with what timing and data quality, when an error occurs&lt;/strong&gt;. That is the engineering measure of the value of greater computing capability in space.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical sources
&lt;/h2&gt;

&lt;p&gt;Primary sources are linked throughout: Microchip announcements and documentation, NASA Radiation Hardness Assurance material, and ESA and ECSS references on radiation effects in semiconductors. The program update is dated October 27, 2026. Specifications should be checked against the variant and revision applicable to the design.&lt;/p&gt;




&lt;p&gt;Originally published on &lt;a href="https://www.siliconlogix.it/en/article/pic64-hpsc-risc-v-in-space-early-radiation-results-and-firmware-challenges" rel="noopener noreferrer"&gt;Silicon LogiX&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>embedded</category>
      <category>riscv</category>
      <category>programming</category>
      <category>hardware</category>
    </item>
    <item>
      <title>Photovoltaics and EV charging: EEBUS and embedded Linux in SLX SolarPilot</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Tue, 27 Oct 2026 18:09:57 +0000</pubDate>
      <link>https://dev.to/pezzullo/photovoltaics-and-ev-charging-eebus-and-embedded-linux-in-slx-solarpilot-26a6</link>
      <guid>https://dev.to/pezzullo/photovoltaics-and-ev-charging-eebus-and-embedded-linux-in-slx-solarpilot-26a6</guid>
      <description>&lt;p&gt;The oven is switched on, solar production drops and the car is charging. These actions involve different parts of the home, yet meet in the same electrical balance. An energy management system needs to know available power, respect device limits and decide which requests can adapt. Testing those decisions requires a coherent model and communication that can be observed through to its result.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SLX SolarPilot&lt;/strong&gt; connects a virtual residential plant to a Linux touch controller. The Windows simulator reproduces photovoltaics, storage, appliances and EV charging; the embedded application uses LVGL on Raspberry Pi and exchanges data through EEBUS. The bench makes it possible to study calculations, protocols and operator interaction together.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.siliconlogix.it/en/solution/slx-solarpilot-touch-energy-controller-and-3d-solar-simulator" rel="noopener noreferrer"&gt;SolarPilot project page&lt;/a&gt; presents the application and architecture. This article examines physical quantities, communication choices and criteria for verifiable testing. The &lt;a href="https://github.com/Silicon-Logix/slx-solarpilot" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt; and &lt;a href="https://github.com/Silicon-Logix/slx-solarpilot/releases/tag/v0.4.5" rel="noopener noreferrer"&gt;Windows release 0.4.5&lt;/a&gt; are available for evaluation.&lt;/p&gt;

&lt;h2&gt;
  
  
  kW and kWh: two different questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Power&lt;/strong&gt; describes the rate of energy transfer at a given instant. &lt;strong&gt;Energy&lt;/strong&gt; accounts for that transfer over time. A demand of 2 kW maintained for half an hour corresponds to 1 kWh: &lt;code&gt;2 kW × 0.5 h = 1 kWh&lt;/code&gt;. When a load changes, power must be integrated over the different intervals.&lt;/p&gt;

&lt;p&gt;The SolarPilot engine uses a one-second physical step. An interval at constant power P, expressed in watts, contributes energy according to &lt;code&gt;ΔE [Wh] = P [W] × Δt [s] / 3600&lt;/code&gt;. A 2000 W load maintained for 180 seconds therefore transfers 100 Wh. This simple check helps reveal unit errors, conversions applied twice and intervals counted beyond the end of a charging session.&lt;/p&gt;

&lt;p&gt;Installed photovoltaic power, expressed in kWp, is another quantity: it describes module nameplate capacity under test conditions. It does not establish the energy produced in a day or guarantee constant operating power.&lt;/p&gt;

&lt;h2&gt;
  
  
  From sunlight to power available in the home
&lt;/h2&gt;

&lt;p&gt;Photovoltaic modules generate DC electricity. The inverter converts it for the AC side of the installation. Irradiance on the module plane, orientation, inclination, cell temperature and converter limits contribute to the result. The &lt;a href="https://joint-research-centre.ec.europa.eu/photovoltaic-geographical-information-system-pvgis/general-information/data-sources-calculation-methods_en" rel="noopener noreferrer"&gt;JRC's PVGIS calculation methods&lt;/a&gt; describe these factors and distinguish module temperature from air temperature.&lt;/p&gt;

&lt;p&gt;A simplified educational relationship is &lt;code&gt;Pdc ≈ Pstc × (G / 1000) × [1 + γ × (Tcell − 25)]&lt;/code&gt;. G is irradiance in W/m², Tcell is cell temperature in degrees Celsius and γ is the module temperature coefficient. Reference conditions use 1000 W/m² and a cell temperature of 25 °C. The relationship helps interpret the phenomena; it does not replace a complete component model.&lt;/p&gt;

&lt;p&gt;Sixteen 450 Wp modules provide 7.2 kWp of nameplate capacity. Assuming, solely for this illustrative calculation, G = 800 W/m², Tcell = 45 °C and γ = −0.0035 per degree, the temperature factor is 0.93 and estimated DC power is approximately 5.36 kW. These are declared assumptions, not a forecast for a particular roof or commercial module. &lt;a href="https://pvpmc.sandia.gov/modeling-guide/2-dc-module-iv/point-value-models/pvwatts/" rel="noopener noreferrer"&gt;Sandia's PVPMC description of PVWatts&lt;/a&gt; examines models based on irradiance and temperature.&lt;/p&gt;

&lt;p&gt;The inverter adds its own constraint. If available DC energy would support power above the AC limit, output is capped: this is &lt;em&gt;clipping&lt;/em&gt;. Module capacity, inverter rating and storage capacity must therefore remain separate parameters. SolarPilot's instantaneous model is deterministic and simplified: it projects solar components onto panels and applies temperature factors and limits, without calculating detailed local shading, electrical strings or complete MPPT tracking.&lt;/p&gt;

&lt;h2&gt;
  
  
  PVGIS: a historical reference with retained parameters
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://joint-research-centre.ec.europa.eu/photovoltaic-geographical-information-system-pvgis/using-pvgis-5/pvgis-5-user-manual_en" rel="noopener noreferrer"&gt;PVGIS&lt;/a&gt; provides photovoltaic data and production estimates for declared locations and configurations. The project includes reference responses for Bologna, Rome and Palermo: 1 kWp on the south-facing group, an inclination of approximately 26.565°, the SARAH3 database and system losses set to 14%. The monthly view scales them by the south-facing group's nameplate power.&lt;/p&gt;

&lt;p&gt;These data do not change automatically when an object rotates in the scene, do not estimate the north-facing roof section and do not predict a cloud passing in the next few seconds. Instantaneous simulation remains a separate path. The declared 14% is already included in the PVGIS response: subtracting it again would reduce the result twice. The &lt;a href="https://joint-research-centre.ec.europa.eu/photovoltaic-geographical-information-system-pvgis/getting-started-pvgis/using-pvgis-frequently-asked-questions_en" rel="noopener noreferrer"&gt;official losses FAQ&lt;/a&gt; also explains why successive loss factors combine multiplicatively.&lt;/p&gt;

&lt;h2&gt;
  
  
  The balance must close at every interval
&lt;/h2&gt;

&lt;p&gt;The AC household model adopts an explicit convention: grid power is positive when importing and battery power is positive when discharging. Battery charging and grid export are negative. The fundamental numerical check is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ppv + Pgrid + Pbattery − Phome − Pev = 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;EV consumption is separate from household consumption. Inverter and battery power refer to the AC side of the balance; storage losses are accounted for when energy moves into or out of internal storage. This makes it possible to check both power conservation at the household node and the evolution of state of charge.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F22u8pt2l16arqsmv5h7g.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F22u8pt2l16arqsmv5h7g.webp" alt="Illustrative example: 6 kW of PV power supplies a 0.8 kW home, 2.3 kW EV charging and 2.9 kW of battery charging" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Illustrative AC power balance. Household demand, EV charging and battery charging total 6 kW; grid exchange is zero. The image uses Italian labels and is not an electrical wiring diagram.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In this example, &lt;code&gt;6.0 − 2.9 − 0.8 − 2.3 = 0 kW&lt;/code&gt;. Adding a 2.4 kW oven while keeping EV charging unchanged has a physically possible solution: reduce battery charging from 2.9 to 0.5 kW. Other priorities may instead reduce vehicle charging or allow grid import. The balance identifies admissible solutions; the policy chooses which to pursue.&lt;/p&gt;

&lt;p&gt;An import limit cannot make appliance demand disappear. If non-deferrable loads exceed available headroom, the overload and intended behaviour must be represented. In the demonstrator, a protected cycle already running may continue while the EMS reduces new starts or flexible loads.&lt;/p&gt;

&lt;h2&gt;
  
  
  Storage: capacity, power, reserve and efficiency
&lt;/h2&gt;

&lt;p&gt;A 10 kWh battery and a battery capable of supplying 3 kW describe two different constraints: storable energy and transferable power. SOC, &lt;em&gt;State of Charge&lt;/em&gt;, represents a fraction of capacity. At 55% of 10 kWh, the model represents 5.5 kWh stored; with a reserve set to 15%, 4 kWh can be used before reaching that reserve.&lt;/p&gt;

&lt;p&gt;SolarPilot applies 95% efficiency in each direction in its base configuration. Charging at 2 kW for half an hour draws 1 kWh from the AC side and adds 0.95 kWh to storage. Removing 1 kWh from internal energy delivers 0.95 kWh to the AC side. A full cycle under the same conditions therefore has efficiency &lt;code&gt;0.95 × 0.95 = 0.9025&lt;/code&gt;, or approximately 90.25%.&lt;/p&gt;

&lt;p&gt;The reserve enters the calculation before the transfer is applied. In the example with 4 kWh of usable internal energy, the AC side can receive 3.8 kWh at 95% efficiency. A constant 0.8 kW load would correspond to 4.75 hours, only under these assumptions and with no other consumption. This is an exercise on the model, not a real home's autonomy estimate.&lt;/p&gt;

&lt;p&gt;Near SOC limits, control must reduce the final transfer to what remains possible. Simply clipping SOC after an excessive step would distort accounting: the meter would have observed energy the battery could not accept or supply. Independent numerical tests cover these cases as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  EV charging: energy target and available time
&lt;/h2&gt;

&lt;p&gt;The bench vehicle has a demonstration capacity of 60 kWh. Moving from 45% to 80% requires &lt;code&gt;60 × (0.80 − 0.45) = 21 kWh&lt;/code&gt; of internal energy increase. With 92% charging efficiency, the required AC energy in the model is approximately &lt;code&gt;21 / 0.92 = 22.83 kWh&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;At 16 A in a single-phase example at 230 V and unity power factor, power is 3.68 kW. At constant power, 22.83 kWh would take approximately 6 hours and 12 minutes. These are idealised conditions: the model does not represent a commercial vehicle's complete charging curve, final taper or IEC 61851 electrical control.&lt;/p&gt;

&lt;p&gt;The demonstration minimum is 6 A, corresponding to 1.38 kW at 230 V; strategy increments correspond to 1 A. The limit can depend on the wallbox, available power, selected mode and target. Surplus, fast and departure modes allow different priorities to be compared. A feasibility check flags when available time and power are insufficient, without guaranteeing future solar production.&lt;/p&gt;

&lt;p&gt;The final second matters too. If the vehicle reaches its target during an interval, the step's average power and actual charging duration must remain consistent. The core distinguishes active setpoint, active duration and stored energy, avoiding energy transfer beyond the target.&lt;/p&gt;

&lt;h2&gt;
  
  
  Appliances: managing a cycle, not just a switch
&lt;/h2&gt;

&lt;p&gt;A washing machine does not continuously draw its heater's rated power. In the model it moves through filling, heating, washing, rinsing and spinning; a dishwasher has its own sequence. The EMS must account for the fact that authorising a low-power phase now may commit higher power shortly afterwards.&lt;/p&gt;

&lt;p&gt;Control distinguishes new deferrable starts from protected cycles. Priorities and operating windows govern admission; explicit device unavailability differs from a simple reduction in surplus. The oven, kettle and cooktop help reproduce rapid changes and cases where available flexibility is insufficient.&lt;/p&gt;

&lt;p&gt;The 3D scene makes the object associated with a load recognisable. Geometrically opening an appliance door remains a visual function: it does not automatically introduce a thermal model of an open door or consumption measured on a real appliance.&lt;/p&gt;

&lt;h2&gt;
  
  
  EEBUS: from device discovery to an operational connection
&lt;/h2&gt;

&lt;p&gt;The bench's native communication uses &lt;strong&gt;SHIP 1.0.1 and SPINE 1.3.0&lt;/strong&gt;, with Enbility library revisions pinned in the project. Their responsibilities differ: SHIP establishes and protects the connection; SPINE describes energy resources and application operations. The &lt;a href="https://www.eebus.org/specifications/" rel="noopener noreferrer"&gt;official EEBUS catalogue&lt;/a&gt; collects specifications, schemas and use cases. Using these layers requires commissioning and tests of roles, functions, limits and timing; the demonstrator does not claim certification or universal compatibility.&lt;/p&gt;

&lt;h3&gt;
  
  
  Discovery, addresses and trusted identity
&lt;/h3&gt;

&lt;p&gt;Discovery uses mDNS/DNS-SD advertisements of the &lt;code&gt;_ship._tcp&lt;/code&gt; service. A manually configured address can also locate a node. In the SolarPilot bench the configured SHIP ports are 4712 for the PC and 4713 for the controller: these are installation choices, not universal EEBUS port assignments. An IP address locates the partner but does not authorise it.&lt;/p&gt;

&lt;p&gt;The bench records the peer's SKI, certificate fingerprint and SHIP ID. Connection setup proceeds through TCP, TLS and WebSocket before SHIP completes the application connection process. Pairing requires confirmation of the selected partner's identity; discovering a device on Wi-Fi is not enough to trust it. The &lt;a href="https://www.eebus.org/ship/" rel="noopener noreferrer"&gt;SHIP overview&lt;/a&gt; and &lt;a href="https://github.com/enbility/ship-go" rel="noopener noreferrer"&gt;ship-go implementation&lt;/a&gt; describe this layer. No claim is made that every optional SHIP pairing or PIN path is implemented by the bench.&lt;/p&gt;

&lt;h3&gt;
  
  
  SPINE entities, features and roles
&lt;/h3&gt;

&lt;p&gt;SPINE organises a device into entities and features with application roles. A role belongs to a feature; it is not determined simply by which endpoint opened the TCP connection. Discovery through &lt;code&gt;nodeManagementDetailedDiscoveryData&lt;/code&gt; identifies the supported structure and functions before the controller assigns an installation role.&lt;/p&gt;

&lt;p&gt;The SLX reference profile includes grid, household, PV, battery, EVSE, washing machine, dishwasher and available-PV entities. Its fixed addresses support repeatable bench commissioning; a third-party device must be mapped from the inventory it actually exposes. Depending on the supported use case, binding and subscriptions establish relationships for commands and subsequent notifications. The &lt;a href="https://www.eebus.org/spine/" rel="noopener noreferrer"&gt;SPINE description&lt;/a&gt; explains the application layer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Requests, notifications and correlated results
&lt;/h3&gt;

&lt;p&gt;A SPINE datagram separates a header from the payload. Source and destination addresses identify the participating features; the command classifier distinguishes operations such as reads, replies, notifications and writes. &lt;code&gt;msgCounter&lt;/code&gt; identifies an application message, while &lt;code&gt;msgCounterReference&lt;/code&gt; links a response to its request. These are application counters, not TCP sequence numbers.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/enbility/spine-go/blob/main/model/datagram.go" rel="noopener noreferrer"&gt;spine-go datagram types&lt;/a&gt; document these fields. Correct correlation allows the controller to follow a write to its result even when notifications for other measurements arrive in between.&lt;/p&gt;

&lt;h3&gt;
  
  
  Measurements: number, scale, unit and origin
&lt;/h3&gt;

&lt;p&gt;The MPC path, &lt;em&gt;Monitoring of Power Consumption&lt;/em&gt;, transfers updates through &lt;code&gt;measurementListData&lt;/code&gt;. A value must be interpreted together with the point description: identifier, quantity, unit, timestamp and status. The following fragment illustrates a measurement element; it is not a complete datagram ready to transmit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"measurementId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"number"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2530&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"scale"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"valueSource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"calculatedValue"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the point description associates that measurement with power in watts, the value represents 2530 W. &lt;code&gt;number=253&lt;/code&gt; and &lt;code&gt;scale=1&lt;/code&gt; produce the same quantity. The structure is documented in &lt;a href="https://github.com/enbility/spine-go/blob/main/model/measurement.go" rel="noopener noreferrer"&gt;spine-go's Measurement types&lt;/a&gt;. Bench data are marked as calculated: sending a simulator value through a real protocol does not turn it into a physical sensor reading.&lt;/p&gt;

&lt;h3&gt;
  
  
  LPC and LPP: a limit does not impose consumption
&lt;/h3&gt;

&lt;p&gt;LPC concerns limitation of consumption; LPP concerns limitation of production. SolarPilot uses &lt;code&gt;loadControlLimitListData&lt;/code&gt; to transfer caps for supported entities. The &lt;a href="https://www.eebus.org/wp-content/uploads/2023/04/EEBus_UC_TS_LimitationOfPowerConsumption_V1.0.0_public.pdf" rel="noopener noreferrer"&gt;LPC specification&lt;/a&gt; describes direction, parameters and use-case behaviour. In the model, a consumption cap of 2000 W does not force a load to consume 2000 W: it limits its admissible demand.&lt;/p&gt;

&lt;p&gt;The node receiving a write returns a correlated result. &lt;code&gt;resultData.errorNumber=0&lt;/code&gt; indicates application acceptance; actual behaviour is checked against subsequent measurements. For storage, reserve, SOC, available energy and local limits continue to constrain what can happen. Profile choices are described in the &lt;a href="https://github.com/Silicon-Logix/slx-solarpilot/blob/main/docs/PROTOCOL.md" rel="noopener noreferrer"&gt;SolarPilot bench EEBUS contract&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data expiry and the demonstrator watchdog
&lt;/h3&gt;

&lt;p&gt;The reference controller rejects MPC measurements older than three seconds. In the complete SLX profile, all six external limits required by the bench must also be recent and the SHIP connection must be present. When valid control is lost, EV and battery operation are stopped in the model, while already-started cycles and the local export interlock retain their declared behaviour.&lt;/p&gt;

&lt;p&gt;This three-second watchdog is a local demonstrator rule, distinct from the timers and state machines of normative use cases. Generic profiles use limits for individual entities and their associated durations; they do not require the SLX bench's six-channel sequence. Passing this test cannot establish full compliance for a regulated controller.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the message monitor actually shows
&lt;/h2&gt;

&lt;p&gt;The EEBUS monitor observes the SHIP application body at stack entry and exit points. Displayed JSON is therefore available to the application after secure-connection processing. It is not a PCAP capture: it does not show TCP headers, encrypted TLS records or every byte of WebSocket framing. Network captures and application traces answer different questions.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;PC TX&lt;/code&gt; and &lt;code&gt;EMS RX&lt;/code&gt; observations may refer to the same message seen at both endpoints. Counting them as separate telegrams would distort estimated traffic. SolarPilot retains a ring of 256 observations; a preview may be truncated at 16 KiB, while the byte count covers the complete observed body.&lt;/p&gt;

&lt;p&gt;Timing also needs a definition. The local bench's RTT includes publication, reception, policy decisions and the return of limits: it does not measure only a packet's time in flight. Timestamps, SPINE counters, direction and result instead make it possible to reconstruct a test sequence and distinguish delay, missing response and accepted command.&lt;/p&gt;

&lt;h2&gt;
  
  
  SunSpec Modbus TCP: reading a telegram and discovering models
&lt;/h2&gt;

&lt;p&gt;Modbus TCP transport uses an MBAP header and a PDU containing function and data. The &lt;a href="https://www.modbus.org/file/secure/modbusprotocolspecification.pdf" rel="noopener noreferrer"&gt;Modbus Application Protocol V1.1b3&lt;/a&gt; defines functions; SunSpec gives meaning to energy points. The SolarPilot server defaults to port 1502, configurable to 502 when required by external equipment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Complete example: requesting the SunSpec signature
&lt;/h3&gt;

&lt;p&gt;In the bench mapping, Unit ID 2 represents the grid meter and the SunSpec signature is at zero-based address 40000. An FC03 read of two registers can use the following educational request, with Transaction ID 42:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;00 2A 00 00 00 06 02 03 9C 40 00 02
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;00 2A&lt;/code&gt;: Transaction Identifier, repeated in the response.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;00 00&lt;/code&gt;: Protocol Identifier for Modbus TCP.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;00 06&lt;/code&gt;: number of following bytes, including Unit Identifier and PDU.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;02&lt;/code&gt;: Unit Identifier of the bench meter.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;03&lt;/code&gt;: read holding registers.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;9C 40&lt;/code&gt;: starting address 40000 in big-endian format.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;00 02&lt;/code&gt;: requested quantity, two 16-bit registers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The response containing the &lt;code&gt;SunS&lt;/code&gt; signature is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;00 2A 00 00 00 07 02 03 04 53 75 6E 53
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The byte &lt;code&gt;04&lt;/code&gt; indicates four data bytes. &lt;code&gt;53 75 6E 53&lt;/code&gt; represents the ASCII signature. The two examples are 12 and 13 bytes long respectively. Framing cannot, however, depend on a single receive call: TCP is a stream and may deliver a frame in several parts or several frames together.&lt;/p&gt;

&lt;h3&gt;
  
  
  Model chains, addresses and types
&lt;/h3&gt;

&lt;p&gt;After the signature, each block declares its identifier and length. A client can locate a model, read its points or skip it if unsupported. A final register containing identifier &lt;code&gt;0xFFFF&lt;/code&gt; and a zero length closes the chain. Individual point addresses depend on preceding blocks: copying them from another inverter without discovery is fragile.&lt;/p&gt;

&lt;p&gt;The SolarPilot server associates Unit IDs 1, 2 and 3 with PV, grid and storage. It exposes models 1, 101, 120 and 123 for the first; 1 and 201 for the second; and 1, 101, 120 and 124 for the third. These are demonstrator choices. The &lt;a href="https://github.com/sunspec/models" rel="noopener noreferrer"&gt;official SunSpec definitions&lt;/a&gt; and &lt;a href="https://github.com/Silicon-Logix/slx-solarpilot/blob/main/docs/INTEROPERABILITY.md" rel="noopener noreferrer"&gt;SolarPilot matrix&lt;/a&gt; make the mapping verifiable.&lt;/p&gt;

&lt;p&gt;Representation can use scaled integers or floating-point points, each with its own type. The scale factor is a signed integer: &lt;code&gt;real value = raw value × 10^SF&lt;/code&gt;. In the SolarPilot meter profile, &lt;code&gt;W_SF=1&lt;/code&gt; provides 10 W resolution; a raw value of −123 represents −1230 W, meaning export under the bench convention. Register quantisation does not alter the core's physical calculation.&lt;/p&gt;

&lt;p&gt;Unavailable values must be distinguished from zero. For example, the &lt;code&gt;0x8000&lt;/code&gt; sentinel for an &lt;code&gt;int16&lt;/code&gt; point is not a usable negative measurement. Client software may also display register numbering with a one-address offset from protocol addresses: the example's base address 40000 must be interpreted under the client's convention, rather than assumed from the text shown in its address field.&lt;/p&gt;

&lt;h2&gt;
  
  
  SunSpec controls, errors and storage behaviour
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Writing a limit and checking its effect
&lt;/h3&gt;

&lt;p&gt;The bench server accepts FC03/FC04 reads and FC06 or FC16 writes at implemented points. FC06 writes one register, FC16 a group; SolarPilot validates a multiple-register write before applying it, avoiding partial updates when values are inadmissible. Invalid functions, addresses or data produce Modbus exceptions rather than an application confirmation.&lt;/p&gt;

&lt;p&gt;An exception response to function 03 uses function code &lt;code&gt;0x83&lt;/code&gt;, with its most significant bit set, followed by the reason. Codes 01, 02 and 03 mean illegal function, illegal data address and illegal data value respectively. A timeout instead means no useful response arrived within the client's deadline; it must not be recorded as a negative confirmation received from the device.&lt;/p&gt;

&lt;p&gt;Modbus TCP follows a request/response model: the client schedules reads and checks Transaction ID, function, length and data quantity before interpreting registers. Reception time is not automatically the physical measurement timestamp. Polling frequency must therefore match data updates, network load and device behaviour.&lt;/p&gt;

&lt;p&gt;For PV, model 123 includes &lt;code&gt;WMaxLimPct&lt;/code&gt; and &lt;code&gt;WMaxLim_Ena&lt;/code&gt;. The client must read the scale, convert the percentage into the point's representation, set the limit and enable it. A 50% limit on a 6 kW nameplate rating corresponds to a maximum of 3 kW; it does not guarantee that sunlight will make those 3 kW available. The &lt;a href="https://github.com/sunspec/models/blob/master/json/model_123.json" rel="noopener noreferrer"&gt;model 123 definition&lt;/a&gt; documents the points.&lt;/p&gt;

&lt;p&gt;Where implemented, a positive &lt;code&gt;RvrtTms&lt;/code&gt; restores local control after that number of real seconds; zero retains the command in the SolarPilot mapping. A write acknowledgement must be followed by reading back parameters and measurements, also checking whether a stricter local limit prevents its effect.&lt;/p&gt;

&lt;h3&gt;
  
  
  Model 124 and the charge/discharge interval
&lt;/h3&gt;

&lt;p&gt;In model 124, &lt;code&gt;StorCtl_Mod&lt;/code&gt; enables charge and discharge controls; &lt;code&gt;InWRte&lt;/code&gt;, &lt;code&gt;OutWRte&lt;/code&gt; and &lt;code&gt;MinRsvPct&lt;/code&gt; describe limits and reserve. In the SolarPilot mapping, enabled controls define the interval:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;−InWRte × WChaMax / 100
    ≤ Pbattery ≤
 OutWRte × WChaMax / 100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With WChaMax equal to 3 kW, InWRte = 50 and OutWRte = −50, enabling both controls reduces the interval to −1.5 kW: a charging request under the bench convention. An impossible interval is rejected. SOC, reserve, energy availability and grid-charging permission remain model constraints; operational meaning must always be checked against target-device documentation and the &lt;a href="https://github.com/sunspec/models/blob/master/json/model_124.json" rel="noopener noreferrer"&gt;model 124 definition&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  SLX functions and connection security
&lt;/h3&gt;

&lt;p&gt;The optional &lt;code&gt;SLX Energy/1&lt;/code&gt; extension uses a separate bank: Unit ID 10 and registers 60000–60007. Identification, EV setpoint, washing-cycle permissions and watchdog belong to this bench contract. They are not universal SunSpec points and are not required to use the standard PV and storage reads and controls that are implemented.&lt;/p&gt;

&lt;p&gt;The demo uses ordinary Modbus TCP on the laboratory network, with access restricted to authorised bench systems. &lt;a href="https://www.modbus.org/docs/MB-TCP-Security-v36_2021-07-30.pdf" rel="noopener noreferrer"&gt;Modbus Security&lt;/a&gt;, which uses TLS and certificates, is a distinct profile. TLS on the EEBUS connection does not automatically protect the separate Modbus TCP listener.&lt;/p&gt;

&lt;h2&gt;
  
  
  Interoperability and failure testing
&lt;/h2&gt;

&lt;p&gt;Compatibility requires a shared contract at several levels: transport, identity, application role, available models, units, writable points and temporal behaviour. The same protocol name on two datasheets is an initial condition, not a passed acceptance test. The &lt;a href="https://www.eebus.org/certification-faq/" rel="noopener noreferrer"&gt;EEBUS certification documentation&lt;/a&gt; distinguishes roles and verification paths.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unexpected identity:&lt;/strong&gt; a discovered device must not be paired without checking that it is the intended partner.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing or unavailable point:&lt;/strong&gt; the interface must preserve that information instead of inventing a plausible zero.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rejected command:&lt;/strong&gt; the result must remain associated with the request that caused it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Late response:&lt;/strong&gt; measurement validity must be assessed using the data's time, not merely the presence of an open socket.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reconnection:&lt;/strong&gt; a restored connection and newly valid control require fresh, coherent exchanges.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project also separates network protocols from its own inter-process connection: JSON Lines is used for local IPC to the protocol service; the accelerated laboratory retains a separate NNG/TCP/CBOR path. Third-party devices do not need these internal mechanisms to communicate through EEBUS or SunSpec. The &lt;a href="https://github.com/Silicon-Logix/slx-solarpilot/blob/main/docs/ENERGY_SERVICE.md" rel="noopener noreferrer"&gt;service documentation&lt;/a&gt; defines that boundary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Embedded Linux and LVGL: control moves onto the device
&lt;/h2&gt;

&lt;p&gt;The controller uses a Raspberry Pi 3 Model A+ and a 10.1-inch touchscreen. Its image is built with Buildroot and retains the services required for networking, control, the interface, time and persistence. The project version uses Linux 6.12.61 and LVGL 9.5. Hardware, pages and responsibilities are detailed in the &lt;a href="https://www.siliconlogix.it/en/solution/slx-solarpilot-touch-energy-controller-and-3d-solar-simulator" rel="noopener noreferrer"&gt;project description&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The HMI receives state from the application service and sends validated requests. Navigation must remain responsive during a Wi-Fi scan; a late response must not reopen a page the user has already left. Flow animation, confirmations and events make these system behaviours visible on the display.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn99qt6zy1gcjp97u8atm.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn99qt6zy1gcjp97u8atm.webp" alt="Illustrative EEBUS connection between the Windows simulator and an LVGL touch controller over the local network" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Illustrative view of the PC-to-controller chain, with Italian labels. The plant is simulated on the PC; control and the interface run on the embedded device. EEBUS carries measurements and commands.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The comparison has two distinct timescales: physical model steps and the real time of networking, watchdogs and interaction. External tests run at 1×; accelerated scenarios belong to the local laboratory. A recording allows data and decisions to be reviewed while preserving that distinction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turning a demonstration into a repeatable test
&lt;/h2&gt;

&lt;p&gt;A useful test declares its initial situation, action, expected result and quantities to observe. Resetting, keeping the same duration and using the same parameters allow policies to be compared without attributing operator-introduced differences to the controller.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;Introduced change&lt;/th&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Solar surplus&lt;/td&gt;
&lt;td&gt;Production exceeds loads&lt;/td&gt;
&lt;td&gt;Allocation between storage, EV and export; consistent balance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clouds and new loads&lt;/td&gt;
&lt;td&gt;Reduced production and an appliance switched on&lt;/td&gt;
&lt;td&gt;Adjustment of flexibility and respect for available limits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage reserve&lt;/td&gt;
&lt;td&gt;SOC close to the configured minimum&lt;/td&gt;
&lt;td&gt;Limited final transfer and loss accounting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EV target&lt;/td&gt;
&lt;td&gt;Target SOC reached within an interval&lt;/td&gt;
&lt;td&gt;Partial stop without additional energy beyond the target&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Communication loss&lt;/td&gt;
&lt;td&gt;Measurements or commands become stale&lt;/td&gt;
&lt;td&gt;Visible status, fallback behaviour and recovery&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The &lt;a href="https://github.com/Silicon-Logix/slx-solarpilot/actions/runs/40543846372" rel="noopener noreferrer"&gt;published release's GitHub validation&lt;/a&gt; compiled the Windows interface and successfully ran nine test groups. The path covers independent energy calculations, scenarios, EMS, recording and protocols. Physical Raspberry Pi trials also demonstrate the prototype's bench connection; they do not automatically qualify all third-party energy equipment.&lt;/p&gt;

&lt;p&gt;Software scenarios and reports describe the declared model. A real installation's production requires site and component data; field control requires specific adapters, protection and validation. Operational weather forecasts, tariff optimisation and advanced integrations are developments available on request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trying SolarPilot and planning an integration
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/Silicon-Logix/slx-solarpilot/releases/tag/v0.4.5" rel="noopener noreferrer"&gt;Windows x64 package&lt;/a&gt; is sufficient to begin: extract the complete archive and launch &lt;code&gt;SLX-SolarPilot.exe&lt;/code&gt; with an OpenGL 3.3 driver. The repository includes the interface, SDK, documentation and core binaries; use is governed by the &lt;a href="https://github.com/Silicon-Logix/slx-solarpilot/blob/main/LICENSE" rel="noopener noreferrer"&gt;Silicon LogiX evaluation licence&lt;/a&gt;. Controller firmware is not included in the public Windows package.&lt;/p&gt;

&lt;p&gt;Developing an energy controller, HMI or device adapter starts with equipment interfaces, installation constraints and cases to reproduce. A &lt;a href="https://www.siliconlogix.it/en/contact" rel="noopener noreferrer"&gt;technical assessment request&lt;/a&gt; can identify devices to connect, quantities to control and conditions to verify. This provides a route from the demonstration bench to custom development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical references
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.siliconlogix.it/en/solution/slx-solarpilot-touch-energy-controller-and-3d-solar-simulator" rel="noopener noreferrer"&gt;SLX SolarPilot project: touch controller and 3D simulator&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Silicon-Logix/slx-solarpilot/blob/main/docs/MODEL.md" rel="noopener noreferrer"&gt;SolarPilot energy model&lt;/a&gt;, &lt;a href="https://github.com/Silicon-Logix/slx-solarpilot/blob/main/docs/EMS.md" rel="noopener noreferrer"&gt;EMS strategies&lt;/a&gt; and &lt;a href="https://github.com/Silicon-Logix/slx-solarpilot/blob/main/docs/VALIDATION.md" rel="noopener noreferrer"&gt;validation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://joint-research-centre.ec.europa.eu/photovoltaic-geographical-information-system-pvgis/general-information/data-sources-calculation-methods_en" rel="noopener noreferrer"&gt;JRC: PVGIS calculation methods&lt;/a&gt; and &lt;a href="https://joint-research-centre.ec.europa.eu/photovoltaic-geographical-information-system-pvgis/using-pvgis-5/api-non-interactive-service_en" rel="noopener noreferrer"&gt;PVGIS 5 API&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://pvpmc.sandia.gov/modeling-guide/2-dc-module-iv/point-value-models/pvwatts/" rel="noopener noreferrer"&gt;Sandia PVPMC: PVWatts model&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.eebus.org/ship/" rel="noopener noreferrer"&gt;EEBUS SHIP&lt;/a&gt;, &lt;a href="https://www.eebus.org/spine/" rel="noopener noreferrer"&gt;SPINE&lt;/a&gt; and &lt;a href="https://www.eebus.org/use-case-overview/" rel="noopener noreferrer"&gt;official use cases&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://sunspec.org/specifications/" rel="noopener noreferrer"&gt;SunSpec Alliance specifications&lt;/a&gt;, &lt;a href="https://github.com/sunspec/models" rel="noopener noreferrer"&gt;models&lt;/a&gt; and &lt;a href="https://www.modbus.org/modbus-specifications" rel="noopener noreferrer"&gt;Modbus documentation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://buildroot.org/downloads/manual/manual.html" rel="noopener noreferrer"&gt;Buildroot manual&lt;/a&gt; and &lt;a href="https://lvgl.io/docs/open/9.5/introduction/requirements" rel="noopener noreferrer"&gt;LVGL documentation&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>embedded</category>
      <category>iot</category>
      <category>linux</category>
      <category>programming</category>
    </item>
    <item>
      <title>SLX AgriPilot: Drone Mission Software with C++20, PX4 and MAVLink</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Wed, 21 Oct 2026 10:29:48 +0000</pubDate>
      <link>https://dev.to/pezzullo/slx-agripilot-drone-mission-software-with-c20-px4-and-mavlink-2m2l</link>
      <guid>https://dev.to/pezzullo/slx-agripilot-drone-mission-software-with-c20-px4-and-mavlink-2m2l</guid>
      <description>&lt;p&gt;&lt;strong&gt;Agricultural drone software development&lt;/strong&gt; connects mission planning, flight firmware, autopilot communication and sensor data management. For UAV manufacturers, integrators and survey system developers, the engineering challenge is to build a coherent workflow from a requested route to acquisitions and verifiable results. This requires expertise in &lt;strong&gt;C++, embedded firmware, protocols, control systems and operator interfaces&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SLX AgriPilot&lt;/strong&gt; is the Windows platform developed by &lt;strong&gt;Silicon LogiX&lt;/strong&gt; for building and verifying VTOL drone survey missions. It combines a 3D agricultural environment, route planning, execution with &lt;strong&gt;PX4 and Gazebo&lt;/strong&gt;, telemetry and virtual image analysis. The &lt;a href="https://github.com/Silicon-Logix/slx-agripilot/releases/tag/v0.6.0-preview" rel="noopener noreferrer"&gt;0.6.0 evaluation release is available on GitHub&lt;/a&gt;. Its architecture provides a technical case study of the software and embedded engineering required to develop UAV systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Developing UAV systems for manufacturers and integrators
&lt;/h2&gt;

&lt;p&gt;A drone, payload or inspection platform needs a clear allocation of responsibilities across onboard firmware, an optional mission computer, the ground application and subsequent analysis. Adding a MAVLink interface, another camera or a survey algorithm introduces synchronization, state management and diagnostic requirements that cross component boundaries.&lt;/p&gt;

&lt;p&gt;AgriPilot makes this work accessible through an agricultural use case: operators can change a plan, observe a simulated mission and trace results back to acquired data. This workflow supports technical discussions about &lt;strong&gt;PX4 and MAVLink integration, mission software, telemetry and sensor acquisition&lt;/strong&gt; before adapting the system to a product. For a specific development project, the starting point is a technical assessment of firmware and interfaces, with explicit requirements, hardware constraints and verification criteria.&lt;/p&gt;

&lt;h2&gt;
  
  
  An architecture connecting mission, autopilot and data
&lt;/h2&gt;

&lt;p&gt;AgriPilot comprises a native &lt;strong&gt;C++20&lt;/strong&gt; application, an SDK for external modules and a simulation backend. On the Windows PC, the operator configures the field, builds the plan, edits waypoints and inspects results and recordings. The Python bridge, MAVSDK, PX4 firmware compiled for SITL and Gazebo Harmonic run in &lt;strong&gt;WSL2 with Ubuntu 22.04&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The boundaries between these layers make their responsibilities explicit. A planning module proposes a route; the application checks whether it satisfies the declared constraints; the bridge configures and starts the mission; PX4 executes the autopilot logic; Gazebo integrates the aircraft dynamics. The interface displays recorded samples. Movement in the 3D scene therefore comes from an identified source, such as a simulated flight recording or a geometric preview.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F22hyh3x0tr5gpgo4r5nd.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F22hyh3x0tr5gpgo4r5nd.webp" alt="AgriPilot architecture connecting the Windows C++20 application, MAVSDK bridge, PX4 autopilot, Gazebo dynamics and separate data records" width="800" height="947"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Laboratory architecture. PX4 produces state estimates and commands; Gazebo provides the simulated physical state. The recording preserves both sources.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This separation also helps maintenance. A mission upload failure must be distinguishable from a simulator startup problem, stale position data or an unusable image. Each execution therefore has its own directory, diagnostics for each phase and the identities of the components used. Reference versions are pinned: &lt;strong&gt;PX4 1.17.0, Gazebo Harmonic and MAVSDK Python 3.10.2&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Drone mission software: C++20, OpenGL and the operator interface
&lt;/h2&gt;

&lt;p&gt;The desktop software uses &lt;strong&gt;GLFW&lt;/strong&gt; for its window and input, &lt;strong&gt;OpenGL 3.3&lt;/strong&gt; for rendering, &lt;strong&gt;Dear ImGui&lt;/strong&gt; for panels and &lt;strong&gt;ImPlot&lt;/strong&gt; for charts. C++ supports typed contracts across the mission model, session state, geometry and visualization, with explicit resource management. Managing process handles, graphics resources and files contributes to application quality alongside interface design.&lt;/p&gt;

&lt;p&gt;The editor lets operators drag waypoints with the mouse, validate them and undo or redo changes. The plan being edited, the executed mission and a loaded recording have separate roles. During replay, display time is interpolated to make movement readable, while the original samples remain available for analysis. Editing a plan must preserve the history of a flight that has already been recorded.&lt;/p&gt;

&lt;p&gt;Interface engineering centers on operator decisions: which module is selected, which locations will be observed, which data are missing and where evidence for a finding can be inspected. The same requirements arise in industrial HMIs, test instruments and supervisory applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  3D model, kinematics and coordinate systems
&lt;/h2&gt;

&lt;p&gt;The AP-01 model represents a &lt;strong&gt;three-rotor VTOL&lt;/strong&gt; with two tilting front nacelles, a rear rotor, movable surfaces, landing skids and a gimbal-mounted camera. The glTF/GLB asset preserves hierarchies, pivots, materials and transformations. Rotating a nacelle must correctly move all its descendants; orienting the gimbal must also update the camera's optical frame.&lt;/p&gt;

&lt;p&gt;This requires transformation matrices, quaternions and explicit axis conventions. The local scene uses metric coordinates with a positive vertical axis; Gazebo and PX4 NED estimates require declared conversions. The glTF export also has its own convention. Applying a conversion twice can reverse a movement; using the body pose instead of the sensor pose can displace the ground footprint. These boundaries are documented in the project's &lt;a href="https://github.com/Silicon-Logix/slx-agripilot/blob/main/docs/API_SLX_V1.md" rel="noopener noreferrer"&gt;coordinate and API contract&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The inspection camera follows the drone and allows the operator to orbit around it. During replay with joint data, nacelle tilt and the displayed mechanical movements are associated with the Gazebo recording. Maintenance operations are geometric controls performed with the aircraft parked. Defining these relationships between objects, state and data sources is useful in any 3D interface connected to a technical system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxs4yxnb7d6q87oroam4v.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxs4yxnb7d6q87oroam4v.webp" alt="Actual SLX AgriPilot application screenshot showing AP-01 drone inspection and controls for articulated components" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Model inspection in the application: geometry, hierarchy and moving components are accessible in the same environment used to plan and review missions.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Drone firmware: the PX4 autopilot, uORB and state estimation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;PX4 is the autopilot stack integrated into the laboratory&lt;/strong&gt;. The firmware acquires sensor information, estimates aircraft state, manages operating modes and conditions, and produces actuator commands. Work in this project covers integration, nominal aircraft configuration, mission management and recording verification. PX4 remains an identified upstream component: an AgriPilot C++ policy and a flight firmware modification are separate engineering changes.&lt;/p&gt;

&lt;p&gt;PX4 modules communicate through &lt;a href="https://docs.px4.io/v1.17/en/middleware/uorb" rel="noopener noreferrer"&gt;&lt;strong&gt;uORB&lt;/strong&gt;, an internal publish/subscribe system&lt;/a&gt;. A producer publishes data on a topic; other modules subscribe to the topics they need. This decoupling helps engineers reason separately about drivers, estimation, control and communications while defining messages, timestamps and responsibilities.&lt;/p&gt;

&lt;p&gt;State estimation combines inertial measurements with other available observations. The &lt;a href="https://docs.px4.io/v1.17/en/advanced_config/tuning_the_ecl_ekf" rel="noopener noreferrer"&gt;PX4 EKF2 filter&lt;/a&gt; handles quantities such as attitude, velocity, position and sensor biases. An accelerometer alone cannot provide a stable position over time: errors and biases accumulate through integration. Measurement fusion, time alignment and observation quality checks therefore contribute directly to autopilot behavior.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhcfkldisc6jig9zyaora.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhcfkldisc6jig9zyaora.webp" alt="Conceptual flight firmware chain from sensors and EKF2 estimation through position and attitude controllers to allocation, actuators and feedback" width="800" height="973"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Simplified functional chain of a PX4 autopilot. The mission supplies objectives; estimation, control and allocation determine actuator commands.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Controllers turn navigation objectives into motion and attitude requests. &lt;a href="https://docs.px4.io/v1.17/en/concept/control_allocation" rel="noopener noreferrer"&gt;&lt;strong&gt;Control allocation&lt;/strong&gt;&lt;/a&gt; then translates thrust and torque requests into commands compatible with motor and servo geometry. In a tiltrotor, nacelle position, orientation and control authority matter: a 3D model alone does not define those physical parameters.&lt;/p&gt;

&lt;h2&gt;
  
  
  From firmware on a PC to an embedded system
&lt;/h2&gt;

&lt;p&gt;In SITL, firmware runs as a program on the computer. A physical flight controller introduces a microcontroller, peripherals and an operating system; many PX4 platforms use &lt;strong&gt;NuttX&lt;/strong&gt;. Embedded development must address task priorities, latency, memory, interrupt handling and peripheral access within the constraints of the selected board.&lt;/p&gt;

&lt;p&gt;An acquisition path may require SPI or I²C sensor drivers, UART connections for external devices and CAN interfaces for distributed nodes. &lt;a href="https://docs.px4.io/v1.17/en/can/" rel="noopener noreferrer"&gt;PX4 CAN support&lt;/a&gt; illustrates why electrical connections and device protocols are part of integration. Rates, queues, timeouts and stale data handling must match the requirements: receiving a message does not by itself establish that its data are still usable.&lt;/p&gt;

&lt;p&gt;For a product, these activities also involve board configuration, startup, diagnostics, firmware updates and error recovery. AgriPilot supports work on integration and mission logic first; adapting that work to specific electronics requires a dedicated verification campaign on the target hardware.&lt;/p&gt;

&lt;h2&gt;
  
  
  SITL and Gazebo: what calculates the movement?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Software-in-the-loop&lt;/strong&gt; means executing control software connected to a simulated environment. In AgriPilot, &lt;strong&gt;Gazebo&lt;/strong&gt; integrates the physical state of the nominal model, and PX4 receives the observations supplied by the simulation link. Actuator commands return to the model, closing the loop. The Windows renderer uses the resulting data to display the aircraft.&lt;/p&gt;

&lt;p&gt;AP-01 has declared mass, inertias, motor characteristics and nacelle limits. Its three-rotor geometry is registered against the visual model; dynamic parameters remain nominal laboratory assumptions. The executed campaign covers takeoff, hover flight, mission traversal, return and landing. Cruise transition and the behavior of a real aircraft require additional models and tests.&lt;/p&gt;

&lt;p&gt;A central requirement is to preserve &lt;strong&gt;commands, PX4 estimates and Gazebo physical state as separate data&lt;/strong&gt;. If the estimated drone is close to the route while simulator ground truth differs, the comparison must expose that difference. Simulation time, elapsed PC time and message timestamps also have different meanings: confusing them changes synchronization and measurements. Runtime conditions and model and firmware identities are described in the &lt;a href="https://github.com/Silicon-Logix/slx-agripilot/blob/main/docs/SIMULATION.md" rel="noopener noreferrer"&gt;runtime documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  MAVLink and MAVSDK integration: drone missions and telemetry
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MAVLink&lt;/strong&gt; defines messages and services for exchanging information with vehicles and components. In this laboratory it carries missions, telemetry, parameters and command outcomes. &lt;strong&gt;MAVSDK&lt;/strong&gt; provides the APIs used by the Python bridge: AgriPilot uses &lt;a href="https://mavsdk.mavlink.io/v2.0/en/cpp/api_reference/classmavsdk_1_1_mission_raw.html" rel="noopener noreferrer"&gt;MissionRaw&lt;/a&gt; to work with mission items, and subscriptions to monitor state changes.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://mavlink.io/en/services/mission.html" rel="noopener noreferrer"&gt;MAVLink Mission Protocol&lt;/a&gt; manages item transfer, sequencing and acknowledgment. The bridge also downloads an uploaded mission to check its contents. This verifies the handoff between the planner's proposal and the plan received by the autopilot before execution is considered.&lt;/p&gt;

&lt;p&gt;Sending a command initiates a transaction. The &lt;a href="https://mavlink.io/en/services/command.html" rel="noopener noreferrer"&gt;Command Protocol&lt;/a&gt; provides a &lt;code&gt;COMMAND_ACK&lt;/code&gt; response: its result must be interpreted together with the subsequent system state. For example, an arming request may be denied because preconditions are unmet. The project monitors telemetry continuity, transport availability, autopilot health and altitude stability; an eligible transient denial is handled through bounded retries and a fresh stability check.&lt;/p&gt;

&lt;p&gt;This is an asynchronous state machine: backend readiness, connection, configuration, upload, verification, arming, takeoff, mission and shutdown. Each phase has entry conditions, timeouts and diagnostic outcomes. The bridge also manages cancellation and termination of its own processes while preserving logs. These skills transfer to industrial gateways and remote control systems, where sending, receiving and completing an action are separate events.&lt;/p&gt;

&lt;p&gt;A real link also requires authentication, network segmentation and key management. &lt;a href="https://mavlink.io/en/guide/message_signing.html" rel="noopener noreferrer"&gt;MAVLink 2 message signing&lt;/a&gt; addresses protocol authenticity and integrity; transport encryption serves a different purpose. The laboratory backend is local. Protection of a radio network or remote access must be specified and verified in the operational integration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Survey planning: geometry, coverage and the SDK
&lt;/h2&gt;

&lt;p&gt;The planner receives the area, altitude, speed, pass spacing, orientation and camera parameters. The C++ examples build parallel transects, clip them to the polygon and alternate pass direction. The application adds takeoff, return and landing anchors and checks the plan's declared constraints.&lt;/p&gt;

&lt;p&gt;For an ideal nadir-facing camera over flat ground, footprint width is &lt;code&gt;W = h × s_w / f&lt;/code&gt;, where &lt;code&gt;h&lt;/code&gt; is height above ground, &lt;code&gt;s_w&lt;/code&gt; is sensor width and &lt;code&gt;f&lt;/code&gt; is focal length, expressed in the same unit as &lt;code&gt;s_w&lt;/code&gt;. Nominal ground sampling distance is &lt;code&gt;GSD = W / N&lt;/code&gt;, where &lt;code&gt;N&lt;/code&gt; is image width in pixels. Along-track capture spacing is &lt;code&gt;d = H × (1 − o)&lt;/code&gt;, with footprint length &lt;code&gt;H&lt;/code&gt; along the route and longitudinal overlap &lt;code&gt;o&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvf4f0vknwhclfbefivk5.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvf4f0vknwhclfbefivk5.webp" alt="Survey geometry showing height h, camera footprint, overlapping acquisitions and the equations for GSD and capture spacing" width="800" height="787"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ideal planning geometry over flat ground. Nominal coverage must be compared with images that were actually acquired, valid and sufficiently readable.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Reducing pass spacing can increase coverage while changing waypoint count, acquisition count and duration. &lt;strong&gt;Baseline and Dense&lt;/strong&gt; make this choice comparable in the laboratory. The plan's nominal resolution and the analysis raster resolution have separate contracts: current virtual images have an analysis width of 96 pixels. A theoretical GSD value therefore does not establish the resolution of a real image.&lt;/p&gt;

&lt;p&gt;The SDK exposes planning and telemetry observation as independent Windows executables. Modules receive and return versioned JSON through pipes. Time, message size and process resource limits contain failures; a SHA-256 checksum identifies the module used. This boundary avoids requiring a shared C++ ABI and supports implementation comparisons with an identifiable execution history.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gimbal and acquisition: knowing where the sensor looks
&lt;/h2&gt;

&lt;p&gt;The camera acquires from a composed pose: drone position and orientation, the mounting transformation and gimbal rotations. &lt;strong&gt;Pitch and yaw&lt;/strong&gt; change the optical axis and where rays intersect the ground. A camera facing the sky cannot observe the field; an oblique camera produces a different geometry from a nadir-facing camera.&lt;/p&gt;

&lt;p&gt;In AgriPilot this pose governs virtual image generation. The system preserves the origin, optical axes, sensor parameters and frame quality. RGB, NIR and thermal rasters come from a procedural optical model over a flat surface; these synthetic data are associated with the mission and inspectable in the interface. The gimbal thereby connects model kinematics to acquisition geometry.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxor9bivg7tdfhui3eyd2.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxor9bivg7tdfhui3eyd2.webp" alt="Actual AgriPilot Camera and images screen with RGB, NIR, thermal and NDVI views and the associated frame data" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Images and data available in the software. These four views refer to an identified virtual acquisition whose parameters and pixels are preserved.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Agricultural drone data analysis: RGB, NIR, thermal and NDVI
&lt;/h2&gt;

&lt;p&gt;The laboratory includes four contexts: &lt;strong&gt;arable crops, irrigation, orchard and post-storm survey&lt;/strong&gt;. The operator configures points with normal or problematic conditions, position, radius and intensity. During the mission, acquisitions observe only areas inside the valid footprint. Unobserved cells remain unknown.&lt;/p&gt;

&lt;p&gt;The image generator knows the field conditions. The detector instead receives saved rasters, poses, declared calibration, area of interest and thresholds: &lt;strong&gt;it does not receive configured anomaly centers or intensities&lt;/strong&gt;. Known conditions are connected later to evaluate errors. This architecture makes it possible to check whether changing pixels actually changes the result.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F53wuui2c4933dz3vdeig.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F53wuui2c4933dz3vdeig.webp" alt="Optical pipeline in which the scenario generates images, the detector reads pixels and poses, and known conditions enter only independent evaluation" width="800" height="960"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Scenario knowledge and observed data follow separate paths. Detection preserves the source frame link; evaluation subsequently compares results against known conditions.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NDVI&lt;/strong&gt; is calculated as &lt;code&gt;(NIR − R) / (NIR + R)&lt;/code&gt;. In the software it contributes to a vegetation anomaly index; the irrigation scenario also combines a synthetic thermal contrast. Cells are projected into images and sampled only where valid pixels exist. Adjacent anomalous cells form findings linked to the first usable acquisition.&lt;/p&gt;

&lt;p&gt;Context gives an indication its meaning: a low vegetation index alone does not identify an agronomic cause. The laboratory score does not represent a probability, moisture percentage or neural network confidence. Current processing uses explicit indices and thresholds; introducing machine learning models would require a dedicated dataset, annotations, metrics and validation.&lt;/p&gt;

&lt;p&gt;Noise, exposure, haze, saturation and motion blur can degrade the modeled data. An excluded frame remains saved with its quality outcome. Unknown areas remain distinct from areas observed without anomalies, providing information needed to decide whether a survey is sufficient.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recordings, before-and-after comparisons and reports
&lt;/h2&gt;

&lt;p&gt;A result becomes useful when the path that produced it can be reconstructed. AgriPilot exports &lt;strong&gt;HTML reports, CSV, JSON, images, metadata and a SHA-256 inventory&lt;/strong&gt;. Every finding links to source cells and frames; the mission preserves flight samples, parameters and the identities of firmware, model and modules. Original PX4 ULog files are retained separately from captured MAVLink datagrams.&lt;/p&gt;

&lt;p&gt;A before-and-after comparison can involve a second mission after field conditions have changed. Threshold-only reanalysis uses the same original pixels. Regenerating images along a saved route has another provenance, declared by the software. Distinguishing these operations makes it possible to discuss what changed: environment, route, acquisition or algorithm.&lt;/p&gt;

&lt;p&gt;Metrics also remain separate: mission progress and completion, route error, geometric coverage, optical coverage and detection quality. A mission can finish successfully while leaving parts of the field unobserved. Precision, recall and errors against known conditions describe the evaluated synthetic case without extending those numbers to real farmland.&lt;/p&gt;

&lt;h2&gt;
  
  
  Software verification and the path to hardware
&lt;/h2&gt;

&lt;p&gt;Verification covers module protocols, failures and timeouts, plan validation, editor interactions, camera geometry, detector independence and export integrity. The Windows release has also been exercised with the PX4/Gazebo backend on the nominal three-motor model. Dependency versions, archive hashes, public source builds and CI checks make the distribution scope inspectable.&lt;/p&gt;

&lt;p&gt;Moving to an operational drone requires further work: aircraft parameter identification, electronics selection and integration, sensor calibration, link verification, fault analysis and system tests. &lt;a href="https://docs.px4.io/v1.17/en/simulation/hitl" rel="noopener noreferrer"&gt;&lt;strong&gt;Hardware-in-the-loop&lt;/strong&gt;&lt;/a&gt; runs firmware on a physical flight controller connected to a compatible simulation. It needs a campaign distinct from SITL, followed by the tests required for the product and its intended use.&lt;/p&gt;

&lt;p&gt;The current laboratory supports development and comparison of missions, integrations and data processing within documented assumptions. Real-field multispectral calibration, RTK/DEM georeferencing, calibrated energy endurance, VTOL transition and HIL tests are possible areas of subsequent work, to be specified and verified. The &lt;a href="https://github.com/Silicon-Logix/slx-agripilot/blob/main/docs/MODEL.md" rel="noopener noreferrer"&gt;model documentation&lt;/a&gt; defines the preview's scope.&lt;/p&gt;

&lt;h2&gt;
  
  
  Questions about drone software, firmware and simulation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is the difference between mission software and drone firmware?
&lt;/h3&gt;

&lt;p&gt;Mission software prepares routes, displays states and manages acquisitions and results. Flight firmware executes autopilot functions on the system controlling the aircraft. Integration connects objectives, commands and telemetry through defined interfaces; changes to a planner and changes to controllers require different verification activities.&lt;/p&gt;

&lt;h3&gt;
  
  
  What are PX4, MAVLink and Gazebo used for?
&lt;/h3&gt;

&lt;p&gt;PX4 supplies the autopilot stack; MAVLink is the protocol used for missions, parameters, commands and telemetry; Gazebo executes the simulated physical model. AgriPilot integrates them with the Windows application and MAVSDK bridge. Recordings keep the requested plan, autopilot estimate and simulator state separate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can a custom camera or sensor be integrated?
&lt;/h3&gt;

&lt;p&gt;This requires engineering around the interface, power supply, data format, trigger and timestamps. Calibration, mounting pose relative to the aircraft and sample validity conditions must also be defined. AgriPilot's virtual camera illustrates the data path; a physical payload requires dedicated drivers, integration and tests.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does simulation replace real drone testing?
&lt;/h3&gt;

&lt;p&gt;Simulation allows software and interfaces to be verified against a declared model. Real system testing must then address electronics, sensors, identified dynamics, operating conditions and fault behavior. SITL, HIL tests and product verification have separate objectives and acceptance criteria.&lt;/p&gt;

&lt;h2&gt;
  
  
  The engineering capabilities connected by this project
&lt;/h2&gt;

&lt;p&gt;AgriPilot centers on integration work that connects requirements, architecture and evidence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Software and HMI:&lt;/strong&gt; C++ applications, editors, charts, 3D rendering and session management.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Firmware and control:&lt;/strong&gt; autopilot stack integration, configuration, estimation, actuators and diagnostics.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Communications:&lt;/strong&gt; protocols, transactions, state machines, synchronization and interruption handling.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Geometry and acquisition:&lt;/strong&gt; coordinate frames, sensor poses, footprint, overlap and valid samples.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data and verification:&lt;/strong&gt; traceable algorithms, repeatable comparisons under declared conditions, logs and inspectable reports.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Silicon LogiX approach connects requirements, firmware, management applications and data through defined interfaces and progressive verification. Work includes analyzing the required behavior, defining contracts, implementing the integration loop and testing against explicit acceptance criteria. The objective is to build components that remain integrable, diagnosable and maintainable as the product evolves.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/Silicon-Logix/slx-agripilot" rel="noopener noreferrer"&gt;SLX AgriPilot GitHub page&lt;/a&gt; provides the Windows distribution, technical documentation and SDK examples. UAV integrations, custom payloads and management applications can be assessed through a &lt;a href="https://www.siliconlogix.it/en/contact" rel="noopener noreferrer"&gt;technical discussion with Silicon LogiX&lt;/a&gt;. Engineering services include &lt;a href="https://www.siliconlogix.it/en/firmware-development" rel="noopener noreferrer"&gt;embedded firmware development&lt;/a&gt;, &lt;a href="https://www.siliconlogix.it/en/custom-software-development" rel="noopener noreferrer"&gt;software development&lt;/a&gt; and &lt;a href="https://www.siliconlogix.it/en/hardware-software-prototyping" rel="noopener noreferrer"&gt;hardware and software prototyping&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;Canonical source: &lt;a href="https://www.siliconlogix.it/en/article/agricultural-drone-software-and-firmware-slx-agripilot" rel="noopener noreferrer"&gt;Agricultural Drone Software and Firmware: SLX AgriPilot&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>embedded</category>
      <category>robotics</category>
      <category>programming</category>
    </item>
    <item>
      <title>EV charging explained: BMS, OCPP and SLX ChargeProof</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Tue, 20 Oct 2026 09:54:25 +0000</pubDate>
      <link>https://dev.to/pezzullo/ev-charging-explained-bms-ocpp-and-slx-chargeproof-4086</link>
      <guid>https://dev.to/pezzullo/ev-charging-explained-bms-ocpp-and-slx-chargeproof-4086</guid>
      <description>&lt;p&gt;The charger has ample rated power, the car is connected and the session is authorized. Yet charging slows down. The cause may lie in the battery, cooling system, cable or power available across the site. For engineers developing a BMS, charging station or fleet application, the useful question is specific: &lt;strong&gt;which constraint is limiting power, and will the vehicle be ready at departure?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;SLX ChargeProof&lt;/strong&gt; to explore that relationship in a desktop laboratory: change a condition, observe the system response and retain readable evidence. The project combines a &lt;strong&gt;C++20 electrothermal model&lt;/strong&gt;, local &lt;strong&gt;OCPP 2.0.1 communication over WebSocket&lt;/strong&gt;, an &lt;strong&gt;OpenGL&lt;/strong&gt; 3D campus and tools for diagnosis, recording and replay. The &lt;a href="https://github.com/Silicon-Logix/slx-chargeproof/releases/tag/v0.1.0-preview-r5" rel="noopener noreferrer"&gt;Windows preview is available on GitHub&lt;/a&gt;. Batteries and chargers are simulated; the software and message exchanges run on the PC.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why EV charging slows down
&lt;/h2&gt;

&lt;p&gt;The kilowatt rating on a charger describes an infrastructure capability, not a power level guaranteed throughout a session. The &lt;strong&gt;Battery Management System, or BMS&lt;/strong&gt;, determines acceptable charging conditions for the pack. The station must also respect its electrical limits, the connection limits and any power budget shared with other loads.&lt;/p&gt;

&lt;p&gt;Understanding charging time requires distinguishing &lt;strong&gt;power, measured in kW&lt;/strong&gt;, from &lt;strong&gt;energy, measured in kWh&lt;/strong&gt;. Consider a simplified example: a battery with 75 kWh of usable capacity needs approximately 45 kWh to move from 20% to 80%. At an average power of 90 kW actually stored in the battery, that would take 30 minutes. An instantaneous peak of 180 kW does not, by itself, halve the estimate: what matters is the power sustained over the session.&lt;/p&gt;

&lt;p&gt;Indicative time [h] = energy to store [kWh] / average stored power [kW]&lt;/p&gt;

&lt;p&gt;This is an approximate calculation assuming constant usable capacity. If using grid input power instead, conversion losses and auxiliary loads must be accounted for. The &lt;a href="https://afdc.energy.gov/fuels/electricity-stations" rel="noopener noreferrer"&gt;US Department of Energy’s Alternative Fuels Data Center&lt;/a&gt; identifies capacity, state of charge, the vehicle and charging equipment among the factors that determine duration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;State of charge, or SOC&lt;/strong&gt;, and temperature change during charging. As cells approach their voltage limits, current must decrease. A battery that is too cold or too hot may lead the controller to reduce its request further. The slower phase does not begin at a universal percentage: it depends on the pack and manufacturer’s strategy. A falling power curve can therefore indicate expected operation or a fault that needs diagnosis.&lt;/p&gt;

&lt;h2&gt;
  
  
  AC and DC charging: where conversion happens
&lt;/h2&gt;

&lt;p&gt;A battery charges with direct current. In &lt;strong&gt;AC charging&lt;/strong&gt;, conversion from alternating current takes place in the vehicle’s &lt;strong&gt;On-Board Charger, or OBC&lt;/strong&gt;. In &lt;strong&gt;DC charging&lt;/strong&gt;, the main conversion happens outside the vehicle. &lt;a href="https://www.ti.com/document-viewer/lit/html/sbaa819" rel="noopener noreferrer"&gt;Texas Instruments’ technical documentation on EVs and EVSE&lt;/a&gt; explains this distinction and the role of communication between the vehicle and infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two paths for delivering energy to a battery&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;AC charging&lt;/th&gt;
&lt;th&gt;DC charging&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Main AC/DC conversion&lt;/td&gt;
&lt;td&gt;On-board vehicle charger&lt;/td&gt;
&lt;td&gt;Power electronics outside the vehicle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A constraint to check&lt;/td&gt;
&lt;td&gt;OBC capability and available supply&lt;/td&gt;
&lt;td&gt;Station, cable and battery voltage/current operating ranges&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Application context&lt;/td&gt;
&lt;td&gt;Dwell times compatible with OBC power&lt;/td&gt;
&lt;td&gt;Sessions requiring higher power, within system limits&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Voltage has practical consequences too. In an ideal comparison at 200 kW, 400 V requires 500 A and 800 V requires 250 A. With the same resistance in the conductor being considered, halving current reduces its &lt;code&gt;I²R&lt;/code&gt; losses to one quarter. This does not imply that all vehicle losses fall by the same amount: components, conversion stages, insulation and operating conditions also change.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.charin.global/technology/ccs-specification/" rel="noopener noreferrer"&gt;Combined Charging System, CCS&lt;/a&gt;, concerns charging interfaces and their interoperability. OCPP addresses a different software connection. Recognizing these layers prevents attributing charger or vehicle functions to the wrong protocol.&lt;/p&gt;

&lt;h2&gt;
  
  
  BMS and electrothermal modeling: connecting current, SOC and temperature
&lt;/h2&gt;

&lt;p&gt;In a real system, the BMS collects voltage, current and temperature measurements, estimates states such as SOC, and applies protection and operating limits. A sensor reading does not automatically represent every point in the pack. A measurement that appears valid can still be unrepresentative, offset or stuck.&lt;/p&gt;

&lt;p&gt;ChargeProof makes these relationships observable through a &lt;strong&gt;Thevenin equivalent circuit&lt;/strong&gt;: an SOC-dependent open-circuit voltage, resistance and an RC branch for transient response. The model updates charge, polarization and thermal behavior at a fixed step of &lt;strong&gt;0.5 virtual seconds&lt;/strong&gt;. The &lt;a href="https://docs.pybamm.org/en/latest/source/api/models/equivalent_circuit/thevenin.html" rel="noopener noreferrer"&gt;PyBaMM Thevenin model documentation&lt;/a&gt; provides a reference for this type of formulation. PyBaMM is not a runtime dependency of ChargeProof.&lt;/p&gt;

&lt;p&gt;The preview offers three synthetic profiles: &lt;strong&gt;a compact LFP vehicle, an 800 V-class NMC SUV and an LFP van&lt;/strong&gt;. They are declared engineering assumptions for comparing behavior and constraints, not data from commercial vehicle models. Two representative aggregates separate the main pack population from a weak block. The many cells visible in the scene do not each have an independent thermal model.&lt;/p&gt;

&lt;p&gt;This design exposes a clear causal chain: cooling changes, calculated temperature changes, accepted current changes, and the energy that can be stored before departure changes. &lt;a href="https://www.energy.gov/documents/extremefastchargingtechnologygapassessmentreportpdf" rel="noopener noreferrer"&gt;DOE research on fast-charging technology gaps&lt;/a&gt; illustrates the interaction between transport, temperature and electrochemical processes. The demonstrator simplifies those processes and does not calculate electrochemical cell degradation.&lt;/p&gt;

&lt;h2&gt;
  
  
  OCPP, ISO 15118 and Plug &amp;amp; Charge serve different roles
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;OCPP connects a charging station to its Charging Station Management System, or CSMS.&lt;/strong&gt; The &lt;strong&gt;ISO 15118 family&lt;/strong&gt; addresses communication between the vehicle and EVSE, the equipment supplying energy to the vehicle. Keeping those two connections separate is essential when designing authorization, control and diagnostics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The charging chain and the scope of the ChargeProof preview&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;In this preview&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Vehicle / BMS&lt;/td&gt;
&lt;td&gt;Charging request and battery limits&lt;/td&gt;
&lt;td&gt;Numerical emulation with synthetic profiles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vehicle ↔ EVSE&lt;/td&gt;
&lt;td&gt;Charging communication, including ISO 15118&lt;/td&gt;
&lt;td&gt;No ISO 15118 stack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EVSE ↔ CSMS&lt;/td&gt;
&lt;td&gt;OCPP authorization, status and transactions&lt;/td&gt;
&lt;td&gt;OCPP 2.0.1 subset over local WebSocket&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plug &amp;amp; Charge&lt;/td&gt;
&lt;td&gt;Automatic identification using certificates and a trust infrastructure&lt;/td&gt;
&lt;td&gt;Not implemented&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In the laboratory, the station client and local server actually exchange JSON messages: &lt;code&gt;BootNotification&lt;/code&gt;, &lt;code&gt;Heartbeat&lt;/code&gt;, &lt;code&gt;Authorize&lt;/code&gt;, &lt;code&gt;StatusNotification&lt;/code&gt; and &lt;code&gt;TransactionEvent&lt;/code&gt;, with meter values included in transaction events. Requests and responses can be retained and associated with their session. &lt;strong&gt;An OCPP authorization message is not a Plug &amp;amp; Charge procedure.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As &lt;a href="https://www.charin.global/technology/plug-charge/" rel="noopener noreferrer"&gt;CharIN explains in its Plug &amp;amp; Charge overview&lt;/a&gt;, automated identification involves standardized interfaces and security mechanisms. A working integration must handle certificates, trust chains and credential lifecycles. The preview includes neither this PKI nor a TLS connection to an external backend: its evaluation CSMS listens only on the PC’s loopback interface.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://openchargealliance.org/protocols/open-charge-point-protocol/" rel="noopener noreferrer"&gt;Open Charge Alliance documents OCPP 1.6, 2.0.1 and 2.1&lt;/a&gt; and their functions. ChargeProof uses the 2.0.1 subset described in its &lt;a href="https://github.com/Silicon-Logix/slx-chargeproof/blob/main/docs/PROTOCOL_COVERAGE.md" rel="noopener noreferrer"&gt;protocol coverage documentation&lt;/a&gt;. It does not claim a complete standard implementation or &lt;a href="https://openchargealliance.org/certificationocpp/certification-ocpp-2-0-1/" rel="noopener noreferrer"&gt;OCA certification&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Smart charging: site power limits and departure times
&lt;/h2&gt;

&lt;p&gt;At a depot with several vehicles, sessions compete for a shared resource. The sum of charger ratings may exceed the power that the grid connection can supply. Battery requests, station availability and auxiliary loads must therefore be coordinated.&lt;/p&gt;

&lt;p&gt;ChargeProof distinguishes the &lt;strong&gt;EV/BMS request, station command and power actually delivered&lt;/strong&gt;. These quantities can differ. A BMS may accept substantial power while the site allocates less; a station may receive a high command while a cable limit imposes a reduction. Once expressed at the same electrical boundary, applied power must remain within every constraint.&lt;/p&gt;

&lt;p&gt;The demonstration controller uses &lt;strong&gt;max-min fair allocation&lt;/strong&gt;: it shares the available budget among admissible requests and redistributes unused allocations. Conversion and auxiliary loads are accounted for before assigning DC power. This is not an economic fleet optimizer: tariffs, real duty cycles, photovoltaics and active battery storage require a dedicated project.&lt;/p&gt;

&lt;p&gt;The departure forecast adds an operational question to instantaneous power. It runs an isolated copy of the model while holding current assumptions about faults, authorization, ambient conditions and site budget constant. It describes &lt;strong&gt;what would happen if those conditions persisted&lt;/strong&gt;; it does not anticipate a recovery action that the operator has not yet performed.&lt;/p&gt;

&lt;h2&gt;
  
  
  ChargeProof’s technology: C++20, OCPP and native graphics
&lt;/h2&gt;

&lt;p&gt;The opening &lt;strong&gt;ChargeProof Studio&lt;/strong&gt; page presents the four software layers and connects each to an observable check. The 3D scene, messages and reports refer to the same session. Users can move from “why is charging slowing down?” to the numerical constraint and its recorded evidence.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjpyztmvn7nmyn3j9pboa.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjpyztmvn7nmyn3j9pboa.webp" alt="ChargeProof Studio showing the C++20 model, local OCPP, OpenGL campus and guided diagnosis" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Actual screenshot of the Windows preview. ChargeProof Studio connects the technologies to their functions and offers a guided diagnosis of SUV cooling.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;C++20 core and versioned SDK.&lt;/strong&gt; Computation runs in a separate process connected to the desktop through private pipes. The same core supports interactive sessions and headless scenarios.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GLFW, Dear ImGui docking and OpenGL 3.3.&lt;/strong&gt; GLFW manages the window and graphics context; Dear ImGui builds the technical panels; OpenGL renders the campus, inspection views and live displays. The application is a native C++ desktop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OCPP 2.0.1 and WebSocket.&lt;/strong&gt; A WinHTTP client and WinSock server perform the local exchange, making the actual transmitted messages available for inspection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recordings and reports.&lt;/strong&gt; Events, inputs, states and results remain associated with a session, with HTML, JSON and CSV exports for analysis and comparison.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The campus has five inspectable bays. Three have operational electrical profiles; the bus and truck are inspection geometries. Visualization helps locate what is being observed, while the &lt;a href="https://github.com/Silicon-Logix/slx-chargeproof/blob/main/docs/MODEL.md" rel="noopener noreferrer"&gt;model documentation&lt;/a&gt; explains which states are actually calculated.&lt;/p&gt;

&lt;h2&gt;
  
  
  An experiment: from a 72% forecast to an observed 80%
&lt;/h2&gt;

&lt;p&gt;The guided diagnosis starts with a synthetic SUV at &lt;strong&gt;25% SOC and 48 °C&lt;/strong&gt;, targeting &lt;strong&gt;80% after twenty virtual minutes&lt;/strong&gt;, with a 500 kW site AC limit shared by the enabled sessions. These values define a demonstration experiment, not operating instructions for a real battery.&lt;/p&gt;

&lt;p&gt;Following authorization, the nominal forecast indicates that the target is reachable. The guide then introduces degraded cooling and keeps it active until the ten-minute checkpoint. The model reduces acceptable power and the departure forecast drops to approximately 72%. Restoring cooling brings the forecast back to 80%. The simulation continues and also retains the SOC actually integrated at departure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Guided scenario results and their assumptions&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Diagnosis stage&lt;/th&gt;
&lt;th&gt;Indication&lt;/th&gt;
&lt;th&gt;Interpretation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Nominal conditions&lt;/td&gt;
&lt;td&gt;80.0% forecast&lt;/td&gt;
&lt;td&gt;Target reachable if current conditions persist&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fault, at minute 10&lt;/td&gt;
&lt;td&gt;Approximately 72.0% forecast&lt;/td&gt;
&lt;td&gt;Departure estimate if cooling remains degraded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;After recovery&lt;/td&gt;
&lt;td&gt;80.0% forecast&lt;/td&gt;
&lt;td&gt;Updated estimate with cooling restored&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Departure, at minute 20&lt;/td&gt;
&lt;td&gt;80.0% observed in the model&lt;/td&gt;
&lt;td&gt;Result of the simulation that included recovery&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4wvp0rk86zki1j9f2626.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4wvp0rk86zki1j9f2626.webp" alt="Completed ChargeProof diagnosis with a 72% fault forecast, recovery and final SOC of 80%" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Actual result of the simulated case. The screen separates the nominal forecast, fault forecast, forecast after recovery and final SOC. The 72% value is a conditional estimate, not the final outcome of the run that restored cooling.&lt;/p&gt;

&lt;p&gt;The useful comparison is between cause, consequence and intervention. The final 80% value alone would hide the problem encountered during the session; a cooling alarm alone would not quantify its effect on the departure target. Retaining both helps explain controller behavior and the timing of an effective recovery.&lt;/p&gt;

&lt;h2&gt;
  
  
  Faults, messages and energy accounting: interpreting the evidence
&lt;/h2&gt;

&lt;p&gt;The preview includes backend loss, sensor offset, degraded cooling, reduced power-module output, a weak battery block and cable heating, plus a stuck-sensor variant. Each scenario exposes a different system boundary.&lt;/p&gt;

&lt;p&gt;The sensor case separates &lt;strong&gt;calculated physical temperature&lt;/strong&gt; from &lt;strong&gt;the value received by the controller&lt;/strong&gt;: adding a measurement offset does not artificially change the thermal state. The backend scenario disconnects the actual local socket. Existing authorized transactions may continue under the demonstration policy, while new authorizations are rejected until recovery. Events are queued in memory for subsequent delivery; the queue is not persistent storage that survives a program crash.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs8ft53d11l6hnaukaa6i.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs8ft53d11l6hnaukaa6i.webp" alt="ChargeProof 3D laboratory with an inspectable SUV battery, power constraints, faults and timeline" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The operational laboratory view at the end of the guided scenario. Campus, inspector and timeline show the same session state. Thermal colors represent the model aggregates, not measured thermography.&lt;/p&gt;

&lt;p&gt;Energy accounting also requires clear boundaries. The software distinguishes AC input, DC pack-terminal energy, stored energy, losses and auxiliaries. The meter register carried in the demonstrator’s messages refers to the pack’s DC terminal and is not a revenue meter. Closing the energy ledger checks the model’s internal accounting; it does not demonstrate that its parameters describe a real battery.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/Silicon-Logix/slx-chargeproof/actions/runs/39398446928" rel="noopener noreferrer"&gt;published version’s automated checks&lt;/a&gt; compiled the Windows desktop and ran seven headless scenarios, checking site constraints, energy balances and transaction lifecycles among other properties. The &lt;a href="https://github.com/Silicon-Logix/slx-chargeproof/blob/main/docs/VALIDATION.md" rel="noopener noreferrer"&gt;validation documentation&lt;/a&gt; describes the scope and limits of these checks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Replay&lt;/strong&gt; reads a recording without advancing the model or sending new messages. A new simulation recalculates behavior from its inputs. The included A/B comparison uses the same controller build and a fault-free baseline. Comparing two firmware versions would require a separate campaign retaining the respective binaries and configurations.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCS and V2G require separate engineering work
&lt;/h2&gt;

&lt;p&gt;Heavy-duty charging changes the scale of the problem: more energy to transfer, constrained dwell times and greater demands on conductors, contacts and cooling. The &lt;a href="https://www.charin.global/technology/mcs/" rel="noopener noreferrer"&gt;Megawatt Charging System, MCS, described by CharIN&lt;/a&gt; addresses interfaces for these applications. Increasing a kW setting in a simulator is not sufficient to represent those characteristics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vehicle-to-Grid, or V2G&lt;/strong&gt;, adds energy transfer from the vehicle to the grid. &lt;a href="https://www.iso.org/standard/77845.html" rel="noopener noreferrer"&gt;ISO 15118-20:2022&lt;/a&gt; also defines messages and sequences for bidirectional power transfer. Its &lt;a href="https://www.iso.org/standard/87920.html" rel="noopener noreferrer"&gt;2026 amendment&lt;/a&gt; addresses additional services, including MCS and an updated security concept. Communication is one part of the design: bidirectional power electronics, control and grid-interface requirements must also be addressed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;These functions are not operational in the ChargeProof preview.&lt;/strong&gt; The same applies to ISO 15118, Plug &amp;amp; Charge, OCPP 2.1 and external CSMS connections. Discussing them alongside the demonstrator places charging technology in context while keeping the executable scope clear.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to try SLX ChargeProof on Windows
&lt;/h2&gt;

&lt;p&gt;Open &lt;a href="https://github.com/Silicon-Logix/slx-chargeproof/releases/tag/v0.1.0-preview-r5" rel="noopener noreferrer"&gt;release 0.1.0-preview-r5&lt;/a&gt; and download &lt;strong&gt;SLX-ChargeProof-0.1.0-preview-r5.zip&lt;/strong&gt;. Extract the entire archive and start &lt;code&gt;SLX-ChargeProof.exe&lt;/code&gt;, keeping the executable, assets, core and licenses together. Windows 10/11 x64 and an OpenGL 3.3 graphics driver are required. The release includes SHA-256 checksums and is an unsigned evaluation preview.&lt;/p&gt;

&lt;p&gt;Choose &lt;strong&gt;Start guided diagnosis&lt;/strong&gt; to follow the SUV scenario’s checkpoints. After the final result, open the report, inspect the messages or move to the free laboratory. The portable package requires no compiler, Python installation, account or charging hardware.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/Silicon-Logix/slx-chargeproof" rel="noopener noreferrer"&gt;public slx-chargeproof repository&lt;/a&gt; includes interface and adapter sources, the SDK and documentation. The proprietary numerical core is supplied as an evaluation binary. Terms are set out in the &lt;a href="https://github.com/Silicon-Logix/slx-chargeproof/blob/main/LICENSE" rel="noopener noreferrer"&gt;Silicon LogiX Evaluation License 1.0&lt;/a&gt;; third-party components retain their own licenses. Use the portable ZIP to run the application directly and the source archive to rebuild the interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  From a virtual laboratory to a real charging system
&lt;/h2&gt;

&lt;p&gt;ChargeProof supports discussions about architecture, diagnosis and test criteria before connecting a physical bench. A specific project needs cell and pack data, OCV and resistance curves across SOC and temperature, cooling-system characteristics, electrical limits and interface requirements. Comparison with measurements and tests in a defined operating envelope is necessary to qualify a model for that use.&lt;/p&gt;

&lt;p&gt;These inputs support the development of BMS and EVSE firmware, protocol adapters, operator interfaces and software-in-the-loop or hardware-in-the-loop test campaigns, with explicit targets, clocks and acceptance criteria. A simulator using synthetic parameters does not replace electrical, thermal, interoperability or product-safety testing.&lt;/p&gt;

&lt;p&gt;The approach is shared by &lt;a href="https://www.siliconlogix.it/en/article/robotic-digital-twin-offline-verification-with-slx-cellproof" rel="noopener noreferrer"&gt;SLX CellProof’s robotics laboratory&lt;/a&gt; and the industrial &lt;a href="https://www.siliconlogix.it/en/article/opc-ua-in-action-the-slx-gridpilot-industrial-digital-twin" rel="noopener noreferrer"&gt;SLX GridPilot OPC UA laboratory&lt;/a&gt;: make behavior explorable and retain the link between inputs, events and outcomes. For a custom charging solution, the starting point is to &lt;a href="https://www.siliconlogix.it/en/contact" rel="noopener noreferrer"&gt;define the problem to investigate and the available data with Silicon LogiX&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions about EV charging simulation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why does a car draw less than the charger’s rated power?
&lt;/h3&gt;

&lt;p&gt;The rating is an infrastructure limit. The battery may request less current because of SOC, temperature or cell voltage. Cable, station and site limits may also intervene. ChargeProof separates request, command and delivered power so the active constraint can be observed in the model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Are OCPP and ISO 15118 the same thing?
&lt;/h3&gt;

&lt;p&gt;No. OCPP connects a station to its management system; ISO 15118 concerns communication between the vehicle and charging infrastructure. The preview executes an OCPP 2.0.1 subset locally and includes neither an ISO 15118 stack nor Plug &amp;amp; Charge.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use ChargeProof without a vehicle or charging station?
&lt;/h3&gt;

&lt;p&gt;Yes. The Windows preview runs on a PC with synthetic models and a local CSMS. The guided diagnosis demonstrates faults, forecasts and recovery without connected equipment. It does not control a real vehicle or charger.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does a positive forecast guarantee the result on a real battery?
&lt;/h3&gt;

&lt;p&gt;No. The forecast applies to the model and its stated assumptions. Synthetic profiles and consistent numerical accounting are not experimental calibration. Real-world use requires representative data, a defined validity envelope and a dedicated verification campaign.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical references and further reading
&lt;/h2&gt;

&lt;p&gt;These sources explain the technologies discussed. The software’s executed scope is documented separately in the repository. References checked on 20 October 2026.&lt;/p&gt;

&lt;p&gt;The cover is a generated editorial illustration; the three figures in the article are actual screenshots of the preview.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://afdc.energy.gov/fuels/electricity-stations" rel="noopener noreferrer"&gt;DOE / AFDC — Electric Vehicle Charging Stations&lt;/a&gt;: infrastructure and factors affecting charging time.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.ti.com/document-viewer/lit/html/sbaa819" rel="noopener noreferrer"&gt;Texas Instruments — EV/EVSE communication and architecture&lt;/a&gt;: AC/DC conversion and vehicle-station communication.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openchargealliance.org/protocols/open-charge-point-protocol/" rel="noopener noreferrer"&gt;Open Charge Alliance — Open Charge Point Protocol&lt;/a&gt;: OCPP roles and versions.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.charin.global/technology/ccs-specification/" rel="noopener noreferrer"&gt;CharIN — CCS&lt;/a&gt;, &lt;a href="https://www.charin.global/technology/plug-charge/" rel="noopener noreferrer"&gt;Plug &amp;amp; Charge&lt;/a&gt; and &lt;a href="https://www.charin.global/technology/mcs/" rel="noopener noreferrer"&gt;MCS&lt;/a&gt;: charging interfaces and interoperability.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.iso.org/standard/77845.html" rel="noopener noreferrer"&gt;ISO 15118-20:2022&lt;/a&gt; and &lt;a href="https://www.iso.org/standard/87920.html" rel="noopener noreferrer"&gt;Amd 1:2026&lt;/a&gt;: second-generation communication and additional services.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.energy.gov/documents/extremefastchargingtechnologygapassessmentreportpdf" rel="noopener noreferrer"&gt;DOE — Extreme Fast Charging Technology Gap Assessment&lt;/a&gt;: physical and thermal challenges of fast charging.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.pybamm.org/en/latest/source/api/models/equivalent_circuit/thevenin.html" rel="noopener noreferrer"&gt;PyBaMM — Thevenin Model&lt;/a&gt;: a reference for the equivalent-circuit model family, not a program dependency.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.glfw.org/docs/latest/" rel="noopener noreferrer"&gt;GLFW&lt;/a&gt; and &lt;a href="https://github.com/ocornut/imgui" rel="noopener noreferrer"&gt;Dear ImGui&lt;/a&gt;: libraries used by the native desktop.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Silicon-Logix/slx-chargeproof/blob/main/docs/MODEL.md" rel="noopener noreferrer"&gt;ChargeProof model&lt;/a&gt;, &lt;a href="https://github.com/Silicon-Logix/slx-chargeproof/blob/main/docs/PROTOCOL_COVERAGE.md" rel="noopener noreferrer"&gt;protocol coverage&lt;/a&gt; and &lt;a href="https://github.com/Silicon-Logix/slx-chargeproof/blob/main/docs/VALIDATION.md" rel="noopener noreferrer"&gt;preview validation&lt;/a&gt;: the project’s documented formulation, assumptions and checks.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Originally published on Silicon LogiX: &lt;a href="https://www.siliconlogix.it/en/article/ev-charging-explained-bms-ocpp-and-slx-chargeproof" rel="noopener noreferrer"&gt;EV charging explained: BMS, OCPP and SLX ChargeProof&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>simulation</category>
      <category>embedded</category>
      <category>showdev</category>
    </item>
    <item>
      <title>SLX EchoBench: ultrasound, firmware and FPGAs in a 3D laboratory</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Mon, 19 Oct 2026 11:43:39 +0000</pubDate>
      <link>https://dev.to/pezzullo/slx-echobench-ultrasound-firmware-and-fpgas-in-a-3d-laboratory-1dea</link>
      <guid>https://dev.to/pezzullo/slx-echobench-ultrasound-firmware-and-fpgas-in-a-3d-laboratory-1dea</guid>
      <description>&lt;p&gt;A FIFO fills up, some samples are lost, and a perfectly plausible echo remains on the screen. The firmware can still find a peak above the threshold and report an indication: &lt;strong&gt;the peak exists, but the acquisition is incomplete&lt;/strong&gt;. This is a case where digital electronics, embedded software and signal analysis need to share the same understanding of the data.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;SLX EchoBench&lt;/strong&gt; to make this problem explorable through a virtual ultrasonic inspection bench. Behind the 3D scene are a &lt;strong&gt;C++20&lt;/strong&gt; engine, ARM firmware running &lt;strong&gt;Eclipse ThreadX&lt;/strong&gt;, the &lt;strong&gt;Renode&lt;/strong&gt; emulation platform and a FIFO described in &lt;strong&gt;SystemVerilog&lt;/strong&gt; and executed through &lt;strong&gt;Verilator&lt;/strong&gt;. The project connects an operator interface, synthetic data and joint verification of firmware and digital logic. The &lt;a href="https://github.com/Silicon-Logix/slx-echobench/releases/tag/v0.1.0-preview" rel="noopener noreferrer"&gt;Windows preview on GitHub&lt;/a&gt; runs offline.&lt;/p&gt;

&lt;h2&gt;
  
  
  FPGAs: building a data path in programmable logic
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;FPGA&lt;/strong&gt; stands for &lt;em&gt;Field-Programmable Gate Array&lt;/em&gt;: an integrated circuit whose logic resources and interconnections can be configured after manufacture. Registers, memories and combinational functions can implement dedicated digital paths, with multiple operations active in parallel. &lt;a href="https://www.amd.com/content/dam/amd/en/documents/products/adaptive-socs-and-fpgas/spartan-ultrascale-plus/unlocking-innovation-cop-fpga-adaptive-socs-ebook.pdf#page=5" rel="noopener noreferrer"&gt;AMD's introduction to programmable logic&lt;/a&gt; explains this principle and its use in data processing.&lt;/p&gt;

&lt;p&gt;In a measurement chain, an FPGA can receive samples from an analogue-to-digital converter, synchronise channels, manage buffers and process data through pipelines. Processor firmware can handle configuration, state management and higher-level decisions. The boundary between these responsibilities becomes part of the design: which data is ready, when it can be read and how errors are communicated.&lt;/p&gt;

&lt;p&gt;The EchoBench model uses a nominal sampling rate of &lt;strong&gt;25 million samples per second: one sample every 40 ns&lt;/strong&gt;. This timescale helps explain why buffer capacity and flow control matter. The rate describes the synthetic signal; the speed at which a PC executes the demo is a separate measurement.&lt;/p&gt;

&lt;h2&gt;
  
  
  RTL and SystemVerilog: describing circuit behaviour
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;RTL&lt;/strong&gt;, or &lt;em&gt;Register Transfer Level&lt;/em&gt;, describes logic through registers, operations and transfers governed by a clock. Hardware description languages such as VHDL, Verilog and SystemVerilog express these circuits. Implementing them on an FPGA then requires synthesis, implementation and timing verification for the selected device.&lt;/p&gt;

&lt;p&gt;EchoBench's RTL block is a &lt;strong&gt;synchronous FIFO holding 256 words of 16 bits&lt;/strong&gt;, written in SystemVerilog. FIFO means &lt;em&gt;First In, First Out&lt;/em&gt;: the first item written is the first available to read. Pointers, occupancy, availability signals and a dropped-data counter provide a small but meaningful example of a component used in acquisition paths.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://verilator.org/guide/latest/overview.html" rel="noopener noreferrer"&gt;Verilator compiles Verilog/SystemVerilog descriptions into executable C++ or SystemC models&lt;/a&gt;. EchoBench uses the compiled FIFO model in a native library: reset, writes, reads and overflow pass through that logic. This verifies RTL behaviour; the preview distributes an executable model rather than a bitstream for a physical FPGA board.&lt;/p&gt;

&lt;h2&gt;
  
  
  From the virtual bench to the ultrasonic signal
&lt;/h2&gt;

&lt;p&gt;The scene represents an inspection bench with a movable probe and a reference specimen. The model implements a &lt;strong&gt;normal-beam pulse-echo measurement&lt;/strong&gt;: it generates the pulse, reflector echoes and backwall echo, linking them to probe position and configuration. The demonstration specimen is 40 mm thick and contains three known reflectors.&lt;/p&gt;

&lt;p&gt;Each acquisition contains &lt;strong&gt;512 samples at 25 MS/s&lt;/strong&gt;, with a nominal 5 MHz pulse. Gain, filtering, noise, attenuation and coupling let the operator explore changes in the signal and its usability. This is a simplified synthetic acoustic model, described in the &lt;a href="https://github.com/Silicon-Logix/slx-echobench/blob/main/docs/ARCHITECTURE.md" rel="noopener noreferrer"&gt;architecture documentation&lt;/a&gt;: results apply within those assumptions and support development and discussion of the processing workflow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh4a4pkzn2vmr7jr1kq49.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh4a4pkzn2vmr7jr1kq49.png" alt="SLX EchoBench: 3D bench, backwall echo, C-scan map and B-scan of the selected pass" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A real demo screenshot: probe position, signal and maps refer to the same acquisition in the session. Grey map areas are unsampled points.&lt;/p&gt;

&lt;h2&gt;
  
  
  A-scan, B-scan and C-scan: reading the same acquisition
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;A-scan&lt;/strong&gt; shows the signal over time as RF or an envelope. Two time windows, called &lt;em&gt;gates&lt;/em&gt;, define the regions of interest: in the included configuration, gate A looks for internal echoes and gate B observes the backwall echo. Amplitude, time of flight and estimated thickness remain associated with the position and configuration used to acquire the point.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;B-scan&lt;/strong&gt; places envelopes side by side along the selected pass; the &lt;strong&gt;C-scan&lt;/strong&gt; maps amplitude, thickness or acquisition quality onto the sampled surface. Scanning can be manual or follow a raster. The interface moves between the overall view and signal detail, lets the operator stop the experiment and returns to recorded points.&lt;/p&gt;

&lt;p&gt;Data quality and the extent of the sampled path describe different aspects of the inspection. Insufficient coupling, saturation and sample loss can make a point &lt;strong&gt;not evaluable&lt;/strong&gt;. The maps describe surface acquisitions in the model; an area traversed by the probe does not, by itself, establish ultrasonic coverage of the volume.&lt;/p&gt;

&lt;h2&gt;
  
  
  Known references and model calibration
&lt;/h2&gt;

&lt;p&gt;The reference view reveals the synthetic reflectors inside the specimen. It connects the geometry to the observed echo, supports experiments with different positions and helps explain the cause of an indication. The geometric reference therefore keeps an explicit role throughout the experiment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpv1116jh84jes9rgru8h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpv1116jh84jes9rgru8h.png" alt="Close view of the probe and highlighted synthetic reflectors in the SLX EchoBench specimen" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Known reflectors highlighted in the scene. The gate A peak is still present, but the acquisition is marked not evaluable because the host model has lost 64 samples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setup &amp;amp; calibration&lt;/strong&gt; includes two synthetic references, 20 and 40 mm, used to derive the model's velocity and time offset. Configuration and calibration are preserved with the results. This verifies software behaviour under the declared conditions; calibrating a physical instrument requires specific references, procedures and checks.&lt;/p&gt;

&lt;h2&gt;
  
  
  ThreadX and Renode: firmware inside the virtual platform
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/eclipse-threadx/threadx" rel="noopener noreferrer"&gt;Eclipse ThreadX&lt;/a&gt; is an &lt;strong&gt;RTOS&lt;/strong&gt;, a real-time operating system for embedded applications. It provides threads, scheduling, synchronisation and timing services. In EchoBench, an acquisition thread reads samples and peripheral status, finds the maximum within the gate and writes its result to a memory area shared with the test environment.&lt;/p&gt;

&lt;p&gt;The two compiled ARM firmware builds execute in &lt;strong&gt;Renode on a virtual Cortex-M3 platform&lt;/strong&gt;. The platform includes memory, a SysTick timer and an acquisition peripheral implemented in C#. The processor uses &lt;em&gt;memory-mapped I/O&lt;/em&gt;, or MMIO, to access registers: &lt;code&gt;COUNT&lt;/code&gt; gives the available sample count, &lt;code&gt;DATA&lt;/code&gt; returns the next sample and &lt;code&gt;FLAGS&lt;/code&gt; reports data loss.&lt;/p&gt;

&lt;p&gt;In the RTL profile, the C# peripheral calls the FIFO library compiled with Verilator. This connects &lt;strong&gt;executed ARM instructions, register accesses and digital logic behaviour&lt;/strong&gt;. The &lt;a href="https://renode.readthedocs.io/en/latest/advanced/writing-peripherals.html" rel="noopener noreferrer"&gt;Renode peripheral modelling guide&lt;/a&gt; explains the general bus access mechanism; the &lt;a href="https://github.com/Silicon-Logix/slx-echobench/blob/main/docs/ARCHITECTURE.md" rel="noopener noreferrer"&gt;EchoBench documentation&lt;/a&gt; describes the specific connection used in the demo.&lt;/p&gt;

&lt;h2&gt;
  
  
  The experiment: the same peak, different decisions
&lt;/h2&gt;

&lt;p&gt;Both builds receive the same saved samples. In the included profile, the gate operates on Q15 samples at 0 dB with no filtering. Their difference is deliberate: &lt;strong&gt;A ignores the overflow admission check and can accept the remaining peak; B checks data completeness and rejects the incomplete acquisition&lt;/strong&gt;. This makes a data-admission error observable even when the amplitude still looks plausible.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkwqj3fd4r658gff2fpzi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkwqj3fd4r658gff2fpzi.png" alt="SLX EchoBench evidence panel showing a completed ThreadX and RTL run, available samples, peak and RTOS ticks" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The evidence panel collects compiled RTL processing results, input identity and RTOS ticks. Build A's result is visible here; the complete comparison also verifies that B rejects incomplete data.&lt;/p&gt;

&lt;p&gt;To reproduce the problem, the &lt;strong&gt;ThreadX + Verilator FIFO&lt;/strong&gt; profile can attempt to write a burst of 512 words into a 256-word FIFO before reading its contents. It retains 256 words and counts 256 attempted writes as lost data. A peak in the retained portion can therefore survive the fault: A accepts it, while B also considers the loss flag and sample count. The host model fault has a separate contract and drops 64 samples.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;ready/valid&lt;/strong&gt; signals also make this useful for FPGA developers. An input transfer is accepted when the producer presents valid data and the FIFO is ready to receive it. Readiness enables flow regulation through &lt;em&gt;backpressure&lt;/em&gt;. The overflow test deliberately forces attempts while the queue is full and verifies that data-loss information reaches the firmware decision.&lt;/p&gt;

&lt;p&gt;Firmware execution processes the &lt;strong&gt;single selected saved input&lt;/strong&gt;; the raster acquisition and maps are handled by the host model. Results preserve hashes of the input, firmware and RTL, together with the ThreadX ticks actually observed. Timing and peripherals belong to the emulated platform and require dedicated validation before drawing conclusions about a physical board.&lt;/p&gt;

&lt;h2&gt;
  
  
  Godot and C++20: connecting the 3D bench to processing
&lt;/h2&gt;

&lt;p&gt;The visible laboratory uses &lt;a href="https://docs.godotengine.org/en/4.5/getting_started/introduction/introduction_to_godot.html" rel="noopener noreferrer"&gt;Godot 4.5 and GDScript&lt;/a&gt; for the 3D scene, operator controls and result inspection. The bench makes the relationship between probe position, configuration and signal easy to explore: moving the probe changes the model's data and the context in which it should be interpreted.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;C++20 engine&lt;/strong&gt; manages the acoustic model, processing, sessions and emulation jobs. Interface and engine communicate through a &lt;a href="https://github.com/Silicon-Logix/slx-echobench/blob/main/docs/API_SLX_V1.md" rel="noopener noreferrer"&gt;local API using JSON messages&lt;/a&gt;; Renode runs as a separate process, with cancellation support. This keeps controls responsive during firmware comparison and preserves the input, configuration and outcome together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Repeating experiments and preserving evidence
&lt;/h2&gt;

&lt;p&gt;A session saves samples, probe poses, applied parameters, calibration, events and annotations. &lt;strong&gt;Replay&lt;/strong&gt; selects an indication or event and restores its context without manually recreating the scan. This supports comparing a change, discussing a case and documenting the reason for a decision.&lt;/p&gt;

&lt;p&gt;Reports can be exported as &lt;strong&gt;HTML, JSON and CSV with explicit units&lt;/strong&gt;. Integrity checks and processing provenance help maintain the connection between data and results. The &lt;a href="https://github.com/Silicon-Logix/slx-echobench/blob/main/docs/VALIDATION.md" rel="noopener noreferrer"&gt;verification documentation&lt;/a&gt; records the checks performed and the limits of their conclusions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data exchange: the included NDE 4.4 subset
&lt;/h2&gt;

&lt;p&gt;EchoBench implements a documented mapping of the &lt;a href="https://ndeformat.com/4.4/" rel="noopener noreferrer"&gt;NDE 4.4 format&lt;/a&gt;: the public dataset contains &lt;strong&gt;one selected raw A-scan&lt;/strong&gt;, with dimensions 1 x 1 x 512. The complete native session is preserved in the vendor extension, together with the information needed to restore it.&lt;/p&gt;

&lt;p&gt;Validation includes the official schemas and exact recovery of samples and session data. Import and export apply to this &lt;a href="https://github.com/Silicon-Logix/slx-echobench/blob/main/docs/NDE_MAPPING.md" rel="noopener noreferrer"&gt;specific SLX mapping&lt;/a&gt;. Integrating other instruments' files, volumetric datasets or DICONDE requires dedicated adapters and interoperability tests.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trying the Windows preview
&lt;/h2&gt;

&lt;p&gt;Download the &lt;a href="https://github.com/Silicon-Logix/slx-echobench/releases/download/v0.1.0-preview/SLX-EchoBench-0.1.0-preview.zip" rel="noopener noreferrer"&gt;portable Windows x64 package&lt;/a&gt; from release &lt;strong&gt;v0.1.0-preview&lt;/strong&gt;, extract the complete archive and launch &lt;code&gt;EchoBench.exe&lt;/code&gt;, keeping the included folders and resources alongside it. The guided visit introduces the bench; &lt;em&gt;Technical analysis&lt;/em&gt; opens signals and maps; &lt;em&gt;Evidence &amp;amp; replay&lt;/em&gt; provides sessions and firmware comparison.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/Silicon-Logix/slx-echobench" rel="noopener noreferrer"&gt;slx-echobench GitHub repository&lt;/a&gt; includes the Godot/GDScript interface, API contracts, documentation and examples. The proprietary C++20 engine is distributed as a binary SDK. The project uses the &lt;a href="https://github.com/Silicon-Logix/slx-echobench/blob/main/LICENSE" rel="noopener noreferrer"&gt;Silicon LogiX Evaluation License 1.0&lt;/a&gt;; evaluation purposes and usage conditions are specified in the licence.&lt;/p&gt;

&lt;h2&gt;
  
  
  From the demo to a custom engineering project
&lt;/h2&gt;

&lt;p&gt;EchoBench provides a concrete starting point for discussing acquisition requirements, error handling, operator interfaces and repeatable tests. Moving to an industrial system starts with real data, the measurement chain and the customer's acceptance criteria.&lt;/p&gt;

&lt;p&gt;Commissioned work can include &lt;a href="https://www.siliconlogix.it/en/firmware-development" rel="noopener noreferrer"&gt;firmware and drivers&lt;/a&gt;, &lt;a href="https://www.siliconlogix.it/en/fpga-vhdl-verilog-development" rel="noopener noreferrer"&gt;FPGA logic and acquisition paths&lt;/a&gt;, &lt;a href="https://www.siliconlogix.it/en/custom-software-development" rel="noopener noreferrer"&gt;desktop software&lt;/a&gt;, instrument connectivity, hardware-in-the-loop benches and production system integrations. PAUT, TFM and TOFD techniques, qualified acoustic models, robotics and AI analysis require specific development and validation and are extensions to define within a project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are you developing an acquisition system or an inspection bench?&lt;/strong&gt; &lt;a href="https://www.siliconlogix.it/en/contact#service=firmware&amp;amp;source=article-echobench" rel="noopener noreferrer"&gt;Tell me about your project&lt;/a&gt;: the probe or sensor, available electronics, sampling rate, data format and critical case to reproduce. These are the starting points for a useful, measurable experiment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do I need a probe or an FPGA board to try EchoBench?
&lt;/h3&gt;

&lt;p&gt;The included preview runs offline on Windows x64 with a synthetic bench and signals. Firmware and FIFO RTL execute in the virtual environment distributed with the package.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can the program qualify an inspection on a real component?
&lt;/h3&gt;

&lt;p&gt;The demo explores and verifies the software workflow within the declared model. Qualifying an NDT procedure, characterising real flaw responses and calibrating an instrument require physical experiments and dedicated criteria.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does the A/B comparison actually execute firmware?
&lt;/h3&gt;

&lt;p&gt;Yes. The firmware execution command runs the ARM ThreadX binaries in Renode on the selected saved point. A separate comparison of the host model processors is also available; the interface distinguishes the two paths.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I import any .nde file?
&lt;/h3&gt;

&lt;p&gt;The initial version imports files that follow the SLX single-A-scan NDE 4.4 mapping. Other manufacturers and data layouts require compatibility assessment and an adapter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical references and further reading
&lt;/h2&gt;

&lt;p&gt;The official references and preview documentation below provide more detail about the technologies and project decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.amd.com/content/dam/amd/en/documents/products/adaptive-socs-and-fpgas/spartan-ultrascale-plus/unlocking-innovation-cop-fpga-adaptive-socs-ebook.pdf#page=5" rel="noopener noreferrer"&gt;AMD - The Programmable Logic Advantage&lt;/a&gt;: introduction to FPGAs, programmable logic and reconfigurable architectures, page 5.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://verilator.org/guide/latest/overview.html" rel="noopener noreferrer"&gt;Verilator - Overview&lt;/a&gt;: from Verilog/SystemVerilog descriptions to compiled executable models.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/eclipse-threadx/threadx" rel="noopener noreferrer"&gt;Eclipse ThreadX RTOS&lt;/a&gt;: the official project, kernel services and embedded architecture ports.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://renode.readthedocs.io/en/latest/advanced/writing-peripherals.html" rel="noopener noreferrer"&gt;Renode - Peripheral modelling guide&lt;/a&gt;: virtual peripherals, registers and processor bus accesses.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://renode.readthedocs.io/en/latest/advanced/co-simulating-with-an-hdl-simulator.html" rel="noopener noreferrer"&gt;Renode - Co-simulating with an HDL simulator&lt;/a&gt;: further reading on connecting emulated platforms and HDL models.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.godotengine.org/en/4.5/getting_started/introduction/introduction_to_godot.html" rel="noopener noreferrer"&gt;Godot 4.5 - Introduction to Godot&lt;/a&gt;: the 2D/3D engine, applications and supported languages.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ndeformat.com/4.4/" rel="noopener noreferrer"&gt;NDE 4.4&lt;/a&gt; and the &lt;a href="https://github.com/Silicon-Logix/slx-echobench/blob/main/docs/NDE_MAPPING.md" rel="noopener noreferrer"&gt;EchoBench NDE mapping&lt;/a&gt;: the exchange format and the implemented subset.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Silicon-Logix/slx-echobench/blob/main/docs/ARCHITECTURE.md" rel="noopener noreferrer"&gt;EchoBench architecture&lt;/a&gt;, &lt;a href="https://github.com/Silicon-Logix/slx-echobench/blob/main/docs/API_SLX_V1.md" rel="noopener noreferrer"&gt;local API&lt;/a&gt; and &lt;a href="https://github.com/Silicon-Logix/slx-echobench/blob/main/docs/VALIDATION.md" rel="noopener noreferrer"&gt;verification and limitations&lt;/a&gt;: component contracts, responsibilities and experiment conditions.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Originally published on &lt;a href="https://www.siliconlogix.it/en/article/slx-echobench-ultrasound-firmware-and-fpgas-in-a-3d-laboratory" rel="noopener noreferrer"&gt;Silicon LogiX&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>embedded</category>
      <category>fpga</category>
      <category>cpp</category>
      <category>testing</category>
    </item>
    <item>
      <title>Robotic digital twin: offline verification with SLX CellProof</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Fri, 16 Oct 2026 08:54:52 +0000</pubDate>
      <link>https://dev.to/pezzullo/robotic-digital-twin-offline-verification-with-slx-cellproof-5e4k</link>
      <guid>https://dev.to/pezzullo/robotic-digital-twin-offline-verification-with-slx-cellproof-5e4k</guid>
      <description>&lt;p&gt;&lt;strong&gt;A robotic digital twin becomes useful when it helps explain what changes after a program edit.&lt;/strong&gt; Moving a pick point, changing a speed or encountering a closed CNC door can affect the whole sequence. With &lt;strong&gt;SLX CellProof&lt;/strong&gt;, Silicon LogiX brings these questions into a desktop application: a demonstration UR5e-CNC workcell, offline programming, a scenario campaign and cycle comparison over time.&lt;/p&gt;

&lt;p&gt;The project centres on a &lt;strong&gt;digital model of the workcell and its sequences&lt;/strong&gt;. The 3D scene makes simulator behaviour visible; baselines, events and replay help compare changes. Version 0.5.0 Preview adds persistent projects, recoverable autosaves, a Windows installer and explicit update checks. The software runs locally without a mandatory account.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a robotic digital twin used for?
&lt;/h2&gt;

&lt;p&gt;In manufacturing, a digital twin connects a digital representation with models, data and behaviours of the system it describes. The &lt;a href="https://www.nist.gov/programs-projects/digital-twins-advanced-manufacturing" rel="noopener noreferrer"&gt;NIST programme on digital twins for advanced manufacturing&lt;/a&gt; also addresses synchronization, measurement and model trustworthiness. A 3D shape is therefore a starting point: useful decisions require interpretable state and a declared scope.&lt;/p&gt;

&lt;p&gt;CellProof applies these ideas to a &lt;strong&gt;nominal demonstration workcell&lt;/strong&gt;. A robot moves parts between defined stations, interacts with a simulated gripper, digital signals and CNC machine, and follows an editable program. The practical aim is to propose a change, run repeatable checks and find the moment when behaviour diverges. The model is not presented as a calibrated replica of a physical installation.&lt;/p&gt;

&lt;p&gt;The application separates &lt;strong&gt;offline cycle simulation&lt;/strong&gt; from &lt;strong&gt;read-only RTDE controller monitoring&lt;/strong&gt;. Receiving telemetry does not automatically calibrate the virtual cell or turn the simulator into a robot controller.&lt;/p&gt;

&lt;h2&gt;
  
  
  Offline programming for a UR5e-CNC workcell
&lt;/h2&gt;

&lt;p&gt;The Programming workspace combines an editor and the 3D cell. The SLX demonstration language includes joint-space &lt;strong&gt;PTP&lt;/strong&gt; moves, Cartesian &lt;strong&gt;LIN&lt;/strong&gt; segments, gripper commands, IO waits and CNC instructions. Taught points are editable; the pendant provides joint and Cartesian jog and single-instruction stepping. Orbit, zoom, markers and trails put positions in the context of the workcell.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0oblse7oijsedfrwt8nc.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0oblse7oijsedfrwt8nc.webp" alt="SLX CellProof offline programming workspace with an SLX editor, a 3D UR5e-CNC workcell and cycle verification controls" width="800" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Actual CellProof 0.5.0 screenshot. The editor and 3D view share simulator state; the displayed commands act on the demonstration model.&lt;br&gt;
A first session can start by choosing part A or B, validating the recipe and running the cycle. Save a baseline, change one condition and choose &lt;strong&gt;Verify change&lt;/strong&gt;. SLX is the demonstrator's language: this release does not send that program to a controller or provide a URScript postprocessor for physical execution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scenario verification: faults and recovery matter
&lt;/h2&gt;

&lt;p&gt;A successful nominal run still leaves questions open. What happens when feedback is missing? How does an interruption affect the sequence? Which pose and state remain after recovery? CellProof executes &lt;strong&gt;eight model scenarios&lt;/strong&gt;, including fault and recovery cases. Results are computed by the simulation rather than taken from a prewritten report.&lt;/p&gt;

&lt;p&gt;A reference baseline makes a change testable. For example, editing a pick point can cause a missed pick: the part is not silently moved to match the new point and force a successful outcome. An obstruction fixture also exercises a geometric case at the CNC entrance. Diagnostics and outcomes help distinguish the expected result from an issue that needs investigation.&lt;/p&gt;

&lt;p&gt;These behaviours provide a concrete basis for discussing automation requirements: progression conditions, IO confirmations, interruption handling and recovery criteria. Reported times and outcomes describe the selected model; they do not constitute plant acceptance testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cycle Inspector: synchronized baseline and variant replay
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Cycle Inspector&lt;/strong&gt; records the current and reference simulated cycles separately. Both 3D views can follow the same timeline position; lanes show executed phases, door, grip and IO state. Playback, pause, scrubbing and event navigation let an operator revisit a cycle without manually repeating every step.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8l3bvk48d3mirm9ka6uh.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8l3bvk48d3mirm9ka6uh.webp" alt="Conceptual illustration comparing reference and variant robot workcells with coloured paths and a common replay time reference" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Artistic interpretation of cycle comparison: corresponding moments and paths help explain a difference. This is a conceptual illustration, not an application screenshot or a measurement.&lt;br&gt;
The &lt;strong&gt;first sampled difference&lt;/strong&gt; identifies the earliest observed difference in the compared samples. It is a starting point for investigation, rather than an automatic root-cause diagnosis. Notes and bookmarks preserve analysis context. JSON export saves the recording; CSV exposes samples from both runs, joints, TCP, CNC and IO for external analysis.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbxwz634x255btlitdmej.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbxwz634x255btlitdmej.webp" alt="SLX CellProof Cycle Inspector showing synchronized 3D replay of current and baseline runs, an IO timeline, events and bookmarks" width="800" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cycle Inspector in version 0.5.0. Replay and timelines use nominal simulator recordings; imported local recordings are marked as unverified.&lt;br&gt;
Recordings use &lt;strong&gt;100 ms samples&lt;/strong&gt;, with a maximum duration of 600 seconds per run. Sampling makes observed states comparable, but does not add continuous geometry checking between samples or measure physical robot timing. This release records the simulator; synchronized hardware trace acquisition would be a separate integration.&lt;/p&gt;

&lt;h2&gt;
  
  
  The technology stack: Godot 4, GDScript and C++20
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.godotengine.org/en/4.5/about/introduction.html" rel="noopener noreferrer"&gt;Godot Engine&lt;/a&gt; provides the desktop interface and 3D visualization. CellProof uses &lt;strong&gt;Godot 4.5.2 and GDScript&lt;/strong&gt; for panels, interaction tools and state presentation. Workcell models are distributed as GLB assets. Programming, verification and cycle inspection share the same graphical environment.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;C++20 core&lt;/strong&gt; handles nominal kinematics, sequence execution, validation, scenarios and RTDE connectivity. It communicates with the interface through a local JSON message API. This separation supports checking model operations independently of animation. The Windows release includes the compiled core required to run the application.&lt;/p&gt;

&lt;p&gt;The public repository contains the Godot interface, documentation, selected assets, publication checks and an approved core binary. Native implementation and private issuing and signing tools are excluded. Original SLX content uses the &lt;strong&gt;Silicon LogiX Evaluation License 1.0&lt;/strong&gt;; Godot and other dependencies retain their respective licences, included with the distribution.&lt;/p&gt;

&lt;h2&gt;
  
  
  RTDE and URSim: observing controller data
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.universal-robots.com/tutorials/communication-protocol-tutorials/rtde-guide.html" rel="noopener noreferrer"&gt;Real-Time Data Exchange, RTDE&lt;/a&gt; is the Universal Robots interface for exchanging data with external applications. A configured recipe specifies the transmitted fields. Joint values, timestamps and status need to be interpreted together; the manufacturer's documentation also describes skipped output packages under controller load.&lt;/p&gt;

&lt;p&gt;CellProof subscribes to an &lt;strong&gt;output-only recipe&lt;/strong&gt;. Received joint data drives the view, while stale data is reported. The path has been exercised with the official &lt;strong&gt;URSim e-Series 5.23.0&lt;/strong&gt; virtual controller. URSim is a manufacturer component prepared separately. CellProof sends no URScript, RTDE input recipes or physical motion commands.&lt;/p&gt;

&lt;h2&gt;
  
  
  Persistent projects, recoverable autosaves and Windows installation
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;.cellproof&lt;/strong&gt; document stores the recipe, taught points, reference baseline, scenario settings, recordings, notes and view configuration. The Project menu provides open, save, recent documents and recovery actions. Recipe-only JSON remains available when exchanging just the program and its configuration.&lt;/p&gt;

&lt;p&gt;Recoverable autosaves preserve unfinished work. Project saves use native atomic replacement on Windows, retain a previous complete copy and detect conflicting changes on disk. Actions replacing a project offer Save, Discard or Cancel. Reopening leaves the simulator idle: a document does not autonomously resume a cycle or establish a hardware connection.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Inno Setup&lt;/strong&gt; installer works per user and offers shortcuts and optional file association. A portable package is also available. Update checking starts with an explicit operator action, uses the official repository and verifies the installer's SHA-256 checksum. Version 0.5.0 is an &lt;strong&gt;unsigned preview&lt;/strong&gt;: the checksum checks download integrity; it does not authenticate a publisher.&lt;/p&gt;

&lt;h2&gt;
  
  
  Model boundaries and a path to a physical workcell
&lt;/h2&gt;

&lt;p&gt;CellProof uses nominal kinematics and sampled geometry proxies. It does not provide self-collision, continuous swept-volume checking or complete mesh collision validation. Demonstration metrology is synthetic. Software checks, including automated GitHub validation, cover this scope; they do not qualify installation safety, physical accuracy or hardware cycle times.&lt;/p&gt;

&lt;p&gt;A dedicated project can start with workcell CAD, robot calibration, measured base and TCP frames and agreed acceptance criteria. Proposed extensions include controller trace and PLC IO correlation, OPC UA monitoring, trajectory evaluation with MoveIt 2, and virtual commissioning environments using Gazebo and ros2_control. &lt;strong&gt;These require implementation and validation for the agreed installation; they are not executable modules included in this preview.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Download SLX CellProof and try offline cycle comparison
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/Silicon-Logix/slx-cellproof/releases/tag/v0.5.0-preview" rel="noopener noreferrer"&gt;0.5.0 Preview release&lt;/a&gt; provides a &lt;a href="https://github.com/Silicon-Logix/slx-cellproof/releases/download/v0.5.0-preview/slx-cellproof-0.5.0-windows-x64-setup.exe" rel="noopener noreferrer"&gt;Windows x64 installer&lt;/a&gt;, portable archive, public source bundle and checksums. Extract the whole portable directory and keep the executable, resources and core binary together. The product interface, Help and documentation are in English.&lt;/p&gt;

&lt;p&gt;For a first experiment, validate the nominal recipe, save a baseline, change a point or speed and compare the scenario outcomes. Record the cycle in Cycle Inspector, locate the first differing sample and save a note in the project. This connects programming, outcome and analysis in a short workflow.&lt;/p&gt;

&lt;p&gt;See the &lt;a href="https://github.com/Silicon-Logix/slx-cellproof" rel="noopener noreferrer"&gt;official repository&lt;/a&gt;, &lt;a href="https://github.com/Silicon-Logix/slx-cellproof/blob/main/docs/USER_GUIDE.md" rel="noopener noreferrer"&gt;user guide&lt;/a&gt; and &lt;a href="https://github.com/Silicon-Logix/slx-cellproof/blob/main/docs/VALIDATION.md" rel="noopener noreferrer"&gt;validation scope&lt;/a&gt;. To discuss a calibrated model or a dedicated application, &lt;a href="https://www.siliconlogix.it/en/contact" rel="noopener noreferrer"&gt;contact Silicon LogiX&lt;/a&gt; with the robot, machine, available data and verification objective. This demonstrator is part of our work on &lt;a href="https://www.siliconlogix.it/en/custom-software-development" rel="noopener noreferrer"&gt;custom software development&lt;/a&gt; for industrial systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Can I try CellProof without a physical robot?
&lt;/h3&gt;

&lt;p&gt;Yes. Programming, scenario verification and Cycle Inspector use the included local simulator. URSim is only needed to exercise the separate virtual-controller connection.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does the preview control a physical UR5e?
&lt;/h3&gt;

&lt;p&gt;No. RTDE monitoring is read only and the SLX language runs in the simulator. Physical motion, calibration and commissioning need a dedicated integration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does a passing result guarantee collision-free motion?
&lt;/h3&gt;

&lt;p&gt;No. Outcomes concern the simplified sampled checks implemented by the model. They do not replace workcell validation or independent safety functions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I continue an analysis after closing the application?
&lt;/h3&gt;

&lt;p&gt;Yes. A .cellproof project preserves baselines, recordings, notes and settings. Autosaves and the previous complete save provide recovery options.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technology references and further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.nist.gov/programs-projects/digital-twins-advanced-manufacturing" rel="noopener noreferrer"&gt;NIST: digital twins for advanced manufacturing&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.godotengine.org/en/4.5/about/introduction.html" rel="noopener noreferrer"&gt;Godot 4.5 engine introduction&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.universal-robots.com/tutorials/communication-protocol-tutorials/rtde-guide.html" rel="noopener noreferrer"&gt;Universal Robots RTDE guide&lt;/a&gt; and &lt;a href="https://github.com/UniversalRobots/Universal_Robots_ROS2_Description" rel="noopener noreferrer"&gt;official UR robot descriptions&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Silicon-Logix/slx-cellproof/blob/main/docs/ADVANCED_FEATURES.md" rel="noopener noreferrer"&gt;CellProof: requirements and references for proposed integrations&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Canonical source: &lt;a href="https://www.siliconlogix.it/en/article/robotic-digital-twin-offline-verification-with-slx-cellproof" rel="noopener noreferrer"&gt;Robotic digital twin: offline verification with SLX CellProof&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>robotics</category>
      <category>godot</category>
      <category>cpp</category>
      <category>digitaltwin</category>
    </item>
    <item>
      <title>OPC UA in action: the SLX GridPilot industrial digital twin</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Thu, 15 Oct 2026 14:32:29 +0000</pubDate>
      <link>https://dev.to/pezzullo/opc-ua-in-action-the-slx-gridpilot-industrial-digital-twin-3a3m</link>
      <guid>https://dev.to/pezzullo/opc-ua-in-action-the-slx-gridpilot-industrial-digital-twin-3a3m</guid>
      <description>&lt;p&gt;&lt;strong&gt;OPC UA becomes easier to understand when a command produces an observable response.&lt;/strong&gt; A power request, a valve opening, a rotating machine and an alarm connect the protocol to process behavior. With &lt;strong&gt;SLX GridPilot&lt;/strong&gt;, Silicon LogiX presents a desktop application for exploring that path: from the nodes of an OPC UA server to the control of two reversible hydroelectric units and their 3D representation.&lt;/p&gt;

&lt;p&gt;The starting point is precise: &lt;strong&gt;OPC UA communication and the control runtime are real; the plant is simulated&lt;/strong&gt;. The computer runs clients, three independent servers and the Eclipse 4diac FORTE runtime. Water, rotating machinery, electrical power and equipment faults belong to the numerical model. This software laboratory serves both people approaching industrial automation and engineers evaluating interfaces, information models and diagnostics without connecting physical equipment.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is OPC UA, and why does it matter in industrial automation?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://opcfoundation.org/about/opc-technologies/opc-ua/" rel="noopener noreferrer"&gt;OPC Unified Architecture&lt;/a&gt; is a platform-independent interoperability architecture. In the client-server model, a server exposes information and services that a client can discover and use: variables, objects, methods and events. For industrial automation, its value includes communicating the meaning of data through types and relationships, beyond a list of numeric values.&lt;/p&gt;

&lt;p&gt;A unit's speed, for example, can be presented together with its data type, engineering unit, quality and timestamp. A client can browse the model, read a measurement, call a method and receive notifications. GridPilot applies these operations to a visible scenario: two reversible units, &lt;strong&gt;U1 and U2&lt;/strong&gt;, generating electricity or moving water toward the upper reservoir in pumping mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  A digital twin demonstrator built around OPC UA
&lt;/h2&gt;

&lt;p&gt;The initial &lt;strong&gt;OPC UA Studio&lt;/strong&gt; workspace displays connected servers, monitored items and notifications received in the current sessions. A live operation map distinguishes the client, servers, FORTE control, simulated equipment and feedback path. These indicators help explain which part of the system is working and where the displayed data comes from.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgtvgdbweodrg0ebuu6tx.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgtvgdbweodrg0ebuu6tx.webp" alt="SLX GridPilot OPC UA Studio showing three local servers, live notifications and the command-to-feedback path" width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OPC UA Studio in version 0.4.2. Counters describe actual client connections and notifications; the guided tour verifies server responses.&lt;br&gt;
The three local endpoints represent plant services and the two units: &lt;code&gt;opc.tcp://127.0.0.1:4840&lt;/code&gt;, &lt;code&gt;opc.tcp://127.0.0.1:4841&lt;/code&gt; and &lt;code&gt;opc.tcp://127.0.0.1:4842&lt;/code&gt;. An external OPC UA client can explore the same model and call its methods. The 3D scene receives state through OPC UA, just like the interface indicators. Selecting U1 or U2 highlights the corresponding unit and lets the operator locate it in the plant view.&lt;/p&gt;

&lt;h2&gt;
  
  
  From command to feedback: what actually happens
&lt;/h2&gt;

&lt;p&gt;Requesting power does not mean that power has already been delivered. Calling &lt;code&gt;SetPower(1.2)&lt;/code&gt; on U1's endpoint requests 1.2 MW of generation. The method's initial response confirms that the request has been queued. &lt;code&gt;LastCommand&lt;/code&gt; then reports acceptance or rejection, while power, state and actuator positions show the observed outcome. Hydraulic availability and interlocks can limit the result even when a command is accepted.&lt;/p&gt;

&lt;p&gt;The coordinator presents the request to &lt;strong&gt;FORTE&lt;/strong&gt; control logic, which manages sequences and operating limits. The numerical model evolves from the actuator targets; the resulting state is published by the servers and returns to the client through subscriptions. The interface therefore distinguishes &lt;strong&gt;request received, command accepted and behavior achieved&lt;/strong&gt;. The same principle applies to &lt;code&gt;Stop()&lt;/code&gt;: confirming a stop requires feedback such as zero speed and closed flow-control devices.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fefgiuckxeyiii90opq4c.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fefgiuckxeyiii90opq4c.webp" alt="GridPilot architecture: OPC UA client, open62541 servers, coordinator and FORTE, numerical model and state feedback to the client" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Functional architecture of the demonstrator. OPC UA connects the supervisor to the servers; the coordinator uses local connections to control and model components. Calculated state returns to the servers and client, which also updates the 3D scene.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exploring OPC UA nodes, types and information models
&lt;/h2&gt;

&lt;p&gt;The integrated browser performs actual &lt;strong&gt;Browse and Read&lt;/strong&gt; operations. Users can search for a node, inspect its type, copy its NodeId and examine quality, timestamps and engineering units. Persistent watchlists follow selected variables, while filters help locate measurements whose quality differs from Good.&lt;/p&gt;

&lt;p&gt;A &lt;a href="https://reference.opcfoundation.org/specs/OPC-10000-3/8.2" rel="noopener noreferrer"&gt;NodeId&lt;/a&gt; identifies a node within a namespace. GridPilot's application namespace is &lt;code&gt;urn:siliconlogix:gridpilot:v1&lt;/code&gt;. A client must resolve its index on the server instead of assuming that a fixed number always identifies the same namespace. This is a practical detail to understand when moving from an example to integration between different applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NodeSet2 XML&lt;/strong&gt; export, alongside JSON and CSV, documents browsed instances, types and method arguments. It describes the information model: it is neither an executable server backup nor a complete recording of its events.&lt;/p&gt;

&lt;h2&gt;
  
  
  Subscriptions, quality and timestamps: reading data in context
&lt;/h2&gt;

&lt;p&gt;An &lt;a href="https://reference.opcfoundation.org/specs/OPC-10000-4/5.13.1" rel="noopener noreferrer"&gt;OPC UA subscription&lt;/a&gt; lets a client receive notifications for configured monitored items. The sampling interval concerns observation of the data; the publishing interval governs notification delivery. A numeric deadband defines a change threshold. The server can revise the requested intervals, and GridPilot exposes those values together with the status of individual monitored items.&lt;/p&gt;

&lt;p&gt;Watchlists use a dedicated subscription. Coherent plant state arrives in the &lt;code&gt;Snapshot&lt;/code&gt; variable, so indicators and the scene do not have to reconstruct a process snapshot by combining independent reads. &lt;strong&gt;SourceTimestamp&lt;/strong&gt; refers to the sample's UTC publication time; &lt;code&gt;SimTime&lt;/code&gt; represents simulated process time. Pausing the simulation therefore does not stop the communication clock.&lt;/p&gt;

&lt;p&gt;Quality and freshness have visible consequences: uncertain measurements are identified, and state that no longer receives updates is marked stale. Machine animations do not advance beyond the latest confirmed pose. Motion thus helps users read the available telemetry.&lt;/p&gt;

&lt;h2&gt;
  
  
  OPC UA faults and alarms: acknowledgement is separate from recovery
&lt;/h2&gt;

&lt;p&gt;The demonstrator supports repeatable actuator, sensor, communication and electrical faults. A simulated speed-sensor error also produces an observable quality change on the OPC UA node. Injecting communication loss for a unit actually shuts down its endpoint, allowing users to examine disconnection, reconnection and the controller's response.&lt;/p&gt;

&lt;p&gt;The servers expose standard OPC UA &lt;strong&gt;OffNormalAlarmType&lt;/strong&gt; conditions with severity, message, active state and acknowledgement. An operator can acknowledge a condition and add a comment. &lt;strong&gt;Acknowledgement does not remove the fault's cause or automatically release the controller latch&lt;/strong&gt;: recovery must restore the required conditions. This release uses the experimental Alarms &amp;amp; Conditions support in open62541 1.4.14 and makes no claim of OPC UA conformance certification.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning through a guided path and observable checks
&lt;/h2&gt;

&lt;p&gt;The OPC UA Studio tour moves from browsing U1 to requesting power, confirming a stop and injecting a sensor fault, followed by alarm acknowledgement and recovery. Each step advances when the expected feedback is observed. Missing or stale data cannot confirm an outcome.&lt;/p&gt;

&lt;p&gt;The plant view complements the experience with overview, cutaway and unit-detail modes. Rotation, flow-control devices, flow indicators and electrical activity make it easier to connect a variable to the relevant machine. Graphics represent received state; the numerical model and control logic determine process evolution.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn9lqmg2ex7ffdm4ftufy.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn9lqmg2ex7ffdm4ftufy.webp" alt="GridPilot's simulated 3D hydro plant with U1 and U2 identified and confirmed power received through OPC UA" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Plant view places the 3D model beside operator requests and confirmed values. U1 and U2 labels connect each unit card to its location in the plant.&lt;/p&gt;

&lt;h2&gt;
  
  
  The technology stack: Rust, Slint, Bevy, open62541 and FORTE
&lt;/h2&gt;

&lt;p&gt;The architecture gives each technology a distinct role. &lt;a href="https://rust-lang.org/" rel="noopener noreferrer"&gt;Rust&lt;/a&gt; is used for coordination, supervision and the numerical engine. &lt;a href="https://slint.dev/" rel="noopener noreferrer"&gt;Slint&lt;/a&gt; provides the desktop interface; &lt;a href="https://bevy.org/" rel="noopener noreferrer"&gt;Bevy&lt;/a&gt;, together with wgpu, handles the 3D scene and glTF models. Interface and visualization share confirmed process state.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://open62541.org/" rel="noopener noreferrer"&gt;open62541&lt;/a&gt; is the C OPC UA stack used for the servers and client adapter. &lt;a href="https://eclipse.dev/4diac/4diac_forte/" rel="noopener noreferrer"&gt;Eclipse 4diac FORTE&lt;/a&gt; is a runtime for function-block applications based on &lt;strong&gt;IEC 61499&lt;/strong&gt;. In GridPilot it executes the application block governing startup, stop, reversal and fault handling. The coordinator maintains a fixed 100 ms step and connects control to the numerical model; supervisor-to-device communication goes through OPC UA.&lt;/p&gt;

&lt;p&gt;The hydraulic model is lumped and quasi-steady, with constant efficiencies, actuator limits and water/energy accounting. It is suitable for studying the demonstrator and its interfaces. Designing an actual hydro plant requires further modeling and validation: water hammer, cavitation, electrical-grid transients and qualified electrical protections are examples of phenomena outside this model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trends, replay and tests for comparing behavior
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Workbench&lt;/strong&gt; brings together sequence diagnostics, local numeric history, multivariable charts and CSV export. Commands and alarms can be read alongside measurement trends. Recording, replay, pause and temporal seeking support session review, while test plans define scheduled actions and expected results checked against observed feedback.&lt;/p&gt;

&lt;p&gt;For industrial software developers, these functions offer a basis for discussing concrete requirements: how to represent unreliable data, when to declare a command complete, what information to export and what conditions to verify after an interruption. Project checks concern the software and demonstrator model; they do not replace commissioning tests on a real plant.&lt;/p&gt;

&lt;h2&gt;
  
  
  Download GridPilot and discuss a custom OPC UA project
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/Silicon-Logix/slx-gridpilot/releases/tag/v0.4.2" rel="noopener noreferrer"&gt;SLX GridPilot 0.4.2 release&lt;/a&gt; provides a portable Windows x64 package. &lt;a href="https://github.com/Silicon-Logix/slx-gridpilot/releases/download/v0.4.2/SLX-GridPilot-0.4.2-win64.zip" rel="noopener noreferrer"&gt;Download the Windows ZIP&lt;/a&gt;, extract the complete folder and launch &lt;strong&gt;SLX GridPilot.exe&lt;/strong&gt;. No compiler, package installation, cloud service or field hardware is required. A Vulkan-capable graphics driver is required. The release also includes SHA-256 checksums for checking the download.&lt;/p&gt;

&lt;p&gt;Demonstrator endpoints are limited to the local computer, with anonymous access and SecurityPolicy None. OPC UA provides security mechanisms, but configuring certificates, identities, roles and protected communication for production requires dedicated engineering and verification. The package does not include a preconfigured connection to a physical PLC.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/Silicon-Logix/slx-gridpilot" rel="noopener noreferrer"&gt;public repository&lt;/a&gt; contains operator documentation, selected screenshots, licensing information and publication checks. The Windows ZIP includes the required runtime data, dependency licenses and corresponding third-party sources. GridPilot's application implementations are proprietary and distributed in compiled form; SDK headers and application sources are excluded from the public distribution. The product license permits study and business evaluation; production integration and redistribution of modifications require written permission. Dependency licenses remain independent.&lt;/p&gt;

&lt;p&gt;For an industrial application, a next step may be designing an OPC UA information model, integrating devices and PLCs, developing dedicated supervision, or defining interoperability and recovery tests. &lt;strong&gt;These are extensions to agree within a specific project&lt;/strong&gt;, starting with the actual equipment, security requirements and acceptance criteria. To discuss a project with Silicon LogiX, &lt;a href="https://www.siliconlogix.it/en/contact" rel="noopener noreferrer"&gt;contact us&lt;/a&gt; with the process, the data to expose and the operations the software must support.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further reading and official documentation
&lt;/h2&gt;

&lt;p&gt;These references lead directly to the respective projects and official specifications for the concepts and technologies discussed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OPC UA:&lt;/strong&gt; the &lt;a href="https://opcfoundation.org/about/opc-technologies/opc-ua/" rel="noopener noreferrer"&gt;OPC Foundation introduction&lt;/a&gt; and &lt;a href="https://reference.opcfoundation.org/" rel="noopener noreferrer"&gt;online OPC UA specifications&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security and alarms:&lt;/strong&gt; &lt;a href="https://reference.opcfoundation.org/specs/OPC-10000-2/" rel="noopener noreferrer"&gt;OPC UA Part 2: Security Model&lt;/a&gt; and &lt;a href="https://reference.opcfoundation.org/specs/OPC-10000-9/" rel="noopener noreferrer"&gt;OPC UA Part 9: Alarms &amp;amp; Conditions&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clients and servers:&lt;/strong&gt; &lt;a href="https://open62541.org/doc/v1.4.14/" rel="noopener noreferrer"&gt;open62541 1.4.14 documentation&lt;/a&gt;, for the version used in the demonstrator.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IEC 61499 control:&lt;/strong&gt; the &lt;a href="https://eclipse.dev/4diac/4diac_forte/" rel="noopener noreferrer"&gt;Eclipse 4diac FORTE runtime&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language:&lt;/strong&gt; the &lt;a href="https://rust-lang.org/" rel="noopener noreferrer"&gt;official Rust website&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desktop interface:&lt;/strong&gt; the &lt;a href="https://slint.dev/" rel="noopener noreferrer"&gt;Slint framework&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3D visualization:&lt;/strong&gt; the &lt;a href="https://bevy.org/" rel="noopener noreferrer"&gt;Bevy engine&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Originally published at &lt;a href="https://www.siliconlogix.it/en/article/opc-ua-in-action-the-slx-gridpilot-industrial-digital-twin" rel="noopener noreferrer"&gt;Silicon LogiX&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>opcua</category>
      <category>rust</category>
      <category>automation</category>
      <category>digitaltwin</category>
    </item>
    <item>
      <title>SLX OrbitLab: satellite mission software with F Prime and Basilisk</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Wed, 14 Oct 2026 12:37:17 +0000</pubDate>
      <link>https://dev.to/pezzullo/slx-orbitlab-satellite-mission-software-with-f-prime-and-basilisk-3dp6</link>
      <guid>https://dev.to/pezzullo/slx-orbitlab-satellite-mission-software-with-f-prime-and-basilisk-3dp6</guid>
      <description>&lt;p&gt;An Earth observation mission requires coordinated orbital planning, attitude control, energy management and data transfer. SLX OrbitLab integrates these functions in a PC-based software system: a simulated satellite receives a target, plans the pass, acquires an optical product and transfers it during ground-station contact. Commands, telemetry and events track software decisions and the physical model's response.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SLX OrbitLab is the Silicon LogiX platform for satellite mission software development and simulation, autonomous systems and embedded controllers.&lt;/strong&gt; Version 0.7.0 integrates a native NASA F Prime deployment running on Linux, a proprietary C++ core, Basilisk simulation, a Qt desktop console and Godot 3D inspection. An optional subsystem executes RTEMS firmware on a LEON3 processor emulated in Renode. The platform executes a complete command, physics simulation and telemetry cycle on a PC. Integration tests connect operational decisions, spacecraft dynamics and firmware behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  Embedded engineering and mission software integration
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flight software:&lt;/strong&gt; F Prime components, FPP interfaces, dispatching, telemetry, events and native command sequencing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simulation and control:&lt;/strong&gt; orbital and attitude dynamics, sensor measurements, reaction wheels and energy accounting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embedded systems:&lt;/strong&gt; RTEMS firmware, the LEON3 BSP, timers, periodic tasks, UART and CRC-protected protocols.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verification:&lt;/strong&gt; repeatable faults, recording, synchronized replay, strategy comparisons and measured results.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration:&lt;/strong&gt; Qt operation, Godot visualization and a C++ core that can be supplied separately as a binary library.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Mission software architecture: commands, simulation and telemetry
&lt;/h2&gt;

&lt;p&gt;The operational path is explicit: &lt;strong&gt;command → mission software → physical simulation → telemetry → console and 3D update&lt;/strong&gt;. The GUI sends a request; F Prime receives it through its dictionary and dispatcher; the Mission component calls the C++ core to assess conditions and select actions. Basilisk applies actuator commands and power loads, integrates the dynamics and returns new measurements.&lt;/p&gt;

&lt;p&gt;At the next step, mission software consumes those measurements, updates its decisions and emits telemetry and events. GUI refreshes do not advance physical time. This boundary makes it possible to repeat an experiment, pause it, advance by individual steps and inspect the same moment through different views.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foifn6jbtfg16odg85hb6.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foifn6jbtfg16odg85hb6.webp" alt="Closed loop from Qt console and FPP dictionary to native F Prime dispatching and C++ mission logic, Basilisk physics, telemetry and events, recording and Qt/Godot views" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;F Prime executes mission logic; Basilisk returns the physical response. Native packets and simulation snapshots feed recording, the console and 3D views. The optional RTEMS node uses a distinct interface, shown later.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SLX OrbitLab technology architecture&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;th&gt;System responsibility&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;F Prime 4.3.0 / C++&lt;/td&gt;
&lt;td&gt;Commands, components, events, telemetry channels, responses and native sequencing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Silicon LogiX C++ core&lt;/td&gt;
&lt;td&gt;Mission decisions, target management, energy assessment, protection and attitude control.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Basilisk 2.12.0 / C++ and Python&lt;/td&gt;
&lt;td&gt;Orbit, attitude, sensors, reaction wheels, solar generation, battery and applied thrust.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qt 6.12 / QML&lt;/td&gt;
&lt;td&gt;Mission console, command and sequence editors, telemetry, recordings and reports.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Godot 4.5 / Blender and GLB assets&lt;/td&gt;
&lt;td&gt;Synchronized spacecraft, interior, exploded, orbit and ground station inspection.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RTEMS 5 / Renode 1.16.1&lt;/td&gt;
&lt;td&gt;Energy-controller firmware running on an emulated LEON3/SPARC target as an optional subsystem.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  F Prime: C++ components, native commands and telemetry
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://fprime.jpl.nasa.gov/v4.3.0/docs/user-manual/overview/02-fprime-architecture/" rel="noopener noreferrer"&gt;F Prime&lt;/a&gt; organizes flight software into components with declared ports and connections. OrbitLab uses this architecture as its command execution path. FPP definitions describe parameters and interfaces, the Ground Data System uses the generated dictionary to encode requests and decode packets, and the native dispatcher delivers each command to its destination component.&lt;/p&gt;

&lt;p&gt;Version 0.7.0 exposes &lt;strong&gt;28 dictionary commands and 50 native channels&lt;/strong&gt;. Selecting a command shows its parameters, examples and operational meaning. Operators can request panel deployment, a relative rotation, Sun or Earth pointing, payload and downlink permissions, a beacon and the orbital maneuvers supported by the model. Diagnostic commands also verify the communication path.&lt;/p&gt;

&lt;p&gt;For example, &lt;code&gt;OrbitLab.mission.MANEUVER [3,30]&lt;/code&gt; requests a 30-degree relative rotation in mode 3. The dispatcher response confirms acceptance of the parameters; telemetry subsequently shows pointing error, attitude and actuator state. &lt;strong&gt;Acceptance, physical effect and operational completion are separate pieces of evidence.&lt;/strong&gt; An accepted request may remain pending while simulation time is paused or energy, sensors and protection inhibit the action.&lt;/p&gt;

&lt;p&gt;For a commissioned project, this executable path supports concrete discussions about interface contracts, parameter bounds, component behavior, failure handling and integration tests.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fszktb2jaz6hn58huqpaw.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fszktb2jaz6hn58huqpaw.webp" alt="Actual SLX OrbitLab interface: native MANEUVER command with \[3,30\] arguments, a confirmed response and F Prime telemetry channels" width="800" height="579"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The F Prime console presents command arguments, operational responses and telemetry from the Linux deployment.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  F Prime sequences: planning, validation and execution
&lt;/h2&gt;

&lt;p&gt;OrbitLab integrates native &lt;a href="https://fprime.jpl.nasa.gov/v4.3.0/Svc/CmdSequencer/docs/sdd/" rel="noopener noreferrer"&gt;Svc.CmdSequencer&lt;/a&gt; execution. Operators prepare plans of 1 to 64 steps with relative delays in simulated seconds and validate them against the session dictionary. F Prime tools compile the binary file; native validation checks its format and CRC before execution.&lt;/p&gt;

&lt;p&gt;A plan can run automatically or advance through manual steps. Cancellation, completion verification and responses for each step are preserved. Delays follow simulation time and begin after the previous command's response. Pausing stops this clock as well, keeping sequencing and dynamics consistent.&lt;/p&gt;

&lt;p&gt;The eight-step example deploys the panels, suspends the optical instrument, requests Sun pointing, enables the beacon after five seconds, commands a 30-degree rotation after another 45 seconds, disables the beacon after another 60 seconds, and restores the payload and automatic mission. Events and telemetry show the executed list and its consequences for the spacecraft.&lt;/p&gt;

&lt;p&gt;Sequences time command requests; they do not automatically wait for attitude convergence. Acquisition conditions remain in the C++ mission state machine. Separating the operational plan from control of physical behavior supports focused testing and a correct interpretation of the results.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz4yp4qmhxubru59mi1px.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz4yp4qmhxubru59mi1px.webp" alt="Actual F Prime sequence editor: operational plan, checksum-validated binary file and eight commands accepted by the native sequencer" width="799" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Qt console presents the operational plan and native validation. Step responses and times are preserved; completion of the command list is distinct from physical attitude convergence.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Basilisk: orbital dynamics and attitude control
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://avslab.github.io/basilisk/" rel="noopener noreferrer"&gt;Basilisk&lt;/a&gt; combines C++ numerical modules and Python configuration for space-system simulations. OrbitLab uses this foundation to integrate orbital position and velocity, attitude and angular rate, sensor measurements and reaction-wheel action. Python coordinates the laboratory and adapters; mission decisions execute in the C++ component.&lt;/p&gt;

&lt;p&gt;The reference case declares an initial circular orbit at approximately 550 km, a 65 kg rigid body and three reaction wheels. Quantities cross the simulation boundary with explicit units: metres, metres per second, seconds, radians, watts and joules. Attitude and measurements use declared frames, distinguishing the controller's available information from diagnostic simulator truth.&lt;/p&gt;

&lt;p&gt;Orbital maneuvers integrate mission commands, operational constraints and propulsion dynamics. An RTN delta-v command is checked against energy, propellant, sensors, alignment and orbital conditions. Basilisk integrates finite thrust applied to the body; reports retain delivered delta-v, remaining propellant and changes to orbital parameters. Adding a terrestrial target during a mission preserves the existing trajectory. The software predicts accessible passes, while a physical burn changes the orbit gradually.&lt;/p&gt;

&lt;h2&gt;
  
  
  Energy management and activity planning
&lt;/h2&gt;

&lt;p&gt;The battery has a finite capacity of 180 Wh. Solar generation, panel orientation and deployment, eclipse and active loads contribute to the physical balance. The core compares available energy, reserves and activity demand, using a short-horizon energy forecast. The numerical foundation includes Basilisk's &lt;a href="https://avslab.github.io/basilisk/Documentation/simulation/power/simpleBattery/simpleBattery.html" rel="noopener noreferrer"&gt;storage model&lt;/a&gt; and &lt;a href="https://avslab.github.io/basilisk/Documentation/simulation/power/simpleSolarPanel/simpleSolarPanel.html" rel="noopener noreferrer"&gt;solar-generation model&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When energy is insufficient, acquisition is deferred, loads are reduced and the reason is recorded. The physical model therefore experiences a different consumed power from the load required to capture an image. Battery telemetry reflects an energy balance changed by the software decision. Protection remains active during manual requests.&lt;/p&gt;

&lt;p&gt;Two comparable strategies, priority-first and energy-aware, use different planning margins while both protect the minimum reserve. A comparison starts from the same initial conditions, targets, seed, faults and recorded stimuli, with separate F Prime processes and Basilisk simulations. Results include completed or deferred observations, final energy and pointing accuracy during acquisition.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpz2h61izrzw9yyoknxwq.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpz2h61izrzw9yyoknxwq.webp" alt="Mission flow with access, energy and sensor checks; valid conditions lead to pointing, acquisition, downlink and SHA-256 verification, while inhibited activity is deferred" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A geometrically useful window is only part of the decision. Software authorizes the activity against energy and sensor state; deferral and its reason become recorded mission evidence.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Earth observation: targets, acquisition and downlink
&lt;/h2&gt;

&lt;p&gt;The operator selects coordinates and priority. Software predicts access windows, commands pointing and requires stability before exposure. The reference configuration requires a measured error below 0.5 degrees, three seconds of stability and a twelve-second exposure. These values are parameters of the simulated mission.&lt;/p&gt;

&lt;p&gt;The synthetic optical product uses actual simulated body attitude, camera-ray intersections with the spherical Earth and the geographic texture. Raw data is a 256 × 256 monochrome PGM image. A derived PNG preview relates the target, sensor footprint and cartographic context, making the experiment's content easier to interpret.&lt;/p&gt;

&lt;p&gt;Bytes are saved in modeled onboard storage and transferred during a geometric ground-station contact window when energy permits downlink. Storage capacity, the product queue and link availability can change the plan. Delivery is confirmed when the received file passes its SHA-256 integrity check. The link model verifies data handling and mission constraints; it does not calculate an RF link budget or radio modulation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qt console and 3D visualization with Godot and Blender
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://doc.qt.io/qt-6/qtquick-index.html" rel="noopener noreferrer"&gt;Qt Quick and QML&lt;/a&gt; compose the operational console: mission control, F Prime commands, sequence editing, channels, targets and products, orbital passes, tests and recordings. The telemetry model updates values while preserving the operator's browsing position. Parameters and descriptions connect a command to its function, operational response and telemetry. One operator controls a session; viewers receive its state.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.godotengine.org/en/4.5/tutorials/3d/introduction_to_3d.html" rel="noopener noreferrer"&gt;Godot 4.5&lt;/a&gt; presents close-up spacecraft, interior, exploded, orbit and ground station views. Component selection connects geometry to subsystems and available commands. Attitude, panel joints, the beacon and antenna follow confirmed backend telemetry.&lt;/p&gt;

&lt;p&gt;Blender assets and GLB exports retain original component names, hierarchy and pivots. Earth's illustrative scale and exploded-view offsets belong to presentation and do not enter the dynamics. Blender/glTF axis conversion is explicit and applied once. This integration choice makes 3D a useful inspection tool while keeping it distinct from the physical model.&lt;/p&gt;

&lt;h2&gt;
  
  
  RTEMS and Renode: embedded firmware on emulated hardware
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.rtems.org/docs/5.1/c-user/index.html" rel="noopener noreferrer"&gt;RTEMS&lt;/a&gt; provides the kernel and services for real-time embedded applications. In OrbitLab it executes an independent energy-controller firmware. &lt;strong&gt;F Prime remains a Linux process; RTEMS is a separate subsystem.&lt;/strong&gt; Interfaces between mission software, the energy model and firmware handle power requests, controller responses and load states.&lt;/p&gt;

&lt;p&gt;Renode emulates the LEON3/SPARC target, including the peripherals needed for timers and UART. Antmicro's public &lt;a href="https://github.com/antmicro/renode-rtems-leon3" rel="noopener noreferrer"&gt;RTEMS/LEON3 example&lt;/a&gt; documents the platform overlap; OrbitLab's integration was verified with its own firmware. Compatibility requires alignment between the ELF, BSP, memory map, clocks and timer, followed by boot and execution tests.&lt;/p&gt;

&lt;p&gt;The adapter sends battery energy, capacity, requested power and explicit mission time through sequence-correlated, CRC-protected UART messages. Firmware returns permitted power, flags and the task heartbeat. This permission constrains the loads applied to Basilisk. Tests cover boot, timer interrupts, a periodic task, load reduction at low and critical energy, malformed CRC rejection and recovery after an invalid message.&lt;/p&gt;

&lt;p&gt;Emulated time advances in controlled intervals. Missing firmware responses stop the experiment; the laboratory does not silently replace RTEMS with PC logic. Compatibility and integration tests cover this specific combination of firmware, BSP and emulator. Qualification of electronics or a flight processor requires dedicated work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F97obla1d1npbj7mcaa9h.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F97obla1d1npbj7mcaa9h.webp" alt="Optional EPS subsystem: energy requests from the PC over UART with sequence and CRC, RTEMS 5 firmware on LEON3 emulated in Renode, permitted-power and heartbeat responses applied to Basilisk loads" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The physical model retains battery and load dynamics. Emulated firmware authorizes power over a verified protocol, allowing embedded execution and its effect on the mission to be analyzed independently.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Mission scenarios, synchronized replay and results analysis
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Operational scenarios and fault management&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Expected operational outcome&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Nominal mission&lt;/td&gt;
&lt;td&gt;Target access, stable pointing, acquisition, storage and a delivered file with verified integrity.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Insufficient energy&lt;/td&gt;
&lt;td&gt;Deferred activity, a recorded reason, reduced loads and a recorded recharge balance.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Temporary sensor outage&lt;/td&gt;
&lt;td&gt;Acquisition held while measurements are invalid, tracked sensor state and renewed condition checks after recovery.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The extended campaign also covers actuator faults, loss of solar generation or ground link, multiple products, full storage and continuous operation. Fault-injection intervals and operator commands are retained as test evidence.&lt;/p&gt;

&lt;p&gt;SQLite recording preserves configuration, commands and native packets, events, physical snapshots and products. Replay restores recorded state without redispatching actuator commands. Timeline, telemetry, imagery and 3D follow the same instants. HTML, JSON and CSV reports and SHA-256 manifests support investigation from a shared trace and strategy comparisons with explicit metrics.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/Silicon-Logix/slx-orbitlab/blob/b9915536d1bd6371bbed4187f7db4606f1faacee/validation/release-0.7.0.json" rel="noopener noreferrer"&gt;release 0.7.0 acceptance evidence&lt;/a&gt; records 26 Linux integration tests, three Windows CTest checks, eight publication-boundary regressions and GUI workflows with native commands, sequences and maneuvers. Operation with a binary SDK, without the proprietary core sources, was verified separately.&lt;/p&gt;

&lt;p&gt;The documented SDK case delivers one product with an acquisition pointing RMS of approximately 0.0586 degrees. A maneuver delivers 2 m/s and updates remaining propellant. These are results for the stated configuration and test conditions, rather than an accuracy promise for arbitrary satellites.&lt;/p&gt;

&lt;h2&gt;
  
  
  Proprietary C++ core, binary APIs and simulation models
&lt;/h2&gt;

&lt;p&gt;The proprietary Silicon LogiX engine exposes a versioned C ABI with fixed-size structures, declared units and an opaque handle. Its interface contains no Qt, Godot, Python or F Prime types. The core can be supplied as a shared library and integrated or updated while preserving the binary contract, independently of presentation and adapters.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/Silicon-Logix/slx-orbitlab" rel="noopener noreferrer"&gt;public GitHub repository&lt;/a&gt; contains the GUI, integrations, API, example firmware, scenarios, approved assets, documentation and tests. Proprietary core implementation is excluded. Building and running OrbitLab from public source requires the matching evaluation binary SDK; distribution and commercial development follow the project's terms.&lt;/p&gt;

&lt;p&gt;The model declares its scope: spherical Earth, simplified reference frames, no J2 perturbation, atmosphere, terrain or thermal environment, an ideal battery, constant dynamic mass and a synthetic optical instrument. It does not represent cell chemistry, analog power electronics or a complete RF link. Repeatability is verified with the pinned Linux environment and the same seed; cross-platform bitwise identity is not promised. The &lt;a href="https://github.com/Silicon-Logix/slx-orbitlab/blob/b9915536d1bd6371bbed4187f7db4606f1faacee/docs/model.md" rel="noopener noreferrer"&gt;model documentation&lt;/a&gt; makes parameters, criteria and simplifications available for review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Custom engineering for companies and research organizations
&lt;/h2&gt;

&lt;p&gt;OrbitLab's architecture integrates engineering capabilities applicable to mission software, embedded controllers, simulation benches and operational consoles. For companies and research organizations, a project can begin with operational requirements, available measurements, energy constraints, abnormal conditions and system acceptance criteria.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;F Prime components:&lt;/strong&gt; FPP definitions, topologies, commands, telemetry, events, service integration and native tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simulation and autonomy:&lt;/strong&gt; Basilisk models, C++ control, planning, resource management and fault scenarios.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embedded firmware:&lt;/strong&gt; RTOS/BSP integration, protocols, peripherals and emulated-target verification before hardware tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consoles and tools:&lt;/strong&gt; Qt/QML applications, 3D inspection, evidence acquisition and presentation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verification and delivery:&lt;/strong&gt; repeatable campaigns, agreed metrics, reports, documentation and distributable interfaces.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Explore the &lt;a href="https://github.com/Silicon-Logix/slx-orbitlab" rel="noopener noreferrer"&gt;OrbitLab repository&lt;/a&gt; and technical documentation, or &lt;a href="https://www.siliconlogix.it/en/contact#service=software&amp;amp;source=article-orbitlab" rel="noopener noreferrer"&gt;contact Silicon LogiX&lt;/a&gt; for a technical presentation, an evaluation SDK or a custom project. The starting point is to define what the system must do, how it should respond at its limits and which tests must document compliance with those requirements.&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>embedded</category>
      <category>simulation</category>
      <category>space</category>
    </item>
    <item>
      <title>SLX RadioTwin: industrial radio propagation studies with C++ and Qt</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Tue, 13 Oct 2026 07:20:43 +0000</pubDate>
      <link>https://dev.to/pezzullo/slx-radiotwin-industrial-radio-propagation-studies-with-c-and-qt-4mcb</link>
      <guid>https://dev.to/pezzullo/slx-radiotwin-industrial-radio-propagation-studies-with-c-and-qt-4mcb</guid>
      <description>&lt;p&gt;&lt;strong&gt;Silicon LogiX introduces SLX RadioTwin&lt;/strong&gt;, a desktop demonstrator for studying radio propagation in a three-dimensional industrial plant. The project brings geometry, antenna configuration, obstacles and robot movement into one environment, making it possible to compare how link conditions change. Version 0.2.1 is available on GitHub with a Windows evaluation package.&lt;/p&gt;

&lt;p&gt;For a company integrating wireless sensors, gateways or mobile robots, the questions concern what happens along a mission: where does received power fall? Which obstacles does the radio path cross? What difference does a metal door make? RadioTwin makes these questions explorable and documentable, connecting each result to the assumptions that produced it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Industrial connectivity also depends on geometry
&lt;/h2&gt;

&lt;p&gt;A plant contains surfaces, volumes and passages that affect propagation. Tanks, machine tools, shelving and walls can change the signal path; a door changing state or a moving receiver introduces different conditions even with the same radio parameters. Studying these variations requires a shared reference between object positions, link configuration and numerical results.&lt;/p&gt;

&lt;p&gt;The demonstrator uses a scene with &lt;strong&gt;2,584 meshes in its complete representation&lt;/strong&gt;: a process area with tanks and pumps, CNC machines, a warehouse, a raised control room, robotic arms, an inspection robot, two gateways and a sliding door. The cutaway view allows users to explore the interior, navigate and select components. The RF engine retains the complete enclosure, including walls and the roof, through 373 meshes dedicated to calculations. Opening up the factory view therefore keeps the obstacles in the radio model.&lt;/p&gt;

&lt;p&gt;The robot, door and gateways share the scenario state between the visualization and RF geometry. This consistency makes it possible to relate a change in estimated received power to the configuration actually analyzed, while keeping the demonstration animation distinct from experimental measurements.&lt;/p&gt;

&lt;h2&gt;
  
  
  An explicit RF model with interpretable results
&lt;/h2&gt;

&lt;p&gt;The solver combines &lt;strong&gt;free-space path loss&lt;/strong&gt; with effective losses associated with the obstacles crossed. Intersections are calculated on the triangles of the RF geometry; a BVH, or bounding volume hierarchy, accelerates the search for possible intersections. Antenna positions, frequency, transmit power, gains, receiver sensitivity and material parameters are configurable.&lt;/p&gt;

&lt;p&gt;An optional &lt;strong&gt;first-order reflection&lt;/strong&gt; model uses image sources on six enclosure planes. Each path reports power, length and delay. Powers are summed incoherently: this version does not reconstruct the phase interference of a coherent multipath channel. Results distinguish power in dBm, losses and margins in dB, distances in metres and delays in nanoseconds.&lt;/p&gt;

&lt;p&gt;Material coefficients are &lt;strong&gt;illustrative assumptions, not values calibrated against a real plant&lt;/strong&gt;. The model supports comparative studies and checks of software behavior; field accuracy requires surveys and calibration. Diffraction, polarization, antenna patterns, protocol traffic and throughput are not simulated in the published version. The &lt;a href="https://github.com/Silicon-Logix/slx-radiotwin/blob/main/docs/rf-model.md" rel="noopener noreferrer"&gt;RF model documentation&lt;/a&gt; describes equations, units and limitations.&lt;/p&gt;

&lt;h2&gt;
  
  
  From individual links to scenario comparisons
&lt;/h2&gt;

&lt;p&gt;The interface allows users to observe the link as the robot moves, visualize coverage, identify areas with reduced margin and save configurations for comparison. One example is studying an open door against a closed door while keeping the same planned route and radio parameters.&lt;/p&gt;

&lt;p&gt;Coverage is sampled on a 49 × 37 grid at receiver height, with points occupied by solids excluded from the count. The mission profile contains 81 samples along the planned 16-metre corridor. The placement search evaluates up to 15 candidates for gateway A, keeps gateway B fixed and compares the worst value of the best link along the route. This is a comparison between defined candidates; mounting feasibility and site performance require separate verification.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Favau78fumdn8v6twu35f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Favau78fumdn8v6twu35f.png" alt="SLX RadioTwin: scenario comparison, RF coverage and gateway placement evaluation" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The scenario laboratory in the software. The displayed values belong to an example using illustrative coefficients.&lt;/p&gt;

&lt;p&gt;Analyses can be exported as &lt;strong&gt;PDF, JSON and CSV&lt;/strong&gt;, retaining the configuration, geometry identity, units and assumptions. For a technical team, this makes it possible to discuss the same configuration, compare alternatives and retrace the reasoning behind a result. Before export, the application requires an updated analysis when the state has changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The technologies: C++, Qt Quick and native GPU rendering
&lt;/h2&gt;

&lt;p&gt;RadioTwin demonstrates a software architecture that separates the interface, scenario management and numerical computation. The &lt;strong&gt;C++17 core&lt;/strong&gt; handles asset import, geometry queries, propagation, coverage and candidate evaluation. The desktop presentation uses &lt;strong&gt;Qt Quick and QML&lt;/strong&gt;, while the 3D viewport is implemented in C++ with &lt;strong&gt;QQuickRhiItem and Qt RHI&lt;/strong&gt;, Qt's interface to the graphics backend.&lt;/p&gt;

&lt;p&gt;The renderer groups geometry by material and uses GPU buffers. The Windows distribution has been checked with Direct3D 11. &lt;strong&gt;GLB/glTF&lt;/strong&gt; assets retain geometry, materials and hierarchies; coordinate transformations connect the visual representation to the metric system used by the solver. GPU acceleration applies to rendering: RF calculations in this version run on the CPU.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;QtConcurrent&lt;/strong&gt; runs analyses asynchronously on copies of the scenario. The application checks the parameter version before accepting a result, avoiding the presentation of calculations for an earlier configuration as current. The numerical core is distributed as a DLL with a public API and a versioned ABI, while its implementation remains proprietary. This separation provides a starting point for modules and integrations agreed with the customer.&lt;/p&gt;

&lt;p&gt;The build uses &lt;strong&gt;CMake, Ninja and the Qt 6.12.0 / MinGW GCC 13.1.0 kit&lt;/strong&gt;. Checks cover reference equations, radio link-budget accounting, reflections, geometry consistency, persistence and scenario comparison. Public-distribution audits also run through GitHub Actions. These checks verify implementation consistency; RF validation at a plant requires independent measured data.&lt;/p&gt;

&lt;h2&gt;
  
  
  A concrete basis for tailored industrial tools
&lt;/h2&gt;

&lt;p&gt;The value for companies is the opportunity to evaluate a working application and define a specific need: studying a robot route, comparing permitted antenna positions, documenting a scenario or connecting a model to plant data. This provides a basis for a technical discussion about geometry, devices, available measurements and acceptance criteria.&lt;/p&gt;

&lt;p&gt;The custom-development section presents &lt;strong&gt;eight proposals, explicitly not implemented in the demonstrator&lt;/strong&gt;. They cover measurement-based calibration and uncertainty quantification; coherent wideband channels with fading and Doppler; MIMO and beam steering; interference and coexistence; robot missions with radio and navigation constraints; network design with redundancy; CAD/BIM, OPC UA or MQTT integration; and research into programmable RIS surfaces and joint communication and sensing.&lt;/p&gt;

&lt;p&gt;Each proposal identifies required data, expected outputs and checks to agree on. The application lets users select modules and prepare a local brief containing objectives and constraints. Extensions can then be defined through a feasibility study, a development scope and a validation plan suited to the industrial case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evaluate RadioTwin and discuss a project
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/Silicon-Logix/slx-radiotwin" rel="noopener noreferrer"&gt;SLX RadioTwin repository&lt;/a&gt; contains the frontend, public API, binary SDK, assets and examples. &lt;a href="https://github.com/Silicon-Logix/slx-radiotwin/releases/tag/v0.2.1" rel="noopener noreferrer"&gt;Release 0.2.1&lt;/a&gt; includes a Windows x64 package that runs without installing Qt and without radio hardware. A &lt;a href="https://github.com/Silicon-Logix/slx-radiotwin/releases/download/v0.2.1/SLX_RadioTwin_Social_1080x1920.mp4" rel="noopener noreferrer"&gt;demonstration video with 3D animations and actual software screens&lt;/a&gt; is also available.&lt;/p&gt;

&lt;p&gt;The license permits study and business evaluation; production integration and distribution of modifications require an agreement with Silicon LogiX. To assess a custom development, &lt;a href="https://www.siliconlogix.it/en/contact" rel="noopener noreferrer"&gt;contact us&lt;/a&gt; with the type of plant, the wireless devices involved, the behavior to analyze and the data already available. These inputs help define the required model, measurement activities and results to verify.&lt;/p&gt;




&lt;p&gt;Originally published at &lt;a href="https://www.siliconlogix.it/en/article/slx-radiotwin-a-3d-digital-twin-for-industrial-radio-propagation-studies" rel="noopener noreferrer"&gt;Silicon LogiX&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>qt</category>
      <category>simulation</category>
      <category>robotics</category>
    </item>
    <item>
      <title>Raspberry Pi 5 AI: quality inspection without the cloud</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Mon, 12 Oct 2026 11:41:55 +0000</pubDate>
      <link>https://dev.to/pezzullo/raspberry-pi-5-ai-quality-inspection-without-the-cloud-4313</link>
      <guid>https://dev.to/pezzullo/raspberry-pi-5-ai-quality-inspection-without-the-cloud-4313</guid>
      <description>&lt;p&gt;A reversed connector, a missing screw, the wrong label: catching a defect before shipping requires a repeatable inspection. &lt;strong&gt;Raspberry Pi 5 with local AI&lt;/strong&gt; is a platform worth evaluating for an initial visual inspection system that processes images close to the machine.&lt;/p&gt;

&lt;p&gt;On &lt;strong&gt;5 October 2026&lt;/strong&gt;, Raspberry Pi published an overview of &lt;strong&gt;Sixfab AI HAT+&lt;/strong&gt;, an accelerator board with a DEEPX NPU. For businesses, the useful question is how to connect image capture, recognition and inspection results in an application that can work without a cloud connection. &lt;a href="https://www.raspberrypi.com/news/seeing-understanding-and-responding-low-power-cnn-vlm-and-slm-workloads-on-raspberry-pi-5/" rel="noopener noreferrer"&gt;Read the Raspberry Pi article&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The cover is an AI-generated conceptual illustration. The diagram and example below describe a possible design; they do not depict a system tested by Silicon LogiX.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Sixfab AI HAT+ and DEEPX add
&lt;/h2&gt;

&lt;p&gt;The 25 TOPS version uses the &lt;strong&gt;DEEPX DX-M1M NPU&lt;/strong&gt;, a processor dedicated to model execution. The &lt;a href="https://docs.sixfab.com/docs/ai-hat-plus-raspberry-pi-5-overview" rel="noopener noreferrer"&gt;Sixfab documentation&lt;/a&gt; lists these main specifications:&lt;/p&gt;

&lt;p&gt;Sixfab AI HAT+ 25 TOPS: manufacturer specifications checked on 12 October 2026.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Specification&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AI compute&lt;/td&gt;
&lt;td&gt;Up to 25 TOPS at INT8 precision&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NPU memory&lt;/td&gt;
&lt;td&gt;2 GB dedicated LPDDR4x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Connection&lt;/td&gt;
&lt;td&gt;PCIe Gen 3 ×1 to Raspberry Pi 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typical power&lt;/td&gt;
&lt;td&gt;Approximately 3 W for the NPU alone&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Processing&lt;/td&gt;
&lt;td&gt;On-device inference, including offline operation after installation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Three watts is not the power consumption of the complete station.&lt;/strong&gt; Its power budget must include the Raspberry Pi, camera, lighting, storage and interfaces. TOPS, or trillions of operations per second, describes computing capacity; the time to inspect a part must be measured across the complete application.&lt;/p&gt;

&lt;h2&gt;
  
  
  What can a camera with local AI inspect?
&lt;/h2&gt;

&lt;p&gt;Start with a defect that is &lt;strong&gt;visible, clearly defined and distinguishable at the available resolution&lt;/strong&gt;. Three examples illustrate the kinds of projects to consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Assembly:&lt;/strong&gt; check whether a connector or component is present and correctly oriented, with a controlled capture position.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Packaging:&lt;/strong&gt; identify a missing accessory or an incorrect product arrangement before closing the package.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Surface finish:&lt;/strong&gt; evaluate detection of scratches or surface anomalies after checking optics, contrast and lighting.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A camera cannot see beneath an opaque component or replace an electrical measurement. On an electronic assembly, it can complement &lt;strong&gt;functional testing&lt;/strong&gt;: images check assembly, while measurements check behavior. Reading a code or checking a stable geometry may also be a good candidate for traditional computer vision algorithms.&lt;/p&gt;

&lt;h2&gt;
  
  
  From the part to the result: an inspection example
&lt;/h2&gt;

&lt;p&gt;Imagine a station that checks a connector on a small electronic module. An operator places the part in a fixture; a signal triggers capture; the software analyzes the image and displays the result. Communication with the machine uses an interface designed for its controller.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Part + controlled lighting
         |
         v
Raspberry Pi 5: capture and preparation
         |
         v
DEEPX NPU: model execution
         |
         v
Inspection software: rules and review
         |
         v
Result: operator, controller and records
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An original diagram of a possible station. Application software connects the model output to the product acceptance rules.&lt;/p&gt;

&lt;p&gt;For this application, we would design three outcomes: &lt;strong&gt;accepted&lt;/strong&gt;, &lt;strong&gt;defect detected&lt;/strong&gt; and &lt;strong&gt;review required&lt;/strong&gt;. A blurred image, a misplaced part or an insufficient score should trigger recapture or operator review. The application must handle uncertainty before commanding a rejection.&lt;/p&gt;

&lt;p&gt;Each inspection should record the part identifier, timestamp, model version and outcome. Which images to retain, and for how long, depends on the process. These records make it possible to investigate inspection conditions and compare two software versions against the same cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do you actually need a Raspberry Pi 5 NPU?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The decision depends on the real workload.&lt;/strong&gt; Before buying an accelerator, measure a CPU implementation with the intended model. An NPU becomes interesting when inference time, image volume or application load requires more headroom. Our guide to &lt;a href="https://www.siliconlogix.it/en/article/npus-in-embedded-socs-edge-ai-without-sending-everything-to-the-cloud" rel="noopener noreferrer"&gt;NPUs in embedded systems&lt;/a&gt; explains the accelerator’s role.&lt;/p&gt;

&lt;p&gt;Consider an illustrative timing budget: at &lt;strong&gt;60 parts per minute&lt;/strong&gt;, a part arrives every &lt;strong&gt;1,000 milliseconds&lt;/strong&gt;. A proposed budget could allocate 100 ms to capture, 150 ms to processing and 100 ms to decision and communication, leaving 650 ms of headroom. &lt;strong&gt;These are design examples, not measured board performance.&lt;/strong&gt; The available capture window also matters: the part may spend much less than one second in front of the camera.&lt;/p&gt;

&lt;p&gt;Testing must include the slowest cycles while the system saves images, updates the interface and communicates with the machine. A favorable average can hide occasional delays, image queues or missed acquisitions.&lt;/p&gt;

&lt;h2&gt;
  
  
  How an AI model reaches the board
&lt;/h2&gt;

&lt;p&gt;In the &lt;a href="https://docs.sixfab.com/docs/ai-model-deployment-workflow" rel="noopener noreferrer"&gt;workflow documented by Sixfab&lt;/a&gt;, a supported model is exported to ONNX, compiled with DX-COM on an Ubuntu x86_64 machine and deployed as a &lt;code&gt;.dxnn&lt;/code&gt; file. The Raspberry Pi runtime executes it through C++ or Python APIs. Training and compilation are separate from on-device inference.&lt;/p&gt;

&lt;p&gt;A product-specific defect requires representative images and consistent annotations. When photographing the same parts repeatedly, avoid placing near-identical images in both training and test sets. Splitting samples by physical part or production lot makes evaluation closer to real use.&lt;/p&gt;

&lt;p&gt;The INT8 conversion requires checking the deployed model: changes in its results must be measured on your own defects. For repeatable development cases, &lt;a href="https://www.siliconlogix.it/en/article/slx-synthforge-on-github-ai-for-industrial-vision" rel="noopener noreferrer"&gt;SLX SynthForge&lt;/a&gt; demonstrates a workflow with synthetic scenes and data. A production line still requires real images and validated capture conditions.&lt;/p&gt;

&lt;h2&gt;
  
  
  How much does a Raspberry Pi quality inspection system cost?
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://sixfab.com/product/ai-hat-plus-raspberry-pi-5/" rel="noopener noreferrer"&gt;Sixfab product page&lt;/a&gt; lists the &lt;strong&gt;25 TOPS AI HAT+ at US$90&lt;/strong&gt; as of the consultation date. That is the add-on board price; the Raspberry Pi and complete station must be budgeted separately. Check the final price, taxes and shipping with the supplier for your destination market.&lt;/p&gt;

&lt;p&gt;The project budget should include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Image capture:&lt;/strong&gt; camera, lens, lighting, mounts and the part fixture.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Electronics:&lt;/strong&gt; computer, power supply, cooling, enclosure and controller connection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data and model:&lt;/strong&gt; sample collection, annotation, training and evaluation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Software:&lt;/strong&gt; operator interface, result handling, records and business-system integration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commissioning:&lt;/strong&gt; testing on real lots, acceptance thresholds and maintenance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To estimate the station’s value, compare total cost with the existing process: inspection time, rework, rejected parts and escaped defects. A prototype helps collect the evidence for that assessment before extending the system to production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five checks before putting AI on the production line
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Missed defects:&lt;/strong&gt; measure how many defective parts are accepted and which defects remain difficult.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;False rejects:&lt;/strong&gt; check how many conforming parts are rejected or require manual review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real conditions:&lt;/strong&gt; test different lots, position variations, reflections and lighting changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continuity:&lt;/strong&gt; check restarts, camera disconnection, exhausted storage and communication loss.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Updates:&lt;/strong&gt; retain the approved model and software, a fixed test set and a procedure to restore the previous version.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Define these criteria before testing. If a model is selected after repeated trials on the same samples, use another independent set to verify the result. For multi-camera lines, our article on &lt;a href="https://www.siliconlogix.it/en/article/industrial-machine-vision-four-ethernet-cameras-microchip-nvidia" rel="noopener noreferrer"&gt;industrial vision over Ethernet&lt;/a&gt; also covers bandwidth and capture architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions about Raspberry Pi AI inspection
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Can inspection work without Internet access?
&lt;/h3&gt;

&lt;p&gt;Inference runs locally after installation. Offline station operation also depends on application choices: models, licenses, authentication and result recording must be available at the deployment location.&lt;/p&gt;

&lt;h3&gt;
  
  
  Will a ready-made model recognize my product’s defects?
&lt;/h3&gt;

&lt;p&gt;A pretrained example helps verify that the system processes images. For a specific defect, evaluate behavior on your own product samples and prepare a dedicated model if necessary.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can the board also accelerate language models?
&lt;/h3&gt;

&lt;p&gt;The consulted sources disagree: the Raspberry Pi post also describes language models, while Sixfab lists vision as the current scope. This article considers visual inspection. A language-model project requires support confirmation for the chosen hardware, model and runtime.&lt;/p&gt;

&lt;h2&gt;
  
  
  From a specific defect to a feasibility study
&lt;/h2&gt;

&lt;p&gt;Silicon LogiX can support a project by connecting &lt;a href="https://www.siliconlogix.it/en/embedded-ai-machine-learning" rel="noopener noreferrer"&gt;AI and machine learning&lt;/a&gt;, &lt;a href="https://www.siliconlogix.it/en/embedded-linux-yocto-buildroot" rel="noopener noreferrer"&gt;embedded Linux&lt;/a&gt; and &lt;a href="https://www.siliconlogix.it/en/custom-software-development" rel="noopener noreferrer"&gt;custom software&lt;/a&gt;. The first step is defining what to observe, the required timing and how to use the result in the business process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want to assess whether AI can catch a defect in your product?&lt;/strong&gt; &lt;a href="https://www.siliconlogix.it/en/contact#service=generico&amp;amp;source=article-raspberry-pi-ai-quality-inspection" rel="noopener noreferrer"&gt;Describe the inspection you want to automate&lt;/a&gt;, your available samples and the line cadence. These details help establish a useful feasibility study.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Technical sources consulted on 12 October 2026. Specifications and pricing are manufacturer statements; the timing example and evaluation criteria are Silicon LogiX design contributions.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Originally published on &lt;a href="https://www.siliconlogix.it/en/article/raspberry-pi-5-ai-quality-inspection-without-the-cloud" rel="noopener noreferrer"&gt;Silicon LogiX&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>raspberrypi</category>
      <category>iot</category>
      <category>computervision</category>
    </item>
    <item>
      <title>SLX ResilienceLab: simulated faults, measurable control responses</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Sat, 10 Oct 2026 11:31:04 +0000</pubDate>
      <link>https://dev.to/pezzullo/slx-resiliencelab-simulated-faults-measurable-control-responses-291h</link>
      <guid>https://dev.to/pezzullo/slx-resiliencelab-simulated-faults-measurable-control-responses-291h</guid>
      <description>&lt;p&gt;A sensor keeps sending a plausible value while the actuator moves away from it. The primary controller stops responding. Two measurements disappear while the system is approaching its requested position. Control software must handle these conditions, yet ordinary bench tests can make them difficult to reproduce.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SLX ResilienceLab&lt;/strong&gt; is Silicon LogiX's new desktop demonstrator for exploring these cases in an &lt;strong&gt;entirely software-based test bench&lt;/strong&gt;. A virtual motorized valve, three position sensors and two C++ controllers let you observe the response, inject faults and retain the results. The project demonstrates how a dedicated test environment can be built around a product's control software.&lt;/p&gt;

&lt;p&gt;For teams developing boards, firmware or machinery, the practical value is repeatability: recreate a critical condition, compare two control versions and discuss the response using &lt;strong&gt;recorded measurements, timings and events&lt;/strong&gt;. &lt;a href="https://www.siliconlogix.it/en/contact#service=firmware&amp;amp;source=article-resiliencelab" rel="noopener noreferrer"&gt;Contact me to discuss a test bench for your product&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A virtual valve with decisions computed by the software
&lt;/h2&gt;

&lt;p&gt;The operator requests an opening, such as 80%, and follows the valve's movement in normal and cutaway 3D views. The interface keeps &lt;strong&gt;requested opening, actual model position, three sensor readings and the control measurement&lt;/strong&gt; separate. This makes it possible to see when a reading no longer represents the movement.&lt;/p&gt;

&lt;p&gt;The primary and backup controllers execute real C++ code. They receive measurements and messages through a virtual transport and calculate the motor command. They cannot directly inspect the plant's actual position or the operator's fault settings: they must respond using received information. Heartbeats, commands and measurements travel through the transport, where delays and losses can be introduced.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fczxslebgc1wwe62x4gfz.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fczxslebgc1wwe62x4gfz.webp" alt="SLX ResilienceLab laboratory: 80% requested opening, 64.2% actual position, isolated S1 and a control measurement derived from S2 and S3" width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;An actual laboratory screenshot during the stuck-S1 scenario. Model position and the measurement used by control remain visible as separate values.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Sensor redundancy compares readings using configurable disagreement thresholds, confirmation times and freshness limits. With two trustworthy measurements, it can exclude a disagreeing sensor; when information is insufficient, it requests a stop. Arbitration authorizes only one controller to command the motor at a time, including during transfer to backup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three tests with observable responses
&lt;/h2&gt;

&lt;p&gt;The demonstrator includes three ready-to-run scenarios. The following chart uses &lt;strong&gt;traces produced by executing version 0.4.0&lt;/strong&gt;, with an 80% requested opening, 12 simulated seconds, a 20 ms step and seed 2407. It represents software model results under these stated conditions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx6c07uem2u7lbk4mw1po.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx6c07uem2u7lbk4mw1po.webp" alt="Three charts from executed simulations: movement continues after S1 freezes, backup takes over after primary loss, and the valve stops after two measurements are lost" width="800" height="732"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Green: actual virtual plant position. Grey dashed line: requested opening. In the first chart, red: the frozen S1 reading. Times are simulated, not measurements from physical hardware.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stuck sensor.&lt;/strong&gt; S1 freezes at 1.60 s. The first isolation event appears at 2.12 s, after 0.52 s; the primary isolates S1 at 2.14 s. Control continues with S2 and S3 and finishes with approximately 0.14 percentage points of position error.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Primary controller loss.&lt;/strong&gt; The controller stops at 2.00 s. The watchdog stops the motor at 2.24 s and arbitration authorizes backup at 2.58 s: takeover occurs after 0.58 s. The valve resumes movement and finishes with approximately 0.16 percentage points of position error.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Measurement loss.&lt;/strong&gt; S1 and S2 disconnect at 2.00 s. Their readings expire at 2.40 s and the motor stop is applied at 2.42 s. Final position is 51.48%: the expected outcome is to stop because sufficient information is unavailable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The report retains position errors, detections, transfers to backup and stops. &lt;strong&gt;HTML, JSON and CSV exports&lt;/strong&gt; make the evidence accessible and usable in other tools. Configuration, the fault timeline and seed let you replay a scenario and compare two control versions under the same simulated conditions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this approach helps embedded development
&lt;/h2&gt;

&lt;p&gt;The principle is &lt;strong&gt;software-in-the-loop&lt;/strong&gt;: execute compiled code on a computer and subject it to repeatable test inputs. &lt;a href="https://www.mathworks.com/help/ecoder/ug/about-sil-and-pil-simulations.html" rel="noopener noreferrer"&gt;MathWorks' SIL and PIL documentation&lt;/a&gt; describes how these environments help verify code behaviour during development. ResilienceLab applies this principle using its own C++ and Qt Quick architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fault injection&lt;/strong&gt; makes the condition under test explicit. Alongside the ready-to-run scenarios, the laboratory supports progressive sensor drift, disconnections, intermittent communication and actuator jamming. In a physical bench, electrical faults require dedicated interfaces: &lt;a href="https://www.ni.com/en/solutions/transportation/hardware-in-the-loop/using-fault-insertion-units--fius--for-electronic-testing.html" rel="noopener noreferrer"&gt;NI's explanation of fault insertion units&lt;/a&gt; illustrates that testing layer. In this demonstrator, faults affect the model and its messages.&lt;/p&gt;

&lt;p&gt;For a development project, the benefit is defining verification criteria early: how many measurements are needed to continue, how quickly a loss should be detected, which controller may issue commands and which events must be retained. The same test can then become a regression check when firmware changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  From PC control to a board connection
&lt;/h2&gt;

&lt;p&gt;The laboratory also supports live operation: change the requested opening and freeze, disconnect or restore sensors while the valve is moving. Actions are recorded so the test can be reconstructed. &lt;strong&gt;1× mode follows the PC clock&lt;/strong&gt;; a desktop operating system does not guarantee strict execution deadlines.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8s7yoegm33ltw7uukynp.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8s7yoegm33ltw7uukynp.webp" alt="Software loop diagram: virtual plant and three sensors, message transport, primary and backup C++ controllers, command arbitration and motor command" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Message exchange closes the control loop. Actual position remains a reference for observation and reporting; the controllers operate on received measurements.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;To integrate customer code, a &lt;strong&gt;DLL interface with a C API&lt;/strong&gt; can replace the motor-command calculation on the PC. The bench retains measurement handling, heartbeats and arbitration. A local JSON-message API provides measurements and diagnostics, changes the setpoint and requests faults; local TCP and &lt;strong&gt;USB/serial&lt;/strong&gt; connections are available in the software. Integrating a specific board requires implementing and verifying the corresponding firmware protocol.&lt;/p&gt;

&lt;p&gt;A further step is &lt;strong&gt;hardware-in-the-loop&lt;/strong&gt;, connecting a physical controller to a simulated environment. As &lt;a href="https://www.ni.com/en/solutions/hardware-in-the-loop-testing.html" rel="noopener noreferrer"&gt;NI's HIL overview&lt;/a&gt; explains, appropriate timing and input/output interfaces are part of that architecture. Board firmware driving the virtual plant is an integration to be developed; ResilienceLab currently provides the software demonstrator and its connection points.&lt;/p&gt;

&lt;p&gt;Three sensors frozen at the same value can still agree. Majority voting alone does not establish that the valve is moving: in the laboratory, a movement request also enables measured-progress monitoring. This illustrates why a bench must be designed around the product's faults and requirements. &lt;strong&gt;SLX ResilienceLab is a software demonstrator with no safety certification&lt;/strong&gt;; it does not validate a physical valve or a customer's firmware.&lt;/p&gt;

&lt;h2&gt;
  
  
  A test bench designed for your product
&lt;/h2&gt;

&lt;p&gt;Silicon LogiX can build a dedicated environment for a board or control system: a plant model, an adapter for the product's interfaces, fault scenarios, acceptance criteria and reports. The starting point can be one concrete function, such as verifying the response to a frozen sensor or interrupted communication.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tell me about your product, available interfaces and the behaviour you need to verify.&lt;/strong&gt; If you already have a board, include its protocol, signals and timing requirements. We can define a representative first test and the integration path. &lt;a href="https://www.siliconlogix.it/en/contact#service=firmware&amp;amp;source=article-resiliencelab" rel="noopener noreferrer"&gt;Let's discuss your test bench&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Explore the project through the &lt;a href="https://github.com/Silicon-Logix/slx-resiliencelab/releases/tag/v0.4.0" rel="noopener noreferrer"&gt;portable Windows v0.4.0 release&lt;/a&gt; and the &lt;a href="https://github.com/Silicon-Logix/slx-resiliencelab" rel="noopener noreferrer"&gt;GitHub documentation&lt;/a&gt;. The proprietary core is distributed as compiled libraries under the Silicon LogiX evaluation licence; the interface and integration examples are separate.&lt;/p&gt;




&lt;p&gt;Originally published on &lt;a href="https://www.siliconlogix.it/en/article/slx-resiliencelab-simulated-faults-measurable-control-responses" rel="noopener noreferrer"&gt;Silicon LogiX&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>embedded</category>
      <category>testing</category>
      <category>simulation</category>
    </item>
    <item>
      <title>SLX SynthForge on GitHub: AI for industrial vision</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Thu, 08 Oct 2026 18:01:47 +0000</pubDate>
      <link>https://dev.to/pezzullo/slx-synthforge-on-github-ai-for-industrial-vision-4mo1</link>
      <guid>https://dev.to/pezzullo/slx-synthforge-on-github-ai-for-industrial-vision-4mo1</guid>
      <description>&lt;p&gt;&lt;strong&gt;SLX SynthForge&lt;/strong&gt; is available on GitHub, bringing together &lt;strong&gt;computer vision for electronic board inspection&lt;/strong&gt;, 3D scenes and synthetic data. The Silicon LogiX desktop application lets operators edit a virtual board, capture its image and analyse defects with an AI model that runs locally.&lt;/p&gt;

&lt;p&gt;The application uses &lt;strong&gt;C++17, Qt Quick and QML&lt;/strong&gt;. The proprietary &lt;strong&gt;Silicon LogiX SynthForge Core&lt;/strong&gt; engine handles rendering, visual analysis and inference, while &lt;strong&gt;Python and NumPy&lt;/strong&gt; train the classifiers. The project documents the workflow from preparing examples to comparing model versions and preserving inspection evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  From a 3D board to defect detection
&lt;/h2&gt;

&lt;p&gt;The reference scene is &lt;strong&gt;PowerBoard&lt;/strong&gt;, a demonstration board with 46 editable components. Operators can remove a component, change its position or rotate it before starting an inspection. The board model distinguishes nominal appearance, missing components and changes in position or appearance.&lt;/p&gt;

&lt;p&gt;Each result connects the CAD reference to the captured image detail, the score and the model identity. Outcomes are labelled &lt;strong&gt;PASS, DEFECT and REVIEW&lt;/strong&gt;: an accepted component, a detected defect or a case requiring review. Insufficient visibility or captures outside the expected profile require review, as described in the &lt;a href="https://github.com/Silicon-Logix/slx-synthforge/blob/f6178d3168f95259629196dda523fb047e9bc45b/docs/interactive-board.md" rel="noopener noreferrer"&gt;inspection workflow&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmhzz3ztjkxm1chi3zfie.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmhzz3ztjkxm1chi3zfie.png" alt="SLX SynthForge detects missing C2 and misplaced U4 components and links the defects to the 3D electronic board" width="800" height="522"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Virtual board inspection: defects in C2 and U4 are associated with the captured image and their CAD references.&lt;/p&gt;

&lt;h2&gt;
  
  
  The vision engine: Silicon LogiX SynthForge Core
&lt;/h2&gt;

&lt;p&gt;At the centre of the application is a &lt;strong&gt;C++ engine distributed as a binary SDK&lt;/strong&gt; in the &lt;code&gt;SiliconLogiX.SynthForge.Core.dll&lt;/code&gt; library. Public APIs expose rendering, dataset generation and inspection functions. The Engine module produces the scene image and applies the numerical model to the capture. The &lt;a href="https://github.com/Silicon-Logix/slx-synthforge/blob/f6178d3168f95259629196dda523fb047e9bc45b/docs/sdk.md" rel="noopener noreferrer"&gt;SDK documentation&lt;/a&gt; describes the separation between the interface and the engine.&lt;/p&gt;

&lt;p&gt;Board recognition uses a &lt;strong&gt;640 × 480 pixel RGB image&lt;/strong&gt; and a defined inspection camera. The engine analyses the captured pixels; commands used to introduce defects remain preparation and traceability data. Model compatibility, asset identity and capture conditions are checked before inference.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CAD scene
  ↓ RGB capture
  ↓ Visual features
  ↓ Linear softmax classifier
  ↓ PASS / DEFECT / REVIEW and report
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;The C++ engine connects the virtual scene to image analysis and the inspection outcome.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Machine learning: visual features and softmax classification
&lt;/h2&gt;

&lt;p&gt;The AI technology is a &lt;strong&gt;multiclass linear classifier with a softmax function&lt;/strong&gt;. Numerical image characteristics, called &lt;em&gt;features&lt;/em&gt;, are normalised and combined with weights learned during training. Softmax produces class scores, which are used alongside acceptance thresholds and capture checks.&lt;/p&gt;

&lt;p&gt;The editable board inspector works with &lt;strong&gt;16 visual features per example&lt;/strong&gt; and three classes: nominal, missing, and changed position or appearance. The &lt;a href="https://github.com/Silicon-Logix/slx-synthforge/blob/f6178d3168f95259629196dda523fb047e9bc45b/tools/train-inspector.py" rel="noopener noreferrer"&gt;inspector training pipeline&lt;/a&gt; preserves normalisation parameters, weights and the model identifier.&lt;/p&gt;

&lt;p&gt;The dedicated C1 and U4 component laboratory uses &lt;strong&gt;24 × 24 pixel RGB crops aligned to the component regions&lt;/strong&gt;. Its model distinguishes five scenarios: nominal board, missing component, misalignment, reversed polarity and solder bridge. This is a separate pipeline with its own &lt;a href="https://github.com/Silicon-Logix/slx-synthforge/blob/f6178d3168f95259629196dda523fb047e9bc45b/tools/train.py" rel="noopener noreferrer"&gt;visual softmax classifier&lt;/a&gt;. Scores describe the model response and need to be assessed in the context of the experiment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python and NumPy for model training
&lt;/h2&gt;

&lt;p&gt;Training uses &lt;strong&gt;NumPy for numerical computation&lt;/strong&gt; and the &lt;strong&gt;Adam optimiser&lt;/strong&gt; to update weights. The loss function is &lt;em&gt;cross entropy&lt;/em&gt;, which measures how far classifications differ from example labels. The model is selected using validation loss.&lt;/p&gt;

&lt;p&gt;Training, validation and testing have distinct roles. Normalisation is fitted on training data; a separate test set evaluates the model after selection. Parameters are exported as &lt;strong&gt;versioned JSON files&lt;/strong&gt; and loaded by the C++ engine for inference. Inspection with the included models works without installing Python; a Python environment is needed to train new models.&lt;/p&gt;

&lt;h2&gt;
  
  
  Synthetic data and capture robustness
&lt;/h2&gt;

&lt;p&gt;Dataset forge generates examples from the 3D scene and associates them with simulated defect labels. This makes experiments repeatable, organises cases and diversifies training examples. Capture groups are separated between training, validation and testing to reduce data leakage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Robustness lab&lt;/strong&gt; varies lighting, reflections, blur and camera tilt. Its result grid shows where the model maintains acceptable decisions and where review or a new capture is needed. The &lt;a href="https://github.com/Silicon-Logix/slx-synthforge/blob/f6178d3168f95259629196dda523fb047e9bc45b/docs/enterprise-workflow.md" rel="noopener noreferrer"&gt;evaluation workflow&lt;/a&gt; connects image quality to classifier behaviour.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qt Quick and C++ for the desktop application
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Qt Quick, QML and Qt Quick Controls&lt;/strong&gt; provide the operator interface: board editing, capture controls, inspection results and AI laboratories. &lt;strong&gt;OpenGL&lt;/strong&gt; handles the interactive 3D preview, with a software mode available for workstations that need it.&lt;/p&gt;

&lt;p&gt;C++ services coordinate processing outside the interface flow, keeping presentation separate from rendering and generation tasks. &lt;strong&gt;CMake and CTest&lt;/strong&gt; organise builds and automated checks. The &lt;a href="https://github.com/Silicon-Logix/slx-synthforge/blob/f6178d3168f95259629196dda523fb047e9bc45b/docs/architecture.md" rel="noopener noreferrer"&gt;documented architecture&lt;/a&gt; distinguishes presentation, the vision engine and training tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Model comparison and result traceability
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Assembly AI lab&lt;/strong&gt; collects development cases, prepares new examples and compares the initial model with a candidate. An independent benchmark is frozen before collection: both versions are evaluated on the same data with the same threshold. New examples feed training and validation.&lt;/p&gt;

&lt;p&gt;The comparison considers missed defects, false alarms, REVIEW cases and the proportion of accepted decisions. Candidate activation is explicit. Experiments and reports preserve images, CAD references, edits and model identity; &lt;strong&gt;HTML, CSV and JSON&lt;/strong&gt; formats make outcomes accessible. The &lt;a href="https://github.com/Silicon-Logix/slx-synthforge/blob/f6178d3168f95259629196dda523fb047e9bc45b/docs/validation.md" rel="noopener noreferrer"&gt;published validation&lt;/a&gt; documents results and the conditions of synthetic experiments.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to try SLX SynthForge
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/Silicon-Logix/slx-synthforge/releases/tag/v0.4.1" rel="noopener noreferrer"&gt;v0.4.1 release&lt;/a&gt; includes a portable Windows package. The &lt;a href="https://github.com/Silicon-Logix/slx-synthforge" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt; contains application sources, screenshots, documentation and examples. The proprietary engine is supplied as a binary SDK under the &lt;a href="https://github.com/Silicon-Logix/slx-synthforge/blob/f6178d3168f95259629196dda523fb047e9bc45b/LICENSE" rel="noopener noreferrer"&gt;Silicon LogiX evaluation licence&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;SynthForge is an industrial vision demonstration environment based on synthetic data. Applying the workflow to a production line requires validation with real images, optics, lighting and defects representative of the product.&lt;/p&gt;

&lt;h2&gt;
  
  
  Industrial vision and custom software
&lt;/h2&gt;

&lt;p&gt;For businesses developing inspection tools or integrating visual analysis and reporting, Silicon LogiX offers &lt;a href="https://www.siliconlogix.it/en/custom-software-development" rel="noopener noreferrer"&gt;custom software development&lt;/a&gt; and &lt;a href="https://www.siliconlogix.it/en/embedded-ai-machine-learning" rel="noopener noreferrer"&gt;AI and machine learning services&lt;/a&gt;. SynthForge shows how a desktop interface, native engine, training data and verifiable results can work together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.siliconlogix.it/en/contact#service=software&amp;amp;source=article-slx-synthforge" rel="noopener noreferrer"&gt;Contact Silicon LogiX about an industrial vision project&lt;/a&gt;&lt;/strong&gt;: describe the process, available data and required functions to define requirements and feasibility experiments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Topics and technologies&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.siliconlogix.it/en/news?tag=desktop-software" rel="noopener noreferrer"&gt;#DesktopSoftware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.siliconlogix.it/en/news?tag=computer-vision" rel="noopener noreferrer"&gt;#ComputerVision&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.siliconlogix.it/en/news?tag=industrial-ai" rel="noopener noreferrer"&gt;#IndustrialAI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.siliconlogix.it/en/news?tag=machine-learning" rel="noopener noreferrer"&gt;#MachineLearning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.siliconlogix.it/en/news?tag=synthetic-data" rel="noopener noreferrer"&gt;#SyntheticData&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.siliconlogix.it/en/news?tag=c" rel="noopener noreferrer"&gt;#C++&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.siliconlogix.it/en/news?tag=qt" rel="noopener noreferrer"&gt;#Qt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.siliconlogix.it/en/news?tag=qml" rel="noopener noreferrer"&gt;#QML&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.siliconlogix.it/en/news?tag=python" rel="noopener noreferrer"&gt;#Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.siliconlogix.it/en/news?tag=numpy" rel="noopener noreferrer"&gt;#NumPy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.siliconlogix.it/en/news?tag=softmax" rel="noopener noreferrer"&gt;#Softmax&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.siliconlogix.it/en/news?tag=github" rel="noopener noreferrer"&gt;#GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Originally published on &lt;a href="https://www.siliconlogix.it/en/article/slx-synthforge-on-github-ai-for-industrial-vision" rel="noopener noreferrer"&gt;Silicon LogiX&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>cpp</category>
      <category>python</category>
    </item>
  </channel>
</rss>
