DmitrMakeev commited on
Commit
e1f0280
·
verified ·
1 Parent(s): 7179859

Update nutri_call.html

Browse files
Files changed (1) hide show
  1. nutri_call.html +51 -29
nutri_call.html CHANGED
@@ -1111,67 +1111,89 @@ function calculateAndUpdate(data) {
1111
 
1112
 
1113
 
 
 
1114
 
1115
- function calculateCationsAndAnions(data) {
1116
- console.log("=== ТОЧНЫЙ РАСЧЕТ КАТИОНОВ И АНИОНОВ ===");
1117
 
1118
- // Молярные массы и валентности элементов (г/моль)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1119
  const ION_DATA = {
1120
- // Катионы
1121
  'Ca': { mass: 40.08, charge: 2 },
1122
  'Mg': { mass: 24.305, charge: 2 },
1123
  'K': { mass: 39.098, charge: 1 },
1124
  'NH4': { mass: 18.038, charge: 1 },
1125
- // Анионы
1126
  'NO3': { mass: 62.004, charge: 1 },
1127
  'SO4': { mass: 96.06, charge: 2 },
1128
  'H2PO4': { mass: 96.99, charge: 1 },
1129
  'Cl': { mass: 35.453, charge: 1 }
1130
  };
1131
 
1132
- // Получаем данные профиля
1133
- const profile = data.actual_profile;
1134
-
1135
- // Проверяем наличие всех ключей в profile
1136
- const ensureValue = (key) => profile[key] || 0;
1137
 
1138
- // Рассчитываем миллиэквиваленты (meq/L) для каждого иона
1139
  const ions = {
1140
- // Катионы
1141
- 'Ca': ensureValue('Ca') * ION_DATA['Ca'].charge / ION_DATA['Ca'].mass,
1142
- 'Mg': ensureValue('Mg') * ION_DATA['Mg'].charge / ION_DATA['Mg'].mass,
1143
- 'K': ensureValue('K') * ION_DATA['K'].charge / ION_DATA['K'].mass,
1144
- 'NH4': ensureValue('N (NH4+)') * ION_DATA['NH4'].charge / ION_DATA['NH4'].mass,
1145
- // Анионы
1146
- 'NO3': ensureValue('N (NO3-)') * ION_DATA['NO3'].charge / ION_DATA['NO3'].mass,
1147
- 'SO4': ensureValue('S') * ION_DATA['SO4'].charge / ION_DATA['SO4'].mass,
1148
- 'H2PO4': ensureValue('P') * ION_DATA['H2PO4'].charge / ION_DATA['H2PO4'].mass,
1149
- 'Cl': ensureValue('Cl') * ION_DATA['Cl'].charge / ION_DATA['Cl'].mass
1150
  };
1151
 
1152
- // Суммируем катионы и анионы
1153
  const totalCations = ions['Ca'] + ions['Mg'] + ions['K'] + ions['NH4'];
1154
  const totalAnions = ions['NO3'] + ions['SO4'] + ions['H2PO4'] + ions['Cl'];
1155
 
1156
- // Рассчитываем процентное соотношение
1157
  const total = totalCations + totalAnions;
1158
  const cationPercent = total > 0 ? (totalCations / total * 100).toFixed(1) : 0;
1159
  const anionPercent = total > 0 ? (totalAnions / total * 100).toFixed(1) : 0;
1160
 
1161
- // Вывод в консоль
1162
  console.log(`Катионы: ${totalCations.toFixed(2)} mEq/L (${cationPercent}%)`);
1163
  console.log(`Анионы: ${totalAnions.toFixed(2)} mEq/L (${anionPercent}%)`);
1164
  console.log(`Дисбаланс: ${(totalCations - totalAnions).toFixed(2)} mEq/L`);
1165
 
1166
- // Обновляем UI
1167
- const resultText = `Катионы: ${totalCations.toFixed(2)} mEq/L | Анионы: ${totalAnions.toFixed(2)} mEq/L`;
1168
- document.getElementById("n1-value").textContent = resultText;
1169
-
1170
- // Обновляем индикаторы
1171
  document.getElementById("cation-indicator").style.width = `${cationPercent}%`;
1172
  document.getElementById("anion-indicator").style.width = `${anionPercent}%`;
1173
  }
1174
 
 
 
 
 
 
 
1175
 
1176
 
1177
 
 
1111
 
1112
 
1113
 
1114
+ function calculateCationsAndAnions() {
1115
+ console.log("=== ДИНАМИЧЕСКИЙ РАСЧЕТ КАТИОНОВ И АНИОНОВ ===");
1116
 
1117
+ // 1. Получаем текущие значения из формы
1118
+ const getValue = (id) => parseFloat(document.getElementById(id).value) || 0;
1119
 
1120
+ const profile = {
1121
+ 'N (NO3-)': getValue('calculated_no3'),
1122
+ 'N (NH4+)': getValue('calculated_nh4'),
1123
+ 'P': getValue('profile_p'),
1124
+ 'K': getValue('profile_k'),
1125
+ 'Ca': getValue('profile_ca'),
1126
+ 'Mg': getValue('profile_mg'),
1127
+ 'S': getValue('profile_s'),
1128
+ 'Cl': getValue('profile_cacl') * 0.32366 / 0.18294 // Пересчет CaCl2 в Cl
1129
+ };
1130
+
1131
+ // 2. Константы из вашей формы (упрощенные)
1132
+ const FERTILIZER_CONSTANTS = {
1133
+ 'Кальциевая селитра': { 'N (NO3-)': 0.11863, 'Ca': 0.16972 },
1134
+ 'Калий азотнокислый': { 'N (NO3-)': 0.13854, 'K': 0.36672 },
1135
+ 'Аммоний азотнокислый': { 'N (NO3-)': 0.17499, 'N (NH4+)': 0.17499 },
1136
+ 'Сульфат магния': { 'Mg': 0.10220, 'S': 0.13483 },
1137
+ 'Монофосфат калия': { 'P': 0.22761, 'K': 0.28731 },
1138
+ 'Калий сернокислый': { 'K': 0.44874, 'S': 0.18401 },
1139
+ 'Кальций хлорид': { 'Ca': 0.18294, 'Cl': 0.32366 }
1140
+ };
1141
+
1142
+ // 3. Молярные массы и валентности
1143
  const ION_DATA = {
 
1144
  'Ca': { mass: 40.08, charge: 2 },
1145
  'Mg': { mass: 24.305, charge: 2 },
1146
  'K': { mass: 39.098, charge: 1 },
1147
  'NH4': { mass: 18.038, charge: 1 },
 
1148
  'NO3': { mass: 62.004, charge: 1 },
1149
  'SO4': { mass: 96.06, charge: 2 },
1150
  'H2PO4': { mass: 96.99, charge: 1 },
1151
  'Cl': { mass: 35.453, charge: 1 }
1152
  };
1153
 
1154
+ // 4. Пересчет серы (S → SO4²⁻)
1155
+ const so4 = profile['S'] * (96.06 / 32.06);
 
 
 
1156
 
1157
+ // 5. Расчет mEq/L для каждого иона
1158
  const ions = {
1159
+ 'Ca': profile['Ca'] * ION_DATA['Ca'].charge / ION_DATA['Ca'].mass,
1160
+ 'Mg': profile['Mg'] * ION_DATA['Mg'].charge / ION_DATA['Mg'].mass,
1161
+ 'K': profile['K'] * ION_DATA['K'].charge / ION_DATA['K'].mass,
1162
+ 'NH4': profile['N (NH4+)'] * ION_DATA['NH4'].charge / ION_DATA['NH4'].mass,
1163
+ 'NO3': profile['N (NO3-)'] * ION_DATA['NO3'].charge / ION_DATA['NO3'].mass,
1164
+ 'SO4': so4 * ION_DATA['SO4'].charge / ION_DATA['SO4'].mass,
1165
+ 'H2PO4': profile['P'] * ION_DATA['H2PO4'].charge / ION_DATA['H2PO4'].mass,
1166
+ 'Cl': profile['Cl'] * ION_DATA['Cl'].charge / ION_DATA['Cl'].mass
 
 
1167
  };
1168
 
1169
+ // 6. Суммирование
1170
  const totalCations = ions['Ca'] + ions['Mg'] + ions['K'] + ions['NH4'];
1171
  const totalAnions = ions['NO3'] + ions['SO4'] + ions['H2PO4'] + ions['Cl'];
1172
 
1173
+ // 7. Расчет процентов
1174
  const total = totalCations + totalAnions;
1175
  const cationPercent = total > 0 ? (totalCations / total * 100).toFixed(1) : 0;
1176
  const anionPercent = total > 0 ? (totalAnions / total * 100).toFixed(1) : 0;
1177
 
1178
+ // 8. Вывод результатов
1179
  console.log(`Катионы: ${totalCations.toFixed(2)} mEq/L (${cationPercent}%)`);
1180
  console.log(`Анионы: ${totalAnions.toFixed(2)} mEq/L (${anionPercent}%)`);
1181
  console.log(`Дисбаланс: ${(totalCations - totalAnions).toFixed(2)} mEq/L`);
1182
 
1183
+ // 9. Обновление UI
1184
+ document.getElementById("n1-value").textContent =
1185
+ `Катионы: ${totalCations.toFixed(2)} mEq/L | Анионы: ${totalAnions.toFixed(2)} mEq/L`;
1186
+
 
1187
  document.getElementById("cation-indicator").style.width = `${cationPercent}%`;
1188
  document.getElementById("anion-indicator").style.width = `${anionPercent}%`;
1189
  }
1190
 
1191
+ // Добавляем обработчик изменений
1192
+ document.querySelectorAll('.profile-container input, .nitrogen-container input').forEach(input => {
1193
+ input.addEventListener('change', calculateCationsAndAnions);
1194
+ });
1195
+
1196
+
1197
 
1198
 
1199