DmitrMakeev commited on
Commit
541a6de
·
verified ·
1 Parent(s): f614c3f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -4
app.py CHANGED
@@ -697,6 +697,7 @@ INPUT_DATA = {
697
  "Калий азотнокислый": {"N (NO3-)": 0.13854, "K": 0.36672},
698
  "Аммоний азотнокислый": {"N (NO3-)": 0.17499, "N (NH4+)": 0.17499},
699
  "Сульфат магния": {"Mg": 0.10220, "S": 0.13483},
 
700
  "Монофосфат калия": {"P": 0.22761, "K": 0.28731},
701
  "Калий сернокислый": {"K": 0.44874, "S": 0.18401},
702
  "Кальций хлорид": {"Ca": 0.272, "Cl": 0.483}
@@ -705,14 +706,16 @@ INPUT_DATA = {
705
  "P": 31, "K": 210, "Mg": 24, "Ca": 82, "S": 57.5, "CaCl": 18.5,
706
  "NO3_RAT": 8.25, "TOTAL_NITROG": 125, "liters": 100,
707
  "activation_cacl": 5, # Активация CaCl
708
- "enhancement_cacl": 0.1
 
 
709
  }
710
  }
711
 
712
 
713
 
714
  class NutrientCalculator:
715
- def __init__(self, fertilizer_constants, profile_settings, liters, rounding_precision, activation_cacl, enhancement_cacl):
716
  self.fertilizers = fertilizer_constants
717
  self.profile = profile_settings
718
  self.volume = liters
@@ -721,6 +724,8 @@ class NutrientCalculator:
721
  # Новые параметры
722
  self.activation_cacl = float(activation_cacl) # Активация CaCl
723
  self.enhancement_cacl = float(enhancement_cacl) # Усиление CaCl
 
 
724
 
725
  total_parts = self.profile["NO3_RAT"] + 1
726
  self.target = {
@@ -737,14 +742,39 @@ class NutrientCalculator:
737
  self.results = {fert: {'граммы': 0.0} for fert in self.fertilizers}
738
 
739
  def calculate(self):
 
740
  self._apply_fertilizer("Аммоний азотнокислый", "N (NH4+)", self.target["N (NH4+)"])
 
 
741
  self._apply_fertilizer("Монофосфат калия", "P", self.target["P"])
742
- self._apply_fertilizer("Сульфат магния", "Mg", self.target["Mg"])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
743
  self._balance_k_s()
 
 
744
  self._distribute_calcium()
 
 
745
  no3_needed = self.target["N (NO3-)"] - self.actual["N (NO3-)"]
746
  if no3_needed > 0:
747
  self._apply_fertilizer("Калий азотнокислый", "N (NO3-)", no3_needed)
 
748
  return self._verify_results()
749
 
750
  def _apply_fertilizer(self, name, element, target_ppm):
@@ -764,6 +794,8 @@ class NutrientCalculator:
764
  def _balance_k_s(self):
765
  k_needed = self.target["K"] - self.actual["K"]
766
  s_needed = self.target["S"] - self.actual["S"]
 
 
767
  if k_needed > 0 and s_needed > 0:
768
  k_fraction = self.fertilizers["Калий сернокислый"].get("K", 0)
769
  s_fraction = self.fertilizers["Калий сернокислый"].get("S", 0)
@@ -772,6 +804,8 @@ class NutrientCalculator:
772
  return
773
  k_from_k2so4 = min(k_needed, s_needed * k_fraction / s_fraction)
774
  self._apply_fertilizer("Калий сернокисл��й", "K", k_from_k2so4)
 
 
775
  remaining_k = self.target["K"] - self.actual["K"]
776
  if remaining_k > 0:
777
  self._apply_fertilizer("Калий азотнокислый", "K", remaining_k)
@@ -840,6 +874,7 @@ class NutrientCalculator:
840
  report += f"\n- {el}: не хватает {abs(diff)} ppm"
841
  return report
842
 
 
843
  # Извлекаем данные из INPUT_DATA
844
  fertilizer_constants = INPUT_DATA["fertilizerConstants"]
845
  profile_settings = INPUT_DATA["profileSettings"]
@@ -847,6 +882,8 @@ liters = profile_settings["liters"]
847
  rounding_precision = 3
848
  activation_cacl = float(profile_settings.get("activation_cacl", 5))
849
  enhancement_cacl = float(profile_settings.get("enhancement_cacl", 0.1))
 
 
850
 
851
  # Создаем калькулятор
852
  calculator = NutrientCalculator(
@@ -855,7 +892,9 @@ calculator = NutrientCalculator(
855
  liters=liters,
856
  rounding_precision=rounding_precision,
857
  activation_cacl=activation_cacl,
858
- enhancement_cacl=enhancement_cacl
 
 
859
  )
860
 
861
  # Запуск расчета
 
697
  "Калий азотнокислый": {"N (NO3-)": 0.13854, "K": 0.36672},
698
  "Аммоний азотнокислый": {"N (NO3-)": 0.17499, "N (NH4+)": 0.17499},
699
  "Сульфат магния": {"Mg": 0.10220, "S": 0.13483},
700
+ "Магний азотнокислый": {"Mg": 0.0948, "N (NO3-)": 0.109}, # Новое удобрение
701
  "Монофосфат калия": {"P": 0.22761, "K": 0.28731},
702
  "Калий сернокислый": {"K": 0.44874, "S": 0.18401},
703
  "Кальций хлорид": {"Ca": 0.272, "Cl": 0.483}
 
706
  "P": 31, "K": 210, "Mg": 24, "Ca": 82, "S": 57.5, "CaCl": 18.5,
707
  "NO3_RAT": 8.25, "TOTAL_NITROG": 125, "liters": 100,
708
  "activation_cacl": 5, # Активация CaCl
709
+ "enhancement_cacl": 0.1, # Усиление CaCl
710
+ "use_magnesium_nitrate": 0, # Флаг для использования "Магния азотнокислого"
711
+ "magnesium_nitrate_ratio": 0 # Коэффициент для "Магния азотнокислого"
712
  }
713
  }
