Spaces:
Sleeping
Sleeping
Update nutri_call.html
Browse files- nutri_call.html +51 -29
nutri_call.html
CHANGED
@@ -1111,67 +1111,89 @@ function calculateAndUpdate(data) {
|
|
1111 |
|
1112 |
|
1113 |
|
|
|
|
|
1114 |
|
1115 |
-
|
1116 |
-
|
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
|
1134 |
-
|
1135 |
-
// Проверяем наличие всех ключей в profile
|
1136 |
-
const ensureValue = (key) => profile[key] || 0;
|
1137 |
|
1138 |
-
//
|
1139 |
const ions = {
|
1140 |
-
|
1141 |
-
'
|
1142 |
-
'
|
1143 |
-
'
|
1144 |
-
'
|
1145 |
-
|
1146 |
-
'
|
1147 |
-
'
|
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 |
-
//
|
1167 |
-
|
1168 |
-
|
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 |
|