DmitrMakeev commited on
Commit
3eae11a
·
verified ·
1 Parent(s): b62aaa7

Update calculate.html

Browse files
Files changed (1) hide show
  1. calculate.html +64 -131
calculate.html CHANGED
@@ -78,137 +78,70 @@
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 mgso4 = mg / mgso4ContentMg;
115
- let sFromMgSO4 = mgso4 * mgso4ContentS;
116
-
117
- let caNO3FromCa = ca / caContentCa;
118
- let nFromCaNO3Min = caNO3FromCa * caContentN;
119
-
120
- let nFromNH4NO3 = nitrogen * nRatio;
121
- let nh4no3 = nFromNH4NO3 / nh4no3ContentN;
122
-
123
- let kRemaining = k - kFromKH2PO4;
124
- let kno3 = kRemaining > 0 ? kRemaining / kno3ContentK : 0;
125
- let nFromKNO3 = kno3 * kno3ContentN;
126
-
127
- let nRemaining = nitrogen - nFromNH4NO3 - nFromCaNO3Min - nFromKNO3;
128
- let caNO3Extra = nRemaining > 0 ? nRemaining / caContentN : 0;
129
- let caNO3Total = caNO3FromCa + caNO3Extra;
130
-
131
- let sRemaining = s - sFromMgSO4;
132
- let k2so4 = sRemaining > 0 ? sRemaining / k2so4ContentS : 0;
133
- let kFromK2SO4 = k2so4 * k2so4ContentK;
134
-
135
- // Второй проход: корректировка N и K
136
- let totalN = caNO3Total * caContentN + nh4no3 * nh4no3ContentN + kno3 * kno3ContentN;
137
- let totalK = kh2po4 * kh2po4ContentK + kno3 * kno3ContentK + k2so4 * k2so4ContentK;
138
- let nDelta = nitrogen - totalN;
139
- let kDelta = k - totalK;
140
-
141
- if (nDelta < 0) {
142
- let nExcess = -nDelta;
143
- let kno3Reduction = nExcess / kno3ContentN;
144
- kno3 = Math.max(0, kno3 - kno3Reduction);
145
- nFromKNO3 = kno3 * kno3ContentN;
146
- nExcess = nitrogen - (nFromNH4NO3 + nFromKNO3 + caNO3FromCa * caContentN);
147
- if (nExcess < 0) {
148
- caNO3Extra = Math.max(0, caNO3Extra + (nExcess / caContentN));
149
- caNO3Total = caNO3FromCa + caNO3Extra;
150
- }
151
- }
152
- if (nDelta > 0) {
153
- caNO3Extra += nDelta / caContentN;
154
- caNO3Total = caNO3FromCa + caNO3Extra;
155
- }
156
-
157
- totalK = kh2po4 * kh2po4ContentK + kno3 * kno3ContentK + k2so4 * k2so4ContentK;
158
- kDelta = k - totalK;
159
- if (kDelta > 0) {
160
- let kno3Add = kDelta / kno3ContentK;
161
- kno3 += kno3Add;
162
- nFromKNO3 = kno3 * kno3ContentN;
163
- }
164
-
165
- // Третий проход: корректировка Mg и S
166
- let totalMg = mgso4 * mgso4ContentMg;
167
- let totalS = mgso4 * mgso4ContentS + k2so4 * k2so4ContentS;
168
- let mgDelta = mg - totalMg;
169
- let sDelta = s - totalS;
170
-
171
- if (mgDelta > 0) {
172
- mgso4 += mgDelta / mgso4ContentMg;
173
- sFromMgSO4 = mgso4 * mgso4ContentS;
174
- }
175
- totalS = mgso4 * mgso4ContentS + k2so4 * k2so4ContentS;
176
- sDelta = s - totalS;
177
- if (sDelta < 0) {
178
- let sExcess = -sDelta;
179
- let mgso4Reduction = sExcess / mgso4ContentS;
180
- mgso4 = Math.max(0, mgso4 - mgso4Reduction);
181
- sFromMgSO4 = mgso4 * mgso4ContentS;
182
- totalMg = mgso4 * mgso4ContentMg;
183
- sDelta = s - sFromMgSO4;
184
- if (sDelta > 0) {
185
- k2so4 = sDelta / k2so4ContentS;
186
- kFromK2SO4 = k2so4 * k2so4ContentK;
187
- }
188
- }
189
-
190
- // Итоговые концентрации после всех проходов
191
- totalN = (caNO3Total * caContentN + nh4no3 * nh4no3ContentN + kno3 * kno3ContentN).toFixed(2);
192
- totalP = (kh2po4 * kh2po4ContentP).toFixed(2);
193
- totalK = (kh2po4 * kh2po4ContentK + kno3 * kno3ContentK + k2so4 * k2so4ContentK).toFixed(2);
194
- totalCa = (caNO3Total * caContentCa).toFixed(2);
195
- totalMg = (mgso4 * mgso4ContentMg).toFixed(2);
196
- totalS = (mgso4 * mgso4ContentS + k2so4 * k2so4ContentS).toFixed(2);
197
-
198
- // Отображение результатов
199
- const result = `
200
- <h3>Результат расчёта (г/1000 л):</h3>
201
- <p>MgSO₄·7H₂O: ${mgso4.toFixed(2)} (Mg: ${totalMg}, S: ${sFromMgSO4.toFixed(2)})</p>
202
- <p>K₂SO₄: ${k2so4.toFixed(2)} (K: ${kFromK2SO4.toFixed(2)}, S: ${(k2so4 * k2so4ContentS).toFixed(2)})</p>
203
- <p>KH₂PO₄: ${kh2po4.toFixed(2)} (P: ${totalP}, K: ${kFromKH2PO4.toFixed(2)})</p>
204
- <p>KNO₃: ${kno3.toFixed(2)} (N: ${nFromKNO3.toFixed(2)}, K: ${(kno3 * kno3ContentK).toFixed(2)})</p>
205
- <p>Ca(NO₃)₂·4H₂O: ${caNO3Total.toFixed(2)} (N: ${(caNO3Total * caContentN).toFixed(2)}, Ca: ${totalCa})</p>
206
- <p>NH₄NO₃: ${nh4no3.toFixed(2)} (N: ${nFromNH4NO3.toFixed(2)})</p>
207
- <h3>Итоговые концентрации (мг/л):</h3>
208
- <p>N: ${totalN}, P: ${totalP}, K: ${totalK}, Ca: ${totalCa}, Mg: ${totalMg}, S: ${totalS}</p>
209
- `;
210
- document.getElementById("result").innerHTML = result;
211
- }
212
  </script>
