DmitrMakeev commited on
Commit
a1339eb
·
verified ·
1 Parent(s): 96d01e1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +6 -63
app.py CHANGED
@@ -738,15 +738,6 @@ class NutrientCalculator:
738
  self.fertilizers = NUTRIENT_CONTENT_IN_FERTILIZERS
739
  self.total_ec = 0.0
740
 
741
- # Расчёт азота
742
- total_parts = NO3_RATIO + NH4_RATIO
743
- self.target_profile['N (NO3-)'] = TOTAL_NITROGEN * (NO3_RATIO / total_parts)
744
- self.target_profile['N (NH4+)'] = TOTAL_NITROGEN * (NH4_RATIO / total_parts)
745
- self.initial_n_profile = {
746
- "NO3-": self.target_profile['N (NO3-)'],
747
- "NH4+": self.target_profile['N (NH4+)']
748
- }
749
-
750
  def _label(self, element):
751
  """Форматирование названий элементов для вывода"""
752
  labels = {
@@ -779,16 +770,15 @@ class NutrientCalculator:
779
  if no3_needed > 0.1:
780
  self._apply("Калий азотнокислый", "N (NO3-)", no3_needed)
781
 
782
- # 5. Компенсируем K и S через сульфат калия
783
- self._apply_k_sulfate()
784
-
785
- # 6. Дополнительная компенсация K, если необходимо
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
- # 7. Проверяем соотношение NH4:NO3
791
- self._adjust_nh4_no3_ratio()
 
 
792
 
793
  return self.results
794
  except Exception as e:
@@ -829,53 +819,6 @@ class NutrientCalculator:
829
  print(f"Ошибка: отсутствует элемент {str(e)} в удобрении {fert_name}")
830
  raise
831
 
832
- def _apply_k_sulfate(self):
833
- fert = "Калий сернокислый"
834
- k_def = self.target_profile['K'] - self.actual_profile['K']
835
- s_def = self.target_profile['S'] - self.actual_profile['S']
836
-
837
- if k_def <= 0 and s_def <= 0:
838
- return
839
-
840
- try:
841
- if s_def > 0.1:
842
- s_content = self.fertilizers[fert]["S"]
843
- grams_s = (s_def * self.volume) / (s_content * 1000)
844
-
845
- k_content = self.fertilizers[fert]["K"]
846
- k_from_s = (grams_s * k_content * 1000) / self.volume
847
-
848
- if k_from_s > k_def and k_def > 0.1:
849
- grams = (k_def * self.volume) / (k_content * 1000)
850
- else:
851
- grams = grams_s
852
-
853
- self._apply(fert, "S", s_def)
854
- except Exception as e:
855
- print(f"Ошибка при расчёте сульфата калия: {str(e)}")
856
- raise
857
-
858
- def _adjust_nh4_no3_ratio(self):
859
- """Корректировка соотношения NH4:NO3"""
860
- nh4_actual = self.actual_profile['N (NH4+)']
861
- no3_actual = self.actual_profile['N (NO3-)']
862
- total_n = nh4_actual + no3_actual
863
-
864
- if total_n > 0:
865
- nh4_ratio = nh4_actual / total_n
866
- target_nh4_ratio = NH4_RATIO / (NH4_RATIO + NO3_RATIO)
867
-
868
- if abs(nh4_ratio - target_nh4_ratio) > 0.05: # Допустимая погрешность 5%
869
- if nh4_ratio < target_nh4_ratio:
870
- # Увеличиваем NH4+
871
- nh4_needed = total_n * target_nh4_ratio - nh4_actual
872
- self._apply("Аммоний азотнокислый", "N (NH4+)", nh4_needed)
873
- else:
874
- # Уменьшаем NH4+, увеличиваем NO3-
875
- nh4_excess = nh4_actual - total_n * target_nh4_ratio
876
- self._apply("Аммоний азотнокислый", "N (NH4+)", -nh4_excess)
877
- self._apply("Калий азотнокислый", "N (NO3-)", nh4_excess)
878
-
879
  def calculate_ec(self):
880
  return round(self.total_ec, 2)
881
  def print_report(self):
 
738
  self.fertilizers = NUTRIENT_CONTENT_IN_FERTILIZERS
739
  self.total_ec = 0.0
740
 
 
 
 
 
 
 
 
 
 
741
  def _label(self, element):
742
  """Форматирование названий элементов для вывода"""
743
  labels = {
 
770
  if no3_needed > 0.1:
771
  self._apply("Калий азотнокислый", "N (NO3-)", no3_needed)
772
 
773
+ # 5. Компенсируем K через сульфат калия
 
 
 
774
  k_deficit = self.target_profile['K'] - self.actual_profile['K']
775
  if k_deficit > 0.1:
776
+ self._apply("Калий сернокислый", "K", k_deficit)
777
 
778
+ # 6. Компенсируем S через сульфат калия
779
+ s_deficit = self.target_profile['S'] - self.actual_profile['S']
780
+ if s_deficit > 0.1:
781
+ self._apply("Калий сернокислый", "S", s_deficit)
782
 
783
  return self.results
784
  except Exception as e:
 
819
  print(f"Ошибка: отсутствует элемент {str(e)} в удобрении {fert_name}")
820
  raise
821
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
822
  def calculate_ec(self):
823
  return round(self.total_ec, 2)
824
  def print_report(self):