diff --git a/energyplugin/etm/adapters/relayrouter.cpp b/energyplugin/etm/adapters/relayrouter.cpp index 701f852..d059176 100644 --- a/energyplugin/etm/adapters/relayrouter.cpp +++ b/energyplugin/etm/adapters/relayrouter.cpp @@ -15,6 +15,9 @@ namespace { //! Au-delà, 2^N combinaisons explose. 16 relais = 65536 combos — bien au-delà de tout ECS réel. +//! \rule{ECS-308} — le plafond TRONQUE au lieu de refuser : au-delà, les relais +//! surnuméraires sont ignorés en silence. Connu, non corrigé, et c'est pour cela que la +//! règle existe — 2^16 sous-ensembles est déjà une table qu'aucune installation n'atteint. constexpr int MaxRelays = 16; } diff --git a/energyplugin/etm/adapters/relayrouter.h b/energyplugin/etm/adapters/relayrouter.h index 28d80e3..fbe705b 100644 --- a/energyplugin/etm/adapters/relayrouter.h +++ b/energyplugin/etm/adapters/relayrouter.h @@ -115,6 +115,8 @@ public: * \param relays Liste \c {thingId, powerW} des relais \c power. Les paliers atteignables * sont dérivés de toutes leurs combinaisons. * \param minOnS/minOffS Verrous anti-rebond (protection relais/compresseur), appliqués ici. + * \rule{LM-303} — les verrous appartiennent au MÉCANISME, pas au domaine : c'est le + * relais qui craint le court-cycle, pas le service rendu. * \param priority Rang dans le waterfall (1 = servi en premier). * \param needs Besoins déclarés (exposés via descriptor().needs). * \param parent Propriétaire Qt. diff --git a/energyplugin/etm/config/loadconfigstore.cpp b/energyplugin/etm/config/loadconfigstore.cpp index c7d1b48..046d0b0 100644 --- a/energyplugin/etm/config/loadconfigstore.cpp +++ b/energyplugin/etm/config/loadconfigstore.cpp @@ -112,6 +112,10 @@ bool LoadConfigStore::validateSet(const LoadConfigs &configs, QString *error) if (!c.enabled()) continue; // ne construit aucun adaptateur : ne revendique rien + // \rule{ECS-110-b} — un Thing n'appartient qu'à UNE charge active. \rule{LM-302-b} : + // l'exclusivité ne peut PAS se valider dans une charge utile, aucune charge ne voyant + // les autres — d'où ce contrôle d'ENSEMBLE, et d'où le fait qu'il soit distinct de + // isValid(). for (const QString &thing : c.claimedThingIds()) { const QString deja = proprietaire.value(thing); if (!deja.isEmpty()) diff --git a/energyplugin/etm/config/loadconfigstore.h b/energyplugin/etm/config/loadconfigstore.h index af315f0..9bdac6d 100644 --- a/energyplugin/etm/config/loadconfigstore.h +++ b/energyplugin/etm/config/loadconfigstore.h @@ -71,7 +71,9 @@ public: * \param configs Ensemble candidat. \param error Motif du refus, si refus. * \return Faux si deux charges portent le même rang. * - * \note **Distincte de \c validateSet(), et la distinction est de sûreté, pas de propreté.** + * \note **Distincte de \c validateSet(), et la distinction est de sûreté, pas de propreté** + * — \rule{LM-1209-a-bis} : une vérification qui ÉCARTE et une qui REFUSE ne peuvent pas + * être la même fonction. * \c validateSet() nomme ce qui rend un ensemble DANGEREUX — deux charges sur un même * organe — et \c load() s'en sert pour ÉCARTER l'entrée fautive. Celle-ci nomme ce qui * rend un ensemble MAL FORMÉ, et le seul geste correct y est de REFUSER l'écriture diff --git a/energyplugin/etm/energyarbitrator.cpp b/energyplugin/etm/energyarbitrator.cpp index a20b53d..2fe67ca 100644 --- a/energyplugin/etm/energyarbitrator.cpp +++ b/energyplugin/etm/energyarbitrator.cpp @@ -206,6 +206,8 @@ bool EnergyArbitrator::clearLoadFault(const QString &loadId) return false; } + // \rule{ECS-410-b} — l'issue est journalisée, et par l'ARBITRE : c'est lui qui sait si + // un défaut existait, l'adaptateur ne rendant qu'un booléen. qCInfo(dcNymeaEnergy()) << "[Arbitre] ClearLoadFault demandé par l'opérateur pour" << loadId; const bool leve = adapter->clearFault(); if (leve) @@ -532,6 +534,7 @@ uint EnergyArbitrator::evTargetPhases(EvCharger *ev, double referenceA) // retient le nombre de phases de la BORNE, qui est celui qu'elle utilisera réellement. // C'est l'hypothèse conservatrice pour le budget : elle SURESTIME la consommation de la // borne plutôt que de la sous-estimer. + // \rule{LM-1208-c} if (!internalHasProcessInfo(ev)) return qMax(1u, ev->phaseCount());