DmitrMakeev commited on
Commit
9c8cb3e
·
verified ·
1 Parent(s): 8ad036d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +50 -18
app.py CHANGED
@@ -806,36 +806,68 @@ calc.print_report()
806
 
807
 
808
 
809
- # Как сильно каждый элемент влияет на EC (относительно NaCl)
810
- EC_COEFFICIENTS = {
811
- 'N (NO3-)': 0.6, # Нитраты
812
- 'N (NH4+)': 0.4, # Аммоний
813
- 'K': 0.7, # Калий
814
- 'Ca': 0.75, # Кальций
815
- 'Mg': 0.6, # Магний
816
- 'S': 0.3, # Сульфаты
817
- 'P': 0.1, # Фосфаты (почти не влияют)
818
- # Остальные (Fe, Zn, B и т.д.) — можно не учитывать
 
 
 
 
819
  }
820
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
821
 
822
 
823
- def calculate_ec(self):
 
 
824
  ppm = self.calculate_ppm()
825
- ec = 0.0
 
826
  for element, value in ppm.items():
827
- if element in EC_COEFFICIENTS:
828
- ec += value * EC_COEFFICIENTS[element]
 
 
829
  return ec / 1000 # Переводим в mS/cm
830
 
 
 
 
 
831
  calc = HydroCalculator(10)
832
- calc.add_fertilizer("Кальциевая селитра", 100)
833
- calc.add_fertilizer("Сульфат магния", 50)
834
 
835
  ppm = calc.calculate_ppm()
836
- ec = calc.calculate_ec()
 
 
837
 
838
- print(f"EC раствора: {ec:.2f} mS/cm")
839
 
840
 
841
 
 
806
 
807
 
808
 
809
+
810
+
811
+
812
+
813
+
814
+ # Молярные массы (г/моль)
815
+ MOLAR_MASSES = {
816
+ 'N (NO3-)': 62.0, # NO3⁻
817
+ 'N (NH4+)': 18.0, # NH4⁺
818
+ 'K': 39.1,
819
+ 'Ca': 40.1,
820
+ 'Mg': 24.3,
821
+ 'S': 96.1, # SO4²⁻
822
+ 'P': 95.0, # H2PO4⁻
823
  }
824
 
825
+ # Молярная проводимость (λ₀) в мкСм·см²/моль
826
+ ION_CONDUCTIVITY = {
827
+ 'N (NO3-)': 71.4,
828
+ 'N (NH4+)': 73.5,
829
+ 'K': 73.5,
830
+ 'Ca': 119.0,
831
+ 'Mg': 106.0,
832
+ 'S': 160.0, # Вклад SO4²⁻
833
+ 'P': 33.0, # Вклад H2PO4⁻
834
+ }
835
+
836
+
837
+
838
+ def _ppm_to_molarity(self, ppm, element):
839
+ """Конвертирует ppm в моль/л."""
840
+ if element not in MOLAR_MASSES:
841
+ return 0.0
842
+ return ppm / (MOLAR_MASSES[element] * 1000) # ppm = мг/л → моль/л
843
 
844
 
845
+
846
+
847
+ def calculate_ec_exact(self):
848
  ppm = self.calculate_ppm()
849
+ ec = 0.0 # мкСм/см
850
+
851
  for element, value in ppm.items():
852
+ molarity = self._ppm_to_molarity(value, element)
853
+ if element in ION_CONDUCTIVITY:
854
+ ec += molarity * ION_CONDUCTIVITY[element]
855
+
856
  return ec / 1000 # Переводим в mS/cm
857
 
858
+
859
+
860
+
861
+
862
  calc = HydroCalculator(10)
863
+ calc.add_fertilizer("Кальциевая селитра", 100) # Ca(NO3)2
864
+ calc.add_fertilizer("Сульфат магния", 50) # MgSO4
865
 
866
  ppm = calc.calculate_ppm()
867
+ ec = calc.calculate_ec_exact()
868
+
869
+ print(f"Точный EC: {ec:.2f} mS/cm")
870
 
 
871
 
872
 
873