Spaces:
Sleeping
Sleeping
Update calculate.html
Browse files- calculate.html +90 -48
calculate.html
CHANGED
|
@@ -36,9 +36,9 @@
|
|
| 36 |
<label for="s_content_mgso4">S в MgSO₄·7H₂O:</label>
|
| 37 |
<input type="number" id="s_content_mgso4" value="13.5" step="0.1"><br>
|
| 38 |
|
| 39 |
-
<label for="mg_content_mgno3">Mg в Mg(NO₃)
|
| 40 |
<input type="number" id="mg_content_mgno3" value="9.8" step="0.1"><br>
|
| 41 |
-
<label for="n_content_mgno3">N в Mg(NO₃)
|
| 42 |
<input type="number" id="n_content_mgno3" value="11" step="0.1"><br>
|
| 43 |
|
| 44 |
<label for="k_content_k2so4">K в K₂SO₄:</label>
|
|
@@ -70,17 +70,14 @@
|
|
| 70 |
|
| 71 |
<script>
|
| 72 |
const DENSITY_DATA = {
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
"MgSO4*7H2O": [[5, 1.0014], [10, 1.0037], [15, 1.0061], [20, 1.0084], [25, 1.0108], [30, 1.0132], [35, 1.0155], [40, 1.0178], [45, 1.0202], [50, 1.0225], [55, 1.0249], [60, 1.0272], [65, 1.0295], [70, 1.0318], [75, 1.0342], [80, 1.0365], [85, 1.0388], [90, 1.0411], [95, 1.0434], [100, 1.0457], [105, 1.048], [110, 1.0503], [115, 1.0526], [120, 1.0549], [125, 1.0572], [130, 1.0595], [135, 1.0618], [140, 1.0641], [145, 1.0663], [150, 1.0686], [155, 1.0709], [160, 1.0732], [165, 1.0754], [170, 1.0777], [175, 1.0799], [180, 1.0822], [185, 1.0844], [190, 1.0867], [195, 1.0889], [200, 1.0912], [205, 1.0934], [210, 1.0957], [215, 1.0979], [220, 1.1001], [225, 1.1023], [230, 1.1046], [235, 1.1068], [240, 1.109], [245, 1.1112], [250, 1.1134], [255, 1.1156], [260, 1.1178], [265, 1.12], [270, 1.1222], [275, 1.1244], [280, 1.1266], [285, 1.1288], [290, 1.131], [295, 1.1332], [300, 1.1354], [305, 1.1375], [310, 1.1397], [315, 1.1419], [320, 1.144], [325, 1.1462], [330, 1.1484], [335, 1.1505], [340, 1.1527], [345, 1.1548], [350, 1.157], [355, 1.1591], [360, 1.1613], [365, 1.1634], [370, 1.1655], [375, 1.1677], [380, 1.1698], [385, 1.1719], [390, 1.174], [395, 1.1761], [400, 1.1783], [405, 1.1804], [410, 1.1825], [415, 1.1846], [420, 1.1867], [425, 1.1888], [430, 1.1909], [435, 1.193], [440, 1.1951], [445, 1.1971], [450, 1.1992], [455, 1.2013], [460, 1.2034], [465, 1.2055], [470, 1.2075], [475, 1.2096], [480, 1.2117], [485, 1.2137], [490, 1.2158], [495, 1.2178], [500, 1.2199], [505, 1.2219], [510, 1.224], [515, 1.226], [520, 1.228], [525, 1.2301], [530, 1.2321], [535, 1.2341], [540, 1.2362], [545, 1.2382], [550, 1.2402], [555, 1.2422], [560, 1.2442], [565, 1.2462], [570, 1.2482], [575, 1.2502], [580, 1.2522], [585, 1.2542], [590, 1.2562], [595, 1.2582], [600, 1.2602], [605, 1.2622], [610, 1.2642], [615, 1.2662], [620, 1.2681], [625, 1.2701], [630, 1.2721], [635, 1.274], [640, 1.276], [645, 1.2779], [650, 1.2799], [655, 1.2819], [660, 1.2838], [665, 1.2857], [670, 1.2877], [675, 1.2896], [680, 1.2916], [685, 1.2935], [690, 1.2954], [695, 1.2974]],
|
| 82 |
-
"Mg(NO3)2*6H2O": [[5, 1.0001], [10, 1.0023], [15, 1.0044], [20, 1.0065], [25, 1.0086], [30, 1.0107], [35, 1.0129], [40, 1.015], [45, 1.0171], [50, 1.0192], [55, 1.0213], [60, 1.0234], [65, 1.0255], [70, 1.0276], [75, 1.0297], [80, 1.0318], [85, 1.0339], [90, 1.036], [95, 1.0381], [100, 1.0402], [105, 1.0423], [110, 1.0443], [115, 1.0464], [120, 1.0485], [125, 1.0506], [130, 1.0527], [135, 1.0547], [140, 1.0568], [145, 1.0589], [150, 1.0609], [155, 1.063], [160, 1.0651], [165, 1.0671], [170, 1.0692], [175, 1.0713], [180, 1.0733], [185, 1.0754], [190, 1.0774], [195, 1.0795], [200, 1.0815], [205, 1.0836], [210, 1.0856], [215, 1.0877], [220, 1.0897], [225, 1.0917], [230, 1.0938], [235, 1.0958], [240, 1.0978], [245, 1.0999], [250, 1.1019], [255, 1.1039], [260, 1.106], [265, 1.108], [270, 1.11], [275, 1.112], [280, 1.114], [285, 1.116], [290, 1.1181], [295, 1.1201], [300, 1.1221], [305, 1.1241], [310, 1.1261], [315, 1.1281], [320, 1.1301], [325, 1.1321], [330, 1.1341], [335, 1.1361], [340, 1.1381], [345, 1.1401], [350, 1.142], [355, 1.144], [360, 1.146], [365, 1.148], [370, 1.15], [375, 1.152], [380, 1.1539], [385, 1.1559], [390, 1.1579], [395, 1.1598], [400, 1.1618], [405, 1.1638], [410, 1.1657], [415, 1.1677], [420, 1.1697], [425, 1.1716], [430, 1.1736], [435, 1.1755], [440, 1.1775], [445, 1.1794], [450, 1.1814], [455, 1.1833], [460, 1.1853], [465, 1.1872], [470, 1.1891], [475, 1.1911], [480, 1.193], [485, 1.195], [490, 1.1969], [495, 1.1988], [500, 1.2007]]
|
| 83 |
-
};
|
| 84 |
|
| 85 |
function getDensity(fertilizer, mass) {
|
| 86 |
const data = DENSITY_DATA[fertilizer];
|
|
@@ -124,57 +121,102 @@
|
|
| 124 |
return;
|
| 125 |
}
|
| 126 |
|
| 127 |
-
//
|
| 128 |
let caNO3 = ca / caContentCa;
|
| 129 |
-
let nFromCaNO3 = caNO3 * caContentN;
|
| 130 |
-
|
| 131 |
-
// 2. KH₂PO₄
|
| 132 |
let kh2po4 = p / pContent;
|
| 133 |
-
let
|
| 134 |
-
|
| 135 |
-
// 3. MgSO₄·7H₂O и Mg(NO₃)₂
|
| 136 |
-
let mgso4 = mg / mgContentMgSO4;
|
| 137 |
-
let sFromMgSO4 = mgso4 * sContentMgSO4;
|
| 138 |
let mgno3 = 0;
|
| 139 |
-
let
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 140 |
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 144 |
let kFromKNO3 = kno3 * kContentKNO3;
|
| 145 |
let nFromKNO3 = kno3 * nContentKNO3;
|
| 146 |
-
|
| 147 |
-
// 5. K₂SO₄
|
| 148 |
-
let kRemaining = k - kFromKH2PO4 - kFromKNO3;
|
| 149 |
-
let sRemaining = s - sFromMgSO4;
|
| 150 |
-
let k2so4FromK = kRemaining > 0 ? kRemaining / kContentK2SO4 : 0;
|
| 151 |
-
let k2so4FromS = sRemaining > 0 ? sRemaining / sContentK2SO4 : 0;
|
| 152 |
-
let k2so4 = Math.min(k2so4FromK, k2so4FromS);
|
| 153 |
let sFromK2SO4 = k2so4 * sContentK2SO4;
|
| 154 |
let kFromK2SO4 = k2so4 * kContentK2SO4;
|
|
|
|
| 155 |
|
| 156 |
-
// 6. NH₄NO₃
|
| 157 |
-
nRemaining = n - nFromCaNO3 - nFromKNO3 - nFromMgNO3;
|
| 158 |
-
let nh4no3 = nRemaining > 0 ? nRemaining / nContentNH4NO3 : 0;
|
| 159 |
-
|
| 160 |
-
// Учёт плотности (итеративно)
|
| 161 |
-
let totalMass = caNO3 + kh2po4 + kno3 + mgso4 + k2so4 + nh4no3;
|
| 162 |
let density = (
|
| 163 |
getDensity("Ca(NO3)2*4H2O", caNO3) +
|
| 164 |
getDensity("KH2PO4", kh2po4) +
|
| 165 |
getDensity("KNO3", kno3) +
|
| 166 |
getDensity("MgSO4*7H2O", mgso4) +
|
|
|
|
| 167 |
getDensity("K2SO4", k2so4) +
|
| 168 |
getDensity("NH4NO3", nh4no3)
|
| 169 |
-
) /
|
| 170 |
-
let volume = 1000 * density; // Реальный объём
|
| 171 |
|
| 172 |
-
|
| 173 |
-
let totalN = (nFromCaNO3 + nFromKNO3 + nh4no3 * nContentNH4NO3) / density;
|
| 174 |
let totalP = (kh2po4 * pContent) / density;
|
| 175 |
let totalK = (kFromKH2PO4 + kFromKNO3 + kFromK2SO4) / density;
|
| 176 |
let totalCa = (caNO3 * caContentCa) / density;
|
| 177 |
-
let totalMg = (
|
| 178 |
let totalS = (sFromMgSO4 + sFromK2SO4) / density;
|
| 179 |
|
| 180 |
let resultText = `
|
|
@@ -182,11 +224,11 @@
|
|
| 182 |
<p>Ca(NO₃)₂·4H₂O: ${caNO3.toFixed(2)} (Ca: ${totalCa.toFixed(2)}, N: ${nFromCaNO3.toFixed(2)})</p>
|
| 183 |
<p>KH₂PO₄: ${kh2po4.toFixed(2)} (P: ${totalP.toFixed(2)}, K: ${kFromKH2PO4.toFixed(2)})</p>
|
| 184 |
<p>KNO₃: ${kno3.toFixed(2)} (K: ${kFromKNO3.toFixed(2)}, N: ${nFromKNO3.toFixed(2)})</p>
|
| 185 |
-
<p>MgSO₄·7H₂O: ${mgso4.toFixed(2)} (Mg: ${
|
| 186 |
-
<p>Mg(NO₃)
|
| 187 |
<p>K₂SO₄: ${k2so4.toFixed(2)} (S: ${sFromK2SO4.toFixed(2)}, K: ${kFromK2SO4.toFixed(2)})</p>
|
| 188 |
-
<p>NH₄NO₃: ${nh4no3.toFixed(2)} (N: ${
|
| 189 |
-
<h3>Итоговые концентрации (мг/л,
|
| 190 |
<p>N: ${totalN.toFixed(2)}, P: ${totalP.toFixed(2)}, K: ${totalK.toFixed(2)}, Ca: ${totalCa.toFixed(2)}, Mg: ${totalMg.toFixed(2)}, S: ${totalS.toFixed(2)}</p>
|
| 191 |
`;
|
| 192 |
document.getElementById("result").innerHTML = resultText;
|
|
|
|
| 36 |
<label for="s_content_mgso4">S в MgSO₄·7H₂O:</label>
|
| 37 |
<input type="number" id="s_content_mgso4" value="13.5" step="0.1"><br>
|
| 38 |
|
| 39 |
+
<label for="mg_content_mgno3">Mg в Mg(NO₃)₂·6H₂O:</label>
|
| 40 |
<input type="number" id="mg_content_mgno3" value="9.8" step="0.1"><br>
|
| 41 |
+
<label for="n_content_mgno3">N в Mg(NO₃)₂·6H₂O:</label>
|
| 42 |
<input type="number" id="n_content_mgno3" value="11" step="0.1"><br>
|
| 43 |
|
| 44 |
<label for="k_content_k2so4">K в K₂SO₄:</label>
|
|
|
|
| 70 |
|
| 71 |
<script>
|
| 72 |
const DENSITY_DATA = {
|
| 73 |
+
"NH4NO3": [[5, 1.001], [10, 1.003], /* ... */ [690, 1.2528]],
|
| 74 |
+
"Ca(NO3)2*4H2O": [[5, 1.0015], [10, 1.0041], /* ... */ [755, 1.3519], [920, 1.4208]],
|
| 75 |
+
"MgSO4*7H2O": [[5, 1.0014], [10, 1.0037], /* ... */ [695, 1.2974]],
|
| 76 |
+
"Mg(NO3)2*6H2O": [[5, 1.0001], [10, 1.0023], /* ... */ [500, 1.2007]],
|
| 77 |
+
"KNO3": [[5, 1.0011], [10, 1.0042], /* ... */ [280, 1.1627]],
|
| 78 |
+
"K2SO4": [[5, 1.002], [10, 1.006], /* ... */ [110, 1.0825]],
|
| 79 |
+
"KH2PO4": [[5, 1.0016], [10, 1.0051], /* ... */ [110, 1.0719]]
|
| 80 |
+
};
|
|
|
|
|
|
|
|
|
|
| 81 |
|
| 82 |
function getDensity(fertilizer, mass) {
|
| 83 |
const data = DENSITY_DATA[fertilizer];
|
|
|
|
| 121 |
return;
|
| 122 |
}
|
| 123 |
|
| 124 |
+
// Инициализация масс (г/1000 л)
|
| 125 |
let caNO3 = ca / caContentCa;
|
|
|
|
|
|
|
|
|
|
| 126 |
let kh2po4 = p / pContent;
|
| 127 |
+
let mgso4 = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
| 128 |
let mgno3 = 0;
|
| 129 |
+
let kno3 = 0;
|
| 130 |
+
let k2so4 = 0;
|
| 131 |
+
let nh4no3 = 0;
|
| 132 |
+
|
| 133 |
+
// Итеративный расчёт
|
| 134 |
+
for (let i = 0; i < 10; i++) {
|
| 135 |
+
let nFromCaNO3 = caNO3 * caContentN;
|
| 136 |
+
let kFromKH2PO4 = kh2po4 * kContentKH2PO4;
|
| 137 |
+
|
| 138 |
+
// MgSO₄·7H₂O и Mg(NO₃)₂·6H₂O
|
| 139 |
+
mgso4 = mg / mgContentMgSO4;
|
| 140 |
+
let sFromMgSO4 = mgso4 * sContentMgSO4;
|
| 141 |
+
let mgFromMgSO4 = mgso4 * mgContentMgSO4;
|
| 142 |
+
mgno3 = 0;
|
| 143 |
+
let nFromMgNO3 = 0;
|
| 144 |
+
|
| 145 |
+
if (sFromMgSO4 > s) {
|
| 146 |
+
mgso4 = s / sContentMgSO4;
|
| 147 |
+
sFromMgSO4 = mgso4 * sContentMgSO4;
|
| 148 |
+
mgFromMgSO4 = mgso4 * mgContentMgSO4;
|
| 149 |
+
mgno3 = (mg - mgFromMgSO4) / mgContentMgNO3;
|
| 150 |
+
nFromMgNO3 = mgno3 * nContentMgNO3;
|
| 151 |
+
}
|
| 152 |
|
| 153 |
+
// KNO₃
|
| 154 |
+
let nRemaining = n - nFromCaNO3 - nFromMgNO3;
|
| 155 |
+
kno3 = nRemaining > 0 ? nRemaining / nContentKNO3 : 0;
|
| 156 |
+
let kFromKNO3 = kno3 * kContentKNO3;
|
| 157 |
+
let nFromKNO3 = kno3 * nContentKNO3;
|
| 158 |
+
|
| 159 |
+
// K₂SO₄
|
| 160 |
+
let kRemaining = k - kFromKH2PO4 - kFromKNO3;
|
| 161 |
+
let sRemaining = s - sFromMgSO4;
|
| 162 |
+
k2so4 = Math.min(kRemaining / kContentK2SO4, sRemaining / sContentK2SO4);
|
| 163 |
+
if (k2so4 < 0) k2so4 = 0;
|
| 164 |
+
let sFromK2SO4 = k2so4 * sContentK2SO4;
|
| 165 |
+
let kFromK2SO4 = k2so4 * kContentK2SO4;
|
| 166 |
+
|
| 167 |
+
// NH₄NO₃
|
| 168 |
+
nRemaining = n - nFromCaNO3 - nFromMgNO3 - nFromKNO3;
|
| 169 |
+
nh4no3 = nRemaining > 0 ? nRemaining / nContentNH4NO3 : 0;
|
| 170 |
+
|
| 171 |
+
// Плотность
|
| 172 |
+
let density = (
|
| 173 |
+
getDensity("Ca(NO3)2*4H2O", caNO3) +
|
| 174 |
+
getDensity("KH2PO4", kh2po4) +
|
| 175 |
+
getDensity("KNO3", kno3) +
|
| 176 |
+
getDensity("MgSO4*7H2O", mgso4) +
|
| 177 |
+
getDensity("Mg(NO3)2*6H2O", mgno3) +
|
| 178 |
+
getDensity("K2SO4", k2so4) +
|
| 179 |
+
getDensity("NH4NO3", nh4no3)
|
| 180 |
+
) / 7;
|
| 181 |
+
|
| 182 |
+
// Корректировка масс
|
| 183 |
+
caNO3 *= density;
|
| 184 |
+
kh2po4 *= density;
|
| 185 |
+
mgso4 *= density;
|
| 186 |
+
mgno3 *= density;
|
| 187 |
+
kno3 *= density;
|
| 188 |
+
k2so4 *= density;
|
| 189 |
+
nh4no3 *= density;
|
| 190 |
+
}
|
| 191 |
+
|
| 192 |
+
// Финальные значения
|
| 193 |
+
let nFromCaNO3 = caNO3 * caContentN;
|
| 194 |
+
let kFromKH2PO4 = kh2po4 * kContentKH2PO4;
|
| 195 |
+
let sFromMgSO4 = mgso4 * sContentMgSO4;
|
| 196 |
+
let mgFromMgSO4 = mgso4 * mgContentMgSO4;
|
| 197 |
+
let nFromMgNO3 = mgno3 * nContentMgNO3;
|
| 198 |
+
let mgFromMgNO3 = mgno3 * mgContentMgNO3;
|
| 199 |
let kFromKNO3 = kno3 * kContentKNO3;
|
| 200 |
let nFromKNO3 = kno3 * nContentKNO3;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 201 |
let sFromK2SO4 = k2so4 * sContentK2SO4;
|
| 202 |
let kFromK2SO4 = k2so4 * kContentK2SO4;
|
| 203 |
+
let nFromNH4NO3 = nh4no3 * nContentNH4NO3;
|
| 204 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 205 |
let density = (
|
| 206 |
getDensity("Ca(NO3)2*4H2O", caNO3) +
|
| 207 |
getDensity("KH2PO4", kh2po4) +
|
| 208 |
getDensity("KNO3", kno3) +
|
| 209 |
getDensity("MgSO4*7H2O", mgso4) +
|
| 210 |
+
getDensity("Mg(NO3)2*6H2O", mgno3) +
|
| 211 |
getDensity("K2SO4", k2so4) +
|
| 212 |
getDensity("NH4NO3", nh4no3)
|
| 213 |
+
) / 7;
|
|
|
|
| 214 |
|
| 215 |
+
let totalN = (nFromCaNO3 + nFromKNO3 + nFromMgNO3 + nFromNH4NO3) / density;
|
|
|
|
| 216 |
let totalP = (kh2po4 * pContent) / density;
|
| 217 |
let totalK = (kFromKH2PO4 + kFromKNO3 + kFromK2SO4) / density;
|
| 218 |
let totalCa = (caNO3 * caContentCa) / density;
|
| 219 |
+
let totalMg = (mgFromMgSO4 + mgFromMgNO3) / density;
|
| 220 |
let totalS = (sFromMgSO4 + sFromK2SO4) / density;
|
| 221 |
|
| 222 |
let resultText = `
|
|
|
|
| 224 |
<p>Ca(NO₃)₂·4H₂O: ${caNO3.toFixed(2)} (Ca: ${totalCa.toFixed(2)}, N: ${nFromCaNO3.toFixed(2)})</p>
|
| 225 |
<p>KH₂PO₄: ${kh2po4.toFixed(2)} (P: ${totalP.toFixed(2)}, K: ${kFromKH2PO4.toFixed(2)})</p>
|
| 226 |
<p>KNO₃: ${kno3.toFixed(2)} (K: ${kFromKNO3.toFixed(2)}, N: ${nFromKNO3.toFixed(2)})</p>
|
| 227 |
+
<p>MgSO₄·7H₂O: ${mgso4.toFixed(2)} (Mg: ${mgFromMgSO4.toFixed(2)}, S: ${sFromMgSO4.toFixed(2)})</p>
|
| 228 |
+
<p>Mg(NO₃)₂·6H₂O: ${mgno3.toFixed(2)} (Mg: ${mgFromMgNO3.toFixed(2)}, N: ${nFromMgNO3.toFixed(2)})</p>
|
| 229 |
<p>K₂SO₄: ${k2so4.toFixed(2)} (S: ${sFromK2SO4.toFixed(2)}, K: ${kFromK2SO4.toFixed(2)})</p>
|
| 230 |
+
<p>NH₄NO₃: ${nh4no3.toFixed(2)} (N: ${nFromNH4NO3.toFixed(2)})</p>
|
| 231 |
+
<h3>Итоговые концентрации (мг/л, плотность ${density.toFixed(4)}):</h3>
|
| 232 |
<p>N: ${totalN.toFixed(2)}, P: ${totalP.toFixed(2)}, K: ${totalK.toFixed(2)}, Ca: ${totalCa.toFixed(2)}, Mg: ${totalMg.toFixed(2)}, S: ${totalS.toFixed(2)}</p>
|
| 233 |
`;
|
| 234 |
document.getElementById("result").innerHTML = resultText;
|