DmitrMakeev commited on
Commit
8d7fdf4
·
verified ·
1 Parent(s): 83d7824

Update calculate.html

Browse files
Files changed (1) hide show
  1. calculate.html +73 -40
calculate.html CHANGED
@@ -107,57 +107,90 @@
107
  return;
108
  }
109
 
110
- // Расчёт массы удобрений (г/1000 л)
111
- // 1. KH₂PO₄ от P
112
- const kh2po4 = p / kh2po4ContentP;
113
- const kFromKH2PO4 = kh2po4 * kh2po4ContentK;
114
 
115
- // 2. MgSO₄·7H₂O от Mg
116
- const mgso4 = mg / mgso4ContentMg;
117
- const sFromMgSO4 = mgso4 * mgso4ContentS;
118
 
119
- // 3. K₂SO₄ от остатка S
120
- const sRemaining = s - sFromMgSO4;
121
- const k2so4 = sRemaining > 0 ? sRemaining / k2so4ContentS : 0;
122
- const kFromK2SO4 = k2so4 * k2so4ContentK;
123
 
124
- // 4. Ca(NO₃)₂·4H₂O от Ca
125
- const caNO3FromCa = ca / caContentCa;
126
- const nFromCaNO3Min = caNO3FromCa * caContentN;
127
 
128
- // 5. NH₄NO₃ от заданного соотношения N
129
- const nFromNH4NO3 = nitrogen * nRatio;
130
- const nh4no3 = nFromNH4NO3 / nh4no3ContentN;
131
 
132
- // 6. Остаток N после NH₄NO₃
133
- const nRemainingAfterNH4NO3 = nitrogen - nFromNH4NO3 - nFromCaNO3Min;
134
-
135
- // 7. KNO₃ от остатка K
136
- const kRemaining = k - kFromKH2PO4 - kFromK2SO4;
137
  let kno3 = kRemaining > 0 ? kRemaining / kno3ContentK : 0;
138
  let nFromKNO3 = kno3 * kno3ContentN;
139
 
140
- // 8. Корректировка KNO₃ и Ca(NO₃)₂ для точного N
141
- const nRemaining = nitrogen - nFromNH4NO3 - nFromCaNO3Min - nFromKNO3;
142
- let caNO3Extra = 0;
143
- if (nRemaining > 0) {
144
- caNO3Extra = nRemaining / caContentN;
145
- } else if (nRemaining < 0) {
146
- // Уменьшаем KNO₃, чтобы N не превышал цель
147
- const nExcess = -nRemaining;
148
- const kno3Reduction = nExcess / kno3ContentN;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
149
  kno3 = Math.max(0, kno3 - kno3Reduction);
150
  nFromKNO3 = kno3 * kno3ContentN;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
151
  }
152
- const caNO3Total = caNO3FromCa + caNO3Extra;
153
-
154
- // Итоговые концентрации для проверки
155
- const totalN = (caNO3Total * caContentN + nh4no3 * nh4no3ContentN + kno3 * kno3ContentN).toFixed(2);
156
- const totalP = (kh2po4 * kh2po4ContentP).toFixed(2);
157
- const totalK = (kh2po4 * kh2po4ContentK + kno3 * kno3ContentK + k2so4 * k2so4ContentK).toFixed(2);
158
- const totalCa = (caNO3Total * caContentCa).toFixed(2);
159
- const totalMg = (mgso4 * mgso4ContentMg).toFixed(2);
160
- const totalS = (mgso4 * mgso4ContentS + k2so4 * k2so4ContentS).toFixed(2);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
161
 
162
  // Отображение результатов
163
  const result = `
 
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 = `