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