DmitrMakeev commited on
Commit
d2a3e10
·
verified ·
1 Parent(s): 7518d51

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -11
app.py CHANGED
@@ -744,35 +744,54 @@ class NutrientCalculator:
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_sulfate == 1:
753
  mg_needed = self.target["Mg"] - self.actual["Mg"]
754
  if mg_needed > 0:
755
  self._apply_fertilizer("Сульфат магния", "Mg", mg_needed * (1 - self.magnesium_nitrate_ratio))
756
-
757
- # Добавляем магний через "Магний азотнокислый", если коэффициент > 0
 
 
 
758
  if self.magnesium_nitrate_ratio > 0:
759
  mg_remaining = self.target["Mg"] - self.actual["Mg"]
760
  if mg_remaining > 0:
761
- self._apply_fertilizer("Магний азотнокислый", "Mg", mg_remaining * self.magnesium_nitrate_ratio)
762
-
763
- # Балансируем калий и серу
764
- self._balance_k_s()
765
-
766
  # Распределяем кальций
767
  self._distribute_calcium()
768
-
769
  # Балансируем нитратный азот
770
  no3_needed = self.target["N (NO3-)"] - self.actual["N (NO3-)"]
771
  if no3_needed > 0:
772
  self._apply_fertilizer("Калий азотнокислый", "N (NO3-)", no3_needed)
773
-
774
  return self._verify_results()
775
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
776
  def _apply_fertilizer(self, name, element, target_ppm):
777
  if name not in self.fertilizers:
778
  raise KeyError(f"Удобрение '{name}' не найдено!")
 
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_sulfate == 1:
753
  mg_needed = self.target["Mg"] - self.actual["Mg"]
754
  if mg_needed > 0:
755
  self._apply_fertilizer("Сульфат магния", "Mg", mg_needed * (1 - self.magnesium_nitrate_ratio))
756
+
757
+ # Балансируем калий и серу
758
+ self._balance_k_s()
759
+
760
+ # Добавляем оставшийся магний через "Магний азотнокислый", если коэффициент > 0
761
  if self.magnesium_nitrate_ratio > 0:
762
  mg_remaining = self.target["Mg"] - self.actual["Mg"]
763
  if mg_remaining > 0:
764
+ self._apply_fertilizer("Магний азотнокислый", "Mg", mg_remaining)
765
+
 
 
 
766
  # Распределяем кальций
767
  self._distribute_calcium()
768
+
769
  # Балансируем нитратный азот
770
  no3_needed = self.target["N (NO3-)"] - self.actual["N (NO3-)"]
771
  if no3_needed > 0:
772
  self._apply_fertilizer("Калий азотнокислый", "N (NO3-)", no3_needed)
773
+
774
  return self._verify_results()
775
 
776
+ def _balance_k_s(self):
777
+ k_needed = self.target["K"] - self.actual["K"]
778
+ s_needed = self.target["S"] - self.actual["S"]
779
+
780
+ # Используем "Калий сернокислый" для баланса K и S
781
+ if k_needed > 0 and s_needed > 0:
782
+ k_fraction = self.fertilizers["Калий сернокислый"].get("K", 0)
783
+ s_fraction = self.fertilizers["Калий сернокислый"].get("S", 0)
784
+ if k_fraction == 0 or s_fraction == 0:
785
+ print("ПРЕДУПРЕЖДЕНИЕ: Удобрение 'Калий сернокислый' содержит нулевые значения!")
786
+ return
787
+ k_from_k2so4 = min(k_needed, s_needed * k_fraction / s_fraction)
788
+ self._apply_fertilizer("Калий сернокислый", "K", k_from_k2so4)
789
+
790
+ # Оставшийся калий добавляем через "Калий азотнокислый"
791
+ remaining_k = self.target["K"] - self.actual["K"]
792
+ if remaining_k > 0:
793
+ self._apply_fertilizer("Калий азотнокислый", "K", remaining_k)
794
+
795
  def _apply_fertilizer(self, name, element, target_ppm):
796
  if name not in self.fertilizers:
797
  raise KeyError(f"Удобрение '{name}' не найдено!")