preset_ai.c 2.6 KB

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