DmitrMakeev commited on
Commit
544f49f
·
verified ·
1 Parent(s): 7684911

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +16 -27
app.py CHANGED
@@ -704,8 +704,6 @@ def nutri_call():
704
 
705
 
706
 
707
-
708
-
709
 
710
 
711
 
@@ -719,7 +717,8 @@ INPUT_DATA = {
719
  "Аммоний азотнокислый": {"N (NO3-)": 0.17499, "N (NH4+)": 0.17499},
720
  "Сульфат магния": {"Mg": 0.10220, "S": 0.13483},
721
  "Монофосфат калия": {"P": 0.22761, "K": 0.28731},
722
- "Калий сернокислый": {"K": 0.44874, "S": 0.18401}
 
723
  },
724
  "profileSettings": {
725
  "P": 60, "K": 194, "Mg": 48.5, "Ca": 121.25, "S": 79.445,
@@ -733,7 +732,6 @@ class NutrientCalculator:
733
  self.profile = input_data["profileSettings"]
734
  self.volume = self.profile["liters"]
735
 
736
- # Рассчитываем азотные компоненты
737
  total_parts = self.profile["NO3_RAT"] + 1
738
  self.target = {
739
  'P': self.profile["P"],
@@ -749,33 +747,22 @@ class NutrientCalculator:
749
  self.results = {}
750
 
751
  def calculate(self):
752
- # 1. Вносим кальциевую селитру (Ca + NO3)
753
  self._apply_fertilizer("Кальциевая селитра", "Ca", self.target["Ca"])
754
-
755
- # 2. Вносим аммонийный азот
756
  self._apply_fertilizer("Аммоний азотнокислый", "N (NH4+)", self.target["N (NH4+)"])
757
 
758
- # 3. Компенсируем NO3 калийной селитрой
759
  no3_needed = self.target["N (NO3-)"] - self.actual["N (NO3-)"]
760
  if no3_needed > 0:
761
  self._apply_fertilizer("Калий азотнокислый", "N (NO3-)", no3_needed)
762
 
763
- # 4. Вносим фосфор
764
  self._apply_fertilizer("Монофосфат калия", "P", self.target["P"])
765
-
766
- # 5. Вносим магний
767
  self._apply_fertilizer("Сульфат магния", "Mg", self.target["Mg"])
768
-
769
- # 6. Балансируем калий и серу
770
  self._balance_k_s()
771
-
772
- # 7. Добавляем дополнительную проверку серы
773
  self._compensate_sulfur()
 
774
 
775
  return self._verify_results()
776
 
777
  def _apply_fertilizer(self, name, element, target_ppm):
778
- """Применение удобрения с точным расчетом"""
779
  content = self.fertilizers[name][element]
780
  grams = (target_ppm * self.volume) / (content * 1000)
781
 
@@ -789,33 +776,38 @@ class NutrientCalculator:
789
  self.actual[el] += added_ppm
790
 
791
  def _balance_k_s(self):
792
- """Интеллектуальная балансировка K и S"""
793
  k_needed = self.target["K"] - self.actual["K"]
794
  s_needed = self.target["S"] - self.actual["S"]
795
 
796
- # Используем K2SO4 если нужны оба элемента
797
  if k_needed > 0 and s_needed > 0:
798
- k_from_k2so4 = min(k_needed, s_needed * 0.44874/0.18401)
799
  self._apply_fertilizer("Калий сернокислый", "K", k_from_k2so4)
800
 
801
- # Добираем остаток калия KNO3
802
  remaining_k = self.target["K"] - self.actual["K"]
803
  if remaining_k > 0:
804
  self._apply_fertilizer("Калий азотнокислый", "K", remaining_k)
805
 
806
  def _compensate_sulfur(self):
807
- """Дополнительная компенсация серы"""
808
  s_needed = self.target["S"] - self.actual["S"]
809
  if s_needed > 0:
810
- # Используем сульфат магния для компенсации серы
811
  self._apply_fertilizer("Сульфат магния", "S", s_needed)
812
 
 
 
 
 
 
 
 
 
 
 
 
813
  def _verify_results(self):
814
- """Проверка точности соответствия"""
815
  deficits = {}
816
  for el in self.target:
817
  diff = self.target[el] - self.actual[el]
818
- if abs(diff) > 0.1: # Допустимая погрешность 0.1 ppm
819
  deficits[el] = round(diff, 3)
820
 
821
  return {
@@ -826,13 +818,10 @@ class NutrientCalculator:
826
  }
827
 
828
  def generate_report(self, results):
829
- """Генерация красивого отчета"""
830
- # Таблица ��добрений
831
  fert_table = []
832
  for name, data in results['fertilizers'].items():
833
  fert_table.append([name, f"{data} г"])
834
 
835
- # Таблица элементов
836
  element_table = []
837
  for el in sorted(self.target.keys()):
838
  element_table.append([
 
704
 
705
 
706
 
 
 
707
 
708
 
709
 
 
717
  "Аммоний азотнокислый": {"N (NO3-)": 0.17499, "N (NH4+)": 0.17499},
718
  "Сульфат магния": {"Mg": 0.10220, "S": 0.13483},
719
  "Монофосфат калия": {"P": 0.22761, "K": 0.28731},
720
+ "Калий сернокислый": {"K": 0.44874, "S": 0.18401},
721
+ "Кальций хлорид": {"Ca": 0.272, "Cl": 0.483} # Новое удобрение
722
  },
723
  "profileSettings": {
724
  "P": 60, "K": 194, "Mg": 48.5, "Ca": 121.25, "S": 79.445,
 
732
  self.profile = input_data["profileSettings"]
733
  self.volume = self.profile["liters"]
734
 
 
735
  total_parts = self.profile["NO3_RAT"] + 1
736
  self.target = {
737
  'P': self.profile["P"],
 
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
 
765
  def _apply_fertilizer(self, name, element, target_ppm):
 
766
  content = self.fertilizers[name][element]
767
  grams = (target_ppm * self.volume) / (content * 1000)
768
 
 
776
  self.actual[el] += added_ppm
777
 
778
  def _balance_k_s(self):
 
779
  k_needed = self.target["K"] - self.actual["K"]
780
  s_needed = self.target["S"] - self.actual["S"]
781
 
 
782
  if k_needed > 0 and s_needed > 0:
783
+ k_from_k2so4 = min(k_needed, s_needed * 0.44874 / 0.18401)
784
  self._apply_fertilizer("Калий сернокислый", "K", k_from_k2so4)
785
 
 
786
  remaining_k = self.target["K"] - self.actual["K"]
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"]
798
+ balance = cations - anions
799
+
800
+ if balance > 0:
801
+ ca_needed = max(0, self.target["Ca"] - self.actual["Ca"])
802
+ cl_needed = balance * 0.5
803
+ self._apply_fertilizer("Кальций хлорид", "Ca", ca_needed)
804
+ self._apply_fertilizer("Кальций хлорид", "Cl", cl_needed)
805
+
806
  def _verify_results(self):
 
807
  deficits = {}
808
  for el in self.target:
809
  diff = self.target[el] - self.actual[el]
810
+ if abs(diff) > 0.1:
811
  deficits[el] = round(diff, 3)
812
 
813
  return {
 
818
  }
819
 
820
  def generate_report(self, results):
 
 
821
  fert_table = []
822
  for name, data in results['fertilizers'].items():
823
  fert_table.append([name, f"{data} г"])
824
 
 
825
  element_table = []
826
  for el in sorted(self.target.keys()):
827
  element_table.append([