Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -725,7 +725,8 @@ NUTRIENT_CONTENT_IN_FERTILIZERS = {
|
|
725 |
"Калий сернокислый": {"K": 0.44874, "S": 0.18401},
|
726 |
"Аммоний азотнокислый": {"N (NO3-)": 0.17499, "N (NH4+)": 0.17499},
|
727 |
"Сульфат магния": {"Mg": 0.09861, "S": 0.13010},
|
728 |
-
"Монофосфат калия": {"P": 0.218, "K": 0.275}
|
|
|
729 |
}
|
730 |
|
731 |
class NutrientCalculator:
|
@@ -756,33 +757,37 @@ class NutrientCalculator:
|
|
756 |
|
757 |
def calculate(self):
|
758 |
try:
|
759 |
-
# 1. Вносим
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
760 |
self._apply("Сульфат магния", "Mg", self.target_profile['Mg'])
|
761 |
-
self._apply("Кальциевая селитра", "Ca", self.target_profile['Ca'])
|
762 |
self._apply("Монофосфат калия", "P", self.target_profile['P'])
|
763 |
self._apply("Аммоний азотнокислый", "N (NH4+)", self.target_profile['N (NH4+)'])
|
764 |
|
765 |
-
#
|
766 |
current_no3 = self.actual_profile['N (NO3-)']
|
767 |
no3_needed = self.target_profile['N (NO3-)'] - current_no3
|
768 |
|
769 |
if no3_needed > 0.1:
|
770 |
-
# Ограничиваем внесение NO3, чтобы не превысить общее количество азота
|
771 |
-
max_nitrogen = self.target_profile['N (NO3-)'] + self.target_profile['N (NH4+)']
|
772 |
-
actual_nitrogen = self.actual_profile['N (NO3-)'] + self.actual_profile['N (NH4+)']
|
773 |
-
if actual_nitrogen + no3_needed > max_nitrogen:
|
774 |
-
no3_needed = max_nitrogen - actual_nitrogen
|
775 |
self._apply("Калий азотнокислый", "N (NO3-)", no3_needed)
|
776 |
|
777 |
-
#
|
778 |
self._apply_k_sulfate()
|
779 |
|
780 |
-
#
|
781 |
k_deficit = self.target_profile['K'] - self.actual_profile['K']
|
782 |
if k_deficit > 0.1:
|
783 |
self._apply("Калий азотнокислый", "K", k_deficit)
|
784 |
|
785 |
-
#
|
786 |
self._adjust_nh4_no3_ratio()
|
787 |
|
788 |
return self.results
|
|
|
725 |
"Калий сернокислый": {"K": 0.44874, "S": 0.18401},
|
726 |
"Аммоний азотнокислый": {"N (NO3-)": 0.17499, "N (NH4+)": 0.17499},
|
727 |
"Сульфат магния": {"Mg": 0.09861, "S": 0.13010},
|
728 |
+
"Монофосфат калия": {"P": 0.218, "K": 0.275},
|
729 |
+
"Сульфат кальция": {"Ca": 0.23, "S": 0.186} # Новый элемент
|
730 |
}
|
731 |
|
732 |
class NutrientCalculator:
|
|
|
757 |
|
758 |
def calculate(self):
|
759 |
try:
|
760 |
+
# 1. Вносим сульфат кальция для Ca
|
761 |
+
ca_needed = self.target_profile['Ca'] - self.actual_profile['Ca']
|
762 |
+
if ca_needed > 0.1:
|
763 |
+
self._apply("Сульфат кальция", "Ca", ca_needed)
|
764 |
+
|
765 |
+
# 2. Вносим кальциевую селитру для Ca и NO3
|
766 |
+
ca_needed_after_sulfate = self.target_profile['Ca'] - self.actual_profile['Ca']
|
767 |
+
if ca_needed_after_sulfate > 0.1:
|
768 |
+
self._apply("Кальциевая селитра", "Ca", ca_needed_after_sulfate)
|
769 |
+
|
770 |
+
# 3. Вносим остальные элементы
|
771 |
self._apply("Сульфат магния", "Mg", self.target_profile['Mg'])
|
|
|
772 |
self._apply("Монофосфат калия", "P", self.target_profile['P'])
|
773 |
self._apply("Аммоний азотнокислый", "N (NH4+)", self.target_profile['N (NH4+)'])
|
774 |
|
775 |
+
# 4. Компенсируем NO3
|
776 |
current_no3 = self.actual_profile['N (NO3-)']
|
777 |
no3_needed = self.target_profile['N (NO3-)'] - current_no3
|
778 |
|
779 |
if no3_needed > 0.1:
|
|
|
|
|
|
|
|
|
|
|
780 |
self._apply("Калий азотнокислый", "N (NO3-)", no3_needed)
|
781 |
|
782 |
+
# 5. Компенсируем K и S через сульфат калия
|
783 |
self._apply_k_sulfate()
|
784 |
|
785 |
+
# 6. Дополнительная компенсация K, если необходимо
|
786 |
k_deficit = self.target_profile['K'] - self.actual_profile['K']
|
787 |
if k_deficit > 0.1:
|
788 |
self._apply("Калий азотнокислый", "K", k_deficit)
|
789 |
|
790 |
+
# 7. Проверяем соотношение NH4:NO3
|
791 |
self._adjust_nh4_no3_ratio()
|
792 |
|
793 |
return self.results
|