DmitrMakeev commited on
Commit
317bf5e
·
verified ·
1 Parent(s): c9200e9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -24
app.py CHANGED
@@ -681,19 +681,19 @@ def view_image():
681
 
682
 
683
 
684
- # База данных удобрений: доли содержания элементов
685
  fertilizers_db = {
686
  "Кальциевая селитра": {
687
- "N (NO3-)": 0.17, # 17% азота (NO3-)
688
- "Ca": 0.24, # 24% кальция
689
  },
690
  "Сульфат магния": {
691
- "Mg": 0.098, # 9.8% магния
692
- "S": 0.13, # 13% серы
693
  },
694
  "Монофосфат калия": {
695
- "P": 0.22, # 22% фосфора
696
- "K": 0.28, # 28% калия
697
  },
698
  }
699
 
@@ -715,7 +715,6 @@ class HydroCalculator:
715
  return ppm
716
 
717
  def calculate_ec(self):
718
- """Упрощённый расчёт EC на основе эмпирических коэффициентов"""
719
  ppm = self.calculate_ppm()
720
  ec = 0.0
721
  EC_COEFFICIENTS = {
@@ -730,11 +729,9 @@ class HydroCalculator:
730
  for element, value in ppm.items():
731
  if element in EC_COEFFICIENTS:
732
  ec += value * EC_COEFFICIENTS[element]
733
- return ec / 1000 # mS/cm
734
 
735
  def calculate_ec_exact(self):
736
- """Точный расчёт EC на основе молярной проводимости и молярной концентрации"""
737
- # Молярные массы (г/моль)
738
  MOLAR_MASSES = {
739
  'NO3-': 62.0,
740
  'NH4+': 18.0,
@@ -744,7 +741,6 @@ class HydroCalculator:
744
  'SO4-2': 96.1,
745
  'H2PO4-': 97.0,
746
  }
747
- # Молярная проводимость ионов (мкСм·см²/моль)
748
  ION_CONDUCTIVITY = {
749
  'NO3-': 71.4,
750
  'NH4+': 73.5,
@@ -754,7 +750,6 @@ class HydroCalculator:
754
  'SO4-2': 160.0,
755
  'H2PO4-': 33.0,
756
  }
757
- # Соответствие элементов ионам
758
  ELEMENT_TO_ION = {
759
  'N (NO3-)': 'NO3-',
760
  'N (NH4+)': 'NH4+',
@@ -764,16 +759,21 @@ class HydroCalculator:
764
  'S': 'SO4-2',
765
  'P': 'H2PO4-',
766
  }
 
767
  ppm = self.calculate_ppm()
768
- ec = 0.0
769
- for element, ppm_value in ppm.items():
 
770
  if element in ELEMENT_TO_ION:
771
  ion = ELEMENT_TO_ION[element]
772
  molar_mass = MOLAR_MASSES[ion]
773
  conductivity = ION_CONDUCTIVITY[ion]
774
- mol_per_liter = (ppm_value / 1000) / molar_mass
775
- ec += mol_per_liter * conductivity
776
- return ec / 1000 # Перевод в mS/cm
 
 
 
777
 
778
  def print_report(self):
779
  ppm = self.calculate_ppm()
@@ -794,12 +794,13 @@ class HydroCalculator:
794
 
795
 
796
  # Пример использования
797
- if __name__ == "__main__":
798
- calc = HydroCalculator(10) # Объём раствора: 10 литров
799
- calc.add_fertilizer("Кальциевая селитра", 100) # 100 г
800
- calc.add_fertilizer("Сульфат магния", 50) # 50 г
801
- calc.add_fertilizer("Монофосфат калия", 30) # 30 г
802
- calc.print_report()
 
803
 
804
 
805
 
 
681
 
682
 
683
 
684
+ # Формат: {"Удобрение": {"Элемент1": доля, "Элемент2": доля, ...}}
685
  fertilizers_db = {
686
  "Кальциевая селитра": {
687
+ "N (NO3-)": 0.17,
688
+ "Ca": 0.24,
689
  },
690
  "Сульфат магния": {
691
+ "Mg": 0.098,
692
+ "S": 0.13,
693
  },
694
  "Монофосфат калия": {
695
+ "P": 0.22,
696
+ "K": 0.28,
697
  },
698
  }
699
 
 
715
  return ppm
716
 
717
  def calculate_ec(self):
 
718
  ppm = self.calculate_ppm()
719
  ec = 0.0
720
  EC_COEFFICIENTS = {
 
729
  for element, value in ppm.items():
730
  if element in EC_COEFFICIENTS:
731
  ec += value * EC_COEFFICIENTS[element]
732
+ return ec / 1000
733
 
734
  def calculate_ec_exact(self):
 
 
735
  MOLAR_MASSES = {
736
  'NO3-': 62.0,
737
  'NH4+': 18.0,
 
741
  'SO4-2': 96.1,
742
  'H2PO4-': 97.0,
743
  }
 
744
  ION_CONDUCTIVITY = {
745
  'NO3-': 71.4,
746
  'NH4+': 73.5,
 
750
  'SO4-2': 160.0,
751
  'H2PO4-': 33.0,
752
  }
 
753
  ELEMENT_TO_ION = {
754
  'N (NO3-)': 'NO3-',
755
  'N (NH4+)': 'NH4+',
 
759
  'S': 'SO4-2',
760
  'P': 'H2PO4-',
761
  }
762
+
763
  ppm = self.calculate_ppm()
764
+ ec = 0.0 # µS/cm
765
+
766
+ for element, value in ppm.items():
767
  if element in ELEMENT_TO_ION:
768
  ion = ELEMENT_TO_ION[element]
769
  molar_mass = MOLAR_MASSES[ion]
770
  conductivity = ION_CONDUCTIVITY[ion]
771
+ # ppm = mg/L → mmol/L = (ppm / molar_mass)
772
+ mmol_per_liter = value / molar_mass
773
+ # µS/cm = mmol/L * µS·cm²/mmol
774
+ ec += mmol_per_liter * conductivity
775
+
776
+ return ec / 1000 # переводим в mS/cm
777
 
778
  def print_report(self):
779
  ppm = self.calculate_ppm()
 
794
 
795
 
796
  # Пример использования
797
+ calc = HydroCalculator(10) # 10 литров раствора
798
+ calc.add_fertilizer("Кальциевая селитра", 100)
799
+ calc.add_fertilizer("Сульфат магния", 50)
800
+ calc.add_fertilizer("Монофосфат калия", 30)
801
+
802
+ calc.print_report()
803
+
804
 
805
 
806