DmitrMakeev commited on
Commit
6c9ed05
·
verified ·
1 Parent(s): 38babeb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +21 -15
app.py CHANGED
@@ -680,9 +680,9 @@ from tabulate import tabulate
680
 
681
  # Константы
682
  TOTAL_NITROGEN = 125.000
683
- NO3_RATIO = 0.4
684
  NH4_RATIO = 1.00
685
- VOLUME_LITERS = 1
686
 
687
  # Коэффициенты электропроводности
688
  EC_COEFFICIENTS = {
@@ -703,9 +703,10 @@ NUTRIENT_CONTENT_IN_FERTILIZERS = {
703
  "Калий азотнокислый": {"N (NO3-)": 0.136, "K": 0.382},
704
  "Калий сернокислый": {"K": 0.44874, "S": 0.18401},
705
  "Аммоний азотнокислый": {"N (NO3-)": 0.17499, "N (NH4+)": 0.17499},
706
- "Сульфат магния": {"Mg": 0.09861, "S": 0.13010}, # Проверено: 9.86% Mg, 13.01% S
707
  "Монофосфат калия": {"P": 0.218, "K": 0.275}
708
  }
 
709
  class NutrientCalculator:
710
  def __init__(self, volume_liters=1.0):
711
  self.volume = volume_liters
@@ -734,19 +735,23 @@ class NutrientCalculator:
734
 
735
  def calculate(self):
736
  try:
 
737
  self._apply("Сульфат магния", "Mg", self.target_profile['Mg'])
738
  self._apply("Кальциевая селитра", "Ca", self.target_profile['Ca'])
739
  self._apply("Монофосфат калия", "P", self.target_profile['P'])
740
  self._apply("Аммоний азотнокислый", "N (NH4+)", self.target_profile['N (NH4+)'])
741
 
 
742
  current_no3 = self.actual_profile['N (NO3-)']
743
  no3_needed = self.target_profile['N (NO3-)'] - current_no3
744
 
745
  if no3_needed > 0.1:
746
  self._apply("Калий азотнокислый", "N (NO3-)", no3_needed)
747
 
 
748
  self._apply_k_sulfate()
749
 
 
750
  k_deficit = self.target_profile['K'] - self.actual_profile['K']
751
  if k_deficit > 0.1:
752
  self._apply("Калий азотнокислый", "K", k_deficit)
@@ -762,7 +767,7 @@ class NutrientCalculator:
762
 
763
  try:
764
  content = self.fertilizers[fert_name][main_element]
765
- grams = required_ppm * self.volume / (content * 1000)
766
 
767
  if fert_name not in self.results:
768
  result = {
@@ -779,10 +784,10 @@ class NutrientCalculator:
779
 
780
  fert_ec = 0.0
781
  for element, percent in self.fertilizers[fert_name].items():
782
- added_ppm = grams * percent * 1000 / self.volume
783
  self.results[fert_name][f'внесет {self._label(element)}'] += added_ppm
784
  self.actual_profile[element] += added_ppm
785
- fert_ec += added_ppm * EC_COEFFICIENTS.get(element, 0.0015) # Значение по умолчанию
786
 
787
  self.results[fert_name]['вклад в EC'] += fert_ec
788
  self.total_ec += fert_ec
@@ -799,19 +804,20 @@ class NutrientCalculator:
799
  return
800
 
801
  try:
 
802
  if s_def > 0.1:
803
  s_content = self.fertilizers[fert]["S"]
804
- grams_s = s_def * self.volume / (s_content * 1000)
805
 
 
806
  k_content = self.fertilizers[fert]["K"]
807
- k_from_s = grams_s * k_content * 1000 / self.volume
 
 
 
 
808
 
809
- if k_from_s > k_def and k_def > 0.1:
810
- grams = k_def * self.volume / (k_content * 1000)
811
- else:
812
- grams = grams_s
813
-
814
- self._apply(fert, "S", s_def)
815
  except Exception as e:
816
  print(f"Ошибка при расчёте сульфата калия: {str(e)}")
817
  raise
@@ -834,7 +840,7 @@ class NutrientCalculator:
834
  print("\n" + "="*60)
835
  print(f"РАСЧЕТ ДЛЯ {self.volume} ЛИТРОВ РАСТВОРА")
836
  print("="*60)
837
- print(f"Общая концентрация: {round(sum(self.actual_profile.values()), 1)} ppm")
838
  print(f"EC: {self.calculate_ec()} mS/cm")
839
 
840
  print("\nРЕКОМЕНДУЕМЫЕ УДОБРЕНИЯ:")
 
680
 
681
  # Константы
682
  TOTAL_NITROGEN = 125.000
683
+ NO3_RATIO = 8.84
684
  NH4_RATIO = 1.00
685
+ VOLUME_LITERS = 100
686
 
687
  # Коэффициенты электропроводности
688
  EC_COEFFICIENTS = {
 
703
  "Калий азотнокислый": {"N (NO3-)": 0.136, "K": 0.382},
704
  "Калий сернокислый": {"K": 0.44874, "S": 0.18401},
705
  "Аммоний азотнокислый": {"N (NO3-)": 0.17499, "N (NH4+)": 0.17499},
706
+ "Сульфат магния": {"Mg": 0.09861, "S": 0.13010}, # Исправлено содержание Mg
707
  "Монофосфат калия": {"P": 0.218, "K": 0.275}
708
  }
709
+
710
  class NutrientCalculator:
711
  def __init__(self, volume_liters=1.0):
712
  self.volume = volume_liters
 
735
 
736
  def calculate(self):
737
  try:
738
+ # Применяем удобрения в правильном порядке
739
  self._apply("Сульфат магния", "Mg", self.target_profile['Mg'])
740
  self._apply("Кальциевая селитра", "Ca", self.target_profile['Ca'])
741
  self._apply("Монофосфат калия", "P", self.target_profile['P'])
742
  self._apply("Аммоний азотнокислый", "N (NH4+)", self.target_profile['N (NH4+)'])
743
 
744
+ # Восполняем дефицит NO3-
745
  current_no3 = self.actual_profile['N (NO3-)']
746
  no3_needed = self.target_profile['N (NO3-)'] - current_no3
747
 
748
  if no3_needed > 0.1:
749
  self._apply("Калий азотнокислый", "N (NO3-)", no3_needed)
750
 
751
+ # Восполняем дефицит S и K
752
  self._apply_k_sulfate()
753
 
754
+ # Восполняем оставшийся дефицит K
755
  k_deficit = self.target_profile['K'] - self.actual_profile['K']
756
  if k_deficit > 0.1:
757
  self._apply("Калий азотнокислый", "K", k_deficit)
 
767
 
768
  try:
769
  content = self.fertilizers[fert_name][main_element]
770
+ grams = (required_ppm * self.volume) / (content * 1000)
771
 
772
  if fert_name not in self.results:
773
  result = {
 
784
 
785
  fert_ec = 0.0
786
  for element, percent in self.fertilizers[fert_name].items():
787
+ added_ppm = (grams * percent * 1000) / self.volume
788
  self.results[fert_name][f'внесет {self._label(element)}'] += added_ppm
789
  self.actual_profile[element] += added_ppm
790
+ fert_ec += added_ppm * EC_COEFFICIENTS.get(element, 0.0015)
791
 
792
  self.results[fert_name]['вклад в EC'] += fert_ec
793
  self.total_ec += fert_ec
 
804
  return
805
 
806
  try:
807
+ # Рассчитываем сколько нужно внести для покрытия дефицита S
808
  if s_def > 0.1:
809
  s_content = self.fertilizers[fert]["S"]
810
+ grams_needed = (s_def * self.volume) / (s_content * 1000)
811
 
812
+ # Проверяем, не приведет ли это к избытку K
813
  k_content = self.fertilizers[fert]["K"]
814
+ k_added = (grams_needed * k_content * 1000) / self.volume
815
+
816
+ if k_added > k_def and k_def > 0:
817
+ # Если добавляем слишком много K, уменьшаем количество
818
+ grams_needed = (k_def * self.volume) / (k_content * 1000)
819
 
820
+ self._apply(fert, "S", (grams_needed * s_content * 1000) / self.volume)
 
 
 
 
 
821
  except Exception as e:
822
  print(f"Ошибка при расчёте сульфата калия: {str(e)}")
823
  raise
 
840
  print("\n" + "="*60)
841
  print(f"РАСЧЕТ ДЛЯ {self.volume} ЛИТРОВ РАСТВОРА")
842
  print("="*60)
843
+ print(f"Общая концентрация: {round(sum(self.actual_profile.values()), 1} ppm")
844
  print(f"EC: {self.calculate_ec()} mS/cm")
845
 
846
  print("\nРЕКОМЕНДУЕМЫЕ УДОБРЕНИЯ:")