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 |
|