Le generateur separe desormais les MESURES des MOTS : les chiffres vivent dans gen-rapport-batteries.py, les trois langues dans rapport_textes.py. Une correction de traduction ne peut donc pas toucher un chiffre, ni l'inverse - et les trois versions partagent exactement les memes donnees puisqu'elles lisent la meme source. La version destinee au fabricant gagne une section que la francaise n'avait pas : trois questions precises, sur la recuperabilite des cellules face a leur composante resistive, sur la procedure recommandee pour un module dans cet etat, et sur ce que compte exactement le SOHCount par cellule. Le chinois charge Noto Sans SC et desserre l'interligne ; les mesures de colonne passent en em plutot qu'en ch, un caractere han n'ayant pas la largeur d'un zero. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
182 lines
26 KiB
HTML
182 lines
26 KiB
HTML
<title>The Hundred and Five Cells</title>
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Chivo:wght@400;700;900&family=Source+Serif+4:opsz,wght@8..60,400;8..60,600&family=JetBrains+Mono:wght@400;700&display=swap">
|
|
<style>
|
|
:root {
|
|
--fond:#F6F8F7; --carte:#FFFFFF; --encre:#14191B; --sourd:#5B6669;
|
|
--trait:#DCE2E1; --trait-fort:#B9C3C1;
|
|
--sain:#2E7D62; --attention:#A8760C; --grave:#C2521E; --mort:#9B1D20;
|
|
--lueur:rgba(46,125,98,.08);
|
|
}
|
|
@media (prefers-color-scheme: dark) {
|
|
:root:not([data-theme="light"]) {
|
|
--fond:#0E1112; --carte:#161A1B; --encre:#E7EBEA; --sourd:#97A2A4;
|
|
--trait:#252B2C; --trait-fort:#3A4344;
|
|
--sain:#5BB894; --attention:#D9A63C; --grave:#E8794A; --mort:#E05C60;
|
|
--lueur:rgba(91,184,148,.10);
|
|
}
|
|
}
|
|
:root[data-theme="dark"] {
|
|
--fond:#0E1112; --carte:#161A1B; --encre:#E7EBEA; --sourd:#97A2A4;
|
|
--trait:#252B2C; --trait-fort:#3A4344;
|
|
--sain:#5BB894; --attention:#D9A63C; --grave:#E8794A; --mort:#E05C60;
|
|
--lueur:rgba(91,184,148,.10);
|
|
}
|
|
* { box-sizing:border-box; }
|
|
body { background:var(--fond); color:var(--encre);
|
|
font:400 17px/1.62 "Source Serif 4", Georgia, serif; margin:0; -webkit-font-smoothing:antialiased; }
|
|
.page { max-width:1000px; margin:0 auto; padding:0 24px 96px; }
|
|
.mesure { max-width:64ch; }
|
|
h1, h2, h3, .fm, .etiq { font-family:Chivo, "Helvetica Neue", Arial, sans-serif; }
|
|
h1 { font-weight:900; font-size:clamp(2.2rem,6vw,3.7rem); line-height:1.08;
|
|
letter-spacing:-.025em; margin:0 0 .4em; text-wrap:balance; }
|
|
h2 { font-weight:700; font-size:1.5rem; margin:4.2rem 0 .2em; text-wrap:balance; }
|
|
h2 .num { color:var(--sourd); font-weight:400; margin-right:.5em;
|
|
font-variant-numeric:tabular-nums; }
|
|
p { margin:0 0 1.05em; }
|
|
strong, b { font-weight:600; }
|
|
.mono { font-family:"JetBrains Mono", ui-monospace, monospace; font-size:.86em;
|
|
font-variant-numeric:tabular-nums; }
|
|
header { padding:72px 0 8px; border-bottom:1px solid var(--trait); margin-bottom:2.5rem; }
|
|
.etiq { font-size:.72rem; font-weight:700; letter-spacing:.14em;
|
|
text-transform:uppercase; color:var(--sourd); margin-bottom:1.6rem; }
|
|
.chapeau { font-size:1.2rem; line-height:1.55; color:var(--sourd);
|
|
max-width:56ch; margin-bottom:2rem; }
|
|
.maj { font-size:.8rem; color:var(--sourd); padding-bottom:1.4rem; }
|
|
.verdict { display:grid; gap:1px; background:var(--trait);
|
|
grid-template-columns:repeat(auto-fit,minmax(155px,1fr));
|
|
border:1px solid var(--trait); border-radius:10px; overflow:hidden; margin:2rem 0 0; }
|
|
.verdict div { background:var(--carte); padding:18px 20px; }
|
|
.verdict .n { font-family:Chivo, "Helvetica Neue", Arial, sans-serif; font-weight:900; font-size:2.3rem;
|
|
line-height:1; font-variant-numeric:tabular-nums; }
|
|
.verdict .l { font-size:.86rem; color:var(--sourd); margin-top:.45em; line-height:1.35; }
|
|
figure { margin:2rem 0; }
|
|
.cadre { background:var(--carte); border:1px solid var(--trait); border-radius:10px;
|
|
padding:22px 20px; overflow-x:auto; }
|
|
svg { display:block; min-width:640px; width:100%; height:auto; }
|
|
.fm { font-size:12.5px; font-weight:700; fill:var(--encre); }
|
|
.fp { font-size:10.5px; fill:var(--sourd); font-family:"Source Serif 4", Georgia, serif; }
|
|
.fc { font-size:9.5px; fill:var(--sourd); text-anchor:end; font-family:"JetBrains Mono",monospace; }
|
|
.fv { font-size:9.5px; fill:var(--sourd); font-family:"JetBrains Mono",monospace; }
|
|
.fr { font-size:9.5px; fill:var(--sourd); text-anchor:middle; font-family:"JetBrains Mono",monospace; }
|
|
.rep { stroke:var(--trait-fort); stroke-width:1; stroke-dasharray:2 4; }
|
|
figcaption { font-size:.88rem; color:var(--sourd); margin-top:.9rem;
|
|
max-width:62ch; line-height:1.65; }
|
|
.tabl { overflow-x:auto; margin:1.6rem 0; border:1px solid var(--trait);
|
|
border-radius:10px; background:var(--carte); }
|
|
table { border-collapse:collapse; width:100%; min-width:680px;
|
|
font-family:"Source Serif 4", Georgia, serif; font-size:.94rem; }
|
|
th { font-family:Chivo, "Helvetica Neue", Arial, sans-serif; font-size:.7rem; font-weight:700;
|
|
letter-spacing:.08em; text-transform:uppercase; color:var(--sourd);
|
|
text-align:left; padding:13px 14px; border-bottom:1px solid var(--trait); }
|
|
td { padding:11px 14px; border-bottom:1px solid var(--trait); vertical-align:top; }
|
|
tr:last-child td { border-bottom:none; }
|
|
tr.mal td { background:var(--lueur); }
|
|
.num { text-align:right; font-variant-numeric:tabular-nums;
|
|
font-family:"JetBrains Mono",monospace; font-size:.85rem; }
|
|
.gros { font-weight:700; font-size:1rem; }
|
|
.cel { font-family:"JetBrains Mono",monospace; font-size:.8rem; color:var(--sourd); }
|
|
.etat { font-size:.85rem; color:var(--sourd); }
|
|
.h { font-weight:700; white-space:nowrap; }
|
|
.note { color:var(--sourd); font-size:.88rem; }
|
|
table.mini { min-width:0; width:auto; margin:1.2rem 0; border:1px solid var(--trait);
|
|
border-radius:8px; }
|
|
table.mini th { padding:9px 16px; } table.mini td { padding:8px 16px; }
|
|
.legende { display:flex; flex-wrap:wrap; gap:18px; font-size:.85rem;
|
|
color:var(--sourd); margin-top:1rem; }
|
|
.legende span { display:inline-flex; align-items:center; gap:7px; }
|
|
.pastille { width:11px; height:11px; border-radius:3px; display:inline-block; }
|
|
.encart { border-left:3px solid var(--grave); background:var(--carte);
|
|
padding:16px 20px; margin:1.8rem 0; border-radius:0 8px 8px 0; }
|
|
.encart p:last-child { margin-bottom:0; }
|
|
ol, ul { padding-left:1.3em; } li { margin-bottom:.7em; }
|
|
footer { margin-top:5rem; padding-top:1.6rem; border-top:1px solid var(--trait);
|
|
font-size:.85rem; color:var(--sourd); line-height:1.6; }
|
|
</style>
|
|
|
|
<div class="page">
|
|
<header>
|
|
<div class="etiq">Pylontech pack · diagnosis in progress</div>
|
|
<h1>The Hundred and Five Cells</h1>
|
|
<p class="chapeau">Eight modules, fifteen cells each. Ten of those cells throttle the charging of the other ninety-five. Here is which ones, how we know, and what can be done about it.</p>
|
|
<div class="maj">Last updated : 5 September 2026, 17:00</div>
|
|
</header>
|
|
|
|
<div class="verdict"><div><div class="n">10</div><div class="l">affected cells out of 105</div></div><div><div class="n">3</div><div class="l">modules involved out of 8</div></div><div><div class="n">5 s</div><div class="l">from threshold crossing to current cut</div></div><div><div class="n">30 A</div><div class="l">limit imposed on the whole pack, against 150 A nominal</div></div></div>
|
|
|
|
<div class="mesure"><h2><span class="num">1</span>The verdict</h2><p>The pack is not worn out. Four modules out of eight are <strong>flawless</strong>:
|
|
sixty cells without a single anomaly, after more than three hundred cycles. A
|
|
fifth is just as clean.</p>
|
|
<p>Three modules carry the entire problem, and within those three, <strong>ten
|
|
cells</strong>. When one of them reaches 3550 mV the BMS reduces the charge
|
|
current — not for its own module, but <strong>for the whole pack</strong>. Five
|
|
healthy modules are throttled by ten cells.</p></div>
|
|
|
|
<figure>
|
|
<div class="cadre"><svg viewBox="0 0 760 1064" role="img"><line x1="268.0" y1="0" x2="268.0" y2="1046" class="rep"/><text x="268.0" y="1058" class="fr">200 mV</text><line x1="440.0" y1="0" x2="440.0" y2="1046" class="rep"/><text x="440.0" y="1058" class="fr">400 mV</text><line x1="612.0" y1="0" x2="612.0" y2="1046" class="rep"/><text x="612.0" y="1058" class="fr">600 mV</text><text x="0" y="13" class="fm">0323</text><text x="0" y="25" class="fp">older pack · address 2 — THE CONTROL</text><text x="88" y="36" class="fc">1</text><rect x="96" y="28" width="164.3" height="10" rx="2" fill="var(--sain)"/><text x="266.26" y="37" class="fv">191</text><text x="88" y="51" class="fc">2</text><rect x="96" y="43" width="161.7" height="10" rx="2" fill="var(--sain)"/><text x="263.68" y="52" class="fv">188</text><text x="88" y="66" class="fc">3</text><rect x="96" y="58" width="161.7" height="10" rx="2" fill="var(--sain)"/><text x="263.68" y="67" class="fv">188</text><text x="88" y="81" class="fc">4</text><rect x="96" y="73" width="162.5" height="10" rx="2" fill="var(--sain)"/><text x="264.53999999999996" y="82" class="fv">189</text><text x="88" y="96" class="fc">5</text><rect x="96" y="88" width="163.4" height="10" rx="2" fill="var(--sain)"/><text x="265.4" y="97" class="fv">190</text><text x="88" y="111" class="fc">6</text><rect x="96" y="103" width="169.4" height="10" rx="2" fill="var(--sain)"/><text x="271.41999999999996" y="112" class="fv">197</text><text x="88" y="126" class="fc">7</text><rect x="96" y="118" width="160.8" height="10" rx="2" fill="var(--sain)"/><text x="262.82" y="127" class="fv">187</text><text x="88" y="141" class="fc">8</text><rect x="96" y="133" width="163.4" height="10" rx="2" fill="var(--sain)"/><text x="265.4" y="142" class="fv">190</text><text x="88" y="156" class="fc">9</text><rect x="96" y="148" width="162.5" height="10" rx="2" fill="var(--sain)"/><text x="264.53999999999996" y="157" class="fv">189</text><text x="88" y="171" class="fc">10</text><rect x="96" y="163" width="165.1" height="10" rx="2" fill="var(--sain)"/><text x="267.12" y="172" class="fv">192</text><text x="88" y="186" class="fc">11</text><rect x="96" y="178" width="164.3" height="10" rx="2" fill="var(--sain)"/><text x="266.26" y="187" class="fv">191</text><text x="88" y="201" class="fc">12</text><rect x="96" y="193" width="161.7" height="10" rx="2" fill="var(--sain)"/><text x="263.68" y="202" class="fv">188</text><text x="88" y="216" class="fc">13</text><rect x="96" y="208" width="160.8" height="10" rx="2" fill="var(--sain)"/><text x="262.82" y="217" class="fv">187</text><text x="88" y="231" class="fc">14</text><rect x="96" y="223" width="165.1" height="10" rx="2" fill="var(--sain)"/><text x="267.12" y="232" class="fv">192</text><text x="88" y="246" class="fc">15</text><rect x="96" y="238" width="170.3" height="10" rx="2" fill="var(--sain)"/><text x="272.28" y="247" class="fv">198</text><text x="0" y="278" class="fm">0322</text><text x="0" y="290" class="fp">older pack · address 1</text><text x="88" y="301" class="fc">1</text><rect x="96" y="293" width="156.5" height="10" rx="2" fill="var(--sain)"/><text x="258.52" y="302" class="fv">182</text><text x="88" y="316" class="fc">2</text><rect x="96" y="308" width="153.1" height="10" rx="2" fill="var(--sain)"/><text x="255.07999999999998" y="317" class="fv">178</text><text x="88" y="331" class="fc">3</text><rect x="96" y="323" width="153.1" height="10" rx="2" fill="var(--sain)"/><text x="255.07999999999998" y="332" class="fv">178</text><text x="88" y="346" class="fc">4</text><rect x="96" y="338" width="153.1" height="10" rx="2" fill="var(--sain)"/><text x="255.07999999999998" y="347" class="fv">178</text><text x="88" y="361" class="fc">5</text><rect x="96" y="353" width="152.2" height="10" rx="2" fill="var(--sain)"/><text x="254.22" y="362" class="fv">177</text><text x="88" y="376" class="fc">6</text><rect x="96" y="368" width="471.3" height="10" rx="2" fill="var(--grave)"/><text x="573.28" y="377" class="fv">548</text><text x="88" y="391" class="fc">7</text><rect x="96" y="383" width="319.1" height="10" rx="2" fill="var(--attention)"/><text x="421.06" y="392" class="fv">371</text><text x="88" y="406" class="fc">8</text><rect x="96" y="398" width="155.7" height="10" rx="2" fill="var(--sain)"/><text x="257.65999999999997" y="407" class="fv">181</text><text x="88" y="421" class="fc">9</text><rect x="96" y="413" width="153.9" height="10" rx="2" fill="var(--sain)"/><text x="255.94" y="422" class="fv">179</text><text x="88" y="436" class="fc">10</text><rect x="96" y="428" width="153.9" height="10" rx="2" fill="var(--sain)"/><text x="255.94" y="437" class="fv">179</text><text x="88" y="451" class="fc">11</text><rect x="96" y="443" width="156.5" height="10" rx="2" fill="var(--sain)"/><text x="258.52" y="452" class="fv">182</text><text x="88" y="466" class="fc">12</text><rect x="96" y="458" width="594.3" height="10" rx="2" fill="var(--mort)"/><text x="696.26" y="467" class="fv">691</text><text x="88" y="481" class="fc">13</text><rect x="96" y="473" width="153.1" height="10" rx="2" fill="var(--sain)"/><text x="255.07999999999998" y="482" class="fv">178</text><text x="88" y="496" class="fc">14</text><rect x="96" y="488" width="234.8" height="10" rx="2" fill="var(--attention)"/><text x="336.78" y="497" class="fv">273</text><text x="88" y="511" class="fc">15</text><rect x="96" y="503" width="153.1" height="10" rx="2" fill="var(--sain)"/><text x="255.07999999999998" y="512" class="fv">178</text><text x="0" y="543" class="fm">0319</text><text x="0" y="555" class="fp">older pack · address 3</text><text x="88" y="566" class="fc">1</text><rect x="96" y="558" width="157.4" height="10" rx="2" fill="var(--sain)"/><text x="259.38" y="567" class="fv">183</text><text x="88" y="581" class="fc">2</text><rect x="96" y="573" width="448.1" height="10" rx="2" fill="var(--grave)"/><text x="550.06" y="582" class="fv">521</text><text x="88" y="596" class="fc">3</text><rect x="96" y="588" width="158.2" height="10" rx="2" fill="var(--sain)"/><text x="260.24" y="597" class="fv">184</text><text x="88" y="611" class="fc">4</text><rect x="96" y="603" width="160.0" height="10" rx="2" fill="var(--sain)"/><text x="261.96000000000004" y="612" class="fv">186</text><text x="88" y="626" class="fc">5</text><rect x="96" y="618" width="156.5" height="10" rx="2" fill="var(--sain)"/><text x="258.52" y="627" class="fv">182</text><text x="88" y="641" class="fc">6</text><rect x="96" y="633" width="273.5" height="10" rx="2" fill="var(--attention)"/><text x="375.48" y="642" class="fv">318</text><text x="88" y="656" class="fc">7</text><rect x="96" y="648" width="157.4" height="10" rx="2" fill="var(--sain)"/><text x="259.38" y="657" class="fv">183</text><text x="88" y="671" class="fc">8</text><rect x="96" y="663" width="160.0" height="10" rx="2" fill="var(--sain)"/><text x="261.96000000000004" y="672" class="fv">186</text><text x="88" y="686" class="fc">9</text><rect x="96" y="678" width="158.2" height="10" rx="2" fill="var(--sain)"/><text x="260.24" y="687" class="fv">184</text><text x="88" y="701" class="fc">10</text><rect x="96" y="693" width="406.8" height="10" rx="2" fill="var(--grave)"/><text x="508.78" y="702" class="fv">473</text><text x="88" y="716" class="fc">11</text><rect x="96" y="708" width="158.2" height="10" rx="2" fill="var(--sain)"/><text x="260.24" y="717" class="fv">184</text><text x="88" y="731" class="fc">12</text><rect x="96" y="723" width="381.0" height="10" rx="2" fill="var(--grave)"/><text x="482.98" y="732" class="fv">443</text><text x="88" y="746" class="fc">13</text><rect x="96" y="738" width="158.2" height="10" rx="2" fill="var(--sain)"/><text x="260.24" y="747" class="fv">184</text><text x="88" y="761" class="fc">14</text><rect x="96" y="753" width="161.7" height="10" rx="2" fill="var(--sain)"/><text x="263.68" y="762" class="fv">188</text><text x="88" y="776" class="fc">15</text><rect x="96" y="768" width="364.6" height="10" rx="2" fill="var(--grave)"/><text x="466.64" y="777" class="fv">424</text><text x="0" y="808" class="fm">0324</text><text x="0" y="820" class="fp">isolated (BAT3) · address 4</text><text x="88" y="831" class="fc">1</text><rect x="96" y="823" width="118.7" height="10" rx="2" fill="var(--sain)"/><text x="220.68" y="832" class="fv">138</text><text x="88" y="846" class="fc">2</text><rect x="96" y="838" width="106.6" height="10" rx="2" fill="var(--sain)"/><text x="208.64" y="847" class="fv">124</text><text x="88" y="861" class="fc">3</text><rect x="96" y="853" width="118.7" height="10" rx="2" fill="var(--sain)"/><text x="220.68" y="862" class="fv">138</text><text x="88" y="876" class="fc">4</text><rect x="96" y="868" width="117.8" height="10" rx="2" fill="var(--sain)"/><text x="219.82" y="877" class="fv">137</text><text x="88" y="891" class="fc">5</text><rect x="96" y="883" width="119.5" height="10" rx="2" fill="var(--sain)"/><text x="221.54" y="892" class="fv">139</text><text x="88" y="906" class="fc">6</text><rect x="96" y="898" width="113.5" height="10" rx="2" fill="var(--sain)"/><text x="215.51999999999998" y="907" class="fv">132</text><text x="88" y="921" class="fc">7</text><rect x="96" y="913" width="115.2" height="10" rx="2" fill="var(--sain)"/><text x="217.24" y="922" class="fv">134</text><text x="88" y="936" class="fc">8</text><rect x="96" y="928" width="122.1" height="10" rx="2" fill="var(--sain)"/><text x="224.12" y="937" class="fv">142</text><text x="88" y="951" class="fc">9</text><rect x="96" y="943" width="123.0" height="10" rx="2" fill="var(--sain)"/><text x="224.98000000000002" y="952" class="fv">143</text><text x="88" y="966" class="fc">10</text><rect x="96" y="958" width="116.1" height="10" rx="2" fill="var(--sain)"/><text x="218.1" y="967" class="fv">135</text><text x="88" y="981" class="fc">11</text><rect x="96" y="973" width="117.0" height="10" rx="2" fill="var(--sain)"/><text x="218.95999999999998" y="982" class="fv">136</text><text x="88" y="996" class="fc">12</text><rect x="96" y="988" width="117.8" height="10" rx="2" fill="var(--sain)"/><text x="219.82" y="997" class="fv">137</text><text x="88" y="1011" class="fc">13</text><rect x="96" y="1003" width="110.1" height="10" rx="2" fill="var(--sain)"/><text x="212.07999999999998" y="1012" class="fv">128</text><text x="88" y="1026" class="fc">14</text><rect x="96" y="1018" width="116.1" height="10" rx="2" fill="var(--sain)"/><text x="218.1" y="1027" class="fv">135</text><text x="88" y="1041" class="fc">15</text><rect x="96" y="1033" width="587.4" height="10" rx="2" fill="var(--mort)"/><text x="689.38" y="1042" class="fv">683</text></svg></div>
|
|
<div class="legende"><span><i class="pastille" style="background:var(--sain)"></i>healthy</span><span><i class="pastille" style="background:var(--attention)"></i>drifting</span><span><i class="pastille" style="background:var(--grave)"></i>badly affected</span><span><i class="pastille" style="background:var(--mort)"></i>terminal</span></div>
|
|
<figcaption>Voltage span swept by each cell between its minimum and maximum over the
|
|
observation period. The first module is the <strong>control</strong>: it lives on
|
|
the same chain as the two damaged ones, has seen the same currents and the same
|
|
days, and its fifteen cells sit within <strong>eleven millivolts of span of each
|
|
other</strong>. A cell that has lost capacity fills and empties before its
|
|
neighbours, so it sweeps a far wider range at identical current — the sign
|
|
requires no disassembly. The isolated module shows smaller spans because it spent
|
|
the period out of service, over a narrower state-of-charge window: what matters
|
|
is the gap to its own neighbours, not the absolute value.</figcaption>
|
|
</figure>
|
|
|
|
<div class="mesure"><h2><span class="num">2</span>The pack, module by module</h2><p>A module's identity is its barcode, never its address: each chain renumbers
|
|
its modules from 1, so there are two “module 1” in this installation.</p></div>
|
|
<div class="tabl"><table><thead><tr><th>Barcode</th><th>Pack</th><th>Addr.</th><th>Affected cells</th><th>Which ones</th><th>Median spread</th><th>Overvoltage</th><th>Undervoltage</th><th></th></tr></thead><tbody><tr class="mal"><td class="mono">K220803C30160322</td><td>older</td><td class="num">1</td><td class="num gros">4</td><td class="cel">6 · 7 · 12 · 14</td><td class="num">108</td><td class="num">498</td><td class="num">86</td><td class="etat">in service</td></tr><tr class=""><td class="mono">K220803C30160323</td><td>older</td><td class="num">2</td><td class="num gros">0</td><td class="cel">—</td><td class="num">6</td><td class="num">0</td><td class="num">0</td><td class="etat">in service</td></tr><tr class="mal"><td class="mono">K220803C30160319</td><td>older</td><td class="num">3</td><td class="num gros">5</td><td class="cel">2 · 6 · 10 · 12 · 15</td><td class="num">45</td><td class="num">416</td><td class="num">179</td><td class="etat">in service</td></tr><tr class="mal"><td class="mono">K220803C30160324</td><td>older</td><td class="num">4</td><td class="num gros">1</td><td class="cel">15</td><td class="num">57</td><td class="num">29</td><td class="num">59</td><td class="etat">isolated</td></tr><tr class=""><td class="mono">Y230202C30371426</td><td>newer</td><td class="num">1</td><td class="num gros">0</td><td class="cel">—</td><td class="num">2</td><td class="num">1</td><td class="num">1</td><td class="etat">in service</td></tr><tr class=""><td class="mono">Y230202C30371425</td><td>newer</td><td class="num">2</td><td class="num gros">0</td><td class="cel">—</td><td class="num">2</td><td class="num">1</td><td class="num">1</td><td class="etat">in service</td></tr><tr class=""><td class="mono">Y230202C30371431</td><td>newer</td><td class="num">3</td><td class="num gros">0</td><td class="cel">—</td><td class="num">2</td><td class="num">1</td><td class="num">1</td><td class="etat">in service</td></tr><tr class=""><td class="mono">Y230202C30371427</td><td>newer</td><td class="num">4</td><td class="num gros">0</td><td class="cel">—</td><td class="num">2</td><td class="num">1</td><td class="num">0</td><td class="etat">in service</td></tr></tbody></table></div>
|
|
<div class="mesure"><p>Read the median spread column. The five healthy modules sit between
|
|
<strong>2 and 6 millivolts</strong>; the other three are at 45, 57 and 108. The
|
|
same contrast shows in the overvoltage counters: <strong>498</strong> for the
|
|
first module against <strong>one</strong> for each of the four in the newer pack,
|
|
which have nonetheless taken ten times more cycles.</p>
|
|
<p>All sixty cells of the newer pack sweep between 168 and 191 mV, without
|
|
exception. The inventory is closed.</p>
|
|
|
|
<h2><span class="num">3</span>The trip, timed</h2><p>On 5 September the console was connected to the three modules of the older
|
|
pack while the alarm was rising. What follows is the record, to the second.</p></div>
|
|
<div class="tabl"><table><thead><tr><th>Time</th><th>What happens</th><th></th></tr></thead><tbody><tr><td class="mono h">13:04:48</td><td>cell 7 of module …0322 at <b>3526 mV</b>, cell 6 of module …0319 at <b>3541</b></td><td class="note">below threshold</td></tr><tr><td class="mono h">13:05:08</td><td>the same two at <b>3555</b> and <b>3575 mV</b></td><td class="note">level 3 crossed</td></tr><tr><td class="mono h">13:05:13</td><td>the BMS drops the allowed charge current from <b>50 to 30 A</b></td><td class="note">five seconds later</td></tr><tr><td class="mono h">13:15:10</td><td>cells fall back to 3499 and 3522 mV, alarm clears</td><td class="note">the limit stays at 30 A</td></tr><tr><td class="mono h">13:22:40</td><td>limit <b>30 → 40 A</b></td><td class="note">after 7 min 31 s</td></tr><tr><td class="mono h">13:26:39</td><td>limit <b>40 → 35 A</b>, leading cells at 3563 and 3548 mV</td><td class="note">it trips again</td></tr><tr><td class="mono h">13:38:10</td><td>limit <b>35 → 40 A</b></td><td class="note">after 11 min 31 s</td></tr></tbody></table></div>
|
|
<div class="mesure">
|
|
<div class="encart"><p><strong>The most useful finding</strong> is in the fourth row: the alarm
|
|
clears well before the limit recovers. Looking for the alarm in the logs therefore
|
|
misses the bulk of the phenomenon — the alarm lasts minutes, the throttling lasts
|
|
hours.</p></div>
|
|
<p>The thresholds are not values we chose: they are the ones the hardware
|
|
declares, read from <span class="mono">sysinfo</span> on the LV-HUB.</p><ul><li><span class="mono">3480 mV</span> level 1</li><li><span class="mono">3520 mV</span> level 2</li><li><span class="mono">3550 mV</span> level 3 — current is reduced</li><li><span class="mono">3600 mV</span> level 4</li></ul>
|
|
|
|
<h2><span class="num">4</span>Internal resistance, or charge imbalance?</h2><p>The answer decides what balancing can give back. Two measurement points on
|
|
the same cell at two different currents settle it.</p>
|
|
<table class="mini"><tr><th></th><th>current per cell</th><th>spread</th></tr>
|
|
<tr><td class="mono">13:04:48</td><td class="num">6.33 A</td><td class="num">163 mV</td></tr>
|
|
<tr><td class="mono">14:05:42</td><td class="num">0.04 A</td><td class="num">46 mV</td></tr></table>
|
|
<p>The slope gives <strong>≈ 18.6 mΩ</strong> of excess internal resistance on the
|
|
leading cell, twenty to forty times that of a healthy one. The intercept,
|
|
<strong>≈ 46 mV</strong>, is the true charge imbalance.</p>
|
|
<p>Independent check: this line predicts 312 mV at 100 A pack current. The largest
|
|
spread actually recorded over thirty-seven days is 280 mV.</p>
|
|
<p>So of the ~190 mV of spread under charge, <strong>only 46 mV are an
|
|
imbalance</strong> — the rest is lost capacity. A perfect rebalance would bring the
|
|
trip from 3555 down to about 3510 mV: below the threshold, but with only forty
|
|
millivolts of margin.</p>
|
|
|
|
<h2><span class="num">5</span>Where the damage comes from</h2><p>Not from wear. The newer pack has taken three hundred and forty cycles in a
|
|
year and its sixty cells are intact: cycling does not damage these modules. And
|
|
the control module shared the chain, the currents and the days of the two damaged
|
|
ones without a scratch.</p>
|
|
<p>The two terminal cells went down to <span class="mono">2953</span> and
|
|
<span class="mono">2939 mV</span>, below the low-voltage alarm threshold. A
|
|
lithium iron phosphate cell taken there under load loses capacity irreversibly.
|
|
<strong>These cells did not age, they were discharged too deep.</strong></p>
|
|
|
|
<h2><span class="num">6</span>Three questions for Pylontech</h2>
|
|
<ol><li>Are these cells recoverable by a prolonged hold at high state of charge, or does the 18.6 mΩ resistive component make the attempt pointless?</li><li>Is there a recommended procedure for a module in this condition, and a limit beyond which module replacement is the only option?</li><li>What exactly does the per-cell <span class="mono">SOHCount</span> returned by the <span class="mono">soh</span> command count, and from what value does Pylontech consider a cell to require attention?</li></ol>
|
|
</div>
|
|
|
|
<footer>Measurements taken on the serial console of the Pylontech BMS units, which neither Home Assistant nor the Victron GX exposes: the system publishes only the pack aggregate. Self-consumption installation without grid feed-in, two MultiPlus-II 48/5000 in parallel. This report evolves as the work proceeds.</footer>
|
|
</div>
|