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;
|