preset_ai.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #include "preset_ai.h"
  2. #include "FreeRTOS.h"
  3. #include "task.h"
  4. #include "settings_api.h"
  5. #include "triggers.h"
  6. #include "mux.h"
  7. #include "log.h"
  8. #include <stdio.h>
  9. #if defined (MAI_12)
  10. #undef DBG
  11. #define DBG if(1)
  12. extern led_t ai_alarm_led[];
  13. hyst_state_t hyst_state[AI_COMMON_NUMBER];
  14. preset_cur_t preset_cur[AI_COMMON_NUMBER];
  15. //
  16. void preset_init(void)
  17. {
  18. for (int i = 0; i < AI_COMMON_NUMBER; i++)
  19. {
  20. hyst_state[i] = hyst_idle;
  21. preset_cur[i].max = false;
  22. preset_cur[i].min = false;
  23. }
  24. }
  25. //
  26. void preset_set_state(void)
  27. {
  28. for (int i = 0; i < AI_COMMON_NUMBER; i++)
  29. {
  30. if (((settings.preset_state_bits >> i) & 1) != settings.preset[i].state)
  31. {
  32. settings.preset[i].state = ((settings.preset_state_bits >> 1) & 1);
  33. }
  34. }
  35. }
  36. //
  37. void preset_process(float *data)
  38. {
  39. bool high = false;
  40. bool low = false;
  41. for (int i = 0; i < AI_COMMON_NUMBER; i++)
  42. {
  43. if ((settings.preset[i].state == 0) || (settings.ai[i].state == 0))
  44. continue;
  45. // 0 - тип уставки - фиксированное значение
  46. if (settings.preset[i].type == 0)
  47. {
  48. high = trig_high_value(data[i], 0, settings.preset[i].max, settings.preset[i].hyst, &hyst_state[i]);
  49. low = trig_low_value(data[i], settings.preset[i].min, 0, settings.preset[i].hyst, &hyst_state[i]);
  50. if (preset_cur[i].max != high) {
  51. // Запись в журнал о срабатывании верхней уставки
  52. if (high == true) {
  53. printf("LOG high level! [%f]\r\n", data[i]);
  54. //log_add_entry(LOG_SETPOINT, 1, i + 1, data[i]);
  55. }
  56. else {
  57. printf("LOF high norm [%f]\r\n", data[i]);
  58. //log_add_entry(LOG_SETPOINT, 1, i + 1, data[i]);
  59. }
  60. }
  61. if (preset_cur[i].min != low) {
  62. // Запись в журнал о срабатывании нижней уставки
  63. if (low == true) {
  64. printf("LOG low level! [%f]\r\n", data[i]);
  65. }
  66. else {
  67. printf("LOF low norm [%f]\r\n", data[i]);
  68. }
  69. }
  70. preset_cur[i].max = high;
  71. preset_cur[i].min = low;
  72. #if 0
  73. //
  74. if (high) {
  75. DBG printf("Chan: %i, val: %f, HIGH\r\n", i, data[i]);
  76. }
  77. if (low) {
  78. DBG printf("Chan: %i, val: %f, LOW\r\n", i, data[i]);
  79. }
  80. #endif
  81. }
  82. }
  83. }
  84. #endif