714
 
715
 
716
 
717
  class NutrientCalculator:
718
+ def __init__(self, fertilizer_constants, profile_settings, liters, rounding_precision, activation_cacl, enhancement_cacl, use_magnesium_nitrate, magnesium_nitrate_ratio):
719
  self.fertilizers = fertilizer_constants
720
  self.profile = profile_settings
721
  self.volume = liters
 
724
  # Новые параметры
725
  self.activation_cacl = float(activation_cacl) # Активация CaCl
726
  self.enhancement_cacl = float(enhancement_cacl) # Усиление CaCl
727
+ self.use_magnesium_nitrate = int(use_magnesium_nitrate) # Флаг для использования "Магния азотнокислого"
728
+ self.magnesium_nitrate_ratio = float(magnesium_nitrate_ratio) # Коэффициент для "Магния азотнокислого"
729
 
730
  total_parts = self.profile["NO3_RAT"] + 1
731
  self.target = {
 
742
  self.results = {fert: {'граммы': 0.0} for fert in self.fertilizers}
743
 
744
  def calculate(self):
745
+ # Добавляем аммонийный азот
746
  self._apply_fertilizer("Аммоний азотнокислый", "N (NH4+)", self.target["N (NH4+)"])
747
+
748
+ # Добавляем фосфор
749
  self._apply_fertilizer("Монофосфат калия", "P", self.target["P"])
750
+
751
+ # Добавляем магний
752
+ if self.use_magnesium_nitrate == 0:
753
+ # Используем только "Сульфат магния"
754
+ mg_needed = self.target["Mg"] - self.actual["Mg"]
755
+ if mg_needed > 0:
756
+ self._apply_fertilizer("Сульфат магния", "Mg", mg_needed)
757
+ else:
758
+ # Используем распределение между "Сульфатом магния" и "Магнием азотнокислым"
759
+ mg_needed = self.target["Mg"] - self.actual["Mg"]
760
+ if mg_needed > 0:
761
+ self._apply_fertilizer("Сульфат магния", "Mg", mg_needed * (1 - self.magnesium_nitrate_ratio))
762
+
763
+ mg_remaining = self.target["Mg"] - self.actual["Mg"]
764
+ if mg_remaining > 0:
765
+ self._apply_fertilizer("Магний азотнокислый", "Mg", mg_remaining)
766
+
767
+ # Балансируем калий и серу
768
  self._balance_k_s()
769
+
770
+ # Распределяем кальций
771
  self._distribute_calcium()
772
+
773
+ # Балансируем нитратный азот
774
  no3_needed = self.target["N (NO3-)"] - self.actual["N (NO3-)"]
775
  if no3_needed > 0:
776
  self._apply_fertilizer("Калий азотнокислый", "N (NO3-)", no3_needed)
777
+
778
  return self._verify_results()
779
 
780
  def _apply_fertilizer(self, name, element, target_ppm):
 
794
  def _balance_k_s(self):
795
  k_needed = self.target["K"] - self.actual["K"]
796
  s_needed = self.target["S"] - self.actual["S"]
797
+
798
+ # Используем "Калий сернокислый" для баланса K и S
799
  if k_needed > 0 and s_needed > 0:
800
  k_fraction = self.fertilizers["Калий сернокислый"].get("K", 0)
801
  s_fraction = self.fertilizers["Калий сернокислый"].get("S", 0)
 
804
  return
805
  k_from_k2so4 = min(k_needed, s_needed * k_fraction / s_fraction)
806
  self._apply_fertilizer("Калий сернокисл��й", "K", k_from_k2so4)
807
+
808
+ # Оставшийся калий добавляем через "Калий азотнокислый"
809
  remaining_k = self.target["K"] - self.actual["K"]
810
  if remaining_k > 0:
811
  self._apply_fertilizer("Калий азотнокислый", "K", remaining_k)
 
874
  report += f"\n- {el}: не хватает {abs(diff)} ppm"
875
  return report
876
 
877
+
878
  # Извлекаем данные из INPUT_DATA
879
  fertilizer_constants = INPUT_DATA["fertilizerConstants"]
880
  profile_settings = INPUT_DATA["profileSettings"]
 
882
  rounding_precision = 3
883
  activation_cacl = float(profile_settings.get("activation_cacl", 5))
884
  enhancement_cacl = float(profile_settings.get("enhancement_cacl", 0.1))
885
+ use_magnesium_nitrate = int(profile_settings.get("use_magnesium_nitrate", 1)) # Флаг для "Магния азотнокислого"
886
+ magnesium_nitrate_ratio = float(profile_settings.get("magnesium_nitrate_ratio", 0.3)) # Коэффициент для "Магния азотнокислого"
887
 
888
  # Создаем калькулятор
889
  calculator = NutrientCalculator(
 
892
  liters=liters,
893
  rounding_precision=rounding_precision,
894
  activation_cacl=activation_cacl,
895
+ enhancement_cacl=enhancement_cacl,
896
+ use_magnesium_nitrate=use_magnesium_nitrate, # Новое название флага
897
+ magnesium_nitrate_ratio=magnesium_nitrate_ratio
898
  )
899
 
900
  # Запуск расчета