get_laliji_param.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #!/usr/bin/env python
  2. # encoding: utf-8
  3. """
  4. @CreateTime: 2023/02/01 09:50
  5. @Author: lxc
  6. @LastEditTime:
  7. @Desctiption: 实时获取拉力计 计算公式的参数,并存入redis中
  8. """
  9. from event_storage import EventStorage
  10. from log import OutPutLog
  11. import time
  12. from datetime import datetime
  13. class GetLalijiParam:
  14. def __init__(self):
  15. self._storage = EventStorage()
  16. self._log = OutPutLog()
  17. def run(self):
  18. self._log.info("[GetLalijiParam] - GetLalijiParam module is running!")
  19. # 拉力计1-2原始数据
  20. serial_list = ['c787', 'c788']
  21. run_time = 0
  22. while True:
  23. this_time = time.time()
  24. if this_time - run_time > 5:
  25. run_time = this_time
  26. real_data_dict = self._storage.get_real_data(serial_list)
  27. # print("--------------------laliji----------", real_data_dict)
  28. status = False
  29. for v in real_data_dict.values():
  30. if v is not None:
  31. status = True
  32. if status:
  33. param_dict = self.save_param()
  34. self.lalijisuan(real_data_dict, param_dict)
  35. # format_data = {'c869': '3', 'c870': '6', 'c871': '4', 'c872': '2', 'c873': '1', 'c874': '2'}
  36. # format_data = {'c869': 40379.57, 'c870': 38944, 'c871': 38954, 'c872': 38844, 'c873': 38974, 'c874': 38904}
  37. # format_data = {'c869': 0, 'c871': 38944, 'c872': 38944, 'c873': 38944, 'c874': 38944}
  38. # self._storage.real_time_data_storage(format_data)
  39. def save_param(self):
  40. """实时获取拉力计 计算公式的参数,并存入redis中"""
  41. get_param_sql = "SELECT `serial_number`,`value` FROM `laliji_config`;"
  42. param_res = self._storage.execute_sql(get_param_sql)
  43. param_dict = {}
  44. for each in param_res:
  45. param_dict[each['serial_number']] = each['value']
  46. self._storage.real_time_data_storage(param_dict)
  47. return param_dict
  48. def lalijisuan(self, original_dict, param):
  49. """计算拉力值,并存入redis中"""
  50. lali_data = {}
  51. serial_dict = {
  52. 'c795': ["c787", "c789", "c790", "c791"],
  53. 'c796': ["c788", "c792", "c793", "c794"]
  54. }
  55. for k, v in serial_dict.items():
  56. original = int(original_dict[v[0]]) # S485读取的无符号整数
  57. a = param[v[1]] # 参数A
  58. b = param[v[2]] # 参数b
  59. f0 = param[v[3]] # 参数f0
  60. if original and original == 0:
  61. lali_data[k] = 0
  62. elif original and original != 0 and a and b and f0:
  63. f = 80000000 / original # 受力时频率f=80000000/(S485读取的无符号整数)
  64. p = a * (f * f - f0 * f0) - b * (f - f0) # P=A(f²-f0²)-B(f-f0)
  65. lali_data[k] = round(p, 2)
  66. else:
  67. lali_data[k] = None
  68. self._storage.real_time_data_storage(lali_data)