<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.4 20241031//EN" "JATS-journalpublishing1-4.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="research-article" dtd-version="1.4" xml:lang="en">
  <front>
    <journal-meta>
      <journal-id journal-id-type="publisher-id">ica</journal-id>
      <journal-title-group>
        <journal-title>Intelligent Control and Automation</journal-title>
      </journal-title-group>
      <issn pub-type="epub">2153-0661</issn>
      <issn pub-type="ppub">2153-0653</issn>
      <publisher>
        <publisher-name>Scientific Research Publishing</publisher-name>
      </publisher>
    </journal-meta>
    <article-meta>
      <article-id pub-id-type="doi">10.4236/ica.2026.174009</article-id>
      <article-id pub-id-type="publisher-id">ica-154734</article-id>
      <article-categories>
        <subj-group>
          <subject>Article</subject>
        </subj-group>
        <subj-group>
          <subject>Computer Science</subject>
          <subject>Communications</subject>
        </subj-group>
      </article-categories>
      <title-group>
        <article-title>Adaptive Mechatronic Monitoring and Control of Thermal-Humidity Conditions in Stored Cotton Stacks Based on Recursive Least-Squares Identification</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <name name-style="western">
            <surname>Sidikov</surname>
            <given-names>Isamidin</given-names>
          </name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <name name-style="western">
            <surname>Yuldashev</surname>
            <given-names>Surojiddin</given-names>
          </name>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
      </contrib-group>
      <aff id="aff1"><label>1</label> Tashkent State Technical University Named after Islam Karimov, Tashkent, Uzbekistan </aff>
      <aff id="aff2"><label>2</label> Tashkent Institute of Textile and Light Industry, Tashkent, Uzbekistan </aff>
      <author-notes>
        <fn fn-type="conflict" id="fn-conflict">
          <p>The authors declare no conflicts of interest regarding the publication of this paper.</p>
        </fn>
      </author-notes>
      <pub-date pub-type="epub">
        <day>03</day>
        <month>11</month>
        <year>2026</year>
      </pub-date>
      <pub-date pub-type="collection">
        <month>11</month>
        <year>2026</year>
      </pub-date>
      <volume>17</volume>
      <issue>04</issue>
      <fpage>191</fpage>
      <lpage>211</lpage>
      <history>
        <date date-type="received">
          <day>05</day>
          <month>10</month>
          <year>2026</year>
        </date>
        <date date-type="accepted">
          <day>20</day>
          <month>10</month>
          <year>2026</year>
        </date>
        <date date-type="published">
          <day>23</day>
          <month>10</month>
          <year>2026</year>
        </date>
      </history>
      <permissions>
        <copyright-statement>© 2026 by the authors and Scientific Research Publishing Inc.</copyright-statement>
        <copyright-year>2026</copyright-year>
        <license license-type="open-access">
          <license-p> This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution (CC BY) license ( <ext-link ext-link-type="uri" xlink:href="https://creativecommons.org/licenses/by/4.0/">https://creativecommons.org/licenses/by/4.0/</ext-link> ). </license-p>
        </license>
      </permissions>
      <self-uri content-type="doi" xlink:href="https://doi.org/10.4236/ica.2026.174009">https://doi.org/10.4236/ica.2026.174009</self-uri>
      <abstract>
        <p>Long-term storage of raw cotton in stacks is accompanied by spatially non-uniform thermal and humidity fields, and a locally hazardous state can develop unnoticed when the stack is observed at a single point or at long manual inspection intervals. This paper proposes a closed-loop mechatronic architecture that unites eight distributed temperature-humidity sensing nodes with wireless data transmission, validity-aware sensor fusion, a multi-factor technological risk index, recursive least-squares (RLS) identification of the effective cooling coefficient with exponential forgetting (used for model adaptation and diagnosis of ventilation effectiveness), a six-state supervisory automaton and a mobile stepper-driven ventilation actuator protected by independent hardware safety circuits. In contrast to monitoring-only solutions, measurement validation, online identification, risk-based decision-making, positioning and active ventilation are coordinated within a single control loop, and the information uncertainty caused by lost sensor nodes is treated separately from the technological risk. The architecture was implemented in MATLAB/Simulink with eight first-order thermal channels, sensor faults and communication delays, fan/induction-motor and stepper-drive subsystems, and was examined in five scenarios: nominal operation, multiple hot zones, sensor disconnection, a 30% loss of fan effectiveness and a 40% increase in movement resistance. Against the virtual validation series the identified model gave RMSE = 0.1197˚C, MAE = 0.0965˚C, MAPE = 0.343% and <italic>R</italic><sup>2</sup> = 0.9689. These values characterise agreement with simulated data only and are not claimed as physical validation on a real cotton stack. The study thus provides a structured path from distributed monitoring to adaptive mechatronic control, together with a staged experimental protocol and quantitative acceptance criteria for subsequent validation.</p>
      </abstract>
      <kwd-group kwd-group-type="author-generated" xml:lang="en">
        <kwd>Adaptive Control</kwd>
        <kwd>Recursive Least Squares</kwd>
        <kwd>Online Identification</kwd>
        <kwd>Cotton Storage</kwd>
        <kwd>Mechatronic System</kwd>
        <kwd>Sensor Fusion</kwd>
        <kwd>Supervisory Control</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec1">
      <title>1. Introduction</title>
      <p>Raw cotton is stored for long periods in large stacks, in which heat and moisture are distributed non-uniformly over the volume. Stored textile materials constitute a recognised fire hazard [<xref ref-type="bibr" rid="B1">1</xref>], and the smouldering behaviour of cotton bales ignited internally has been shown to depend on bale density [<xref ref-type="bibr" rid="B2">2</xref>]; the internal thermal state of a compacted cotton mass is therefore a safety-relevant quantity as well as a quality-relevant one. Local thermal and humidity anomalies are difficult to identify reliably when the process is observed at a single point or at long manual inspection intervals.</p>
      <p>Recent work has demonstrated the feasibility of wireless temperature-humidity monitoring and intelligent inspection of cotton bale storage, including RFID-based positioning combined with wireless sensing [<xref ref-type="bibr" rid="B3">3</xref>], while RFID tag localisation techniques based on phased-array antennas [<xref ref-type="bibr" rid="B4">4</xref>] extend the means of locating monitored objects. Monitoring and information management, however, do not by themselves constitute an adaptive control system: a control architecture must transform validated measurements into decisions and must coordinate sensing, actuation and safety within one loop.</p>
      <p>The second prerequisite of such a loop is a model that follows the object. The cooling behaviour of a cotton stack depends on cotton density, the aerodynamic resistance of the ventilation channel, ambient conditions and the state of the fan, all of which change with time, so that a model with fixed coefficients becomes mismatched. Recursive least squares (RLS) with exponential forgetting is the standard instrument for estimating slowly varying parameters from streaming input-output data [<xref ref-type="bibr" rid="B5">5</xref>][<xref ref-type="bibr" rid="B6">6</xref>]; recursive identification schemes suited to adaptive control [<xref ref-type="bibr" rid="B7">7</xref>], RLS-based adaptive state-feedback control [<xref ref-type="bibr" rid="B8">8</xref>] and the combination of RLS identification with PI and model predictive control for thermal plants [<xref ref-type="bibr" rid="B9">9</xref>] confirm its relevance to processes with thermal inertia and delay. In the neighbouring field of condition monitoring, evolving and adaptive neuro-fuzzy techniques have been applied to gearbox and bearing diagnostics [<xref ref-type="bibr" rid="B10">10</xref>][<xref ref-type="bibr" rid="B11">11</xref>], which shows that online adaptation can serve diagnosis as well as control.</p>
      <p>The present study addresses the gap between monitoring and adaptive control by treating the cotton stack as a distributed, slowly varying thermal object coupled to a mobile ventilation mechanism. The central idea is to observe the stack with several spatially distributed sensors, to reject invalid measurements, to identify the current effective cooling behaviour online, and to select ventilation and motion states according to a risk index, while keeping uncertainty about the measurements distinct from the risk of the process itself.</p>
      <p>The paper concentrates on the control contribution and not on the hardware platform. The low-cost components of the prototype (ESP32 microcontrollers and SHT21 sensors) are not regarded as a scientific novelty; their significance arises from integrating distributed information, two types of electric drive, mobile mechanics, supervisory logic and adaptive parameter estimation into one mechatronic architecture. An important limitation is stated from the outset: the RLS and model-fit results reported here are obtained by simulation and require physical validation on a real cotton stack. This distinction is maintained throughout the paper.</p>
      <p>The contributions of the work are as follows: 1) a distributed eight-node monitoring structure with explicit measurement validation; 2) an RLS-based online estimator of the effective cooling coefficient with conditional updating and parameter projection, used for adaptive model identification and diagnosis of ventilation effectiveness; 3) a risk-aware supervisory state machine that combines thermal risk with information uncertainty; 4) the integration of stepper-driven mobile positioning with ventilation control and independent safety logic; and 5) a reproducible simulation and validation protocol that separates algorithmic verification from physical validation.</p>
      <p>The remainder of the paper is organised as follows. Section 2 reviews related work and formulates the problem. Section 3 describes the mechatronic architecture, and Section 4 presents the identification and control method. Section 5 describes the simulation model and the scenarios. Section 6 reports and discusses the results, Section 7 gives the experimental validation plan and the limitations, and Section 8 concludes the paper.</p>
    </sec>
    <sec id="sec2">
      <title>2. Related Work and Problem Formulation</title>
      <sec id="sec2dot1">
        <title>2.1. Related Work</title>
        <p>Research on cotton-storage monitoring shows that wireless sensing can supply real-time temperature and humidity information. Zhang <italic>et al.</italic> [<xref ref-type="bibr" rid="B3">3</xref>] developed an RFID-based intelligent inspection and monitoring system for cotton bale storage that uses wireless temperature-humidity sensing and a handheld terminal; in their field tests the positioning error was below 6.7%, the relative temperature error below 8% and the humidity error below 7%. That work establishes the importance of distributed information acquisition, but its objective differs from the present one: the system proposed here additionally closes the loop through adaptive ventilation and mobile actuation.</p>
        <p>From the control viewpoint, time-varying process parameters make fixed-coefficient models vulnerable to mismatch. RLS identification provides an online mechanism for tracking parameter changes [<xref ref-type="bibr" rid="B5">5</xref>][<xref ref-type="bibr" rid="B7">7</xref>], and adaptive state-feedback control built on RLS has been proposed for time-varying systems [<xref ref-type="bibr" rid="B8">8</xref>]. Recent thermal-control research combines adaptive identification with predictive control [<xref ref-type="bibr" rid="B9">9</xref>]. Two practical difficulties of RLS with forgetting are well known: loss of excitation, which causes the covariance matrix to grow without bound, and estimates that leave the physically admissible region under noise [<xref ref-type="bibr" rid="B6">6</xref>][<xref ref-type="bibr" rid="B7">7</xref>]. Both are relevant to the present object, because a contactor-controlled fan delivers excitation only while it is running, and both are addressed explicitly in Section 4.2.</p>
      </sec>
      <sec id="sec2dot2">
        <title>2.2. Problem Formulation</title>
        <p>The state of the stack, the external disturbances and the control actions are described by the vectors</p>
        <disp-formula id="FD1">
          <label>(1)</label>
          <mml:math display="inline">
            <mml:mrow>
              <mml:mi>x</mml:mi>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>t</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:msup>
                <mml:mrow>
                  <mml:mrow>
                    <mml:mo>[</mml:mo>
                    <mml:mrow>
                      <mml:mi>T</mml:mi>
                      <mml:mo>,</mml:mo>
                      <mml:mi>W</mml:mi>
                      <mml:mo>,</mml:mo>
                      <mml:mi>ρ</mml:mi>
                      <mml:mo>,</mml:mo>
                      <mml:msub>
                        <mml:mi>v</mml:mi>
                        <mml:mi>a</mml:mi>
                      </mml:msub>
                      <mml:mo>,</mml:mo>
                      <mml:mi>Δ</mml:mi>
                      <mml:mi>P</mml:mi>
                    </mml:mrow>
                    <mml:mo>]</mml:mo>
                  </mml:mrow>
                </mml:mrow>
                <mml:mtext>T</mml:mtext>
              </mml:msup>
              <mml:mo>,</mml:mo>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:mi>z</mml:mi>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>t</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:msup>
                <mml:mrow>
                  <mml:mrow>
                    <mml:mo>[</mml:mo>
                    <mml:mrow>
                      <mml:msub>
                        <mml:mi>T</mml:mi>
                        <mml:mi>a</mml:mi>
                      </mml:msub>
                      <mml:mo>,</mml:mo>
                      <mml:mi>R</mml:mi>
                      <mml:msub>
                        <mml:mi>H</mml:mi>
                        <mml:mi>a</mml:mi>
                      </mml:msub>
                      <mml:mo>,</mml:mo>
                      <mml:msub>
                        <mml:mi>P</mml:mi>
                        <mml:mi>y</mml:mi>
                      </mml:msub>
                      <mml:mo>,</mml:mo>
                      <mml:msub>
                        <mml:mi>v</mml:mi>
                        <mml:mi>w</mml:mi>
                      </mml:msub>
                      <mml:mo>,</mml:mo>
                      <mml:msub>
                        <mml:mi>I</mml:mi>
                        <mml:mi>s</mml:mi>
                      </mml:msub>
                    </mml:mrow>
                    <mml:mo>]</mml:mo>
                  </mml:mrow>
                </mml:mrow>
                <mml:mtext>T</mml:mtext>
              </mml:msup>
              <mml:mo>,</mml:mo>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:mi>u</mml:mi>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>t</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:msup>
                <mml:mrow>
                  <mml:mrow>
                    <mml:mo>[</mml:mo>
                    <mml:mrow>
                      <mml:msub>
                        <mml:mi>u</mml:mi>
                        <mml:mi>f</mml:mi>
                      </mml:msub>
                      <mml:mo>,</mml:mo>
                      <mml:msub>
                        <mml:mi>u</mml:mi>
                        <mml:mi>m</mml:mi>
                      </mml:msub>
                    </mml:mrow>
                    <mml:mo>]</mml:mo>
                  </mml:mrow>
                </mml:mrow>
                <mml:mtext>T</mml:mtext>
              </mml:msup>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>where <italic>T</italic> is the temperature, <italic>W</italic> the humidity-related state, <italic>ρ</italic> the cotton density, <italic>v</italic><italic><sub>a</sub></italic> the air velocity in the ventilation channel and Δ<italic>P</italic> the pressure difference; <italic>T</italic><italic><sub>a</sub></italic> and <italic>RH</italic><italic><sub>a</sub></italic> are the ambient temperature and relative humidity, and <italic>P</italic><italic><sub>y</sub></italic>, <italic>v</italic><italic><sub>w</sub></italic> and <italic>I</italic><italic><sub>s</sub></italic> denote precipitation, wind speed and solar irradiance; <italic>u</italic><italic><sub>f</sub></italic><inline-formula><mml:math display="inline"><mml:mo> ∈ </mml:mo></mml:math></inline-formula> {0, 1} is the state of the fan contactor and <italic>u</italic><italic><sub>m</sub></italic><inline-formula><mml:math display="inline"><mml:mo> ∈ </mml:mo></mml:math></inline-formula> {−1, 0, 1} is the motion command of the platform (reverse, stop, forward). The object and its observation by <italic>N</italic> = 8 sensor nodes are written in the general form</p>
        <disp-formula id="FD2">
          <label>(2)</label>
          <mml:math>
            <mml:mrow>
              <mml:mover accent="true">
                <mml:mi>x</mml:mi>
                <mml:mo>˙</mml:mo>
              </mml:mover>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>t</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:mi>f</mml:mi>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mrow>
                  <mml:mi>x</mml:mi>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>t</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                  <mml:mo>,</mml:mo>
                  <mml:mi>u</mml:mi>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>t</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                  <mml:mo>,</mml:mo>
                  <mml:mi>z</mml:mi>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>t</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                  <mml:mo>,</mml:mo>
                  <mml:mi>θ</mml:mi>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>t</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>,</mml:mo>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:msub>
                <mml:mi>y</mml:mi>
                <mml:mi>i</mml:mi>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:msub>
                <mml:mi>h</mml:mi>
                <mml:mi>i</mml:mi>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mrow>
                  <mml:mi>x</mml:mi>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mrow>
                      <mml:mi>k</mml:mi>
                      <mml:msub>
                        <mml:mi>T</mml:mi>
                        <mml:mi>s</mml:mi>
                      </mml:msub>
                    </mml:mrow>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>+</mml:mo>
              <mml:msub>
                <mml:mi>ν</mml:mi>
                <mml:mi>i</mml:mi>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>,</mml:mo>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:mi>i</mml:mi>
              <mml:mo>=</mml:mo>
              <mml:mn>1</mml:mn>
              <mml:mo>,</mml:mo>
              <mml:mo>⋯</mml:mo>
              <mml:mo>,</mml:mo>
              <mml:mi>N</mml:mi>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>where <italic>θ</italic>(<italic>t</italic>) is the vector of slowly varying parameters, <italic>T</italic><italic><sub>s</sub></italic> the sampling period and <italic>ν</italic><italic><sub>i</sub></italic> the measurement noise of node <italic>i</italic>. Only local temperatures and relative humidities are measured; the remaining components of <italic>x</italic> act on the measured channels through the parameters <italic>θ</italic>, which is the reason for identifying them online.</p>
        <p>The control problem is to construct a supervisory policy <italic>u</italic>(<italic>k</italic>) that, whenever a valid node crosses the upper threshold <italic>T</italic><sub>on</sub> or the risk index exceeds its decision boundary, returns all valid node temperatures below <italic>T</italic><sub>on</sub> − Δ<italic>T</italic><italic><sub>h</sub></italic> in finite time, subject to three constraints: mutual exclusion of motion and ventilation, <italic>u</italic><italic><sub>f</sub></italic>·|<italic>u</italic><italic><sub>m</sub></italic>| = 0; minimum ON and OFF durations of the fan contactor; and transfer to a safe state on any fault. Because the prototype uses a contactor-controlled fan, ventilation is manipulated through ON/OFF durations and state transitions; continuous fan-speed adaptation by means of a variable-frequency drive (VFD) is identified as a future extension.</p>
      </sec>
    </sec>
    <sec id="sec3">
      <title>3. Proposed Mechatronic Architecture</title>
      <p>The architecture comprises eight distributed sensor nodes, a central controller, a mobile mechanical platform and a ventilation actuator (<bold>Table 1</bold>). Each node measures temperature and relative humidity and transmits them wirelessly together with its node identifier and a measurement status. The central controller validates the received packets, determines the set of active nodes and computes the maximum and the fused thermal state. Sensor validity is deliberately separated from technological risk: a missing measurement is treated as information uncertainty and is never silently interpreted as a safe state of the process.</p>
      <p>Table 1. Subsystems of the proposed architecture and their role in the control loop.</p>
      <table-wrap id="tbl1">
        <label>Table 1</label>
        <table>
          <tbody>
            <tr>
              <td>
                <bold>Subsystem</bold>
              </td>
              <td>
                <bold>Main function</bold>
              </td>
              <td>
                <bold>Control role</bold>
              </td>
            </tr>
            <tr>
              <td>Eight sensor nodes</td>
              <td>
                <italic>T</italic>
                and
                <italic>RH</italic>
                at distributed locations
              </td>
              <td>Spatial observation</td>
            </tr>
            <tr>
              <td>Validity and fusion</td>
              <td>Timeout, range and jump checks</td>
              <td>Reliable state estimation</td>
            </tr>
            <tr>
              <td>Risk estimator</td>
              <td>Temperature, humidity, rate of rise and internal-external difference</td>
              <td>Start/stop decision</td>
            </tr>
            <tr>
              <td>RLS identifier</td>
              <td>Online estimation of the cooling coefficient</td>
              <td>Model adaptation and diagnosis (no direct actuator command)</td>
            </tr>
            <tr>
              <td>State machine</td>
              <td>IDLE, MOVING, FAN, RESET, REVERSE, FAULT</td>
              <td>Supervisory coordination</td>
            </tr>
            <tr>
              <td>Stepper drive</td>
              <td>Positioning of the mobile platform</td>
              <td>Moves the actuator to the working position</td>
            </tr>
            <tr>
              <td>Ventilation actuator</td>
              <td>Air suction/ventilation</td>
              <td>Active thermal intervention</td>
            </tr>
            <tr>
              <td>Safety logic</td>
              <td>E-STOP, overload, limit and timeout</td>
              <td>Fail-safe operation</td>
            </tr>
          </tbody>
        </table>
      </table-wrap>
      <p>In MATLAB/Simulink the architecture is implemented as a set of modular subsystems: eight sensor subsystems, sensor validity and fusion, risk estimation, the supervisory state machine, the thermal plant, the fan and induction motor, the stepper drive and cart position, the RLS adaptive identifier, fault and safety logic, and scopes and metrics. This modularisation allows model parameters and fault scenarios to be changed without redesigning the model as a whole, and it mirrors the partition of functions in the prototype.</p>
    </sec>
    <sec id="sec4">
      <title>4. Adaptive Identification and Control Method</title>
      <sec id="sec4dot1">
        <title>4.1. Thermal Model</title>
        <p>The dominant cooling behaviour of the zone observed by node <italic>i</italic> is described by a first-order heat balance in which ventilation increases the rate of heat exchange with the ambient air:</p>
        <disp-formula id="FD3">
          <label>(3)</label>
          <mml:math>
            <mml:mrow>
              <mml:mfrac>
                <mml:mrow>
                  <mml:mtext>d</mml:mtext>
                  <mml:msub>
                    <mml:mi>T</mml:mi>
                    <mml:mi>i</mml:mi>
                  </mml:msub>
                </mml:mrow>
                <mml:mrow>
                  <mml:mtext>d</mml:mtext>
                  <mml:mi>t</mml:mi>
                </mml:mrow>
              </mml:mfrac>
              <mml:mo>=</mml:mo>
              <mml:mo>−</mml:mo>
              <mml:mrow>
                <mml:mo>[</mml:mo>
                <mml:mrow>
                  <mml:msub>
                    <mml:mi>k</mml:mi>
                    <mml:mrow>
                      <mml:mn>0</mml:mn>
                      <mml:mo>,</mml:mo>
                      <mml:mi>i</mml:mi>
                    </mml:mrow>
                  </mml:msub>
                  <mml:mo>+</mml:mo>
                  <mml:msub>
                    <mml:mi>k</mml:mi>
                    <mml:mrow>
                      <mml:mi>v</mml:mi>
                      <mml:mo>,</mml:mo>
                      <mml:mi>i</mml:mi>
                    </mml:mrow>
                  </mml:msub>
                  <mml:msub>
                    <mml:mi>u</mml:mi>
                    <mml:mi>f</mml:mi>
                  </mml:msub>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>t</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
                <mml:mo>]</mml:mo>
              </mml:mrow>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mrow>
                  <mml:msub>
                    <mml:mi>T</mml:mi>
                    <mml:mi>i</mml:mi>
                  </mml:msub>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>t</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                  <mml:mo>−</mml:mo>
                  <mml:msub>
                    <mml:mi>T</mml:mi>
                    <mml:mi>a</mml:mi>
                  </mml:msub>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>t</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>+</mml:mo>
              <mml:msub>
                <mml:mi>γ</mml:mi>
                <mml:mi>i</mml:mi>
              </mml:msub>
              <mml:mi>R</mml:mi>
              <mml:msub>
                <mml:mi>H</mml:mi>
                <mml:mi>a</mml:mi>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>t</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>+</mml:mo>
              <mml:msub>
                <mml:mi>q</mml:mi>
                <mml:mi>i</mml:mi>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>t</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>where <italic>k</italic><sub>0,</sub><italic><sub>i</sub></italic> is the natural (fan-off) heat-exchange coefficient, <italic>k</italic><italic><sub>v</sub></italic><sub>,</sub><italic><sub>i</sub></italic> the additional coefficient created by forced ventilation, <italic>γ</italic><italic><sub>i</sub></italic> the sensitivity to ambient humidity, and <italic>q</italic><italic><sub>i</sub></italic> a lumped term for internal heat generation and unmodelled exchange with neighbouring zones. For a constant ventilation state over one sampling period, Equation (3) leads to the discrete regression form</p>
        <disp-formula id="FD4">
          <label>(4)</label>
          <mml:math>
            <mml:mrow>
              <mml:msub>
                <mml:mi>T</mml:mi>
                <mml:mi>i</mml:mi>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mrow>
                  <mml:mi>k</mml:mi>
                  <mml:mo>+</mml:mo>
                  <mml:mn>1</mml:mn>
                </mml:mrow>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:msub>
                <mml:mi>a</mml:mi>
                <mml:mi>i</mml:mi>
              </mml:msub>
              <mml:msub>
                <mml:mi>T</mml:mi>
                <mml:mi>i</mml:mi>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>+</mml:mo>
              <mml:msub>
                <mml:mi>b</mml:mi>
                <mml:mi>i</mml:mi>
              </mml:msub>
              <mml:msub>
                <mml:mi>u</mml:mi>
                <mml:mi>f</mml:mi>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>+</mml:mo>
              <mml:msub>
                <mml:mi>c</mml:mi>
                <mml:mi>i</mml:mi>
              </mml:msub>
              <mml:msub>
                <mml:mi>T</mml:mi>
                <mml:mi>a</mml:mi>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>+</mml:mo>
              <mml:msub>
                <mml:mi>d</mml:mi>
                <mml:mi>i</mml:mi>
              </mml:msub>
              <mml:mi>R</mml:mi>
              <mml:msub>
                <mml:mi>H</mml:mi>
                <mml:mi>a</mml:mi>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>+</mml:mo>
              <mml:msub>
                <mml:mi>e</mml:mi>
                <mml:mi>i</mml:mi>
              </mml:msub>
              <mml:mo>+</mml:mo>
              <mml:msub>
                <mml:mi>ε</mml:mi>
                <mml:mi>i</mml:mi>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>in which <italic>ε</italic><italic><sub>i</sub></italic> is the modelling error. Equation (4) is a regime-wise linear approximation of Equation (3). In the ventilated regime (<italic>u</italic><italic><sub>f</sub></italic> = 1), in which identification is performed, <italic>a</italic><italic><sub>i</sub></italic> = exp(−<italic>k</italic><italic><sub>c</sub></italic><sub>,</sub><italic><sub>i</sub></italic><italic>T</italic><italic><sub>s</sub></italic>) with <italic>k</italic><italic><sub>c</sub></italic><sub>,</sub><italic><sub>i</sub></italic> = <italic>k</italic><sub>0,</sub><italic><sub>i</sub></italic> + <italic>k</italic><italic><sub>v</sub></italic><sub>,</sub><italic><sub>i</sub></italic>, so that the effective cooling coefficient and the corresponding time constant follow from the estimate of <italic>a</italic><italic><sub>i</sub></italic>:</p>
        <disp-formula id="FD5">
          <label>(5)</label>
          <mml:math>
            <mml:mrow>
              <mml:msub>
                <mml:mover accent="true">
                  <mml:mi>k</mml:mi>
                  <mml:mo>^</mml:mo>
                </mml:mover>
                <mml:mrow>
                  <mml:mi>c</mml:mi>
                  <mml:mo>,</mml:mo>
                  <mml:mi>i</mml:mi>
                </mml:mrow>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:mo>−</mml:mo>
              <mml:mfrac>
                <mml:mrow>
                  <mml:mi>ln</mml:mi>
                  <mml:msub>
                    <mml:mover accent="true">
                      <mml:mi>a</mml:mi>
                      <mml:mo>^</mml:mo>
                    </mml:mover>
                    <mml:mi>i</mml:mi>
                  </mml:msub>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>k</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
                <mml:mrow>
                  <mml:msub>
                    <mml:mi>T</mml:mi>
                    <mml:mi>s</mml:mi>
                  </mml:msub>
                </mml:mrow>
              </mml:mfrac>
              <mml:mo>≈</mml:mo>
              <mml:mfrac>
                <mml:mrow>
                  <mml:mn>1</mml:mn>
                  <mml:mo>−</mml:mo>
                  <mml:msub>
                    <mml:mover accent="true">
                      <mml:mi>a</mml:mi>
                      <mml:mo>^</mml:mo>
                    </mml:mover>
                    <mml:mi>i</mml:mi>
                  </mml:msub>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>k</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
                <mml:mrow>
                  <mml:msub>
                    <mml:mi>T</mml:mi>
                    <mml:mi>s</mml:mi>
                  </mml:msub>
                </mml:mrow>
              </mml:mfrac>
              <mml:mo>,</mml:mo>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:msub>
                <mml:mover accent="true">
                  <mml:mi>τ</mml:mi>
                  <mml:mo>^</mml:mo>
                </mml:mover>
                <mml:mi>i</mml:mi>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:mfrac>
                <mml:mn>1</mml:mn>
                <mml:mrow>
                  <mml:msub>
                    <mml:mover accent="true">
                      <mml:mi>k</mml:mi>
                      <mml:mo>^</mml:mo>
                    </mml:mover>
                    <mml:mrow>
                      <mml:mi>c</mml:mi>
                      <mml:mo>,</mml:mo>
                      <mml:mi>i</mml:mi>
                    </mml:mrow>
                  </mml:msub>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>k</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
              </mml:mfrac>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>The coefficient <italic>k</italic><italic><sub>c</sub></italic><sub>,</sub><italic><sub>i</sub></italic> is not assumed constant, because cotton density, channel resistance, external conditions and fan performance change over time. Its current estimate is therefore both a model parameter and a diagnostic indicator of ventilation effectiveness.</p>
      </sec>
      <sec id="sec4dot2">
        <title>4.2. RLS Online Identification</title>
        <p>For each channel the regression vector is <inline-formula><mml:math display="inline"><mml:mrow><mml:mi> φ </mml:mi><mml:mrow><mml:mo> ( </mml:mo><mml:mi> k </mml:mi><mml:mo> ) </mml:mo></mml:mrow><mml:mo> = </mml:mo><mml:msup><mml:mrow><mml:mrow><mml:mo> [ </mml:mo><mml:mrow><mml:mi> T </mml:mi><mml:mrow><mml:mo> ( </mml:mo><mml:mi> k </mml:mi><mml:mo> ) </mml:mo></mml:mrow><mml:mo> , </mml:mo><mml:msub><mml:mi> u </mml:mi><mml:mi> f </mml:mi></mml:msub><mml:mrow><mml:mo> ( </mml:mo><mml:mi> k </mml:mi><mml:mo> ) </mml:mo></mml:mrow><mml:mo> , </mml:mo><mml:msub><mml:mi> T </mml:mi><mml:mi> a </mml:mi></mml:msub><mml:mrow><mml:mo> ( </mml:mo><mml:mi> k </mml:mi><mml:mo> ) </mml:mo></mml:mrow><mml:mo> , </mml:mo><mml:mi> R </mml:mi><mml:msub><mml:mi> H </mml:mi><mml:mi> a </mml:mi></mml:msub><mml:mrow><mml:mo> ( </mml:mo><mml:mi> k </mml:mi><mml:mo> ) </mml:mo></mml:mrow><mml:mo> , </mml:mo><mml:mn> 1 </mml:mn></mml:mrow><mml:mo> ] </mml:mo></mml:mrow></mml:mrow><mml:mtext> T </mml:mtext></mml:msup></mml:mrow></mml:math></inline-formula> , the parameter vector is <inline-formula><mml:math display="inline"><mml:mrow><mml:mi> θ </mml:mi><mml:mo> = </mml:mo><mml:msup><mml:mrow><mml:mrow><mml:mo> [ </mml:mo><mml:mrow><mml:mi> a </mml:mi><mml:mo> , </mml:mo><mml:mi> b </mml:mi><mml:mo> , </mml:mo><mml:mi> c </mml:mi><mml:mo> , </mml:mo><mml:mi> d </mml:mi><mml:mo> , </mml:mo><mml:mi> e </mml:mi></mml:mrow><mml:mo> ] </mml:mo></mml:mrow></mml:mrow><mml:mtext> T </mml:mtext></mml:msup></mml:mrow></mml:math></inline-formula> and the output is <italic>y</italic>(<italic>k</italic>) = <italic>T</italic>(<italic>k</italic> + 1); the node index is omitted for brevity. The one-step prediction and the prediction error are</p>
        <disp-formula id="FD6">
          <label>(6)</label>
          <mml:math>
            <mml:mrow>
              <mml:mover accent="true">
                <mml:mi>y</mml:mi>
                <mml:mo>^</mml:mo>
              </mml:mover>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:msup>
                <mml:mi>φ</mml:mi>
                <mml:mtext>T</mml:mtext>
              </mml:msup>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mover accent="true">
                <mml:mi>θ</mml:mi>
                <mml:mo>^</mml:mo>
              </mml:mover>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mrow>
                  <mml:mi>k</mml:mi>
                  <mml:mo>−</mml:mo>
                  <mml:mn>1</mml:mn>
                </mml:mrow>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>,</mml:mo>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:mi>e</mml:mi>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:mi>y</mml:mi>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>−</mml:mo>
              <mml:mover accent="true">
                <mml:mi>y</mml:mi>
                <mml:mo>^</mml:mo>
              </mml:mover>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>and the RLS update with forgetting factor <italic>λ</italic> is [<xref ref-type="bibr" rid="B5">5</xref>][<xref ref-type="bibr" rid="B6">6</xref>]</p>
        <disp-formula id="FD7">
          <label>(7)</label>
          <mml:math>
            <mml:mrow>
              <mml:mi>K</mml:mi>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:mfrac>
                <mml:mrow>
                  <mml:mi>P</mml:mi>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mrow>
                      <mml:mi>k</mml:mi>
                      <mml:mo>−</mml:mo>
                      <mml:mn>1</mml:mn>
                    </mml:mrow>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                  <mml:mi>φ</mml:mi>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>k</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
                <mml:mrow>
                  <mml:mi>λ</mml:mi>
                  <mml:mo>+</mml:mo>
                  <mml:msup>
                    <mml:mi>φ</mml:mi>
                    <mml:mtext>T</mml:mtext>
                  </mml:msup>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>k</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                  <mml:mi>P</mml:mi>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mrow>
                      <mml:mi>k</mml:mi>
                      <mml:mo>−</mml:mo>
                      <mml:mn>1</mml:mn>
                    </mml:mrow>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                  <mml:mi>φ</mml:mi>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>k</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
              </mml:mfrac>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <disp-formula id="FD8">
          <label>(8)</label>
          <mml:math>
            <mml:mrow>
              <mml:mover accent="true">
                <mml:mi>θ</mml:mi>
                <mml:mo>^</mml:mo>
              </mml:mover>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:mover accent="true">
                <mml:mi>θ</mml:mi>
                <mml:mo>^</mml:mo>
              </mml:mover>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mrow>
                  <mml:mi>k</mml:mi>
                  <mml:mo>−</mml:mo>
                  <mml:mn>1</mml:mn>
                </mml:mrow>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>+</mml:mo>
              <mml:mi>K</mml:mi>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mi>e</mml:mi>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <disp-formula id="FD9">
          <label>(9)</label>
          <mml:math>
            <mml:mrow>
              <mml:mi>P</mml:mi>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:mfrac>
                <mml:mn>1</mml:mn>
                <mml:mi>λ</mml:mi>
              </mml:mfrac>
              <mml:mrow>
                <mml:mo>[</mml:mo>
                <mml:mrow>
                  <mml:mi>P</mml:mi>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mrow>
                      <mml:mi>k</mml:mi>
                      <mml:mo>−</mml:mo>
                      <mml:mn>1</mml:mn>
                    </mml:mrow>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                  <mml:mo>−</mml:mo>
                  <mml:mi>K</mml:mi>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>k</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                  <mml:msup>
                    <mml:mi>φ</mml:mi>
                    <mml:mtext>T</mml:mtext>
                  </mml:msup>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>k</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                  <mml:mi>P</mml:mi>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mrow>
                      <mml:mi>k</mml:mi>
                      <mml:mo>−</mml:mo>
                      <mml:mn>1</mml:mn>
                    </mml:mrow>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
                <mml:mo>]</mml:mo>
              </mml:mrow>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>where <italic>K</italic>(<italic>k</italic>) is the gain vector and <italic>P</italic>(<italic>k</italic>) the covariance matrix. The forgetting factor determines the effective memory of the estimator,</p>
        <disp-formula id="FD10">
          <label>(10)</label>
          <mml:math>
            <mml:mrow>
              <mml:msub>
                <mml:mi>N</mml:mi>
                <mml:mi>λ</mml:mi>
              </mml:msub>
              <mml:mo>=</mml:mo>
              <mml:mfrac>
                <mml:mn>1</mml:mn>
                <mml:mrow>
                  <mml:mn>1</mml:mn>
                  <mml:mo>−</mml:mo>
                  <mml:mi>λ</mml:mi>
                </mml:mrow>
              </mml:mfrac>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>The simulation uses <italic>λ</italic> = 0.995 as an initial value, which gives <italic>N</italic><italic><sub>λ</sub></italic> = 200 samples, that is, a memory of 200 - 400 s at the sampling period of 1 - 2 s. This is short in comparison with the rate at which the properties of the stack change and long in comparison with the measurement noise. In the simulations reported in Section 6 the sampling period of the thermal channels is fixed at <italic>T</italic><italic><sub>s</sub></italic> = 2 s, so that the memory of the estimator is <italic>N</italic><italic><sub>λ</sub></italic><italic>T</italic><italic><sub>s</sub></italic> = 400 s ≈ 6.7 min.</p>
        <p>Updating is conditional. Equations (7)-(9) are executed for node <italic>i</italic> only when the indicator</p>
        <disp-formula id="FD11">
          <label>(11)</label>
          <mml:math>
            <mml:mrow>
              <mml:msub>
                <mml:mi>g</mml:mi>
                <mml:mi>i</mml:mi>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:msub>
                <mml:mi>u</mml:mi>
                <mml:mi>f</mml:mi>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>⋅</mml:mo>
              <mml:msub>
                <mml:mi>v</mml:mi>
                <mml:mi>i</mml:mi>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>⋅</mml:mo>
              <mml:mn>1</mml:mn>
              <mml:mrow>
                <mml:mo>[</mml:mo>
                <mml:mrow>
                  <mml:msub>
                    <mml:mi>ξ</mml:mi>
                    <mml:mi>i</mml:mi>
                  </mml:msub>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>k</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                  <mml:mo>≥</mml:mo>
                  <mml:msub>
                    <mml:mi>ξ</mml:mi>
                    <mml:mrow>
                      <mml:mi>min</mml:mi>
                    </mml:mrow>
                  </mml:msub>
                </mml:mrow>
                <mml:mo>]</mml:mo>
              </mml:mrow>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>equals one, that is, when the fan is running, the data of the node are valid (<italic>v</italic><italic><sub>i</sub></italic> = 1, Section 4.3) and a scalar excitation measure <italic>ξ</italic><italic><sub>i</sub></italic> (in the simulation, the magnitude of the internal-ambient temperature difference, <italic>ξ</italic><italic><sub>i</sub></italic>(<italic>k</italic>) = |<italic>T</italic><italic><sub>i</sub></italic>(<italic>k</italic>) − <italic>T</italic><italic><sub>a</sub></italic>(<italic>k</italic>)|, which determines how informative a sample is about <italic>a</italic><sub>i</sub>) exceeds the threshold <italic>ξ</italic><sub>min</sub>. Otherwise, the last reliable estimate is retained, together with the covariance matrix, which prevents the covariance wind-up that exponential forgetting produces in the absence of excitation [<xref ref-type="bibr" rid="B6">6</xref>]. Two further remarks apply. First, since identification is restricted to <italic>u</italic><italic><sub>f</sub></italic> = 1, the regressors associated with <italic>b</italic> and <italic>e</italic> coincide in that regime and only their sum is identifiable; this does not affect <inline-formula><mml:math display="inline"><mml:mover accent="true"><mml:mi> a </mml:mi><mml:mo> ^ </mml:mo></mml:mover></mml:math></inline-formula> and hence does not affect Equation (5). Second, a projection constraint keeps the estimate inside the admissible set <inline-formula><mml:math display="inline"><mml:mrow><mml:msub><mml:mi> a </mml:mi><mml:mrow><mml:mi> min </mml:mi></mml:mrow></mml:msub><mml:mo> ≤ </mml:mo><mml:mover accent="true"><mml:mi> a </mml:mi><mml:mo> ^ </mml:mo></mml:mover><mml:mo> ≤ </mml:mo><mml:msub><mml:mi> a </mml:mi><mml:mrow><mml:mi> max </mml:mi></mml:mrow></mml:msub><mml:mo> &lt; </mml:mo><mml:mn> 1 </mml:mn></mml:mrow></mml:math></inline-formula> , equivalent to <inline-formula><mml:math display="inline"><mml:mrow><mml:msub><mml:mi> k </mml:mi><mml:mrow><mml:mi> c </mml:mi><mml:mo> , </mml:mo><mml:mi> min </mml:mi></mml:mrow></mml:msub><mml:mo> ≤ </mml:mo><mml:msub><mml:mover accent="true"><mml:mi> k </mml:mi><mml:mo> ^ </mml:mo></mml:mover><mml:mi> c </mml:mi></mml:msub><mml:mo> ≤ </mml:mo><mml:msub><mml:mi> k </mml:mi><mml:mrow><mml:mi> c </mml:mi><mml:mo> , </mml:mo><mml:mi> max </mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> , which excludes the physically meaningless values that noise or short invalid packets could otherwise produce. The initial estimate, the initial covariance matrix, the threshold <italic>ξ</italic><sub>min</sub> and the projection limits used in the simulation are given with the other simulation settings in Section 5.</p>
      </sec>
      <sec id="sec4dot3">
        <title>4.3. Measurement Validation, Adaptive Sensor Fusion and Risk Index</title>
        <p>Each received measurement passes three checks, and the validity flag of node <italic>i</italic> is their product:</p>
        <disp-formula id="FD12">
          <label>(12)</label>
          <mml:math>
            <mml:mrow>
              <mml:msub>
                <mml:mi>v</mml:mi>
                <mml:mi>i</mml:mi>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:msubsup>
                <mml:mi>v</mml:mi>
                <mml:mi>i</mml:mi>
                <mml:mrow>
                  <mml:mtext>to</mml:mtext>
                </mml:mrow>
              </mml:msubsup>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>⋅</mml:mo>
              <mml:msubsup>
                <mml:mi>v</mml:mi>
                <mml:mi>i</mml:mi>
                <mml:mrow>
                  <mml:mtext>rg</mml:mtext>
                </mml:mrow>
              </mml:msubsup>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>⋅</mml:mo>
              <mml:msubsup>
                <mml:mi>v</mml:mi>
                <mml:mi>i</mml:mi>
                <mml:mrow>
                  <mml:mtext>jp</mml:mtext>
                </mml:mrow>
              </mml:msubsup>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>where <inline-formula><mml:math display="inline"><mml:mrow><mml:msubsup><mml:mi> v </mml:mi><mml:mi> i </mml:mi><mml:mrow><mml:mtext> to </mml:mtext></mml:mrow></mml:msubsup><mml:mo> = </mml:mo><mml:mn> 1 </mml:mn></mml:mrow></mml:math></inline-formula> if the last packet of the node is not older than the timeout <italic>τ</italic><sub>to</sub>, <inline-formula><mml:math display="inline"><mml:mrow><mml:msubsup><mml:mi> v </mml:mi><mml:mi> i </mml:mi><mml:mrow><mml:mtext> rg </mml:mtext></mml:mrow></mml:msubsup><mml:mo> = </mml:mo><mml:mn> 1 </mml:mn></mml:mrow></mml:math></inline-formula> if temperature and relative humidity lie within their admissible ranges, and <inline-formula><mml:math display="inline"><mml:mrow><mml:msubsup><mml:mi> v </mml:mi><mml:mi> i </mml:mi><mml:mrow><mml:mtext> jp </mml:mtext></mml:mrow></mml:msubsup><mml:mo> = </mml:mo><mml:mn> 1 </mml:mn></mml:mrow></mml:math></inline-formula> if the increment between consecutive samples does not exceed the admissible jump. The set of active nodes and its cardinality are</p>
        <disp-formula id="FD13">
          <label>(13)</label>
          <mml:math>
            <mml:mrow>
              <mml:mi>A</mml:mi>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:mrow>
                <mml:mo>{</mml:mo>
                <mml:mrow>
                  <mml:mi>i</mml:mi>
                  <mml:mo>:</mml:mo>
                  <mml:msub>
                    <mml:mi>v</mml:mi>
                    <mml:mi>i</mml:mi>
                  </mml:msub>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>k</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                  <mml:mo>=</mml:mo>
                  <mml:mn>1</mml:mn>
                </mml:mrow>
                <mml:mo>}</mml:mo>
              </mml:mrow>
              <mml:mo>,</mml:mo>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:msub>
                <mml:mi>N</mml:mi>
                <mml:mi>A</mml:mi>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:mrow>
                <mml:mo>|</mml:mo>
                <mml:mrow>
                  <mml:mi>A</mml:mi>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>k</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
                <mml:mo>|</mml:mo>
              </mml:mrow>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>and the fused thermal state is computed from active nodes only:</p>
        <disp-formula id="FD14">
          <label>(14)</label>
          <mml:math>
            <mml:mrow>
              <mml:msub>
                <mml:mi>T</mml:mi>
                <mml:mrow>
                  <mml:mtext>max</mml:mtext>
                </mml:mrow>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:msub>
                <mml:mrow>
                  <mml:mtext>max</mml:mtext>
                </mml:mrow>
                <mml:mrow>
                  <mml:mi>i</mml:mi>
                  <mml:mo>∈</mml:mo>
                  <mml:mi>A</mml:mi>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>k</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
              </mml:msub>
              <mml:msub>
                <mml:mi>T</mml:mi>
                <mml:mi>i</mml:mi>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>,</mml:mo>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:mover accent="true">
                <mml:mi>T</mml:mi>
                <mml:mo>¯</mml:mo>
              </mml:mover>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:mfrac>
                <mml:mn>1</mml:mn>
                <mml:mrow>
                  <mml:msub>
                    <mml:mi>N</mml:mi>
                    <mml:mi>A</mml:mi>
                  </mml:msub>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>k</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
              </mml:mfrac>
              <mml:mstyle displaystyle="true">
                <mml:msub>
                  <mml:mo>∑</mml:mo>
                  <mml:mrow>
                    <mml:mi>i</mml:mi>
                    <mml:mo>∈</mml:mo>
                    <mml:mi>A</mml:mi>
                    <mml:mrow>
                      <mml:mo>(</mml:mo>
                      <mml:mi>k</mml:mi>
                      <mml:mo>)</mml:mo>
                    </mml:mrow>
                  </mml:mrow>
                </mml:msub>
                <mml:mrow>
                  <mml:msub>
                    <mml:mi>T</mml:mi>
                    <mml:mi>i</mml:mi>
                  </mml:msub>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>k</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
              </mml:mstyle>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>The maximum is used for threshold decisions, so that a local hot spot is not masked by averaging; the mean characterises the general state of the stack. The loss of nodes is expressed by a separate information-uncertainty index,</p>
        <disp-formula id="FD15">
          <label>(15)</label>
          <mml:math>
            <mml:mrow>
              <mml:msub>
                <mml:mi>U</mml:mi>
                <mml:mi>I</mml:mi>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:mn>1</mml:mn>
              <mml:mo>−</mml:mo>
              <mml:mfrac>
                <mml:mrow>
                  <mml:msub>
                    <mml:mi>N</mml:mi>
                    <mml:mi>A</mml:mi>
                  </mml:msub>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>k</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
                <mml:mi>N</mml:mi>
              </mml:mfrac>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>If <italic>N</italic><italic><sub>A</sub></italic> falls below a predefined minimum <italic>N</italic><sub>min</sub>, automatic control is restricted, because the hottest zone may be precisely the one whose node is disconnected. In this way information uncertainty is kept separate from process risk. The case in which the lost node is the critical one while <italic>N</italic><italic><sub>A</sub></italic> ≥ <italic>N</italic><sub>min</sub> is treated separately in Section 6.5.</p>
        <p>The technological risk index combines normalised temperature, humidity, rate of temperature rise and the difference between internal and external conditions:</p>
        <disp-formula id="FD16">
          <label>(16)</label>
          <mml:math>
            <mml:mrow>
              <mml:msub>
                <mml:mi>R</mml:mi>
                <mml:mi>q</mml:mi>
              </mml:msub>
              <mml:mo>=</mml:mo>
              <mml:msub>
                <mml:mi>w</mml:mi>
                <mml:mi>T</mml:mi>
              </mml:msub>
              <mml:msub>
                <mml:mi>q</mml:mi>
                <mml:mi>T</mml:mi>
              </mml:msub>
              <mml:mo>+</mml:mo>
              <mml:msub>
                <mml:mi>w</mml:mi>
                <mml:mi>W</mml:mi>
              </mml:msub>
              <mml:msub>
                <mml:mi>q</mml:mi>
                <mml:mi>W</mml:mi>
              </mml:msub>
              <mml:mo>+</mml:mo>
              <mml:msub>
                <mml:mi>w</mml:mi>
                <mml:mi>r</mml:mi>
              </mml:msub>
              <mml:msub>
                <mml:mi>q</mml:mi>
                <mml:mi>r</mml:mi>
              </mml:msub>
              <mml:mo>+</mml:mo>
              <mml:msub>
                <mml:mi>w</mml:mi>
                <mml:mi>Δ</mml:mi>
              </mml:msub>
              <mml:msub>
                <mml:mi>q</mml:mi>
                <mml:mi>Δ</mml:mi>
              </mml:msub>
              <mml:mo>+</mml:mo>
              <mml:msub>
                <mml:mi>w</mml:mi>
                <mml:mrow>
                  <mml:mi>T</mml:mi>
                  <mml:mi>W</mml:mi>
                </mml:mrow>
              </mml:msub>
              <mml:msub>
                <mml:mi>q</mml:mi>
                <mml:mi>T</mml:mi>
              </mml:msub>
              <mml:msub>
                <mml:mi>q</mml:mi>
                <mml:mi>W</mml:mi>
              </mml:msub>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <disp-formula id="FD17">
          <label>(17)</label>
          <mml:math>
            <mml:mrow>
              <mml:msub>
                <mml:mi>q</mml:mi>
                <mml:mi>j</mml:mi>
              </mml:msub>
              <mml:mo>=</mml:mo>
              <mml:mtext>min</mml:mtext>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mrow>
                  <mml:mn>1</mml:mn>
                  <mml:mo>,</mml:mo>
                  <mml:mtext>max</mml:mtext>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mrow>
                      <mml:mn>0</mml:mn>
                      <mml:mo>,</mml:mo>
                      <mml:mfrac>
                        <mml:mrow>
                          <mml:msub>
                            <mml:mi>x</mml:mi>
                            <mml:mi>j</mml:mi>
                          </mml:msub>
                          <mml:mo>−</mml:mo>
                          <mml:msubsup>
                            <mml:mi>x</mml:mi>
                            <mml:mi>j</mml:mi>
                            <mml:mrow>
                              <mml:mtext>lo</mml:mtext>
                            </mml:mrow>
                          </mml:msubsup>
                        </mml:mrow>
                        <mml:mrow>
                          <mml:msubsup>
                            <mml:mi>x</mml:mi>
                            <mml:mi>j</mml:mi>
                            <mml:mrow>
                              <mml:mtext>hi</mml:mtext>
                            </mml:mrow>
                          </mml:msubsup>
                          <mml:mo>−</mml:mo>
                          <mml:msubsup>
                            <mml:mi>x</mml:mi>
                            <mml:mi>j</mml:mi>
                            <mml:mrow>
                              <mml:mtext>lo</mml:mtext>
                            </mml:mrow>
                          </mml:msubsup>
                        </mml:mrow>
                      </mml:mfrac>
                    </mml:mrow>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>,</mml:mo>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:mi>j</mml:mi>
              <mml:mo>∈</mml:mo>
              <mml:mrow>
                <mml:mo>{</mml:mo>
                <mml:mrow>
                  <mml:mi>T</mml:mi>
                  <mml:mo>,</mml:mo>
                  <mml:mi>W</mml:mi>
                  <mml:mo>,</mml:mo>
                  <mml:mi>r</mml:mi>
                  <mml:mo>,</mml:mo>
                  <mml:mi>Δ</mml:mi>
                </mml:mrow>
                <mml:mo>}</mml:mo>
              </mml:mrow>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>where <italic>x</italic><italic><sub>j</sub></italic> is the corresponding physical quantity and <inline-formula><mml:math display="inline"><mml:mrow><mml:mrow><mml:mo> [ </mml:mo><mml:mrow><mml:msubsup><mml:mi> x </mml:mi><mml:mi> j </mml:mi><mml:mrow><mml:mtext> lo </mml:mtext></mml:mrow></mml:msubsup><mml:mo> , </mml:mo><mml:msubsup><mml:mi> x </mml:mi><mml:mi> j </mml:mi><mml:mrow><mml:mtext> hi </mml:mtext></mml:mrow></mml:msubsup></mml:mrow><mml:mo> ] </mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula> its normalisation interval. The bilinear term <italic>w</italic><italic><sub>TW</sub></italic><italic>q</italic><italic><sub>T</sub></italic><italic>q</italic><italic><sub>W</sub></italic> accounts for the non-linear amplification of risk when high temperature and high humidity occur simultaneously. The weights are assigned initial values for simulation and must be calibrated against experimental quality and thermal-response data.</p>
        <p>The inputs of Equation (16) are formed from the active nodes only. Because the SHT21 nodes measure the relative humidity of the air in the stack and not the moisture content of the cotton, the humidity input is the measured air relative humidity, used as a proxy for the humidity-related state <italic>W</italic>: <inline-formula><mml:math display="inline"><mml:mrow><mml:msub><mml:mi> x </mml:mi><mml:mi> W </mml:mi></mml:msub><mml:mrow><mml:mo> ( </mml:mo><mml:mi> k </mml:mi><mml:mo> ) </mml:mo></mml:mrow><mml:mo> = </mml:mo><mml:msub><mml:mrow><mml:mi> max </mml:mi></mml:mrow><mml:mrow><mml:mi> i </mml:mi><mml:mo> ∈ </mml:mo><mml:mi> A </mml:mi><mml:mrow><mml:mo> ( </mml:mo><mml:mi> k </mml:mi><mml:mo> ) </mml:mo></mml:mrow></mml:mrow></mml:msub><mml:mi> R </mml:mi><mml:msub><mml:mi> H </mml:mi><mml:mi> i </mml:mi></mml:msub><mml:mrow><mml:mo> ( </mml:mo><mml:mi> k </mml:mi><mml:mo> ) </mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula> . The temperature input is <italic>x</italic><italic><sub>T</sub></italic>(<italic>k</italic>) = <italic>T</italic><sub>max</sub>(<italic>k</italic>) from Equation (14); the rate input is the largest rate of rise among the active nodes, <inline-formula><mml:math display="inline"><mml:mrow><mml:msub><mml:mi> x </mml:mi><mml:mi> r </mml:mi></mml:msub><mml:mrow><mml:mo> ( </mml:mo><mml:mi> k </mml:mi><mml:mo> ) </mml:mo></mml:mrow><mml:mo> = </mml:mo><mml:msub><mml:mrow><mml:mi> max </mml:mi></mml:mrow><mml:mrow><mml:mi> i </mml:mi><mml:mo> ∈ </mml:mo><mml:mi> A </mml:mi><mml:mrow><mml:mo> ( </mml:mo><mml:mi> k </mml:mi><mml:mo> ) </mml:mo></mml:mrow></mml:mrow></mml:msub><mml:mrow><mml:mrow><mml:mrow><mml:mo> [ </mml:mo><mml:mrow><mml:msub><mml:mi> T </mml:mi><mml:mi> i </mml:mi></mml:msub><mml:mrow><mml:mo> ( </mml:mo><mml:mi> k </mml:mi><mml:mo> ) </mml:mo></mml:mrow><mml:mo> − </mml:mo><mml:msub><mml:mi> T </mml:mi><mml:mi> i </mml:mi></mml:msub><mml:mrow><mml:mo> ( </mml:mo><mml:mrow><mml:mi> k </mml:mi><mml:mo> − </mml:mo><mml:mi> m </mml:mi></mml:mrow><mml:mo> ) </mml:mo></mml:mrow></mml:mrow><mml:mo> ] </mml:mo></mml:mrow></mml:mrow><mml:mo> / </mml:mo><mml:mrow><mml:mrow><mml:mo> ( </mml:mo><mml:mrow><mml:mi> m </mml:mi><mml:msub><mml:mi> T </mml:mi><mml:mi> s </mml:mi></mml:msub></mml:mrow><mml:mo> ) </mml:mo></mml:mrow></mml:mrow></mml:mrow></mml:mrow></mml:math></inline-formula> , evaluated over a window of <italic>m</italic> samples to suppress noise; and the internal-external difference is <italic>x</italic><sub>Δ</sub>(<italic>k</italic>) = <italic>T</italic><sub>max</sub>(<italic>k</italic>) − <italic>T</italic><italic><sub>a</sub></italic>(<italic>k</italic>). Taking the maximum of each input over the active nodes is conservative: the inputs may come from different nodes, but a single critical zone cannot be hidden. The weights, normalisation intervals and decision thresholds used in the simulation are given with the other simulation settings in Section 5. They are assumed settings and not calibrated results; the weights sum to one, so that <italic>R</italic><italic><sub>q</sub></italic> [0, 1].</p>
      </sec>
      <sec id="sec4dot4">
        <title>4.4. Supervisory State Machine</title>
        <p>The supervisory controller is a finite-state machine with six principal states (<bold>Table 2</bold>). In MOVING_FORWARD the ventilation contactor is disabled, and in FAN_RUNNING the stepper pulses are blocked; this mutual exclusion prevents simultaneous commands that could create unsafe actuator conflicts.</p>
        <p>Table 2. States of the supervisory state machine.</p>
        <table-wrap id="tbl2">
          <label>Table 2</label>
          <table>
            <tbody>
              <tr>
                <td>
                  <bold>State</bold>
                </td>
                <td>
                  <bold>Actuator outputs</bold>
                </td>
                <td>
                  <bold>Exit condition → next state</bold>
                </td>
              </tr>
              <tr>
                <td>IDLE</td>
                <td>Fan off; STEP pulses disabled</td>
                <td>
                  Ventilation request in automatic mode → MOVING
                  <sub>FORWARD</sub>
                </td>
              </tr>
              <tr>
                <td>
                  MOVING
                  <sub>FORWARD</sub>
                </td>
                <td>STEP/DIR forward; fan contactor disabled</td>
                <td>
                  Limit sensor DS-438 active → FAN
                  <sub>RUNNING</sub>
                  ; movement timeout → FAULT
                </td>
              </tr>
              <tr>
                <td>
                  FAN
                  <sub>RUNNING</sub>
                </td>
                <td>Fan contactor on; STEP pulses blocked</td>
                <td>
                  Stop condition, Equation (19) → R1
                  <sub>RESET</sub>
                </td>
              </tr>
              <tr>
                <td>
                  R1
                  <sub>RESET</sub>
                </td>
                <td>Two-second reset sequence</td>
                <td>
                  Reset interval elapsed → MOVING
                  <sub>REVERSE</sub>
                </td>
              </tr>
              <tr>
                <td>
                  MOVING
                  <sub>REVERSE</sub>
                </td>
                <td>STEP/DIR reverse; fan off</td>
                <td>0.5 m travelled → IDLE; movement timeout → FAULT</td>
              </tr>
              <tr>
                <td>FAULT</td>
                <td>STEP pulses disabled; fan off</td>
                <td>—</td>
              </tr>
            </tbody>
          </table>
        </table-wrap>
        <p>In automatic mode, ventilation is requested when at least one valid sensor exceeds the temperature threshold or when the risk index exceeds its decision boundary:</p>
        <disp-formula id="FD18">
          <label>(18)</label>
          <mml:math>
            <mml:mrow>
              <mml:msub>
                <mml:mi>s</mml:mi>
                <mml:mrow>
                  <mml:mtext>on</mml:mtext>
                </mml:mrow>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:mrow>
                <mml:mo>[</mml:mo>
                <mml:mrow>
                  <mml:msub>
                    <mml:mi>T</mml:mi>
                    <mml:mrow>
                      <mml:mtext>max</mml:mtext>
                    </mml:mrow>
                  </mml:msub>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>k</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                  <mml:mo>≥</mml:mo>
                  <mml:msub>
                    <mml:mi>T</mml:mi>
                    <mml:mrow>
                      <mml:mtext>on</mml:mtext>
                    </mml:mrow>
                  </mml:msub>
                </mml:mrow>
                <mml:mo>]</mml:mo>
              </mml:mrow>
              <mml:mo>∨</mml:mo>
              <mml:mrow>
                <mml:mo>[</mml:mo>
                <mml:mrow>
                  <mml:msub>
                    <mml:mi>R</mml:mi>
                    <mml:mi>q</mml:mi>
                  </mml:msub>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>k</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                  <mml:mo>≥</mml:mo>
                  <mml:msub>
                    <mml:mi>R</mml:mi>
                    <mml:mrow>
                      <mml:mtext>on</mml:mtext>
                    </mml:mrow>
                  </mml:msub>
                </mml:mrow>
                <mml:mo>]</mml:mo>
              </mml:mrow>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>Ventilation is stopped only after all active sensors have returned below the lower hysteresis boundary, the minimum ventilation time has elapsed and no critical humidity condition remains:</p>
        <disp-formula id="FD19">
          <label>(19)</label>
          <mml:math>
            <mml:mrow>
              <mml:msub>
                <mml:mi>s</mml:mi>
                <mml:mrow>
                  <mml:mtext>off</mml:mtext>
                </mml:mrow>
              </mml:msub>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mi>k</mml:mi>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:mo>=</mml:mo>
              <mml:mrow>
                <mml:mo>[</mml:mo>
                <mml:mrow>
                  <mml:msub>
                    <mml:mi>T</mml:mi>
                    <mml:mrow>
                      <mml:mi>max</mml:mi>
                    </mml:mrow>
                  </mml:msub>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>k</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                  <mml:mo>≤</mml:mo>
                  <mml:msub>
                    <mml:mi>T</mml:mi>
                    <mml:mrow>
                      <mml:mtext>on</mml:mtext>
                    </mml:mrow>
                  </mml:msub>
                  <mml:mo>−</mml:mo>
                  <mml:mi>Δ</mml:mi>
                  <mml:msub>
                    <mml:mi>T</mml:mi>
                    <mml:mi>h</mml:mi>
                  </mml:msub>
                </mml:mrow>
                <mml:mo>]</mml:mo>
              </mml:mrow>
              <mml:mo>∧</mml:mo>
              <mml:mrow>
                <mml:mo>[</mml:mo>
                <mml:mrow>
                  <mml:msub>
                    <mml:mi>t</mml:mi>
                    <mml:mi>f</mml:mi>
                  </mml:msub>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>k</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                  <mml:mo>≥</mml:mo>
                  <mml:msub>
                    <mml:mi>t</mml:mi>
                    <mml:mrow>
                      <mml:mtext>on</mml:mtext>
                      <mml:mo>,</mml:mo>
                      <mml:mi>min</mml:mi>
                    </mml:mrow>
                  </mml:msub>
                </mml:mrow>
                <mml:mo>]</mml:mo>
              </mml:mrow>
              <mml:mo>∧</mml:mo>
              <mml:mrow>
                <mml:mo>[</mml:mo>
                <mml:mrow>
                  <mml:msub>
                    <mml:mi>q</mml:mi>
                    <mml:mi>W</mml:mi>
                  </mml:msub>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mi>k</mml:mi>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                  <mml:mo>&lt;</mml:mo>
                  <mml:msub>
                    <mml:mi>q</mml:mi>
                    <mml:mrow>
                      <mml:mi>W</mml:mi>
                      <mml:mo>,</mml:mo>
                      <mml:mtext>cr</mml:mtext>
                    </mml:mrow>
                  </mml:msub>
                </mml:mrow>
                <mml:mo>]</mml:mo>
              </mml:mrow>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>where Δ<italic>T</italic><italic><sub>h</sub></italic> is the hysteresis width, <italic>t</italic><italic><sub>f</sub></italic> the elapsed running time of the fan and <italic>q</italic><italic><sub>W</sub></italic><sub>,cr</sub> the critical level of normalised humidity. Hysteresis and minimum ON/OFF times prevent excessive cycling of the contactor. E-STOP and overload protection are implemented in the hardware power circuit, independently of the software state machine.</p>
        <p>The role of the RLS estimate in this loop is stated explicitly. In the configuration evaluated in this paper the estimate <inline-formula><mml:math display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi> k </mml:mi><mml:mo> ^ </mml:mo></mml:mover><mml:mi> c </mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> does not modify any supervisory setting (<italic>T</italic><sub>on</sub>, Δ<italic>T</italic><italic><sub>h</sub></italic>, <italic>R</italic><sub>on</sub>, <italic>q</italic><italic><sub>W</sub></italic><sub>,cr</sub> and the minimum ON/OFF times) and does not enter the actuator commands: <italic>u</italic><italic><sub>f</sub></italic> and <italic>u</italic><italic><sub>m</sub></italic> are determined only by Equations (18) and (19) and by the transitions of <bold>Table 2</bold><bold>.</bold> RLS is therefore used for adaptive identification and diagnosis. It keeps the channel model of Equation (4) consistent with the current state of the object and provides the indicator <inline-formula><mml:math display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi> k </mml:mi><mml:mo> ^ </mml:mo></mml:mover><mml:mi> c </mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> , which is displayed on the HMI together with its nominal value <italic>k</italic><italic><sub>c</sub></italic><sub>,nom</sub>. When the relative drop <inline-formula><mml:math display="inline"><mml:mrow><mml:mi> D </mml:mi><mml:mrow><mml:mo> ( </mml:mo><mml:mi> k </mml:mi><mml:mo> ) </mml:mo></mml:mrow><mml:mo> = </mml:mo><mml:mn> 1 </mml:mn><mml:mo> − </mml:mo><mml:mrow><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi> k </mml:mi><mml:mo> ^ </mml:mo></mml:mover><mml:mi> c </mml:mi></mml:msub><mml:mrow><mml:mo> ( </mml:mo><mml:mi> k </mml:mi><mml:mo> ) </mml:mo></mml:mrow></mml:mrow><mml:mo> / </mml:mo><mml:mrow><mml:msub><mml:mi> k </mml:mi><mml:mrow><mml:mi> c </mml:mi><mml:mo> , </mml:mo><mml:mtext> nom </mml:mtext></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:mrow></mml:math></inline-formula> remains above the threshold <italic>D</italic><sub>al</sub> for longer than the estimator memory <italic>N</italic><italic><sub>λ</sub></italic><italic>T</italic><italic><sub>s</sub></italic>, a “reduced ventilation effectiveness” warning is sent to the operator; this warning does not change the control sequence. Using <inline-formula><mml:math display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi> k </mml:mi><mml:mo> ^ </mml:mo></mml:mover><mml:mi> c </mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> to adapt the minimum ventilation time or, with a VFD, to compute a continuous fan-speed reference is a possible extension that is not evaluated here.</p>
      </sec>
      <sec id="sec4dot5">
        <title>4.5. Mobile Mechatronic Positioning</title>
        <p>The platform is moved by a stepper drive with STEP/DIR control through a reduction stage. The number of pulses per metre of travel and the linear resolution are</p>
        <disp-formula id="FD20">
          <label>(20)</label>
          <mml:math>
            <mml:mrow>
              <mml:msub>
                <mml:mi>n</mml:mi>
                <mml:mi>p</mml:mi>
              </mml:msub>
              <mml:mo>=</mml:mo>
              <mml:mfrac>
                <mml:mrow>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mrow>
                      <mml:mrow>
                        <mml:mrow>
                          <mml:mn>360</mml:mn>
                          <mml:mo>˚</mml:mo>
                        </mml:mrow>
                        <mml:mo>/</mml:mo>
                        <mml:mrow>
                          <mml:msub>
                            <mml:mi>α</mml:mi>
                            <mml:mi>s</mml:mi>
                          </mml:msub>
                        </mml:mrow>
                      </mml:mrow>
                    </mml:mrow>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                  <mml:msub>
                    <mml:mi>m</mml:mi>
                    <mml:mi>μ</mml:mi>
                  </mml:msub>
                  <mml:msub>
                    <mml:mi>i</mml:mi>
                    <mml:mi>r</mml:mi>
                  </mml:msub>
                </mml:mrow>
                <mml:mrow>
                  <mml:mn>2</mml:mn>
                  <mml:mi>π</mml:mi>
                  <mml:msub>
                    <mml:mi>r</mml:mi>
                    <mml:mi>w</mml:mi>
                  </mml:msub>
                </mml:mrow>
              </mml:mfrac>
              <mml:mo>,</mml:mo>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:msub>
                <mml:mi>δ</mml:mi>
                <mml:mi>x</mml:mi>
              </mml:msub>
              <mml:mo>=</mml:mo>
              <mml:mfrac>
                <mml:mn>1</mml:mn>
                <mml:mrow>
                  <mml:msub>
                    <mml:mi>n</mml:mi>
                    <mml:mi>p</mml:mi>
                  </mml:msub>
                </mml:mrow>
              </mml:mfrac>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>where <italic>α</italic><italic><sub>s</sub></italic> is the step angle, <italic>m</italic><italic><sub>μ</sub></italic> the microstepping division, <italic>i</italic><italic><sub>r</sub></italic> the reduction ratio and <italic>r</italic><italic><sub>w</sub></italic> the wheel radius. With <italic>α</italic><italic><sub>s</sub></italic> = 1.8˚, <italic>m</italic><italic><sub>μ</sub></italic> = 8, <italic>i</italic><italic><sub>r</sub></italic> = 6 and <italic>r</italic><italic><sub>w</sub></italic> = 0.10 m, Equation (20) gives <italic>n</italic><italic><sub>p</sub></italic> ≈ 15,279 pulses/m and <italic>δ</italic><italic><sub>x</sub></italic> ≈ 0.065 mm, so that the 0.5 m reverse movement corresponds to approximately 7639 pulses. The actuator moves the platform to the DS-438 limit sensor, after which ventilation is performed; when the thermal condition of Equation (19) is satisfied, the 0.5 m reverse movement is commanded.</p>
        <p>Motion without loss of steps requires the tractive force at the wheel to exceed the resistance force with a reserve <italic>κ</italic>:</p>
        <disp-formula id="FD21">
          <label>(21)</label>
          <mml:math>
            <mml:mrow>
              <mml:msub>
                <mml:mi>F</mml:mi>
                <mml:mi>t</mml:mi>
              </mml:msub>
              <mml:mo>=</mml:mo>
              <mml:mfrac>
                <mml:mrow>
                  <mml:mi>η</mml:mi>
                  <mml:msub>
                    <mml:mi>i</mml:mi>
                    <mml:mi>r</mml:mi>
                  </mml:msub>
                  <mml:msub>
                    <mml:mi>M</mml:mi>
                    <mml:mi>m</mml:mi>
                  </mml:msub>
                </mml:mrow>
                <mml:mrow>
                  <mml:msub>
                    <mml:mi>r</mml:mi>
                    <mml:mi>w</mml:mi>
                  </mml:msub>
                </mml:mrow>
              </mml:mfrac>
              <mml:mo>≥</mml:mo>
              <mml:mrow>
                <mml:mo>(</mml:mo>
                <mml:mrow>
                  <mml:mn>1</mml:mn>
                  <mml:mo>+</mml:mo>
                  <mml:mi>κ</mml:mi>
                </mml:mrow>
                <mml:mo>)</mml:mo>
              </mml:mrow>
              <mml:msub>
                <mml:mi>F</mml:mi>
                <mml:mi>r</mml:mi>
              </mml:msub>
              <mml:mo>,</mml:mo>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:mtext>
                 
              </mml:mtext>
              <mml:msub>
                <mml:mi>F</mml:mi>
                <mml:mi>r</mml:mi>
              </mml:msub>
              <mml:mo>=</mml:mo>
              <mml:msub>
                <mml:mi>f</mml:mi>
                <mml:mi>r</mml:mi>
              </mml:msub>
              <mml:mi>m</mml:mi>
              <mml:mi>g</mml:mi>
              <mml:mo>+</mml:mo>
              <mml:msub>
                <mml:mi>F</mml:mi>
                <mml:mrow>
                  <mml:mtext>add</mml:mtext>
                </mml:mrow>
              </mml:msub>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>where <italic>M</italic><italic><sub>m</sub></italic> is the available motor torque at the operating speed, <italic>η</italic> = 0.85 the efficiency of the reduction stage, <italic>f</italic><italic><sub>r</sub></italic> the rolling-resistance coefficient, <italic>m</italic> = 290 kg the platform mass (weight ≈ 2.84 kN) and <italic>F</italic><sub>add</sub> the additional resistance caused by floor irregularity and cable drag. Under the adopted assumptions the design calculation gives a traction reserve of <italic>κ</italic> ≈ 16% for the 1:6 reduction. This ratio is not claimed to guarantee motion under all real floor conditions: the actual normal load, floor irregularity, cable drag and position of the centre of mass can change the available traction materially, and an experimental comparison of the 1:6, 1:7 and 1:8 ratios is therefore part of the validation plan (Section 7).</p>
      </sec>
    </sec>
    <sec id="sec5">
      <title>5. MATLAB/Simulink Model and Simulation Design</title>
      <p>The simulation model contains eight first-order thermal channels with non-identical initial conditions, sensor noise and packet loss; the external environment; a fan and induction-motor subsystem; a stepper-drive and cart-position subsystem; contactor delay; RLS identification; the state-machine logic; and fault handling. Its channel-level structure is shown in <xref ref-type="fig" rid="fig1">Figure 1</xref>.</p>
      <fig id="fig1">
        <label>Figure 1</label>
        <graphic xlink:href="https://html.scirp.org/file/7900809-rId91.jpeg?20261023012120" />
      </fig>
      <p>Figure 1. Functional structure of the MATLAB/Simulink model.</p>
      <p>The ventilation channel is represented by the cascade <italic>W</italic><italic><sub>f</sub></italic><sub>1</sub>(<italic>p</italic>) = 1/(0.8<italic>p</italic> + 1), <italic>W</italic><italic><sub>f</sub></italic><sub>2</sub>(<italic>p</italic>) = 16/(1.2<italic>p</italic> + 1) and <italic>W</italic><italic><sub>f</sub></italic><sub>3</sub>(<italic>p</italic>) = 12/(8.5<italic>p</italic><sup>2</sup> + 5.8<italic>p</italic> + 1) followed by a transport delay, and the positioning channel by <italic>W</italic><italic><sub>m</sub></italic><sub>1</sub>(<italic>p</italic>) = 1/(<italic>p</italic> + 1), <italic>W</italic><italic><sub>m</sub></italic><sub>2</sub>(<italic>p</italic>) = 0.8/(1.2<italic>p</italic> + 1) and <italic>W</italic><italic><sub>m</sub></italic><sub>3</sub>(<italic>p</italic>) = 1.8/(3.988<italic>p</italic><sup>2</sup> + 3.99<italic>p</italic> + 1) followed by a transport delay and the non-linearity of the DS-438 limit sensor. Both second-order links are practically critically damped (damping ratios of approximately 0.995 and 1.00), so that the channel responses are aperiodic. The two loops are switched on and off through the relay logic R1, R2 and the automatic/manual mode selector. The RLS block runs in parallel with the thermal loop and, as explained in Section 4.4, updates the channel model and the diagnostic indicator without modifying the switching commands.</p>
      <p>Two time scales are separated in the model, as in the prototype. Thermal dynamics are sampled with a period of the order of seconds, whereas stepper pulse generation is handled separately, so that the web server and communication tasks do not determine STEP timing. The settings needed to reproduce the simulations are listed in <bold>Table 3</bold> together with their status. In all simulations reported in Section 6 the thermal sampling period is <italic>T</italic><italic><sub>s</sub></italic> = 2 s. The thermal coefficients of the eight channels are not measured quantities: they are assumed values of the virtual object, chosen to give a nominal ventilated time constant of approximately 10 min, and they will be replaced by coefficients identified on the real stack (Section 7). Measurement noise is modelled as zero-mean white Gaussian noise added independently to every node and sample, with standard deviations chosen from the accuracy and repeatability data of the SHT21 sensor [<xref ref-type="bibr" rid="B12">12</xref>]; packet loss is modelled as an independent Bernoulli event per node and sample, a lost packet leaving the previous value in the buffer and advancing the timeout counter of Equation (12); and the transport delays of the ventilation, positioning and communication channels are modelled as pure time delays.</p>
      <p>Table 3. Initial parameters used in the simulation model.</p>
      <table-wrap id="tbl3">
        <label>Table 3</label>
        <table>
          <tbody>
            <tr>
              <td>
                <bold>Parameter</bold>
              </td>
              <td>
                <bold>Value</bold>
              </td>
              <td>
                <bold>Status</bold>
              </td>
            </tr>
            <tr>
              <td>
                Number of sensor nodes,
                <italic>N</italic>
              </td>
              <td>8</td>
              <td>Architecture</td>
            </tr>
            <tr>
              <td>
                Platform mass,
                <italic>m</italic>
              </td>
              <td>290 kg</td>
              <td>Device/model input</td>
            </tr>
            <tr>
              <td>
                Wheel radius,
                <italic>r</italic>
                <italic>
                  <sub>w</sub>
                </italic>
              </td>
              <td>0.10 m</td>
              <td>Constructive value</td>
            </tr>
            <tr>
              <td>
                Reduction ratio,
                <italic>i</italic>
                <italic>
                  <sub>r</sub>
                </italic>
              </td>
              <td>1:6</td>
              <td>Calculated initial choice</td>
            </tr>
            <tr>
              <td>
                Reduction efficiency,
                <italic>η</italic>
              </td>
              <td>0.85</td>
              <td>Assumed</td>
            </tr>
            <tr>
              <td>
                Step angle,
                <italic>α</italic>
                <italic>
                  <sub>s</sub>
                </italic>
              </td>
              <td>1.8˚</td>
              <td>Motor data</td>
            </tr>
            <tr>
              <td>
                Microstepping, 1/
                <italic>m</italic>
                <italic>
                  <sub>μ</sub>
                </italic>
              </td>
              <td>1/8</td>
              <td>Driver setting</td>
            </tr>
            <tr>
              <td>
                Temperature threshold,
                <italic>T</italic>
                <sub>on</sub>
              </td>
              <td>30˚C</td>
              <td>Initial control setting</td>
            </tr>
            <tr>
              <td>
                Hysteresis, Δ
                <italic>T</italic>
                <italic>
                  <sub>h</sub>
                </italic>
              </td>
              <td>2˚C</td>
              <td>Control requirement</td>
            </tr>
            <tr>
              <td>
                Node timeout,
                <italic>τ</italic>
                <sub>to</sub>
              </td>
              <td>10 s</td>
              <td>Initial setting</td>
            </tr>
            <tr>
              <td>
                RLS forgetting factor,
                <italic>λ</italic>
              </td>
              <td>0.995</td>
              <td>Simulation setting</td>
            </tr>
            <tr>
              <td>Reset interval</td>
              <td>2 s</td>
              <td>Control sequence</td>
            </tr>
            <tr>
              <td>Reverse distance</td>
              <td>0.5 m</td>
              <td>Technological requirement</td>
            </tr>
            <tr>
              <td>
                Sensor sampling period,
                <italic>T</italic>
                <italic>
                  <sub>s</sub>
                </italic>
              </td>
              <td>2 s (simulation); 1 - 2 s (prototype)</td>
              <td>Simulation setting; recommended for prototype</td>
            </tr>
            <tr>
              <td>
                Effective cooling coefficient,
                <italic>k</italic>
                <italic>
                  <sub>c</sub>
                </italic>
                <sub>,</sub>
                <italic>
                  <sub>i</sub>
                </italic>
                (S1, all nodes, fan on)
              </td>
              <td>
                0.098 min
                <sup>−1</sup>
                (
                <italic>τ</italic>
                ≈ 10.2 min)
              </td>
              <td>Assumed (virtual object)</td>
            </tr>
            <tr>
              <td>
                Natural (fan-off) coefficient,
                <italic>k</italic>
                <sub>0,</sub>
                <italic>
                  <sub>i</sub>
                </italic>
              </td>
              <td>
                0.008 min
                <sup>−1</sup>
              </td>
              <td>Assumed (virtual object)</td>
            </tr>
            <tr>
              <td>
                Ventilation coefficient,
                <italic>k</italic>
                <italic>
                  <sub>v</sub>
                </italic>
                <sub>,</sub>
                <italic>
                  <sub>i</sub>
                </italic>
                =
                <italic>k</italic>
                <italic>
                  <sub>c</sub>
                </italic>
                <sub>,</sub>
                <italic>
                  <sub>i</sub>
                </italic>
                −
                <italic>k</italic>
                <sub>0,</sub>
                <italic>
                  <sub>i</sub>
                </italic>
              </td>
              <td>
                0.090 min
                <sup>−1</sup>
              </td>
              <td>Assumed (virtual object)</td>
            </tr>
            <tr>
              <td>
                Humidity sensitivity
                <italic>γ</italic>
                <italic>
                  <sub>i</sub>
                </italic>
                ; internal heat term
                <italic>q</italic>
                <italic>
                  <sub>i</sub>
                </italic>
              </td>
              <td>
                0.001˚C·min
                <sup>−1</sup>
                ·%
                <sup>−1</sup>
                ;
                <italic>q</italic>
                <italic>
                  <sub>i</sub>
                </italic>
                = 0 except a heating episode of 0.45˚C - 0.85˚C/min (node-dependent) for 12 ≤
                <italic>t</italic>
                ≤ 22 min
              </td>
              <td>Assumed (virtual object)</td>
            </tr>
            <tr>
              <td>
                Ambient conditions,
                <italic>T</italic>
                <italic>
                  <sub>a</sub>
                </italic>
                ,
                <italic>RH</italic>
                <italic>
                  <sub>a</sub>
                </italic>
              </td>
              <td>17˚C; 60%</td>
              <td>Assumed (virtual object)</td>
            </tr>
            <tr>
              <td>Initial node temperatures (S1)</td>
              <td>35˚C - 44.5˚C</td>
              <td>Scenario setting</td>
            </tr>
            <tr>
              <td>
                Step change of
                <italic>k</italic>
                <italic>
                  <sub>c</sub>
                </italic>
                in the RLS test (Section 6.2)
              </td>
              <td>
                0.098 → 0.083 min
                <sup>−1</sup>
                at
                <italic>t</italic>
                = 15 min
              </td>
              <td>Scenario setting</td>
            </tr>
            <tr>
              <td>S2: cooling coefficients of the hot zones</td>
              <td>
                <italic>k</italic>
                <italic>
                  <sub>c</sub>
                </italic>
                = 0.078 and 0.085 min
                <sup>−1</sup>
                (nodes 3 and 6)
              </td>
              <td>Scenario setting</td>
            </tr>
            <tr>
              <td>S3: disconnection of the hottest node (node 1)</td>
              <td>
                5 ≤
                <italic>t</italic>
                ≤ 9 min; confirmation interval 60 s
              </td>
              <td>Scenario setting</td>
            </tr>
            <tr>
              <td>S4: implementation of the 30% loss of fan effectiveness</td>
              <td>
                gain of
                <italic>W</italic>
                <italic>
                  <sub>f</sub>
                </italic>
                <sub>2</sub>
                : 16 → 11.2 (−30%); resulting
                <italic>k</italic>
                <italic>
                  <sub>c</sub>
                </italic>
                <sub>,</sub>
                <italic>
                  <sub>i</sub>
                </italic>
                ≈ 0.057 min
                <sup>−1</sup>
              </td>
              <td>Scenario setting</td>
            </tr>
            <tr>
              <td>S5: movement resistance</td>
              <td>
                1.4
                <italic>F</italic>
                <italic>
                  <sub>r</sub>
                </italic>
              </td>
              <td>Scenario setting</td>
            </tr>
            <tr>
              <td>
                Temperature noise (white Gaussian),
                <italic>σ</italic>
                <italic>
                  <sub>T</sub>
                </italic>
              </td>
              <td>0.10˚C</td>
              <td>
                Assumed, based on sensor data [
                <xref ref-type="bibr" rid="B12">12</xref>
                ]
              </td>
            </tr>
            <tr>
              <td>
                Relative-humidity noise,
                <italic>σ</italic>
                <sub>RH</sub>
              </td>
              <td>1.0%</td>
              <td>
                Assumed, based on sensor data [
                <xref ref-type="bibr" rid="B12">12</xref>
                ]
              </td>
            </tr>
            <tr>
              <td>Packet-loss probability per node and sample</td>
              <td>0.02</td>
              <td>Assumed simulation setting</td>
            </tr>
            <tr>
              <td>Transport delay: ventilation/ positioning channel</td>
              <td>3 s/0.1 s</td>
              <td>Assumed simulation setting</td>
            </tr>
            <tr>
              <td>Contactor delay; wireless communication delay</td>
              <td>0.05 s; 0.1 s</td>
              <td>Assumed simulation setting</td>
            </tr>
            <tr>
              <td>
                Initial estimate
                <inline-formula>
                  <mml:math display="inline">
                    <mml:mrow>
                      <mml:mover accent="true">
                        <mml:mi>θ</mml:mi>
                        <mml:mo>^</mml:mo>
                      </mml:mover>
                      <mml:mrow>
                        <mml:mo>(</mml:mo>
                        <mml:mn>0</mml:mn>
                        <mml:mo>)</mml:mo>
                      </mml:mrow>
                    </mml:mrow>
                  </mml:math>
                </inline-formula>
              </td>
              <td>
                <inline-formula>
                  <mml:math display="inline">
                    <mml:mrow>
                      <mml:mover accent="true">
                        <mml:mi>a</mml:mi>
                        <mml:mo>^</mml:mo>
                      </mml:mover>
                      <mml:mrow>
                        <mml:mo>(</mml:mo>
                        <mml:mn>0</mml:mn>
                        <mml:mo>)</mml:mo>
                      </mml:mrow>
                    </mml:mrow>
                  </mml:math>
                </inline-formula>
                = exp(−0.060·
                <italic>T</italic>
                <italic>
                  <sub>s</sub>
                </italic>
                /60),
                <italic>i.e.</italic>
                <inline-formula>
                  <mml:math display="inline">
                    <mml:mrow>
                      <mml:msub>
                        <mml:mover accent="true">
                          <mml:mi>k</mml:mi>
                          <mml:mo>^</mml:mo>
                        </mml:mover>
                        <mml:mi>c</mml:mi>
                      </mml:msub>
                      <mml:mrow>
                        <mml:mo>(</mml:mo>
                        <mml:mn>0</mml:mn>
                        <mml:mo>)</mml:mo>
                      </mml:mrow>
                    </mml:mrow>
                  </mml:math>
                </inline-formula>
                = 0.060 min
                <sup>−1</sup>
                ; other entries 0
              </td>
              <td>Assumed simulation setting</td>
            </tr>
            <tr>
              <td>
                Initial covariance
                <italic>P</italic>
                (0)
              </td>
              <td>
                10
                <sup>3</sup>
                ·
                <italic>I</italic>
                <sub>5</sub>
              </td>
              <td>Assumed simulation setting</td>
            </tr>
            <tr>
              <td>
                Excitation threshold
                <italic>ξ</italic>
                <sub>min</sub>
              </td>
              <td>2˚C</td>
              <td>Assumed simulation setting</td>
            </tr>
            <tr>
              <td>
                Projection limits
                <italic>k</italic>
                <italic>
                  <sub>c</sub>
                </italic>
                <sub>,min</sub>
                ,
                <italic>k</italic>
                <italic>
                  <sub>c</sub>
                </italic>
                <sub>,max</sub>
              </td>
              <td>
                0.02; 0.30 min
                <sup>−1</sup>
              </td>
              <td>Assumed simulation setting</td>
            </tr>
            <tr>
              <td>
                Diagnostic warning threshold
                <italic>D</italic>
                <sub>al</sub>
              </td>
              <td>0.20</td>
              <td>Assumed simulation setting</td>
            </tr>
            <tr>
              <td>
                Risk weights
                <italic>w</italic>
                <italic>
                  <sub>T</sub>
                </italic>
                ,
                <italic>w</italic>
                <italic>
                  <sub>W</sub>
                </italic>
                ,
                <italic>w</italic>
                <italic>
                  <sub>r</sub>
                </italic>
                ,
                <italic>w</italic>
                <sub>Δ</sub>
                ,
                <italic>w</italic>
                <italic>
                  <sub>TW</sub>
                </italic>
              </td>
              <td>0.35, 0.20, 0.20, 0.10, 0.15</td>
              <td>Assumed simulation setting</td>
            </tr>
            <tr>
              <td>
                Normalisation interval of
                <italic>x</italic>
                <italic>
                  <sub>T</sub>
                </italic>
                (temperature)
              </td>
              <td>25˚C - 40˚C</td>
              <td>Assumed simulation setting</td>
            </tr>
            <tr>
              <td>
                Normalisation interval of
                <italic>x</italic>
                <italic>
                  <sub>W</sub>
                </italic>
                (air relative humidity)
              </td>
              <td>60% - 90%</td>
              <td>Assumed simulation setting</td>
            </tr>
            <tr>
              <td>
                Normalisation interval of
                <italic>x</italic>
                <italic>
                  <sub>r</sub>
                </italic>
                (rate of rise, window
                <italic>m</italic>
                )
              </td>
              <td>
                0 - 0.5˚C/min;
                <italic>m</italic>
                = 30
              </td>
              <td>Assumed simulation setting</td>
            </tr>
            <tr>
              <td>
                Normalisation interval of
                <italic>x</italic>
                <sub>Δ</sub>
                (internal-external difference)
              </td>
              <td>0 - 15˚C</td>
              <td>Assumed simulation setting</td>
            </tr>
            <tr>
              <td>
                Risk decision boundary
                <italic>R</italic>
                <sub>on</sub>
                ; critical humidity
                <italic>q</italic>
                <italic>
                  <sub>W</sub>
                </italic>
                <sub>,cr</sub>
              </td>
              <td>0.60; 0.80</td>
              <td>Assumed simulation setting</td>
            </tr>
            <tr>
              <td>
                Minimum fan ON/OFF time,
                <italic>t</italic>
                <sub>on,min</sub>
                /
                <italic>t</italic>
                <sub>off,min</sub>
              </td>
              <td>5 min/8min</td>
              <td>Assumed simulation setting</td>
            </tr>
            <tr>
              <td>
                Minimum number of active nodes,
                <italic>N</italic>
                <sub>min</sub>
              </td>
              <td>6</td>
              <td>Assumed simulation setting</td>
            </tr>
            <tr>
              <td>
                Critical-node escalation time,
                <italic>t</italic>
                <sub>esc</sub>
              </td>
              <td>10 min</td>
              <td>Assumed simulation setting</td>
            </tr>
          </tbody>
        </table>
      </table-wrap>
      <p>Five scenarios were simulated (<bold>Table 4</bold>). They are designed to test parametric and event-driven robustness and not only the nominal behaviour: S2 and S4 change the parameters of the thermal channel, S3 removes information, and S5 loads the positioning channel.</p>
      <p>Table 4. Simulation scenarios.</p>
      <table-wrap id="tbl4">
        <label>Table 4</label>
        <table>
          <tbody>
            <tr>
              <td>
                <bold>Scenario</bold>
              </td>
              <td>
                <bold>Condition</bold>
              </td>
              <td>
                <bold>Property tested</bold>
              </td>
            </tr>
            <tr>
              <td>S1</td>
              <td>Normal operation</td>
              <td>Nominal thermal and supervisory response</td>
            </tr>
            <tr>
              <td>S2</td>
              <td>Multiple hot zones with different cooling coefficients</td>
              <td>Spatial non-uniformity; decision by maximum</td>
            </tr>
            <tr>
              <td>S3</td>
              <td>Disconnection of a critical sensor</td>
              <td>Information uncertainty; fusion over active nodes</td>
            </tr>
            <tr>
              <td>S4</td>
              <td>Fan effectiveness reduced by 30%</td>
              <td>RLS tracking and diagnosis</td>
            </tr>
            <tr>
              <td>S5</td>
              <td>Movement resistance increased by 40%</td>
              <td>Positioning channel; movement timeout</td>
            </tr>
          </tbody>
        </table>
      </table-wrap>
    </sec>
    <sec id="sec6">
      <title>6. Results and Discussion</title>
      <sec id="sec6dot1">
        <title>6.1. Thermal and Supervisory Response</title>
        <p><xref ref-type="fig" rid="fig2">Figure 2</xref> shows the temperatures of the eight nodes in the normal scenario. The initial temperatures are non-identical and lie between approximately 35˚C and 44.5˚C. During the first two minutes, while the platform travels to the working position, the temperatures remain at their initial levels; ventilation then starts and all channels cool monotonically. The fan remains active until all valid nodes have returned to 28˚C or below and the minimum operating condition is satisfied, which occurs at approximately 12 min. Because the stop decision is taken on the maximum over the active nodes, a local hot spot cannot be masked by averaging.</p>
        <fig id="fig2">
          <label>Figure 2</label>
          <graphic xlink:href="https://html.scirp.org/file/7900809-rId98.jpeg?20261023012121" />
        </fig>
        <p>Figure 2. Simulated temperature dynamics at the eight monitoring nodes. Scenario S1 with the settings of Table 3; shaded intervals: fan ON.</p>
        <p>After the fan is switched off, a second heating episode raises the node temperatures to approximately 30˚C - 31.5˚C, and ventilation is retriggered once the minimum OFF interval has elapsed, at approximately 20 min. The response thus demonstrates hysteresis-based cycling control: two ventilation cycles occur within 30 min, and the contactor is not switched in the band between the thresholds.</p>
        <p>The mobile sequence is coordinated by the state machine: the platform moves towards the limit sensor and stops at the working position, ventilation is activated and completed, the two-second reset sequence is executed, and the platform returns by approximately 0.5 m. The simulation therefore evaluates the integrated sequence and not isolated control blocks.</p>
      </sec>
      <sec id="sec6dot2">
        <title>6.2. RLS Adaptation</title>
        <p>The behaviour of the estimator is shown in <xref ref-type="fig" rid="fig3">Figure 3</xref>. The true coefficient of the virtual object equals 0.098 min<sup>−1</sup> during the first 15 min and is then reduced stepwise to 0.083 min<sup>−1</sup>, a change of approximately 15%; by Equation (5) this corresponds to an increase of the cooling time constant from approximately 10.2 min to 12.0 min. Starting from the initial value of 0.060 min<sup>−1</sup>, the estimate reaches the neighbourhood of the true value in approximately 9 - 10 min, and after the step change it converges to the new value in a comparable time, with residual fluctuations of about ±0.002 min<sup>−1</sup>. These convergence times amount to roughly 1.4 - 1.5 memory lengths <italic>N</italic><italic><sub>λ</sub></italic><italic>T</italic><italic><sub>s</sub></italic>, as expected of an estimator with exponential forgetting.</p>
        <fig id="fig3">
          <label>Figure 3</label>
          <graphic xlink:href="https://html.scirp.org/file/7900809-rId99.jpeg?20261023012121" />
        </fig>
        <p>Figure 3. Online estimation of the effective cooling coefficient using RLS (virtual simulation).</p>
        <p>The estimate changes faster during the transient and becomes less dispersed once sufficient excitation has been accumulated. The choice <italic>λ</italic> = 0.995 is a compromise between adaptation speed and noise sensitivity for a slow thermal process: a smaller <italic>λ</italic> would respond faster but would amplify noise, whereas a value closer to unity would track real parameter changes more slowly.</p>
      </sec>
      <sec id="sec6dot3">
        <title>6.3. Comparison of Scenarios</title>
        <p>The cooling time and the relative energy consumption obtained in the five scenarios are compared in <xref ref-type="fig" rid="fig4">Figure 4</xref> and <bold>Table 5</bold>; energy is normalised to the nominal scenario S1.</p>
        <p>Energy is evaluated from the electrical input power of the two drives in the simulation model:</p>
        <disp-formula id="FD22">
          <label>(22)</label>
          <mml:math>
            <mml:mrow>
              <mml:msub>
                <mml:mi>E</mml:mi>
                <mml:mi>j</mml:mi>
              </mml:msub>
              <mml:mo>=</mml:mo>
              <mml:mstyle displaystyle="true">
                <mml:mrow>
                  <mml:msubsup>
                    <mml:mo>∫</mml:mo>
                    <mml:mrow>
                      <mml:msub>
                        <mml:mi>t</mml:mi>
                        <mml:mn>0</mml:mn>
                      </mml:msub>
                    </mml:mrow>
                    <mml:mrow>
                      <mml:msub>
                        <mml:mi>t</mml:mi>
                        <mml:mn>1</mml:mn>
                      </mml:msub>
                    </mml:mrow>
                  </mml:msubsup>
                  <mml:mrow>
                    <mml:mrow>
                      <mml:mo>[</mml:mo>
                      <mml:mrow>
                        <mml:msub>
                          <mml:mi>P</mml:mi>
                          <mml:mi>f</mml:mi>
                        </mml:msub>
                        <mml:mrow>
                          <mml:mo>(</mml:mo>
                          <mml:mi>t</mml:mi>
                          <mml:mo>)</mml:mo>
                        </mml:mrow>
                        <mml:mo>+</mml:mo>
                        <mml:msub>
                          <mml:mi>P</mml:mi>
                          <mml:mi>s</mml:mi>
                        </mml:msub>
                        <mml:mrow>
                          <mml:mo>(</mml:mo>
                          <mml:mi>t</mml:mi>
                          <mml:mo>)</mml:mo>
                        </mml:mrow>
                      </mml:mrow>
                      <mml:mo>]</mml:mo>
                    </mml:mrow>
                    <mml:mtext>d</mml:mtext>
                    <mml:mi>t</mml:mi>
                  </mml:mrow>
                </mml:mrow>
              </mml:mstyle>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <disp-formula id="FD23">
          <label>(23)</label>
          <mml:math>
            <mml:mrow>
              <mml:msub>
                <mml:mi>ε</mml:mi>
                <mml:mi>j</mml:mi>
              </mml:msub>
              <mml:mo>=</mml:mo>
              <mml:mfrac>
                <mml:mrow>
                  <mml:msub>
                    <mml:mi>E</mml:mi>
                    <mml:mi>j</mml:mi>
                  </mml:msub>
                </mml:mrow>
                <mml:mrow>
                  <mml:msub>
                    <mml:mi>E</mml:mi>
                    <mml:mrow>
                      <mml:mtext>S</mml:mtext>
                      <mml:mn>1</mml:mn>
                    </mml:mrow>
                  </mml:msub>
                </mml:mrow>
              </mml:mfrac>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>where <italic>P</italic><italic><sub>f</sub></italic> is the electrical input power of the fan induction motor computed in the fan subsystem from the stator voltage, current and power factor, <italic>P</italic><italic><sub>s</sub></italic> the electrical power of the stepper drive and <italic>ε</italic><italic><sub>j</sub></italic> the relative energy of scenario <italic>j</italic> reported in <bold>Table 5</bold><bold>.</bold> The evaluation window starts at <italic>t</italic><sub>0</sub>, the instant of the first ventilation request, and ends at <italic>t</italic><sub>1</sub>, the instant at which the system returns to IDLE after the reverse movement of the first ventilation cycle; the integral is evaluated numerically with the solver step of the model. The power of the sensor nodes and of the controller is not included. The cooling time in <bold>Table 5</bold> is measured from fan switch-on to the fulfilment of the stop condition (19) in the same cycle.</p>
        <fig id="fig4">
          <label>Figure 4</label>
          <graphic xlink:href="https://html.scirp.org/file/7900809-rId104.jpeg?20261023012121" />
        </fig>
        <p>Figure 4. Comparative simulation results for cooling time and relative energy consumption. (a) Cooling time; (b) relative energy consumption, normalised to S1.</p>
        <p>Table 5. Cooling time and relative energy consumption in the simulated scenarios (approximate values).</p>
        <table-wrap id="tbl5">
          <label>Table 5</label>
          <table>
            <tbody>
              <tr>
                <td>
                  <bold>Scenario</bold>
                </td>
                <td>
                  <bold>Condition</bold>
                </td>
                <td>
                  <bold>Cooling time, min</bold>
                </td>
                <td>
                  <bold>Change vs. S1</bold>
                </td>
                <td>
                  <bold>Relative energy</bold>
                </td>
                <td>
                  <bold>Change vs. S1</bold>
                </td>
              </tr>
              <tr>
                <td>S1</td>
                <td>Normal operation</td>
                <td>9.8</td>
                <td>—</td>
                <td>1.00</td>
                <td>—</td>
              </tr>
              <tr>
                <td>S2</td>
                <td>Multiple hot zones</td>
                <td>12.4</td>
                <td>+27%</td>
                <td>1.19</td>
                <td>+19%</td>
              </tr>
              <tr>
                <td>S3</td>
                <td>Sensor disconnection</td>
                <td>11.1</td>
                <td>+13%</td>
                <td>1.08</td>
                <td>+8%</td>
              </tr>
              <tr>
                <td>S4</td>
                <td>Fan effectiveness −30%</td>
                <td>16.8</td>
                <td>+71%</td>
                <td>1.48</td>
                <td>+48%</td>
              </tr>
              <tr>
                <td>S5</td>
                <td>Movement resistance +40%</td>
                <td>10.6</td>
                <td>+8%</td>
                <td>1.12</td>
                <td>+12%</td>
              </tr>
            </tbody>
          </table>
        </table-wrap>
        <p>The degradation of the fan (S4) is the most severe disturbance: the model predicts the longest cooling time and the highest relative energy use. A 30% loss of effectiveness lengthens cooling by approximately 71% and raises relative energy use by approximately 48%, so that the consequences of fan degradation are more than proportional to its magnitude. In this scenario RLS detects the changed cooling behaviour and the diagnostic warning of Section 4.4 is raised; the supervisory commands themselves are unchanged, so the longer cooling time results only from the later fulfilment of the stop condition (19). The estimate <inline-formula><mml:math display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi> k </mml:mi><mml:mo> ^ </mml:mo></mml:mover><mml:mi> c </mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> can be used as a diagnostic indicator. In the present contactor-based architecture it does not command a continuous fan speed; with a VFD, the estimated coefficient and the risk index could be used to compute a continuous speed reference. Multiple hot zones (S2) lengthen ventilation because the stop condition is governed by the slowest zone. Increased movement resistance (S5) acts on the positioning channel and not on the thermal one, and accordingly its effect on energy is larger than its effect on cooling time.</p>
      </sec>
      <sec id="sec6dot4">
        <title>6.4. Model Adequacy</title>
        <p>The validation protocol is as follows. Identification and evaluation use two separate simulation runs of the channel of node 1 under the nominal settings of <bold>Table 3</bold>, each of 30 min with <italic>T</italic><italic><sub>s</sub></italic> = 2 s. The first run was used for tuning the estimator settings (<italic>λ</italic>, <italic>P</italic>(0), <italic>ξ</italic><sub>min</sub>) and for identification. The second run, which starts from a different initial state and has an independent noise realisation, provides the virtual validation series of <italic>n</italic> = 900 samples shown in <xref ref-type="fig" rid="fig5">Figure 5</xref>; no sample of this run was used for tuning, and random point-wise splitting was not used, because successive samples of a time series are correlated. During the evaluation the estimator updates were stopped and the parameters were frozen at the values reached at the end of the identification run. The model output <inline-formula><mml:math display="inline"><mml:mrow><mml:mover accent="true"><mml:mi> y </mml:mi><mml:mo> ^ </mml:mo></mml:mover><mml:mrow><mml:mo> ( </mml:mo><mml:mi> k </mml:mi><mml:mo> ) </mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula> in Equations (24)-(27) is the free-run (independent trajectory) prediction of Equation (4), initialised with the measured temperature at the start of the series and driven only by <italic>u</italic><italic><sub>f</sub></italic>, <italic>T</italic><italic><sub>a</sub></italic> and <italic>RH</italic><italic><sub>a</sub></italic>; the measured temperature is not fed back into the regressor, so the prediction horizon equals the full 30-min series. This differs from the one-step prediction of Equation (6), which uses the measured temperature at every step and is a less demanding test; the values in <bold>Table 6</bold> should therefore be read as trajectory-prediction accuracy on virtual data. The ratio MAE/RMSE = 0.81 is close to the value <inline-formula><mml:math display="inline"><mml:mrow><mml:msqrt><mml:mrow><mml:mrow><mml:mn> 2 </mml:mn><mml:mo> / </mml:mo><mml:mi> π </mml:mi></mml:mrow></mml:mrow></mml:msqrt></mml:mrow></mml:math></inline-formula> ≈ 0.80 expected for Gaussian residuals, which is consistent with a residual dominated by the simulated sensor noise (<italic>σ</italic><italic><sub>T</sub></italic> = 0.10˚C).</p>
        <p>The agreement between the model output <inline-formula><mml:math display="inline"><mml:mrow><mml:mover accent="true"><mml:mi> y </mml:mi><mml:mo> ^ </mml:mo></mml:mover><mml:mrow><mml:mo> ( </mml:mo><mml:mi> k </mml:mi><mml:mo> ) </mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula> and the virtual validation series <italic>y</italic>(<italic>k</italic>) of length <italic>n</italic> was evaluated by four standard indicators:</p>
        <disp-formula id="FD24">
          <label>(24)</label>
          <mml:math>
            <mml:mrow>
              <mml:mtext>RMSE</mml:mtext>
              <mml:mo>=</mml:mo>
              <mml:msup>
                <mml:mrow>
                  <mml:mrow>
                    <mml:mo>(</mml:mo>
                    <mml:mrow>
                      <mml:mfrac>
                        <mml:mn>1</mml:mn>
                        <mml:mi>n</mml:mi>
                      </mml:mfrac>
                      <mml:mstyle displaystyle="true">
                        <mml:msubsup>
                          <mml:mo>∑</mml:mo>
                          <mml:mrow>
                            <mml:mi>k</mml:mi>
                            <mml:mo>=</mml:mo>
                            <mml:mn>1</mml:mn>
                          </mml:mrow>
                          <mml:mi>n</mml:mi>
                        </mml:msubsup>
                        <mml:mrow>
                          <mml:msup>
                            <mml:mrow>
                              <mml:mrow>
                                <mml:mo>(</mml:mo>
                                <mml:mrow>
                                  <mml:mi>y</mml:mi>
                                  <mml:mrow>
                                    <mml:mo>(</mml:mo>
                                    <mml:mi>k</mml:mi>
                                    <mml:mo>)</mml:mo>
                                  </mml:mrow>
                                  <mml:mo>−</mml:mo>
                                  <mml:mover accent="true">
                                    <mml:mi>y</mml:mi>
                                    <mml:mo>^</mml:mo>
                                  </mml:mover>
                                  <mml:mrow>
                                    <mml:mo>(</mml:mo>
                                    <mml:mi>k</mml:mi>
                                    <mml:mo>)</mml:mo>
                                  </mml:mrow>
                                </mml:mrow>
                                <mml:mo>)</mml:mo>
                              </mml:mrow>
                            </mml:mrow>
                            <mml:mn>2</mml:mn>
                          </mml:msup>
                        </mml:mrow>
                      </mml:mstyle>
                    </mml:mrow>
                    <mml:mo>)</mml:mo>
                  </mml:mrow>
                </mml:mrow>
                <mml:mrow>
                  <mml:mrow>
                    <mml:mn>1</mml:mn>
                    <mml:mo>/</mml:mo>
                    <mml:mn>2</mml:mn>
                  </mml:mrow>
                </mml:mrow>
              </mml:msup>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <disp-formula id="FD25">
          <label>(25)</label>
          <mml:math>
            <mml:mrow>
              <mml:mtext>MAE</mml:mtext>
              <mml:mo>=</mml:mo>
              <mml:mfrac>
                <mml:mn>1</mml:mn>
                <mml:mi>n</mml:mi>
              </mml:mfrac>
              <mml:mstyle displaystyle="true">
                <mml:msubsup>
                  <mml:mo>∑</mml:mo>
                  <mml:mrow>
                    <mml:mi>k</mml:mi>
                    <mml:mo>=</mml:mo>
                    <mml:mn>1</mml:mn>
                  </mml:mrow>
                  <mml:mi>n</mml:mi>
                </mml:msubsup>
                <mml:mrow>
                  <mml:mrow>
                    <mml:mo>|</mml:mo>
                    <mml:mrow>
                      <mml:mi>y</mml:mi>
                      <mml:mrow>
                        <mml:mo>(</mml:mo>
                        <mml:mi>k</mml:mi>
                        <mml:mo>)</mml:mo>
                      </mml:mrow>
                      <mml:mo>−</mml:mo>
                      <mml:mover accent="true">
                        <mml:mi>y</mml:mi>
                        <mml:mo>^</mml:mo>
                      </mml:mover>
                      <mml:mrow>
                        <mml:mo>(</mml:mo>
                        <mml:mi>k</mml:mi>
                        <mml:mo>)</mml:mo>
                      </mml:mrow>
                    </mml:mrow>
                    <mml:mo>|</mml:mo>
                  </mml:mrow>
                </mml:mrow>
              </mml:mstyle>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <disp-formula id="FD26">
          <label>(26)</label>
          <mml:math>
            <mml:mrow>
              <mml:mtext>MAPE</mml:mtext>
              <mml:mo>=</mml:mo>
              <mml:mfrac>
                <mml:mrow>
                  <mml:mn>100</mml:mn>
                  <mml:mi>%</mml:mi>
                </mml:mrow>
                <mml:mi>n</mml:mi>
              </mml:mfrac>
              <mml:mstyle displaystyle="true">
                <mml:msubsup>
                  <mml:mo>∑</mml:mo>
                  <mml:mrow>
                    <mml:mi>k</mml:mi>
                    <mml:mo>=</mml:mo>
                    <mml:mn>1</mml:mn>
                  </mml:mrow>
                  <mml:mi>n</mml:mi>
                </mml:msubsup>
                <mml:mrow>
                  <mml:mrow>
                    <mml:mo>|</mml:mo>
                    <mml:mrow>
                      <mml:mfrac>
                        <mml:mrow>
                          <mml:mi>y</mml:mi>
                          <mml:mrow>
                            <mml:mo>(</mml:mo>
                            <mml:mi>k</mml:mi>
                            <mml:mo>)</mml:mo>
                          </mml:mrow>
                          <mml:mo>−</mml:mo>
                          <mml:mover accent="true">
                            <mml:mi>y</mml:mi>
                            <mml:mo>^</mml:mo>
                          </mml:mover>
                          <mml:mrow>
                            <mml:mo>(</mml:mo>
                            <mml:mi>k</mml:mi>
                            <mml:mo>)</mml:mo>
                          </mml:mrow>
                        </mml:mrow>
                        <mml:mrow>
                          <mml:mi>y</mml:mi>
                          <mml:mrow>
                            <mml:mo>(</mml:mo>
                            <mml:mi>k</mml:mi>
                            <mml:mo>)</mml:mo>
                          </mml:mrow>
                        </mml:mrow>
                      </mml:mfrac>
                    </mml:mrow>
                    <mml:mo>|</mml:mo>
                  </mml:mrow>
                </mml:mrow>
              </mml:mstyle>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <disp-formula id="FD27">
          <label>(27)</label>
          <mml:math>
            <mml:mrow>
              <mml:msup>
                <mml:mi>R</mml:mi>
                <mml:mn>2</mml:mn>
              </mml:msup>
              <mml:mo>=</mml:mo>
              <mml:mn>1</mml:mn>
              <mml:mo>−</mml:mo>
              <mml:mfrac>
                <mml:mrow>
                  <mml:mstyle displaystyle="true">
                    <mml:msubsup>
                      <mml:mo>∑</mml:mo>
                      <mml:mrow>
                        <mml:mi>k</mml:mi>
                        <mml:mo>=</mml:mo>
                        <mml:mn>1</mml:mn>
                      </mml:mrow>
                      <mml:mi>n</mml:mi>
                    </mml:msubsup>
                    <mml:mrow>
                      <mml:msup>
                        <mml:mrow>
                          <mml:mrow>
                            <mml:mo>(</mml:mo>
                            <mml:mrow>
                              <mml:mi>y</mml:mi>
                              <mml:mrow>
                                <mml:mo>(</mml:mo>
                                <mml:mi>k</mml:mi>
                                <mml:mo>)</mml:mo>
                              </mml:mrow>
                              <mml:mo>−</mml:mo>
                              <mml:mover accent="true">
                                <mml:mi>y</mml:mi>
                                <mml:mo>^</mml:mo>
                              </mml:mover>
                              <mml:mrow>
                                <mml:mo>(</mml:mo>
                                <mml:mi>k</mml:mi>
                                <mml:mo>)</mml:mo>
                              </mml:mrow>
                            </mml:mrow>
                            <mml:mo>)</mml:mo>
                          </mml:mrow>
                        </mml:mrow>
                        <mml:mn>2</mml:mn>
                      </mml:msup>
                    </mml:mrow>
                  </mml:mstyle>
                </mml:mrow>
                <mml:mrow>
                  <mml:mstyle displaystyle="true">
                    <mml:msubsup>
                      <mml:mo>∑</mml:mo>
                      <mml:mrow>
                        <mml:mi>k</mml:mi>
                        <mml:mo>=</mml:mo>
                        <mml:mn>1</mml:mn>
                      </mml:mrow>
                      <mml:mi>n</mml:mi>
                    </mml:msubsup>
                    <mml:mrow>
                      <mml:msup>
                        <mml:mrow>
                          <mml:mrow>
                            <mml:mo>(</mml:mo>
                            <mml:mrow>
                              <mml:mi>y</mml:mi>
                              <mml:mrow>
                                <mml:mo>(</mml:mo>
                                <mml:mi>k</mml:mi>
                                <mml:mo>)</mml:mo>
                              </mml:mrow>
                              <mml:mo>−</mml:mo>
                              <mml:mover accent="true">
                                <mml:mi>y</mml:mi>
                                <mml:mo>¯</mml:mo>
                              </mml:mover>
                            </mml:mrow>
                            <mml:mo>)</mml:mo>
                          </mml:mrow>
                        </mml:mrow>
                        <mml:mn>2</mml:mn>
                      </mml:msup>
                    </mml:mrow>
                  </mml:mstyle>
                </mml:mrow>
              </mml:mfrac>
            </mml:mrow>
          </mml:math>
        </disp-formula>
        <p>where <inline-formula><mml:math><mml:mover accent="true"><mml:mi> y </mml:mi><mml:mo> ¯ </mml:mo></mml:mover></mml:math></inline-formula> is the mean of the validation series. The comparison is shown in <xref ref-type="fig" rid="fig5">Figure 5</xref> and the values are given in <bold>Table 6</bold><bold>.</bold></p>
        <fig id="fig5">
          <label>Figure 5</label>
          <graphic xlink:href="https://html.scirp.org/file/7900809-rId123.jpeg?20261023012121" />
        </fig>
        <p>Figure 5. Comparison of the model output with the virtual validation data.</p>
        <p>Table 6. Model adequacy indicators (virtual validation).</p>
        <table-wrap id="tbl6">
          <label>Table 6</label>
          <table>
            <tbody>
              <tr>
                <td>
                  <bold>Metric</bold>
                </td>
                <td>
                  <bold>Simulation value</bold>
                </td>
                <td>
                  <bold>Interpretation</bold>
                </td>
              </tr>
              <tr>
                <td>RMSE</td>
                <td>0.1197˚C</td>
                <td>Root-mean-square error against the virtual series</td>
              </tr>
              <tr>
                <td>MAE</td>
                <td>0.0965˚C</td>
                <td>Mean absolute error</td>
              </tr>
              <tr>
                <td>MAPE</td>
                <td>0.343%</td>
                <td>Mean absolute percentage error</td>
              </tr>
              <tr>
                <td>
                  <italic>R</italic>
                  <sup>2</sup>
                </td>
                <td>0.9689</td>
                <td>Share of the variance of the virtual series explained by the model</td>
              </tr>
            </tbody>
          </table>
        </table-wrap>
        <p>The values <italic>R</italic><sup>2</sup> = 0.9689 and RMSE ≈ 0.12˚C indicate good agreement with the virtual validation series. Taken together they imply a standard deviation of the validation series of approximately 0.68˚C, so that the residual amounts to about 18% of the variation of the signal; <xref ref-type="fig" rid="fig5">Figure 5</xref> shows that this residual is dominated by the high-frequency noise superimposed on the virtual data, while the model output reproduces the slow component. Because the virtual object and the identification model share a related mathematical structure, high agreement is expected. The values must therefore not be presented as proof of the physical accuracy of the SHT21 sensor or of a model of the real cotton stack.</p>
      </sec>
      <sec id="sec6dot5">
        <title>6.5. Fault Tolerance and Safety</title>
        <p>The sensor-disconnection scenario demonstrates why simple averaging is insufficient. If the hottest sensor disappears, the remaining measurements artificially reduce the estimated risk. The proposed controller responds by increasing the information-uncertainty index of Equation (15) and by restricting automatic operation when the number of active nodes falls below the critical minimum. For movement faults, a timeout disables the STEP pulses and transfers the system to FAULT; the controller does not attempt to overcome the obstacle by raising the speed, which would increase the loss of steps.</p>
        <p>A node-count threshold alone, however, cannot establish that an unobserved zone is safe: if the node that was the hottest disconnects while <italic>N</italic><italic><sub>A</sub></italic> is still above <italic>N</italic><sub>min</sub>, all remaining nodes may be below <italic>T</italic><sub>on</sub> although the lost zone is still hot. The loss of a critical node is therefore handled by a separate rule. A node is classed as critical when, at the moment its validity flag drops, it defined <italic>T</italic><sub>max</sub> or its last valid temperature was at or above <italic>T</italic><sub>on</sub> − Δ<italic>T</italic><italic><sub>h</sub></italic>. For such a node: 1) its last valid temperature is held in Equation (14) instead of being removed, so that <italic>T</italic><sub>max</sub> cannot decrease because of the loss and the stop condition (19) cannot be met while the zone is unobserved; 2) if ventilation is running it continues, and if the platform is idle a ventilation request is issued as if <italic>s</italic><sub>on</sub> = 1, so that the platform moves to the working position and the fan is switched on; 3) a “critical node lost” alarm is sent to the operator HMI immediately; 4) if the node is not restored within <italic>t</italic><sub>esc</sub>, the system escalates: automatic stopping of ventilation is inhibited, the fan remains on with the platform at the working position, manual inspection of the zone is requested, and ventilation can be ended only by the operator in manual mode. The held value is released only after the node has again delivered valid data for a confirmation interval. If <italic>N</italic><italic><sub>A</sub></italic> falls below <italic>N</italic><sub>min</sub>, automatic control is restricted as described in Section 4.3, the actuators are kept in their current safe state and the operator is alerted. In scenario S3 the hottest node (node 1) is disconnected between <italic>t</italic> = 5 and 9 min; its last valid value is held in <italic>T</italic><sub>max</sub>, <italic>t</italic><sub>esc</sub> is not reached, and the 60-s confirmation interval after reconnection contributes to the longer cooling time of S3 in <bold>Table 5</bold><bold>.</bold></p>
        <p>The safety model distinguishes the software FAULT state from physical emergency interruption. E-STOP, thermal overload protection and contactor feedback are required to interrupt the power circuit independently of the microcontroller. This separation is essential for a practical mechatronic system, because the software cannot be assumed to remain operational in the situations in which protection is needed.</p>
      </sec>
      <sec id="sec6dot6">
        <title>6.6. Comparison with Monitoring-Oriented Approaches</title>
        <p><bold>Table 7</bold> compares the proposed system functionally with portable or local monitoring and with stationary PLC/SCADA monitoring.</p>
        <p>The novelty therefore does not lie in the use of a particular sensor, the ESP32 controller or a web interface. It lies in the integration of distributed sensing, adaptive identification, supervisory control, mobile mechanics and safety logic into a closed mechatronic architecture. Existing cotton-storage monitoring work demonstrates the value of wireless temperature-humidity monitoring [<xref ref-type="bibr" rid="B3">3</xref>]; the present study extends that concept towards active adaptive control.</p>
        <p>Table 7. Functional comparison of monitoring-oriented approaches and the proposed system.</p>
        <table-wrap id="tbl7">
          <label>Table 7</label>
          <table>
            <tbody>
              <tr>
                <td>
                  <bold>Criterion</bold>
                </td>
                <td>
                  <bold>Portable probe/local monitoring</bold>
                </td>
                <td>
                  <bold>PLC/SCADA monitoring</bold>
                </td>
                <td>
                  <bold>Proposed system</bold>
                </td>
              </tr>
              <tr>
                <td>Temperature</td>
                <td>Periodic, local</td>
                <td>Continuous, stationary</td>
                <td>Distributed, continuous</td>
              </tr>
              <tr>
                <td>Relative humidity</td>
                <td>Limited/optional</td>
                <td>System dependent</td>
                <td>Eight sensing nodes</td>
              </tr>
              <tr>
                <td>Active intervention</td>
                <td>Operator decision</td>
                <td>Possible with a stationary actuator</td>
                <td>Mobile air-suction ventilation actuator</td>
              </tr>
              <tr>
                <td>Mobility</td>
                <td>No</td>
                <td>No</td>
                <td>NEMA 34 stepper drive with reduction</td>
              </tr>
              <tr>
                <td>Adaptive identification</td>
                <td>No</td>
                <td>Usually not intrinsic</td>
                <td>RLS-based</td>
              </tr>
              <tr>
                <td>Communication /HMI</td>
                <td>Local indicator</td>
                <td>SCADA</td>
                <td>ESP-NOW wireless nodes and web HMI</td>
              </tr>
              <tr>
                <td>Main limitation</td>
                <td>Sampling interval, locality</td>
                <td>Cost and complexity</td>
                <td>Requires physical validation</td>
              </tr>
            </tbody>
          </table>
        </table-wrap>
      </sec>
    </sec>
    <sec id="sec7">
      <title>7. Experimental Validation Plan and Limitations</title>
      <p>The numerical results presented above are simulation-based, and the next stage is a staged physical validation. First, all eight sensor nodes and the communication functions are tested independently. Second, the stepper drive is tested with the fan disabled. Third, the fan power circuit is tested manually with hardware protection in place. Only then are the automatic state machine and the RLS diagnostics integrated.</p>
      <p>For sensor calibration, the eight SHT21 nodes and the external sensor should be placed in a controlled temperature-humidity chamber and compared with a reference thermo-hygrometer at several points. For the drive, starting and rolling forces should be measured and the 1:6, 1:7 and 1:8 reductions compared with respect to Equation (21). For the thermal experiment, all node temperatures, relative humidity, validity flags, fan state, platform position and electrical power should be logged at intervals of 1 - 2 s. At least 70% of the complete time segments can be used for identification and 30% for independent validation; random point-wise splitting must be avoided, because the samples of a time series are correlated. The acceptance criteria are listed in <bold>Table 8</bold><bold>.</bold></p>
      <p>Table 8. Acceptance criteria for experimental validation.</p>
      <table-wrap id="tbl8">
        <label>Table 8</label>
        <table>
          <tbody>
            <tr>
              <td>
                <bold>Acceptance criterion</bold>
              </td>
              <td>
                <bold>Target</bold>
              </td>
            </tr>
            <tr>
              <td>Sensor packet loss</td>
              <td>≤2% in a 30-min test</td>
            </tr>
            <tr>
              <td>Detection of node disconnection</td>
              <td>&lt;10 s</td>
            </tr>
            <tr>
              <td>STEP stop after limit-sensor activation</td>
              <td>&lt;100 ms</td>
            </tr>
            <tr>
              <td>Position error of the 0.5 m reverse movement</td>
              <td>&lt;5%</td>
            </tr>
            <tr>
              <td>RMSE of the thermal model on independent data</td>
              <td>&lt;0.5˚C</td>
            </tr>
            <tr>
              <td>
                <italic>R</italic>
                <sup>2</sup>
                of the model on independent data
              </td>
              <td>&gt;0.90</td>
            </tr>
            <tr>
              <td>Emergency shutdown</td>
              <td>Hardware-safe state</td>
            </tr>
          </tbody>
        </table>
      </table-wrap>
      <p>The main limitations of the study are the following. The first-order thermal model does not replace a full three-dimensional heat-and-moisture transfer model. The SHT21 sensor measures the relative humidity of the air and not the moisture content of the cotton mass directly. The RLS results and the fit metrics are at present based on virtual data. The real <italic>Q</italic>-<italic>H</italic> characteristic of the fan and the energy efficiency remain to be measured, and the mechanical traction reserve must be confirmed under actual floor and load conditions. These limitations are stated explicitly because they define the boundary between simulation evidence and experimentally verified claims.</p>
    </sec>
    <sec id="sec8">
      <title>8. Conclusions</title>
      <p>A mechatronic architecture for adaptive monitoring and control of thermal-humidity conditions in stored cotton has been developed and evaluated in MATLAB/Simulink. The architecture integrates eight distributed sensing nodes, validity-aware sensor fusion, a multi-factor risk index, RLS online identification, a supervisory state machine, mobile stepper-driven positioning, ventilation actuation and independent safety logic.</p>
      <p>The simulation demonstrates that RLS with a forgetting factor of 0.995 tracks changes in the effective cooling behaviour, and that state-machine coordination prevents conflicting motion and ventilation commands. A 30% loss of fan effectiveness was the most severe of the disturbances considered, in terms of both cooling time and relative energy consumption. The virtual model achieved RMSE = 0.1197˚C, MAE = 0.0965˚C, MAPE = 0.343% and <italic>R</italic><sup>2</sup> = 0.9689. These metrics confirm the internal consistency of the virtual model but do not constitute physical validation.</p>
      <p>The principal scientific contribution is the integration of adaptive identification with distributed monitoring and mobile mechatronic actuation for cotton-stack storage, with information uncertainty handled separately from technological risk. The next research stage is experimental identification and independent validation on a real cotton stack. Once real time-series data have been obtained, the admissible range of the RLS parameters, the risk thresholds, the minimum ventilation time, the energy indicators and the mechanical transmission ratio should be recalibrated. A VFD-based extension can subsequently transform the present risk-based ON/OFF ventilation, in which RLS serves identification and diagnosis, into continuous adaptive speed control.</p>
    </sec>
    <sec id="sec9">
      <title>Data Availability</title>
      <p>The Simulink model, the simulation settings of <bold>Table 3</bold> and the virtual validation series used for <bold>Table 6</bold> are available from the corresponding author upon reasonable request.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <title>References</title>
      <ref id="B1">
        <label>1.</label>
        <citation-alternatives>
          <mixed-citation publication-type="other">Ma, J. (2014) Analysis on the Fire Risk Existing in the Storage of Textile Materials and Textile Goods. <italic>Procedia Engineering</italic>, 71, 271-275. https://doi.org/10.1016/j.proeng.2014.04.039 <pub-id pub-id-type="doi">10.1016/j.proeng.2014.04.039</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1016/j.proeng.2014.04.039">https://doi.org/10.1016/j.proeng.2014.04.039</ext-link></mixed-citation>
          <element-citation publication-type="other">
            <person-group person-group-type="author">
              <string-name>Ma, J.</string-name>
            </person-group>
            <year>2014</year>
            <article-title>Analysis on the Fire Risk Existing in the Storage of Textile Materials and Textile Goods</article-title>
            <source>Procedia Engineering</source>
            <volume>71</volume>
            <pub-id pub-id-type="doi">10.1016/j.proeng.2014.04.039</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B2">
        <label>2.</label>
        <citation-alternatives>
          <mixed-citation publication-type="confproc">He, M., Ding, L., Yu, L. and Ji, J. (2021) Effect of Density on the Smoldering Characteristics of Cotton Bales Ignited Internally. <italic>Proceedings of the Combustion Institute</italic>, 38, 5043-5051. https://doi.org/10.1016/j.proci.2020.06.219 <pub-id pub-id-type="doi">10.1016/j.proci.2020.06.219</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1016/j.proci.2020.06.219">https://doi.org/10.1016/j.proci.2020.06.219</ext-link></mixed-citation>
          <element-citation publication-type="confproc">
            <person-group person-group-type="author">
              <string-name>He, M.</string-name>
              <string-name>Ding, L.</string-name>
              <string-name>Yu, L.</string-name>
              <string-name>Ji, J.</string-name>
            </person-group>
            <year>2021</year>
            <article-title>Effect of Density on the Smoldering Characteristics of Cotton Bales Ignited Internally</article-title>
            <source>Proceedings of the Combustion Institute</source>
            <volume>38</volume>
            <pub-id pub-id-type="doi">10.1016/j.proci.2020.06.219</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B3">
        <label>3.</label>
        <citation-alternatives>
          <mixed-citation publication-type="other">Zhang, W., Zhao, B., Yang, Q., Zhou, L., Jiang, H., Niu, K., <italic>et al</italic>. (2022) Design and Test of Intelligent Inspection and Monitoring System for Cotton Bale Storage Based on RFID. <italic>Scientific Reports</italic>, 12, Article No. 4491. https://doi.org/10.1038/s41598-022-08229-6 <pub-id pub-id-type="doi">10.1038/s41598-022-08229-6</pub-id><pub-id pub-id-type="pmid">35296688</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1038/s41598-022-08229-6">https://doi.org/10.1038/s41598-022-08229-6</ext-link></mixed-citation>
          <element-citation publication-type="other">
            <person-group person-group-type="author">
              <string-name>Zhang, W.</string-name>
              <string-name>Zhao, B.</string-name>
              <string-name>Yang, Q.</string-name>
              <string-name>Zhou, L.</string-name>
              <string-name>Jiang, H.</string-name>
              <string-name>Niu, K.</string-name>
            </person-group>
            <year>2022</year>
            <article-title>Design and Test of Intelligent Inspection and Monitoring System for Cotton Bale Storage Based on RFID</article-title>
            <source>Scientific Reports</source>
            <volume>12</volume>
            <elocation-id>No</elocation-id>
            <pub-id pub-id-type="doi">10.1038/s41598-022-08229-6</pub-id>
            <pub-id pub-id-type="pmid">35296688</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B4">
        <label>4.</label>
        <citation-alternatives>
          <mixed-citation publication-type="other">Qiu, L., Liang, X. and Huang, Z. (2017) PATL: A RFID Tag Localization Based on Phased Array Antenna. <italic>Scientific Reports</italic>, 7, Article NO. 44183. https://doi.org/10.1038/srep44183 <pub-id pub-id-type="doi">10.1038/srep44183</pub-id><pub-id pub-id-type="pmid">28295014</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1038/srep44183">https://doi.org/10.1038/srep44183</ext-link></mixed-citation>
          <element-citation publication-type="other">
            <person-group person-group-type="author">
              <string-name>Qiu, L.</string-name>
              <string-name>Liang, X.</string-name>
              <string-name>Huang, Z.</string-name>
            </person-group>
            <year>2017</year>
            <article-title>PATL: A RFID Tag Localization Based on Phased Array Antenna</article-title>
            <source>Scientific Reports</source>
            <volume>7</volume>
            <elocation-id>NO</elocation-id>
            <pub-id pub-id-type="doi">10.1038/srep44183</pub-id>
            <pub-id pub-id-type="pmid">28295014</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B5">
        <label>5.</label>
        <citation-alternatives>
          <mixed-citation publication-type="book">Ljung, L. (1999) System Identification: Theory for the User. 2nd Edition, Prentice Hall.</mixed-citation>
          <element-citation publication-type="book">
            <person-group person-group-type="author">
              <string-name>Ljung, L.</string-name>
              <string-name>Edition, P</string-name>
            </person-group>
            <year>1999</year>
            <article-title>System Identification: Theory for the User</article-title>
            <source>2nd Edition</source>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B6">
        <label>6.</label>
        <citation-alternatives>
          <mixed-citation publication-type="book">Åström, K.J. and Wittenmark, B. (1995) Adaptive Control. 2nd Edition, Addison-Wesley.</mixed-citation>
          <element-citation publication-type="book">
            <person-group person-group-type="author">
              <string-name>Wittenmark, B.</string-name>
              <string-name>Edition, A</string-name>
            </person-group>
            <year>1995</year>
            <article-title>Adaptive Control</article-title>
            <source>2nd Edition</source>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B7">
        <label>7.</label>
        <citation-alternatives>
          <mixed-citation publication-type="journal">Prandini, M. and Campi, M.C. (1998) A New Recursive Identification Algorithm for Singularity Free Adaptive Control. <italic>Systems &amp; Control Letters</italic>, 34, 177-183. https://doi.org/10.1016/s0167-6911(98)00012-7 <pub-id pub-id-type="doi">10.1016/s0167-6911(98)00012-7</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1016/s0167-6911(98)00012-7">https://doi.org/10.1016/s0167-6911(98)00012-7</ext-link></mixed-citation>
          <element-citation publication-type="journal">
            <person-group person-group-type="author">
              <string-name>Prandini, M.</string-name>
              <string-name>Campi, M.C.</string-name>
            </person-group>
            <year>1998</year>
            <article-title>A New Recursive Identification Algorithm for Singularity Free Adaptive Control</article-title>
            <source>Systems &amp; Control Letters</source>
            <volume>6911</volume>
            <issue>98</issue>
            <pub-id pub-id-type="doi">10.1016/s0167-6911(98)00012-7</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B8">
        <label>8.</label>
        <citation-alternatives>
          <mixed-citation publication-type="other">Levent, M.L. and Aydogdu, O. (2022) Adaptive State Feedback Control Method Based on Recursive Least Squares. <italic>Elektronika</italic><italic>ir</italic><italic>Elektrotechnika</italic>, 28, 27-34. https://doi.org/10.5755/j02.eie.31149 <pub-id pub-id-type="doi">10.5755/j02.eie.31149</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.5755/j02.eie.31149">https://doi.org/10.5755/j02.eie.31149</ext-link></mixed-citation>
          <element-citation publication-type="other">
            <person-group person-group-type="author">
              <string-name>Levent, M.L.</string-name>
              <string-name>Aydogdu, O.</string-name>
            </person-group>
            <year>2022</year>
            <article-title>Adaptive State Feedback Control Method Based on Recursive Least Squares</article-title>
            <source>Elektronika ir Elektrotechnika</source>
            <volume>28</volume>
            <pub-id pub-id-type="doi">10.5755/j02.eie.31149</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B9">
        <label>9.</label>
        <citation-alternatives>
          <mixed-citation publication-type="other">Zhang, P. and Xiong, G. (2026) Temperature Control of Thermal Performance Testing Systems Based on an Adaptive PI-RLS-MPC Strategy. <italic>Applied Sciences</italic>, 16, Article 2926. https://doi.org/10.3390/app16062926 <pub-id pub-id-type="doi">10.3390/app16062926</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.3390/app16062926">https://doi.org/10.3390/app16062926</ext-link></mixed-citation>
          <element-citation publication-type="other">
            <person-group person-group-type="author">
              <string-name>Zhang, P.</string-name>
              <string-name>Xiong, G.</string-name>
            </person-group>
            <year>2026</year>
            <article-title>Temperature Control of Thermal Performance Testing Systems Based on an Adaptive PI-RLS-MPC Strategy</article-title>
            <source>Applied Sciences</source>
            <volume>16</volume>
            <elocation-id>2926</elocation-id>
            <pub-id pub-id-type="doi">10.3390/app16062926</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B10">
        <label>10.</label>
        <citation-alternatives>
          <mixed-citation publication-type="other">Luo, D.Y. and Wang, W. (2025) A New Evolving Technology for Gearbox Condition Monitoring and Fault Diagnosis. <italic>Intelligent Control and Automation</italic>, 16, 158-174. https://doi.org/10.4236/ica.2025.164007 <pub-id pub-id-type="doi">10.4236/ica.2025.164007</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.4236/ica.2025.164007">https://doi.org/10.4236/ica.2025.164007</ext-link></mixed-citation>
          <element-citation publication-type="other">
            <person-group person-group-type="author">
              <string-name>Luo, D.Y.</string-name>
              <string-name>Wang, W.</string-name>
            </person-group>
            <year>2025</year>
            <article-title>A New Evolving Technology for Gearbox Condition Monitoring and Fault Diagnosis</article-title>
            <source>Intelligent Control and Automation</source>
            <volume>16</volume>
            <pub-id pub-id-type="doi">10.4236/ica.2025.164007</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B11">
        <label>11.</label>
        <citation-alternatives>
          <mixed-citation publication-type="other">Toky, T.D., Zhang, M. and Wang, W. (2025) An Adaptive NF Technology for Bearing Condition Monitoring and Fault Diagnosis. <italic>Intelligent Control and Automation</italic>, 16, 61-79. https://doi.org/10.4236/ica.2025.163004 <pub-id pub-id-type="doi">10.4236/ica.2025.163004</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.4236/ica.2025.163004">https://doi.org/10.4236/ica.2025.163004</ext-link></mixed-citation>
          <element-citation publication-type="other">
            <person-group person-group-type="author">
              <string-name>Toky, T.D.</string-name>
              <string-name>Zhang, M.</string-name>
              <string-name>Wang, W.</string-name>
            </person-group>
            <year>2025</year>
            <article-title>An Adaptive NF Technology for Bearing Condition Monitoring and Fault Diagnosis</article-title>
            <source>Intelligent Control and Automation</source>
            <volume>16</volume>
            <pub-id pub-id-type="doi">10.4236/ica.2025.163004</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B12">
        <label>12.</label>
        <citation-alternatives>
          <mixed-citation publication-type="web">Sensirion, A.G. (2011) Datasheet SHT21: Humidity and Temperature Sensor IC. Version 3. https://labs.dese.iisc.ac.in/embeddedlab/wp-content/uploads/sites/24/2023/08/SHT21_Temp_Humidity.pdf</mixed-citation>
          <element-citation publication-type="web">
            <person-group person-group-type="author">
              <string-name>Sensirion, A.G.</string-name>
            </person-group>
            <year>2011</year>
            <article-title>Datasheet SHT21: Humidity and Temperature Sensor IC</article-title>
          </element-citation>
        </citation-alternatives>
      </ref>
    </ref-list>
  </back>
</article>