213
  </body>
214
  </html>
 
78
  document.getElementById('n_ratio_value').textContent = ratio;
79
  });
80
 
81
+ function calculate() {
82
+ // ... (оставляем ввод данных без изменений)
83
+
84
+ // 1. KH₂PO₄ от P
85
+ let kh2po4 = p / kh2po4ContentP;
86
+ let kFromKH2PO4 = kh2po4 * kh2po4ContentK;
87
+
88
+ // 2. MgSO₄ от S
89
+ let mgso4 = s / mgso4ContentS;
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
+ // 4. Ca(NO₃) от Ca
98
+ let caNO3FromCa = ca / caContentCa;
99
+ let nFromCaNO3Min = caNO3FromCa * caContentN;
100
+
101
+ // 5. KNO₃ от остатка K
102
+ let kRemaining = k - kFromKH2PO4;
103
+ let kno3 = kRemaining > 0 ? kRemaining / kno3ContentK : 0;
104
+ let nFromKNO3 = kno3 * kno3ContentN;
105
+
106
+ // 6. Корректировка N
107
+ let totalN = nFromNH4NO3 + nFromCaNO3Min + nFromKNO3;
108
+ let nDelta = nitrogen - totalN;
109
+ let caNO3Extra = 0;
110
+ if (nDelta < 0) {
111
+ let nExcess = -nDelta;
112
+ let kno3Reduction = nExcess / kno3ContentN;
113
+ kno3 = Math.max(0, kno3 - kno3Reduction);
114
+ nFromKNO3 = kno3 * kno3ContentN;
115
+ kRemaining = k - kFromKH2PO4 - kno3 * kno3ContentK;
116
+ }
117
+ let caNO3Total = caNO3FromCa + caNO3Extra;
118
+
119
+ // 7. K₂SO₄ для остатка K (если есть)
120
+ let k2so4 = kRemaining > 0 ? kRemaining / k2so4ContentK : 0;
121
+ let kFromK2SO4 = k2so4 * k2so4ContentK;
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
+ let totalMg = (mgso4 * mgso4ContentMg).toFixed(2);
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>
135
+ <p>K₂SO₄: ${k2so4.toFixed(2)} (K: ${kFromK2SO4.toFixed(2)}, S: ${(k2so4 * k2so4ContentS).toFixed(2)})</p>
136
+ <p>KH₂PO₄: ${kh2po4.toFixed(2)} (P: ${totalP}, K: ${kFromKH2PO4.toFixed(2)})</p>
137
+ <p>KNO₃: ${kno3.toFixed(2)} (N: ${nFromKNO3.toFixed(2)}, K: ${(kno3 * kno3ContentK).toFixed(2)})</p>
138
+ <p>Ca(NO₃)₂·4H₂O: ${caNO3Total.toFixed(2)} (N: ${(caNO3Total * caContentN).toFixed(2)}, Ca: ${totalCa})</p>
139
+ <p>NH₄NO₃: ${nh4no3.toFixed(2)} (N: ${nFromNH4NO3.toFixed(2)})</p>
140
+ <h3>Итоговые концентрации (мг/л):</h3>
141
+ <p>N: ${totalN}, P: ${totalP}, K: ${totalK}, Ca: ${totalCa}, Mg: ${totalMg}, S: ${totalS}</p>
142
+ `;
143
+ document.getElementById("result").innerHTML = result;
144
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
145
  </script>
146
  </body>
147
  </html>