DmitrMakeev commited on
Commit
7a2f7a7
·
verified ·
1 Parent(s): 926f0af

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +46 -21
app.py CHANGED
@@ -743,29 +743,54 @@ class NutrientCalculator:
743
  }
744
  return labels.get(element, element)
745
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
746
  def calculate(self):
747
- try:
748
- self._apply("Сульфат магния", "Mg", self.target_profile['Mg'])
749
- self._apply("Кальциевая селитра", "Ca", self.target_profile['Ca'])
750
- self._apply("Монофосфат калия", "P", self.target_profile['P'])
751
- self._apply("Аммоний азотнокислый", "N (NH4+)", self.target_profile['N (NH4+)'])
752
-
753
- current_no3 = self.actual_profile['N (NO3-)']
754
- no3_needed = self.target_profile['N (NO3-)'] - current_no3
755
-
756
- if no3_needed > 0.1:
757
- self._apply("Калий азотнокислый", "N (NO3-)", no3_needed)
758
-
759
- self._apply_k_sulfate()
760
-
761
- k_deficit = self.target_profile['K'] - self.actual_profile['K']
762
- if k_deficit > 0.1:
763
- self._apply("Калий азотнокислый", "K", k_deficit)
 
764
 
765
- return self.results
766
- except Exception as e:
767
- print(f"Ошибка при расчёте: {str(e)}")
768
- raise
769
 
770
  def _apply(self, fert_name, main_element, required_ppm):
771
  if required_ppm <= 0:
 
743
  }
744
  return labels.get(element, element)
745
 
746
+
747
+ def _balance_nitrogen(self):
748
+ # Целевые значения NH₄⁺ и NO₃⁻
749
+ total_parts = self.NO3_RATIO + self.NH4_RATIO
750
+ target_nh4 = (self.TOTAL_NITROGEN * self.NH4_RATIO) / total_parts
751
+ target_no3 = self.TOTAL_NITROGEN - target_nh4
752
+
753
+ # Вклад NH₄NO₃
754
+ nh4no3_nh4 = target_nh4
755
+ nh4no3_no3 = nh4no3_nh4 # NH₄NO₃ вносит оба вида азота
756
+ self._apply("Аммоний азотнокислый", "N (NH4+)", nh4no3_nh4)
757
+
758
+ # Оставшийся NO₃⁻ (цель - вклад NH₄NO₃)
759
+ remaining_no3 = target_no3 - nh4no3_no3
760
+ if remaining_no3 > 0.1:
761
+ # Распределить между Ca(NO₃)₂ и KNO₃ (например, 70/30)
762
+ ca_no3_part = remaining_no3 * 0.7
763
+ k_no3_part = remaining_no3 * 0.3
764
+ self._apply("Кальциевая селитра", "N (NO3-)", ca_no3_part)
765
+ self._apply("Калий азотнокислый", "N (NO3-)", k_no3_part)
766
+
767
+
768
+
769
+
770
  def calculate(self):
771
+ try:
772
+ # 1. Всё, что не связано с азотом (например, Mg)
773
+ self._apply("Сульфат магния", "Mg", self.target_profile['Mg'])
774
+
775
+ # 2. Балансировка азота (NH₄⁺/NO₃⁻)
776
+ self._balance_nitrogen() # <-- Ваш новый блок
777
+
778
+ # 3. Кальций и фосфор (после азота!)
779
+ self._apply("Кальциевая селитра", "Ca", self.target_profile['Ca'])
780
+ self._apply("Монофосфат калия", "P", self.target_profile['P'])
781
+
782
+ # 4. Калий и сера (коррекция)
783
+ self._apply_k_sulfate()
784
+
785
+ # 5. Последние проверки (например, дефицит калия)
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
+ return self.results
791
+ except Exception as e:
792
+ print(f"Ошибка: {str(e)}")
793
+ raise
794
 
795
  def _apply(self, fert_name, main_element, required_ppm):
796
  if required_ppm <= 0: