Spaces:
Sleeping
Sleeping
Update calculate.html
Browse files- calculate.html +116 -86
calculate.html
CHANGED
@@ -78,93 +78,123 @@
|
|
78 |
document.getElementById('n_ratio_value').textContent = ratio;
|
79 |
});
|
80 |
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
const k2so4ContentS = parseFloat(document.getElementById("k2so4_content_s").value) / 100;
|
93 |
-
const nh4no3ContentN = parseFloat(document.getElementById("nh4no3_content_n").value) / 100;
|
94 |
-
|
95 |
-
// Требуемые концентрации (мг/л)
|
96 |
-
const ca = parseFloat(document.getElementById("ca").value) || 0;
|
97 |
-
const p = parseFloat(document.getElementById("p").value) || 0;
|
98 |
-
const k = parseFloat(document.getElementById("k").value) || 0;
|
99 |
-
const mg = parseFloat(document.getElementById("mg").value) || 0;
|
100 |
-
const s = parseFloat(document.getElementById("s").value) || 0;
|
101 |
-
const nitrogen = parseFloat(document.getElementById("nitrogen").value) || 0;
|
102 |
-
const nRatio = parseFloat(document.getElementById("n_ratio").value) / 10;
|
103 |
-
|
104 |
-
// Проверка ввода
|
105 |
-
if ([ca, p, k, mg, s, nitrogen].some(v => isNaN(v))) {
|
106 |
-
document.getElementById("result").innerHTML = "Введите все значения!";
|
107 |
-
return;
|
108 |
-
}
|
109 |
-
|
110 |
-
// Расчёт
|
111 |
-
let kh2po4 = p / kh2po4ContentP;
|
112 |
-
let kFromKH2PO4 = kh2po4 * kh2po4ContentK;
|
113 |
-
|
114 |
-
let caNO3FromCa = ca / caContentCa;
|
115 |
-
let nFromCaNO3Min = caNO3FromCa * caContentN;
|
116 |
-
|
117 |
-
let nFromNH4NO3 = nitrogen * nRatio;
|
118 |
-
let nh4no3 = nFromNH4NO3 / nh4no3ContentN;
|
119 |
-
|
120 |
-
let mgso4 = mg / mgso4ContentMg;
|
121 |
-
let sFromMgSO4 = mgso4 * mgso4ContentS;
|
122 |
-
|
123 |
-
let kRemaining = k - kFromKH2PO4;
|
124 |
-
let kno3 = kRemaining > 0 ? kRemaining / kno3ContentK : 0;
|
125 |
-
let nFromKNO3 = kno3 * kno3ContentN;
|
126 |
-
|
127 |
-
let totalN = nFromCaNO3Min + nFromNH4NO3 + nFromKNO3;
|
128 |
-
let nDelta = nitrogen - totalN;
|
129 |
-
let caNO3Extra = nDelta > 0 ? nDelta / caContentN : 0;
|
130 |
-
let caNO3Total = caNO3FromCa + caNO3Extra;
|
131 |
-
|
132 |
-
let totalS = sFromMgSO4;
|
133 |
-
let sRemaining = s - totalS;
|
134 |
-
let k2so4 = sRemaining > 0 ? sRemaining / k2so4ContentS : 0;
|
135 |
-
let kFromK2SO4 = k2so4 * k2so4ContentK;
|
136 |
-
|
137 |
-
// Проверка, не превышает ли K₂SO₄ допустимое количество калия
|
138 |
-
let totalK = kFromKH2PO4 + kFromK2SO4 + kno3 * kno3ContentK;
|
139 |
-
if (totalK > k) {
|
140 |
-
let excessK = totalK - k;
|
141 |
-
let k2so4Reduction = excessK / k2so4ContentK;
|
142 |
-
k2so4 = Math.max(0, k2so4 - k2so4Reduction);
|
143 |
-
totalK = kFromKH2PO4 + (k2so4 * k2so4ContentK) + kno3 * kno3ContentK;
|
144 |
-
}
|
145 |
-
|
146 |
-
totalN = (caNO3Total * caContentN + nh4no3 * nh4no3ContentN + kno3 * kno3ContentN).toFixed(2);
|
147 |
-
let totalP = (kh2po4 * kh2po4ContentP).toFixed(2);
|
148 |
-
totalK = totalK.toFixed(2);
|
149 |
-
let totalCa = (caNO3Total * caContentCa).toFixed(2);
|
150 |
-
let totalMg = (mgso4 * mgso4ContentMg).toFixed(2);
|
151 |
-
totalS = ((mgso4 * mgso4ContentS) + (k2so4 * k2so4ContentS)).toFixed(2);
|
152 |
-
|
153 |
-
// Отображение результатов
|
154 |
-
const result = `
|
155 |
-
<h3>Результат расчёта (г/1000 л):</h3>
|
156 |
-
<p>MgSO₄·7H₂O: ${mgso4.toFixed(2)} (Mg: ${totalMg}, S: ${sFromMgSO4.toFixed(2)})</p>
|
157 |
-
<p>K₂SO₄: ${k2so4.toFixed(2)} (K: ${(k2so4 * k2so4ContentK).toFixed(2)}, S: ${(k2so4 * k2so4ContentS).toFixed(2)})</p>
|
158 |
-
<p>KH₂PO₄: ${kh2po4.toFixed(2)} (P: ${totalP}, K: ${kFromKH2PO4.toFixed(2)})</p>
|
159 |
-
<p>KNO₃: ${kno3.toFixed(2)} (N: ${nFromKNO3.toFixed(2)}, K: ${(kno3 * kno3ContentK).toFixed(2)})</p>
|
160 |
-
<p>Ca(NO₃)₂·4H₂O: ${caNO3Total.toFixed(2)} (N: ${(caNO3Total * caContentN).toFixed(2)}, Ca: ${totalCa})</p>
|
161 |
-
<p>NH₄NO₃: ${nh4no3.toFixed(2)} (N: ${nFromNH4NO3.toFixed(2)})</p>
|
162 |
-
<h3>Итоговые концентрации (мг/л):</h3>
|
163 |
-
<p>N: ${totalN}, P: ${totalP}, K: ${totalK}, Ca: ${totalCa}, Mg: ${totalMg}, S: ${totalS}</p>
|
164 |
-
`;
|
165 |
-
document.getElementById("result").innerHTML = result;
|
166 |
-
}
|
167 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
168 |
</script>
|
169 |
</body>
|
170 |
</html>
|
|
|
78 |
document.getElementById('n_ratio_value').textContent = ratio;
|
79 |
});
|
80 |
|
81 |
+
<script>
|
82 |
+
document.getElementById('n_ratio').addEventListener('input', function() {
|
83 |
+
const ratio = (this.value / 10).toFixed(1);
|
84 |
+
document.getElementById('n_ratio_value').textContent = ratio;
|
85 |
+
});
|
86 |
+
|
87 |
+
<script>
|
88 |
+
document.getElementById('n_ratio').addEventListener('input', function() {
|
89 |
+
const ratio = (this.value / 10).toFixed(1);
|
90 |
+
document.getElementById('n_ratio_value').textContent = ratio;
|
91 |
+
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
|
93 |
+
function calculate() {
|
94 |
+
// Состав удобрений (% → доли)
|
95 |
+
const caContentCa = parseFloat(document.getElementById("ca_content_ca").value) / 100;
|
96 |
+
const caContentN = parseFloat(document.getElementById("ca_content_n").value) / 100;
|
97 |
+
const kh2po4ContentP = parseFloat(document.getElementById("kh2po4_content_p").value) / 100;
|
98 |
+
const kh2po4ContentK = parseFloat(document.getElementById("kh2po4_content_k").value) / 100;
|
99 |
+
const kno3ContentK = parseFloat(document.getElementById("kno3_content_k").value) / 100;
|
100 |
+
const kno3ContentN = parseFloat(document.getElementById("kno3_content_n").value) / 100;
|
101 |
+
const mgso4ContentMg = parseFloat(document.getElementById("mgso4_content_mg").value) / 100;
|
102 |
+
const mgso4ContentS = parseFloat(document.getElementById("mgso4_content_s").value) / 100;
|
103 |
+
const k2so4ContentK = parseFloat(document.getElementById("k2so4_content_k").value) / 100;
|
104 |
+
const k2so4ContentS = parseFloat(document.getElementById("k2so4_content_s").value) / 100;
|
105 |
+
const nh4no3ContentN = parseFloat(document.getElementById("nh4no3_content_n").value) / 100;
|
106 |
+
|
107 |
+
// Требуемые концентрации (мг/л)
|
108 |
+
const ca = parseFloat(document.getElementById("ca").value) || 0;
|
109 |
+
const p = parseFloat(document.getElementById("p").value) || 0;
|
110 |
+
const k = parseFloat(document.getElementById("k").value) || 0;
|
111 |
+
const mg = parseFloat(document.getElementById("mg").value) || 0;
|
112 |
+
const s = parseFloat(document.getElementById("s").value) || 0;
|
113 |
+
const nitrogen = parseFloat(document.getElementById("nitrogen").value) || 0;
|
114 |
+
const nRatio = parseFloat(document.getElementById("n_ratio").value) / 10;
|
115 |
+
|
116 |
+
// Проверка ввода
|
117 |
+
if ([ca, p, k, mg, s, nitrogen].some(v => isNaN(v))) {
|
118 |
+
document.getElementById("result").innerHTML = "Введите все значения!";
|
119 |
+
return;
|
120 |
+
}
|
121 |
+
|
122 |
+
// Расчёт
|
123 |
+
// 1. KH₂PO₄ от P
|
124 |
+
let kh2po4 = p / kh2po4ContentP;
|
125 |
+
let kFromKH2PO4 = kh2po4 * kh2po4ContentK;
|
126 |
+
|
127 |
+
// 2. Ca(NO₃)₂ от Ca
|
128 |
+
let caNO3FromCa = ca / caContentCa;
|
129 |
+
let nFromCaNO3Min = caNO3FromCa * caContentN;
|
130 |
+
|
131 |
+
// 3. NH₄NO₃ от nRatio
|
132 |
+
let nFromNH4NO3 = nitrogen * nRatio;
|
133 |
+
let nh4no3 = nFromNH4NO3 / nh4no3ContentN;
|
134 |
+
|
135 |
+
// 4. MgSO₄ от S (приоритет S, так как Mg проще скорректировать)
|
136 |
+
let mgso4 = s / mgso4ContentS;
|
137 |
+
let mgFromMgSO4 = mgso4 * mgso4ContentMg;
|
138 |
+
let sFromMgSO4 = mgso4 * mgso4ContentS;
|
139 |
+
|
140 |
+
// 5. K₂SO₄ от остатка S (если нужно)
|
141 |
+
let sRemaining = s - sFromMgSO4;
|
142 |
+
let k2so4 = sRemaining > 0 ? sRemaining / k2so4ContentS : 0;
|
143 |
+
let kFromK2SO4 = k2so4 * k2so4ContentK;
|
144 |
+
|
145 |
+
// 6. KNO₃ от остатка K
|
146 |
+
let kRemaining = k - kFromKH2PO4 - kFromK2SO4;
|
147 |
+
let kno3 = kRemaining > 0 ? kRemaining / kno3ContentK : 0;
|
148 |
+
let nFromKNO3 = kno3 * kno3ContentN;
|
149 |
+
|
150 |
+
// 7. Корректировка N
|
151 |
+
let totalN = nFromCaNO3Min + nFromNH4NO3 + nFromKNO3;
|
152 |
+
let nDelta = nitrogen - totalN;
|
153 |
+
let caNO3Extra = 0;
|
154 |
+
if (nDelta > 0) {
|
155 |
+
caNO3Extra = nDelta / caContentN;
|
156 |
+
} else if (nDelta < 0) {
|
157 |
+
let nExcess = -nDelta;
|
158 |
+
let kno3Reduction = nExcess / kno3ContentN;
|
159 |
+
kno3 = Math.max(0, kno3 - kno3Reduction);
|
160 |
+
nFromKNO3 = kno3 * kno3ContentN;
|
161 |
+
nExcess = nitrogen - (nFromNH4NO3 + nFromKNO3 + nFromCaNO3Min);
|
162 |
+
if (nExcess > 0) {
|
163 |
+
caNO3Extra = nExcess / caContentN;
|
164 |
+
}
|
165 |
+
}
|
166 |
+
let caNO3Total = caNO3FromCa + caNO3Extra;
|
167 |
+
|
168 |
+
// 8. Корректировка Mg
|
169 |
+
let totalMg = mgso4 * mgso4ContentMg;
|
170 |
+
let mgDelta = mg - totalMg;
|
171 |
+
if (mgDelta > 0) {
|
172 |
+
mgso4 += mgDelta / mgso4ContentMg;
|
173 |
+
sFromMgSO4 = mgso4 * mgso4ContentS;
|
174 |
+
}
|
175 |
+
|
176 |
+
// Пересчёт итоговых концентраций
|
177 |
+
totalN = (caNO3Total * caContentN + nh4no3 * nh4no3ContentN + kno3 * kno3ContentN).toFixed(2);
|
178 |
+
let totalP = (kh2po4 * kh2po4ContentP).toFixed(2);
|
179 |
+
let totalK = (kh2po4 * kh2po4ContentK + kno3 * kno3ContentK + k2so4 * k2so4ContentK).toFixed(2);
|
180 |
+
let totalCa = (caNO3Total * caContentCa).toFixed(2);
|
181 |
+
totalMg = (mgso4 * mgso4ContentMg).toFixed(2);
|
182 |
+
let totalS = (mgso4 * mgso4ContentS + k2so4 * k2so4ContentS).toFixed(2);
|
183 |
+
|
184 |
+
// Отображение результатов
|
185 |
+
const result = `
|
186 |
+
<h3>Результат расчёта (г/1000 л):</h3>
|
187 |
+
<p>MgSO₄·7H₂O: ${mgso4.toFixed(2)} (Mg: ${totalMg}, S: ${sFromMgSO4.toFixed(2)})</p>
|
188 |
+
<p>K₂SO₄: ${k2so4.toFixed(2)} (K: ${kFromK2SO4.toFixed(2)}, S: ${(k2so4 * k2so4ContentS).toFixed(2)})</p>
|
189 |
+
<p>KH₂PO₄: ${kh2po4.toFixed(2)} (P: ${totalP}, K: ${kFromKH2PO4.toFixed(2)})</p>
|
190 |
+
<p>KNO₃: ${kno3.toFixed(2)} (N: ${nFromKNO3.toFixed(2)}, K: ${(kno3 * kno3ContentK).toFixed(2)})</p>
|
191 |
+
<p>Ca(NO₃)₂·4H₂O: ${caNO3Total.toFixed(2)} (N: ${(caNO3Total * caContentN).toFixed(2)}, Ca: ${totalCa})</p>
|
192 |
+
<p>NH₄NO₃: ${nh4no3.toFixed(2)} (N: ${nFromNH4NO3.toFixed(2)})</p>
|
193 |
+
<h3>Итоговые концентрации (мг/л):</h3>
|
194 |
+
<p>N: ${totalN}, P: ${totalP}, K: ${totalK}, Ca: ${totalCa}, Mg: ${totalMg}, S: ${totalS}</p>
|
195 |
+
`;
|
196 |
+
document.getElementById("result").innerHTML = result;
|
197 |
+
}
|
198 |
</script>
|
199 |
</body>
|
200 |
</html>
|