DmitrMakeev commited on
Commit
0adeae2
·
verified ·
1 Parent(s): 1d83858

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -31
app.py CHANGED
@@ -735,6 +735,13 @@ class NutrientCalculator:
735
  "NH4+": self.target_profile['N (NH4+)']
736
  }
737
 
 
 
 
 
 
 
 
738
  def _label(self, element):
739
  """Форматирование названий элементов для вывода"""
740
  labels = {
@@ -743,39 +750,44 @@ class NutrientCalculator:
743
  }
744
  return labels.get(element, element)
745
 
746
- def _balance_nitrogen_with_k(self):
747
- """Новый метод с компенсацией калия"""
748
- # 1. Вносим NH4 через аммиачную селитру
749
- nh4_needed = self.target_profile['N (NH4+)'] - self.actual_profile['N (NH4+)']
750
- if nh4_needed > 0.1:
751
- self._apply("Аммоний азотнокислый", "N (NH4+)", nh4_needed)
752
-
753
- # 2. Рассчитываем сколько NO3 нужно внести
754
- no3_needed = self.target_profile['N (NO3-)'] - self.actual_profile['N (NO3-)']
755
-
756
- # 3. Сначала вносим через кальциевую селитру (для Ca)
757
- ca_needed = self.target_profile['Ca'] - self.actual_profile['Ca']
758
- if ca_needed > 0.1 and no3_needed > 0.1:
759
- max_ca_no3 = (ca_needed / self.fertilizers["Кальциевая селитра"]["Ca"]) * \
760
- self.fertilizers["Кальциевая селитра"]["N (NO3-)"]
761
- ca_no3_part = min(no3_needed, max_ca_no3)
762
- self._apply("Кальциевая селитра", "N (NO3-)", ca_no3_part)
763
- no3_needed -= ca_no3_part
764
-
765
- # 4. Остаток NO3 вносим через калийную селитру
766
- if no3_needed > 0.1:
767
- # Рассчитываем сколько K внесется с этим NO3
768
- k_from_kno3 = (no3_needed / self.fertilizers["Калий азотнокислый"]["N (NO3-)"]) * \
769
- self.fertilizers["Калий азотнокислый"]["K"]
 
 
 
 
 
 
 
 
770
 
771
- # Проверяем, не превысит ли это целевое значение K
772
- k_remaining = self.target_profile['K'] - self.actual_profile['K']
773
- if k_from_kno3 > k_remaining:
774
- # Если превысит - уменьшаем количество KNO3
775
- no3_needed = (k_remaining / self.fertilizers["Калий азотнокислый"]["K"]) * \
776
- self.fertilizers["Калий азотнокислый"]["N (NO3-)"]
777
 
778
- self._apply("Калий азотнокислый", "N (NO3-)", no3_needed)
 
 
779
 
780
  def calculate(self):
781
  """Основной метод расчета с новой логикой"""
 
735
  "NH4+": self.target_profile['N (NH4+)']
736
  }
737
 
738
+ # Настройки компенсации по умолчанию
739
+ self.compensation_weights = {
740
+ 'KNO3': 0.5, # Вес калийной селитры (0-1)
741
+ 'CaNO3': 0.3, # Вес кальциевой селитры (0-1)
742
+ 'K2SO4': 0.2 # Вес сульфата калия (0-1)
743
+ }
744
+
745
  def _label(self, element):
746
  """Форматирование названий элементов для вывода"""
747
  labels = {
 
750
  }
751
  return labels.get(element, element)
752
 
753
+ def set_compensation_weights(self, kno3_weight, cano3_weight, k2so4_weight):
754
+ """Установка весов для компенсации элементов"""
755
+ total = kno3_weight + cano3_weight + k2so4_weight
756
+ self.compensation_weights = {
757
+ 'KNO3': kno3_weight / total,
758
+ 'CaNO3': cano3_weight / total,
759
+ 'K2SO4': k2so4_weight / total
760
+ }
761
+
762
+ def calculate(self):
763
+ """Основной метод расчета с новой логикой"""
764
+ try:
765
+ # 1. Вносим Mg и S
766
+ self._apply("Сульфат магния", "Mg", self.target_profile['Mg'])
767
+
768
+ # 2. Балансируем азот с учетом компенсации
769
+ self._balance_nitrogen_with_compensation()
770
+
771
+ # 3. Вносим Ca (остаток)
772
+ ca_needed = self.target_profile['Ca'] - self.actual_profile['Ca']
773
+ if ca_needed > 0.1:
774
+ self._apply("Кальциевая селитра", "Ca", ca_needed)
775
+
776
+ # 4. Вносим P
777
+ p_needed = self.target_profile['P'] - self.actual_profile['P']
778
+ if p_needed > 0.1:
779
+ self._apply("Монофосфат калия", "P", p_needed)
780
+
781
+ # 5. Корректируем K через сульфат калия (если остался дефицит)
782
+ k_needed = self.target_profile['K'] - self.actual_profile['K']
783
+ if k_needed > 0.1:
784
+ self._apply("Калий сернокислый", "K", k_needed)
785
 
786
+ return self.results
 
 
 
 
 
787
 
788
+ except Exception as e:
789
+ print(f"Ошибка при расчёте: {str(e)}")
790
+ raise
791
 
792
  def calculate(self):
793
  """Основной метод расчета с новой логикой"""