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

Update calculate.html

Browse files
Files changed (1) hide show
  1. calculate.html +56 -42
calculate.html CHANGED
@@ -72,18 +72,6 @@
72
 
73
  <div class="result" id="result"></div>
74
 
75
- <script>
76
- document.getElementById('n_ratio').addEventListener('input', function() {
77
- const ratio = (this.value / 10).toFixed(1);
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);
@@ -119,67 +107,93 @@
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 = `
 
72
 
73
  <div class="result" id="result"></div>
74
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  <script>
76
  document.getElementById('n_ratio').addEventListener('input', function() {
77
  const ratio = (this.value / 10).toFixed(1);
 
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 = `