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

Update calculate.html

Browse files
Files changed (1) hide show
  1. calculate.html +31 -34
calculate.html CHANGED
@@ -114,13 +114,17 @@
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
 
@@ -128,66 +132,59 @@
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);
 
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
 
 
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);