DmitrMakeev commited on
Commit
1ca248d
·
verified ·
1 Parent(s): 3826374

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +7 -44
app.py CHANGED
@@ -697,25 +697,22 @@ 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
- "Магний азотнокислый": {"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}
704
  },
705
  "profileSettings": {
706
- "P": 31, "K": 210, "Mg": 24, "Ca": 82, "S": 57.36, "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": 1, # Флаг для использования "Магния азотнокислого"
711
- "magnesium_nitrate_ratio": 0.1 # Коэффициент для "Магния азотнокислого"
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,8 +721,6 @@ class NutrientCalculator:
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,39 +737,14 @@ class NutrientCalculator:
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,8 +764,6 @@ class NutrientCalculator:
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,8 +772,6 @@ class NutrientCalculator:
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,7 +840,6 @@ class NutrientCalculator:
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,8 +847,6 @@ liters = profile_settings["liters"]
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,9 +855,7 @@ 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
  # Запуск расчета
@@ -983,6 +944,8 @@ def handle_calculation():
983
 
984
 
985
 
 
 
986
 
987
 
988
  if __name__ == '__main__':
 
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}
703
  },
704
  "profileSettings": {
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
  # Новые параметры
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
  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
  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
  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
  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
  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
  liters=liters,
856
  rounding_precision=rounding_precision,
857
  activation_cacl=activation_cacl,
858
+ enhancement_cacl=enhancement_cacl
 
 
859
  )
860
 
861
  # Запуск расчета
 
944
 
945
 
946
 
947
+
948
+
949
 
950
 
951
  if __name__ == '__main__':