DmitrMakeev commited on
Commit
944b3f0
·
verified ·
1 Parent(s): 8d6fcca

Update calculate.html

Browse files
Files changed (1) hide show
  1. calculate.html +116 -86
calculate.html CHANGED
@@ -78,93 +78,123 @@
78
  document.getElementById('n_ratio_value').textContent = ratio;
79
  });
80
 
81
- function calculate() {
82
- // Состав удобрений (% → доли)
83
- const caContentCa = parseFloat(document.getElementById("ca_content_ca").value) / 100;
84
- const caContentN = parseFloat(document.getElementById("ca_content_n").value) / 100;
85
- const kh2po4ContentP = parseFloat(document.getElementById("kh2po4_content_p").value) / 100;
86
- const kh2po4ContentK = parseFloat(document.getElementById("kh2po4_content_k").value) / 100;
87
- const kno3ContentK = parseFloat(document.getElementById("kno3_content_k").value) / 100;
88
- const kno3ContentN = parseFloat(document.getElementById("kno3_content_n").value) / 100;
89
- const mgso4ContentMg = parseFloat(document.getElementById("mgso4_content_mg").value) / 100;
90
- const mgso4ContentS = parseFloat(document.getElementById("mgso4_content_s").value) / 100;
91
- const k2so4ContentK = parseFloat(document.getElementById("k2so4_content_k").value) / 100;
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>