DmitrMakeev commited on
Commit
1c9024f
·
verified ·
1 Parent(s): 5f41a06

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -5
app.py CHANGED
@@ -756,23 +756,35 @@ class NutrientCalculator:
756
 
757
  def calculate(self):
758
  try:
 
759
  self._apply("Сульфат магния", "Mg", self.target_profile['Mg'])
760
  self._apply("Кальциевая селитра", "Ca", self.target_profile['Ca'])
761
  self._apply("Монофосфат калия", "P", self.target_profile['P'])
762
  self._apply("Аммоний азотнокислый", "N (NH4+)", self.target_profile['N (NH4+)'])
763
-
 
764
  current_no3 = self.actual_profile['N (NO3-)']
765
  no3_needed = self.target_profile['N (NO3-)'] - current_no3
766
 
767
  if no3_needed > 0.1:
 
 
 
 
 
768
  self._apply("Калий азотнокислый", "N (NO3-)", no3_needed)
769
-
 
770
  self._apply_k_sulfate()
771
-
 
772
  k_deficit = self.target_profile['K'] - self.actual_profile['K']
773
  if k_deficit > 0.1:
774
  self._apply("Калий азотнокислый", "K", k_deficit)
775
-
 
 
 
776
  return self.results
777
  except Exception as e:
778
  print(f"Ошибка при расчёте: {str(e)}")
@@ -838,9 +850,29 @@ class NutrientCalculator:
838
  print(f"Ошибка при расчёте сульфата калия: {str(e)}")
839
  raise
840
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
841
  def calculate_ec(self):
842
  return round(self.total_ec, 2)
843
-
844
  def print_report(self):
845
  try:
846
  print("\n" + "="*60)
 
756
 
757
  def calculate(self):
758
  try:
759
+ # 1. Вносим основные элементы
760
  self._apply("Сульфат магния", "Mg", self.target_profile['Mg'])
761
  self._apply("Кальциевая селитра", "Ca", self.target_profile['Ca'])
762
  self._apply("Монофосфат калия", "P", self.target_profile['P'])
763
  self._apply("Аммоний азотнокислый", "N (NH4+)", self.target_profile['N (NH4+)'])
764
+
765
+ # 2. Компенсируем NO3
766
  current_no3 = self.actual_profile['N (NO3-)']
767
  no3_needed = self.target_profile['N (NO3-)'] - current_no3
768
 
769
  if no3_needed > 0.1:
770
+ # Ограничиваем внесение NO3, чтобы не превысить общее количество азота
771
+ max_nitrogen = self.target_profile['N (NO3-)'] + self.target_profile['N (NH4+)']
772
+ actual_nitrogen = self.actual_profile['N (NO3-)'] + self.actual_profile['N (NH4+)']
773
+ if actual_nitrogen + no3_needed > max_nitrogen:
774
+ no3_needed = max_nitrogen - actual_nitrogen
775
  self._apply("Калий азотнокислый", "N (NO3-)", no3_needed)
776
+
777
+ # 3. Компенсируем K и S через сульфат калия
778
  self._apply_k_sulfate()
779
+
780
+ # 4. Дополнительная компенсация K, если необходимо
781
  k_deficit = self.target_profile['K'] - self.actual_profile['K']
782
  if k_deficit > 0.1:
783
  self._apply("Калий азотнокислый", "K", k_deficit)
784
+
785
+ # 5. Проверяем соотношение NH4:NO3
786
+ self._adjust_nh4_no3_ratio()
787
+
788
  return self.results
789
  except Exception as e:
790
  print(f"Ошибка при расчёте: {str(e)}")
 
850
  print(f"Ошибка при расчёте сульфата калия: {str(e)}")
851
  raise
852
 
853
+ def _adjust_nh4_no3_ratio(self):
854
+ """Корректировка соотношения NH4:NO3"""
855
+ nh4_actual = self.actual_profile['N (NH4+)']
856
+ no3_actual = self.actual_profile['N (NO3-)']
857
+ total_n = nh4_actual + no3_actual
858
+
859
+ if total_n > 0:
860
+ nh4_ratio = nh4_actual / total_n
861
+ target_nh4_ratio = NH4_RATIO / (NH4_RATIO + NO3_RATIO)
862
+
863
+ if abs(nh4_ratio - target_nh4_ratio) > 0.05: # Допустимая погрешность 5%
864
+ if nh4_ratio < target_nh4_ratio:
865
+ # Увеличиваем NH4+
866
+ nh4_needed = total_n * target_nh4_ratio - nh4_actual
867
+ self._apply("Аммоний азотнокислый", "N (NH4+)", nh4_needed)
868
+ else:
869
+ # Уменьшаем NH4+, увеличиваем NO3-
870
+ nh4_excess = nh4_actual - total_n * target_nh4_ratio
871
+ self._apply("Аммоний азотнокислый", "N (NH4+)", -nh4_excess)
872
+ self._apply("Калий азотнокислый", "N (NO3-)", nh4_excess)
873
+
874
  def calculate_ec(self):
875
  return round(self.total_ec, 2)
 
876
  def print_report(self):
877
  try:
878
  print("\n" + "="*60)