Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -738,15 +738,6 @@ class NutrientCalculator:
|
|
738 |
self.fertilizers = NUTRIENT_CONTENT_IN_FERTILIZERS
|
739 |
self.total_ec = 0.0
|
740 |
|
741 |
-
# Расчёт азота
|
742 |
-
total_parts = NO3_RATIO + NH4_RATIO
|
743 |
-
self.target_profile['N (NO3-)'] = TOTAL_NITROGEN * (NO3_RATIO / total_parts)
|
744 |
-
self.target_profile['N (NH4+)'] = TOTAL_NITROGEN * (NH4_RATIO / total_parts)
|
745 |
-
self.initial_n_profile = {
|
746 |
-
"NO3-": self.target_profile['N (NO3-)'],
|
747 |
-
"NH4+": self.target_profile['N (NH4+)']
|
748 |
-
}
|
749 |
-
|
750 |
def _label(self, element):
|
751 |
"""Форматирование названий элементов для вывода"""
|
752 |
labels = {
|
@@ -779,16 +770,15 @@ class NutrientCalculator:
|
|
779 |
if no3_needed > 0.1:
|
780 |
self._apply("Калий азотнокислый", "N (NO3-)", no3_needed)
|
781 |
|
782 |
-
# 5. Компенсируем K
|
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("Калий
|
789 |
|
790 |
-
#
|
791 |
-
self.
|
|
|
|
|
792 |
|
793 |
return self.results
|
794 |
except Exception as e:
|
@@ -829,53 +819,6 @@ class NutrientCalculator:
|
|
829 |
print(f"Ошибка: отсутствует элемент {str(e)} в удобрении {fert_name}")
|
830 |
raise
|
831 |
|
832 |
-
def _apply_k_sulfate(self):
|
833 |
-
fert = "Калий сернокислый"
|
834 |
-
k_def = self.target_profile['K'] - self.actual_profile['K']
|
835 |
-
s_def = self.target_profile['S'] - self.actual_profile['S']
|
836 |
-
|
837 |
-
if k_def <= 0 and s_def <= 0:
|
838 |
-
return
|
839 |
-
|
840 |
-
try:
|
841 |
-
if s_def > 0.1:
|
842 |
-
s_content = self.fertilizers[fert]["S"]
|
843 |
-
grams_s = (s_def * self.volume) / (s_content * 1000)
|
844 |
-
|
845 |
-
k_content = self.fertilizers[fert]["K"]
|
846 |
-
k_from_s = (grams_s * k_content * 1000) / self.volume
|
847 |
-
|
848 |
-
if k_from_s > k_def and k_def > 0.1:
|
849 |
-
grams = (k_def * self.volume) / (k_content * 1000)
|
850 |
-
else:
|
851 |
-
grams = grams_s
|
852 |
-
|
853 |
-
self._apply(fert, "S", s_def)
|
854 |
-
except Exception as e:
|
855 |
-
print(f"Ошибка при расчёте сульфата калия: {str(e)}")
|
856 |
-
raise
|
857 |
-
|
858 |
-
def _adjust_nh4_no3_ratio(self):
|
859 |
-
"""Корректировка соотношения NH4:NO3"""
|
860 |
-
nh4_actual = self.actual_profile['N (NH4+)']
|
861 |
-
no3_actual = self.actual_profile['N (NO3-)']
|
862 |
-
total_n = nh4_actual + no3_actual
|
863 |
-
|
864 |
-
if total_n > 0:
|
865 |
-
nh4_ratio = nh4_actual / total_n
|
866 |
-
target_nh4_ratio = NH4_RATIO / (NH4_RATIO + NO3_RATIO)
|
867 |
-
|
868 |
-
if abs(nh4_ratio - target_nh4_ratio) > 0.05: # Допустимая погрешность 5%
|
869 |
-
if nh4_ratio < target_nh4_ratio:
|
870 |
-
# Увеличиваем NH4+
|
871 |
-
nh4_needed = total_n * target_nh4_ratio - nh4_actual
|
872 |
-
self._apply("Аммоний азотнокислый", "N (NH4+)", nh4_needed)
|
873 |
-
else:
|
874 |
-
# Уменьшаем NH4+, увеличиваем NO3-
|
875 |
-
nh4_excess = nh4_actual - total_n * target_nh4_ratio
|
876 |
-
self._apply("Аммоний азотнокислый", "N (NH4+)", -nh4_excess)
|
877 |
-
self._apply("Калий азотнокислый", "N (NO3-)", nh4_excess)
|
878 |
-
|
879 |
def calculate_ec(self):
|
880 |
return round(self.total_ec, 2)
|
881 |
def print_report(self):
|
|
|
738 |
self.fertilizers = NUTRIENT_CONTENT_IN_FERTILIZERS
|
739 |
self.total_ec = 0.0
|
740 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
741 |
def _label(self, element):
|
742 |
"""Форматирование названий элементов для вывода"""
|
743 |
labels = {
|
|
|
770 |
if no3_needed > 0.1:
|
771 |
self._apply("Калий азотнокислый", "N (NO3-)", no3_needed)
|
772 |
|
773 |
+
# 5. Компенсируем K через сульфат калия
|
|
|
|
|
|
|
774 |
k_deficit = self.target_profile['K'] - self.actual_profile['K']
|
775 |
if k_deficit > 0.1:
|
776 |
+
self._apply("Калий сернокислый", "K", k_deficit)
|
777 |
|
778 |
+
# 6. Компенсируем S через сульфат калия
|
779 |
+
s_deficit = self.target_profile['S'] - self.actual_profile['S']
|
780 |
+
if s_deficit > 0.1:
|
781 |
+
self._apply("Калий сернокислый", "S", s_deficit)
|
782 |
|
783 |
return self.results
|
784 |
except Exception as e:
|
|
|
819 |
print(f"Ошибка: отсутствует элемент {str(e)} в удобрении {fert_name}")
|
820 |
raise
|
821 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
822 |
def calculate_ec(self):
|
823 |
return round(self.total_ec, 2)
|
824 |
def print_report(self):
|