DmitrMakeev commited on
Commit
15ea5bf
·
verified ·
1 Parent(s): 9eb6682

Update calculate.html

Browse files
Files changed (1) hide show
  1. calculate.html +35 -70
calculate.html CHANGED
@@ -107,90 +107,55 @@
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 sRemaining = s - sFromMgSO4;
118
- let k2so4 = sRemaining > 0 ? sRemaining / k2so4ContentS : 0;
119
- let kFromK2SO4 = k2so4 * k2so4ContentK;
120
-
121
  let caNO3FromCa = ca / caContentCa;
122
  let nFromCaNO3Min = caNO3FromCa * caContentN;
123
 
 
 
 
 
 
 
124
  let nFromNH4NO3 = nitrogen * nRatio;
125
  let nh4no3 = nFromNH4NO3 / nh4no3ContentN;
126
 
127
- let kRemaining = k - kFromKH2PO4 - kFromK2SO4;
128
- let kno3 = kRemaining > 0 ? kRemaining / kno3ContentK : 0;
129
- let nFromKNO3 = kno3 * kno3ContentN;
130
-
131
- let nRemaining = nitrogen - nFromNH4NO3 - nFromCaNO3Min - nFromKNO3;
132
- let caNO3Extra = nRemaining > 0 ? nRemaining / caContentN : 0;
133
- let caNO3Total = caNO3FromCa + caNO3Extra;
134
 
135
- // Итоговые концентрации после первого прохода
136
- let totalN = caNO3Total * caContentN + nh4no3 * nh4no3ContentN + kno3 * kno3ContentN;
137
- let totalP = kh2po4 * kh2po4ContentP;
138
- let totalK = kh2po4 * kh2po4ContentK + kno3 * kno3ContentK + k2so4 * k2so4ContentK;
139
- let totalCa = caNO3Total * caContentCa;
140
- let totalMg = mgso4 * mgso4ContentMg;
141
- let totalS = mgso4 * mgso4ContentS + k2so4 * k2so4ContentS;
142
 
143
- // Второй проход: корректировка
144
- // Корректируем N
145
- let nDelta = nitrogen - totalN;
146
- if (nDelta > 0) {
147
- // Добавляем недостающий N через Ca(NO₃)₂
148
- caNO3Extra += nDelta / caContentN;
149
- caNO3Total = caNO3FromCa + caNO3Extra;
150
- } else if (nDelta < 0) {
151
- // Уменьшаем избыточный N, начиная с KNO₃
152
- let nExcess = -nDelta;
153
- let kno3Reduction = nExcess / kno3ContentN;
154
- kno3 = Math.max(0, kno3 - kno3Reduction);
155
- nFromKNO3 = kno3 * kno3ContentN;
156
- // Если KNO₃ исчерпан, уменьшаем Ca(NO₃)₂
157
- nExcess = nitrogen - (nFromNH4NO3 + nFromKNO3 + caNO3FromCa * caContentN);
158
- if (nExcess < 0) {
159
- caNO3Extra = Math.max(0, caNO3Extra + (nExcess / caContentN));
160
- caNO3Total = caNO3FromCa + caNO3Extra;
161
- }
162
- }
163
 
164
- // Корректируем K
165
- totalK = kh2po4 * kh2po4ContentK + kno3 * kno3ContentK + k2so4 * k2so4ContentK;
166
- let kDelta = k - totalK;
167
- if (kDelta > 0) {
168
- kno3 += kDelta / kno3ContentK;
169
- nFromKNO3 = kno3 * kno3ContentN;
170
- }
171
 
172
- // Корректируем S
173
- totalS = mgso4 * mgso4ContentS + k2so4 * k2so4ContentS;
174
- let sDelta = s - totalS;
175
- if (sDelta > 0) {
176
- k2so4 += sDelta / k2so4ContentS;
177
- kFromK2SO4 = k2so4 * k2so4ContentK;
178
- } else if (sDelta < 0) {
179
- let sExcess = -sDelta;
180
- let mgso4Reduction = sExcess / mgso4ContentS;
181
- mgso4 = Math.max(0, mgso4 - mgso4Reduction);
182
- sFromMgSO4 = mgso4 * mgso4ContentS;
183
- totalMg = mgso4 * mgso4ContentMg;
184
- // Если Mg стал меньше цели, корректируем позже
185
- }
186
 
187
- // Пересчёт итоговых концентраций после корректировки
188
  totalN = (caNO3Total * caContentN + nh4no3 * nh4no3ContentN + kno3 * kno3ContentN).toFixed(2);
189
- totalP = (kh2po4 * kh2po4ContentP).toFixed(2);
190
- totalK = (kh2po4 * kh2po4ContentK + kno3 * kno3ContentK + k2so4 * k2so4ContentK).toFixed(2);
191
- totalCa = (caNO3Total * caContentCa).toFixed(2);
192
- totalMg = (mgso4 * mgso4ContentMg).toFixed(2);
193
- totalS = (mgso4 * mgso4ContentS + k2so4 * k2so4ContentS).toFixed(2);
194
 
195
  // Отображение результатов
