Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -703,7 +703,6 @@ def nutri_call():
|
|
703 |
|
704 |
|
705 |
|
706 |
-
|
707 |
|
708 |
|
709 |
from tabulate import tabulate
|
@@ -717,11 +716,11 @@ INPUT_DATA = {
|
|
717 |
"Сульфат магния": {"Mg": 0.10220, "S": 0.13483},
|
718 |
"Монофосфат калия": {"P": 0.22761, "K": 0.28731},
|
719 |
"Калий сернокислый": {"K": 0.44874, "S": 0.18401},
|
720 |
-
"Кальций хлорид": {"Ca": 0.272
|
721 |
},
|
722 |
"profileSettings": {
|
723 |
"P": 60, "K": 194, "Mg": 48.5, "Ca": 121.25, "S": 79.445,
|
724 |
-
"NO3_RAT":
|
725 |
}
|
726 |
}
|
727 |
|
@@ -739,26 +738,35 @@ class NutrientCalculator:
|
|
739 |
'Ca': self.profile["Ca"],
|
740 |
'S': self.profile["S"],
|
741 |
'N (NO3-)': self.profile["TOTAL_NITROG"] * (self.profile["NO3_RAT"] / total_parts),
|
742 |
-
'N (NH4+)': self.profile["TOTAL_NITROG"] * (1 / total_parts)
|
743 |
-
'Cl': 0 # Добавляем хлор с нулевым значением
|
744 |
}
|
745 |
|
746 |
-
self.actual = {k: 0.0 for k in self.target}
|
747 |
self.results = {}
|
748 |
|
749 |
def calculate(self):
|
|
|
750 |
self._apply_fertilizer("Кальциевая селитра", "Ca", self.target["Ca"])
|
|
|
|
|
751 |
self._apply_fertilizer("Аммоний азотнокислый", "N (NH4+)", self.target["N (NH4+)"])
|
752 |
|
|
|
753 |
no3_needed = self.target["N (NO3-)"] - self.actual["N (NO3-)"]
|
754 |
if no3_needed > 0:
|
755 |
self._apply_fertilizer("Калий азотнокислый", "N (NO3-)", no3_needed)
|
756 |
|
|
|
757 |
self._apply_fertilizer("Монофосфат калия", "P", self.target["P"])
|
|
|
|
|
758 |
self._apply_fertilizer("Сульфат магния", "Mg", self.target["Mg"])
|
|
|
|
|
759 |
self._balance_k_s()
|
760 |
-
|
761 |
-
|
|
|
762 |
|
763 |
return self._verify_results()
|
764 |
|
@@ -787,23 +795,17 @@ class NutrientCalculator:
|
|
787 |
if remaining_k > 0:
|
788 |
self._apply_fertilizer("Калий азотнокислый", "K", remaining_k)
|
789 |
|
790 |
-
def
|
791 |
-
|
792 |
-
if
|
793 |
-
|
794 |
-
|
795 |
-
|
796 |
-
|
797 |
-
|
798 |
-
|
799 |
-
|
800 |
-
|
801 |
-
if self.profile["NO3_RAT"] < 8: # Используем CaCl2 только если NO3_RAT < 8
|
802 |
-
if balance > 0: # Если катионов больше
|
803 |
-
ca_needed = max(0, self.target["Ca"] - self.actual["Ca"])
|
804 |
-
cl_needed = balance * 0.5 # Компенсируем половину дисбаланса
|
805 |
-
self._apply_fertilizer("Кальций хлорид", "Ca", ca_needed)
|
806 |
-
self._apply_fertilizer("Кальций хлорид", "Cl", cl_needed)
|
807 |
|
808 |
def _verify_results(self):
|
809 |
deficits = {}
|
|
|
703 |
|
704 |
|
705 |
|
|
|
706 |
|
707 |
|
708 |
from tabulate import tabulate
|
|
|
716 |
"Сульфат магния": {"Mg": 0.10220, "S": 0.13483},
|
717 |
"Монофосфат калия": {"P": 0.22761, "K": 0.28731},
|
718 |
"Калий сернокислый": {"K": 0.44874, "S": 0.18401},
|
719 |
+
"Кальций хлорид": {"Ca": 0.272} # Хлор не учитываем
|
720 |
},
|
721 |
"profileSettings": {
|
722 |
"P": 60, "K": 194, "Mg": 48.5, "Ca": 121.25, "S": 79.445,
|
723 |
+
"NO3_RAT": 9.5, "TOTAL_NITROG": 138.57, "liters": 100
|
724 |
}
|
725 |
}
|
726 |
|
|
|
738 |
'Ca': self.profile["Ca"],
|
739 |
'S': self.profile["S"],
|
740 |
'N (NO3-)': self.profile["TOTAL_NITROG"] * (self.profile["NO3_RAT"] / total_parts),
|
741 |
+
'N (NH4+)': self.profile["TOTAL_NITROG"] * (1 / total_parts)
|
|
|
742 |
}
|
743 |
|
744 |
+
self.actual = {k: 0.0 for k in self.target}
|
745 |
self.results = {}
|
746 |
|
747 |
def calculate(self):
|
748 |
+
# 1. Вносим кальциевую селитру (Ca + NO3)
|
749 |
self._apply_fertilizer("Кальциевая селитра", "Ca", self.target["Ca"])
|
750 |
+
|
751 |
+
# 2. Вносим аммонийный азот
|
752 |
self._apply_fertilizer("Аммоний азотнокислый", "N (NH4+)", self.target["N (NH4+)"])
|
753 |
|
754 |
+
# 3. Компенсируем NO3 калийной селитрой
|
755 |
no3_needed = self.target["N (NO3-)"] - self.actual["N (NO3-)"]
|
756 |
if no3_needed > 0:
|
757 |
self._apply_fertilizer("Калий азотнокислый", "N (NO3-)", no3_needed)
|
758 |
|
759 |
+
# 4. Вносим фосфор
|
760 |
self._apply_fertilizer("Монофосфат калия", "P", self.target["P"])
|
761 |
+
|
762 |
+
# 5. Вносим магний
|
763 |
self._apply_fertilizer("Сульфат магния", "Mg", self.target["Mg"])
|
764 |
+
|
765 |
+
# 6. Балансируем калий и серу
|
766 |
self._balance_k_s()
|
767 |
+
|
768 |
+
# 7. Заменяем часть кальция из селитры на кальций из CaCl2
|
769 |
+
self._replace_calcium_with_calcium_chloride()
|
770 |
|
771 |
return self._verify_results()
|
772 |
|
|
|
795 |
if remaining_k > 0:
|
796 |
self._apply_fertilizer("Калий азотнокислый", "K", remaining_k)
|
797 |
|
798 |
+
def _replace_calcium_with_calcium_chloride(self):
|
799 |
+
"""Заменяем часть кальция из селитры на кальций из CaCl2"""
|
800 |
+
if self.profile["NO3_RAT"] < 8: # Если соотношение NO3:NH4 ниже порога
|
801 |
+
# Считаем, сколько кальция нужно заменить
|
802 |
+
ca_to_replace = max(0, self.actual["Ca"] - self.target["Ca"])
|
803 |
+
|
804 |
+
# Убираем часть кальция из кальциевой селитры
|
805 |
+
self._apply_fertilizer("Кальциевая селитра", "Ca", -ca_to_replace)
|
806 |
+
|
807 |
+
# Добавляем кальций из CaCl2
|
808 |
+
self._apply_fertilizer("Кальций хлорид", "Ca", ca_to_replace)
|
|
|
|
|
|
|
|
|
|
|
|
|
809 |
|
810 |
def _verify_results(self):
|
811 |
deficits = {}
|