preset_ai.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "preset_ai.h"
  2. #include "FreeRTOS.h"
  3. #include "task.h"
  4. #include "settings_api.h"
  5. #include "triggers.h"
  6. #include <stdio.h>
  7. #if defined (MAI_12)
  8. #undef DBG
  9. #define DBG if(1)
  10. hyst_state_t hyst_state[AI_COMMON_NUMBER];
  11. //
  12. void preset_init(void)
  13. {
  14. for (int i = 0; i < AI_COMMON_NUMBER; i++)
  15. {
  16. hyst_state[i] = hyst_idle;
  17. }
  18. }
  19. //
  20. void preset_set_state(void)
  21. {
  22. for (int i = 0; i < AI_COMMON_NUMBER; i++)
  23. {
  24. if (((settings.preset_state_bits >> i) & 1) != settings.preset[i].state)
  25. {
  26. settings.preset[i].state = ((settings.preset_state_bits >> 1) & 1);
  27. }
  28. }
  29. }
  30. //
  31. void preset_process(float *data)
  32. {
  33. bool high = false;
  34. bool low = false;
  35. for (int i = 0; i < AI_COMMON_NUMBER; i++)
  36. {
  37. if (settings.preset[i].state == 0)
  38. continue;
  39. // 0 - тип уставки - фиксированное значение
  40. if (settings.preset[i].type == 0)
  41. {
  42. high = trig_high_value(data[i], 0, settings.preset[i].max, settings.preset[i].hyst, &hyst_state[i]);
  43. low = trig_low_value(data[i], settings.preset[i].min, 0, settings.preset[i].hyst, &hyst_state[i]);
  44. // Запись в журнале событий
  45. if (high) {
  46. DBG printf("Channel %i, preset HIGH\r\n", i);
  47. }
  48. if (low) {
  49. DBG printf("Channel %i, preset LOW\r\n", i);
  50. }
  51. }
  52. }
  53. }
  54. #endif