DmitrMakeev commited on
Commit
8cfe43d
·
verified ·
1 Parent(s): 17b8c98

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -25
app.py CHANGED
@@ -703,7 +703,6 @@ def nutri_call():
703
 
704
 
705
 
706
-
707
 
708
 
709
  from tabulate import tabulate
@@ -717,11 +716,11 @@ INPUT_DATA = {
717
  "Сульфат магния": {"Mg": 0.10220, "S": 0.13483},
718
  "Монофосфат калия": {"P": 0.22761, "K": 0.28731},
719
  "Калий сернокислый": {"K": 0.44874, "S": 0.18401},
720
- "Кальций хлорид": {"Ca": 0.272, "Cl": 0.483} # Новое удобрение
721
  },
722
  "profileSettings": {
723
  "P": 60, "K": 194, "Mg": 48.5, "Ca": 121.25, "S": 79.445,
724
- "NO3_RAT": 5.5, "TOTAL_NITROG": 138.57, "liters": 100
725
  }
726
  }
727
 
@@ -739,26 +738,35 @@ class NutrientCalculator:
739
  'Ca': self.profile["Ca"],
740
  'S': self.profile["S"],
741
  'N (NO3-)': self.profile["TOTAL_NITROG"] * (self.profile["NO3_RAT"] / total_parts),
742
- 'N (NH4+)': self.profile["TOTAL_NITROG"] * (1 / total_parts),
743
- 'Cl': 0 # Добавляем хлор с нулевым значением
744
  }
745
 
746
- self.actual = {k: 0.0 for k in self.target} # Теперь Cl тоже есть
747
  self.results = {}
748
 
749
  def calculate(self):
 
750
  self._apply_fertilizer("Кальциевая селитра", "Ca", self.target["Ca"])
 
 
751
  self._apply_fertilizer("Аммоний азотнокислый", "N (NH4+)", self.target["N (NH4+)"])
752
 
 
753
  no3_needed = self.target["N (NO3-)"] - self.actual["N (NO3-)"]
754
  if no3_needed > 0:
755
  self._apply_fertilizer("Калий азотнокислый", "N (NO3-)", no3_needed)
756
 
 
757
  self._apply_fertilizer("Монофосфат калия", "P", self.target["P"])
 
 
758
  self._apply_fertilizer("Сульфат магния", "Mg", self.target["Mg"])
 
 
759
  self._balance_k_s()
760
- self._compensate_sulfur()
761
- self._apply_calcium_chloride()
 
762
 
763
  return self._verify_results()
764
 
@@ -787,23 +795,17 @@ class NutrientCalculator:
787
  if remaining_k > 0:
788
  self._apply_fertilizer("Калий азотнокислый", "K", remaining_k)
789
 
790
- def _compensate_sulfur(self):
791
- s_needed = self.target["S"] - self.actual["S"]
792
- if s_needed > 0:
793
- self._apply_fertilizer("Сульфат магния", "S", s_needed)
794
-
795
- def _apply_calcium_chloride(self):
796
- cations = self.actual["Ca"] + self.actual["K"] + self.actual["Mg"] + self.actual["N (NH4+)"]
797
- anions = self.actual["N (NO3-)"] + self.actual["S"] + self.actual["P"] + self.actual["Cl"]
798
- balance = cations - anions
799
-
800
- # Проверяем соотношение NO3:NH4
801
- if self.profile["NO3_RAT"] < 8: # Используем CaCl2 только если NO3_RAT < 8
802
- if balance > 0: # Если катионов больше
803
- ca_needed = max(0, self.target["Ca"] - self.actual["Ca"])
804
- cl_needed = balance * 0.5 # Компенсируем половину дисбаланса
805
- self._apply_fertilizer("Кальций хлорид", "Ca", ca_needed)
806
- self._apply_fertilizer("Кальций хлорид", "Cl", cl_needed)
807
 
808
  def _verify_results(self):
809
  deficits = {}
 
703
 
704
 
705
 
 
706
 
707
 
708
  from tabulate import tabulate
 
716
  "Сульфат магния": {"Mg": 0.10220, "S": 0.13483},
717
  "Монофосфат калия": {"P": 0.22761, "K": 0.28731},
718
  "Калий сернокислый": {"K": 0.44874, "S": 0.18401},
719
+ "Кальций хлорид": {"Ca": 0.272} # Хлор не учитываем
720
  },
721
  "profileSettings": {
722
  "P": 60, "K": 194, "Mg": 48.5, "Ca": 121.25, "S": 79.445,
723
+ "NO3_RAT": 9.5, "TOTAL_NITROG": 138.57, "liters": 100
724
  }
725
  }
726
 
 
738
  'Ca': self.profile["Ca"],
739
  'S': self.profile["S"],
740
  'N (NO3-)': self.profile["TOTAL_NITROG"] * (self.profile["NO3_RAT"] / total_parts),
741
+ 'N (NH4+)': self.profile["TOTAL_NITROG"] * (1 / total_parts)
 
742
  }
743
 
744
+ self.actual = {k: 0.0 for k in self.target}
745
  self.results = {}
746
 
747
  def calculate(self):
748
+ # 1. Вносим кальциевую селитру (Ca + NO3)
749
  self._apply_fertilizer("Кальциевая селитра", "Ca", self.target["Ca"])
750
+
751
+ # 2. Вносим аммонийный азот
752
  self._apply_fertilizer("Аммоний азотнокислый", "N (NH4+)", self.target["N (NH4+)"])
753
 
754
+ # 3. Компенсируем NO3 калийной селитрой
755
  no3_needed = self.target["N (NO3-)"] - self.actual["N (NO3-)"]
756
  if no3_needed > 0:
757
  self._apply_fertilizer("Калий азотнокислый", "N (NO3-)", no3_needed)
758
 
759
+ # 4. Вносим фосфор
760
  self._apply_fertilizer("Монофосфат калия", "P", self.target["P"])
761
+
762
+ # 5. Вносим магний
763
  self._apply_fertilizer("Сульфат магния", "Mg", self.target["Mg"])
764
+
765
+ # 6. Балансируем калий и серу
766
  self._balance_k_s()
767
+
768
+ # 7. Заменяем часть кальция из селитры на кальций из CaCl2
769
+ self._replace_calcium_with_calcium_chloride()
770
 
771
  return self._verify_results()
772
 
 
795
  if remaining_k > 0:
796
  self._apply_fertilizer("Калий азотнокислый", "K", remaining_k)
797
 
798
+ def _replace_calcium_with_calcium_chloride(self):
799
+ """Заменяем часть кальция из селитры на кальций из CaCl2"""
800
+ if self.profile["NO3_RAT"] < 8: # Если соотношение NO3:NH4 ниже порога
801
+ # Считаем, сколько кальция нужно заменить
802
+ ca_to_replace = max(0, self.actual["Ca"] - self.target["Ca"])
803
+
804
+ # Убираем часть кальция из кальциевой селитры
805
+ self._apply_fertilizer("Кальциевая селитра", "Ca", -ca_to_replace)
806
+
807
+ # Добавляем кальций из CaCl2
808
+ self._apply_fertilizer("Кальций хлорид", "Ca", ca_to_replace)
 
 
 
 
 
 
809
 
810
  def _verify_results(self):
811
  deficits = {}