196
  const result = `
@@ -198,7 +163,7 @@
198
  <p>MgSO₄·7H₂O: ${mgso4.toFixed(2)} (Mg: ${totalMg}, S: ${sFromMgSO4.toFixed(2)})</p>
199
  <p>K₂SO₄: ${k2so4.toFixed(2)} (K: ${kFromK2SO4.toFixed(2)}, S: ${(k2so4 * k2so4ContentS).toFixed(2)})</p>
200
  <p>KH₂PO₄: ${kh2po4.toFixed(2)} (P: ${totalP}, K: ${kFromKH2PO4.toFixed(2)})</p>
201
- <p>KNO₃: ${kno3.toFixed(2)} (N: ${nFromKNO3.toFixed(2)}, K: ${(kno3 * kno3ContentK).toFixed(2)})</p>
202
  <p>Ca(NO₃)₂·4H₂O: ${caNO3Total.toFixed(2)} (N: ${(caNO3Total * caContentN).toFixed(2)}, Ca: ${totalCa})</p>
203
  <p>NH₄NO₃: ${nh4no3.toFixed(2)} (N: ${nFromNH4NO3.toFixed(2)})</p>
204
  <h3>Итоговые концентрации (мг/л):</h3>
 
107
  return;
108
  }
109
 
110
+ // 1. KH₂PO₄ от P
111
  let kh2po4 = p / kh2po4ContentP;
112
  let kFromKH2PO4 = kh2po4 * kh2po4ContentK;
113
 
114
+ // 2. Ca(NO₃)₂ от Ca
 
 
 
 
 
 
115
  let caNO3FromCa = ca / caContentCa;
116
  let nFromCaNO3Min = caNO3FromCa * caContentN;
117
 
118
+ // 3. MgSO₄ от S
119
+ let mgso4 = s / mgso4ContentS;
120
+ let mgFromMgSO4 = mgso4 * mgso4ContentMg;
121
+ let sFromMgSO4 = mgso4 * mgso4ContentS;
122
+
123
+ // 4. NH₄NO₃ от nRatio
124
  let nFromNH4NO3 = nitrogen * nRatio;
125
  let nh4no3 = nFromNH4NO3 / nh4no3ContentN;
126
 
127
+ // 5. KNO₃ для остатка N и K
128
+ let nRemaining = nitrogen - nFromNH4NO3 - nFromCaNO3Min;
129
+ let kno3FromN = nRemaining > 0 ? nRemaining / kno3ContentN : 0;
130
+ let kFromKNO3FromN = kno3FromN * kno3ContentK;
 
 
 
131
 
132
+ let kRemaining = k - kFromKH2PO4;
133
+ let kno3FromK = kRemaining > 0 ? kRemaining / kno3ContentK : 0;
134
+ let nFromKNO3FromK = kno3FromK * kno3ContentN;
 
 
 
 
135
 
136
+ // Выбираем меньший KNO₃, чтобы не превысить N
137
+ let kno3 = Math.min(kno3FromN, kno3FromK);
138
+ let nFromKNO3 = kno3 * kno3ContentN;
139
+ let kFromKNO3 = kno3 * kno3ContentK;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
 
141
+ // 6. K₂SO₄ для остатка K
142
+ kRemaining = k - kFromKH2PO4 - kFromKNO3;
143
+ let k2so4 = kRemaining > 0 ? kRemaining / k2so4ContentK : 0;
144
+ let kFromK2SO4 = k2so4 * k2so4ContentK;
 
 
 
145
 
146
+ // 7. Корректировка N через Ca(NO₃)₂
147
+ let totalN = nFromNH4NO3 + nFromCaNO3Min + nFromKNO3;
148
+ let nDelta = nitrogen - totalN;
149
+ let caNO3Extra = nDelta > 0 ? nDelta / caContentN : 0;
150
+ let caNO3Total = caNO3FromCa + caNO3Extra;
 
 
 
 
 
 
 
 
 
151
 
152
+ // Пересчёт итоговых концентраций
153
  totalN = (caNO3Total * caContentN + nh4no3 * nh4no3ContentN + kno3 * kno3ContentN).toFixed(2);
154
+ let totalP = (kh2po4 * kh2po4ContentP).toFixed(2);
155
+ let totalK = (kh2po4 * kh2po4ContentK + kno3 * kno3ContentK + k2so4 * k2so4ContentK).toFixed(2);
156
+ let totalCa = (caNO3Total * caContentCa).toFixed(2);
157
+ let totalMg = (mgso4 * mgso4ContentMg).toFixed(2);
158
+ let totalS = (mgso4 * mgso4ContentS + k2so4 * k2so4ContentS).toFixed(2);
159
 
160
  // Отображение результатов
161
  const result = `
 
163
  <p>MgSO₄·7H₂O: ${mgso4.toFixed(2)} (Mg: ${totalMg}, S: ${sFromMgSO4.toFixed(2)})</p>
164
  <p>K₂SO₄: ${k2so4.toFixed(2)} (K: ${kFromK2SO4.toFixed(2)}, S: ${(k2so4 * k2so4ContentS).toFixed(2)})</p>
165
  <p>KH₂PO₄: ${kh2po4.toFixed(2)} (P: ${totalP}, K: ${kFromKH2PO4.toFixed(2)})</p>
166
+ <p>KNO₃: ${kno3.toFixed(2)} (N: ${nFromKNO3.toFixed(2)}, K: ${kFromKNO3.toFixed(2)})</p>
167
  <p>Ca(NO₃)₂·4H₂O: ${caNO3Total.toFixed(2)} (N: ${(caNO3Total * caContentN).toFixed(2)}, Ca: ${totalCa})</p>
168
  <p>NH₄NO₃: ${nh4no3.toFixed(2)} (N: ${nFromNH4NO3.toFixed(2)})</p>
169
  <h3>Итоговые концентрации (мг/л):</h3>