io.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. #ifndef __IO_H
  2. #define __IO_H
  3. #include <stdbool.h>
  4. // Период опроса входов 100 мс
  5. // -------------------------------------------------------------------------- //
  6. // Дискретые входы
  7. #define DI_NUMBER 8 // Количество входов
  8. #define DI_MODE_IN 0 // Режим обычного входа
  9. #define DI_MODE_CNT 1 // Режим счетного входа
  10. // -------------------------------------------------------------------------- //
  11. // Выходы
  12. #define DO_NUMBER 8 // Количество выходов
  13. #define DEBOUNCE_CNT 50
  14. // -------------------------------------------------------------------------- //
  15. // Аналоговые входы
  16. #define AI_NUMBER 12 //
  17. // Прочие параметры из других модулей для передачи по modbus
  18. //uint32_t uptime;
  19. // -------------------------------------------------------------------------- //
  20. //
  21. void io_port_enable(void);
  22. //
  23. void io_port_init(void);
  24. //
  25. void io_tim_init(void);
  26. // -------------------------------------------------------------------------- //
  27. typedef struct
  28. {
  29. gpio_type *port;
  30. uint16_t pin;
  31. } simple_gpio_t;
  32. typedef struct
  33. {
  34. gpio_type *port;
  35. uint16_t pin;
  36. uint16_t mode; // 0 - обычный вход, 1 - счетный вход
  37. uint32_t deb_counter;
  38. uint32_t cnt;
  39. bool p_flag;
  40. bool cnt_flag;
  41. } din_t;
  42. typedef struct
  43. {
  44. gpio_type *port;
  45. uint16_t pin;
  46. uint16_t mode; // 0 - обычный выход, 1 - режим ШИМ
  47. uint16_t pwm_period_cnt;
  48. uint16_t pwm_duty_cnt;
  49. uint16_t pwm_flag;
  50. uint16_t pwm_period;
  51. uint16_t pwm_duty;
  52. } out_t;
  53. extern uint16_t output_state_bit;
  54. extern uint16_t output_mode_bit;
  55. extern uint16_t output_pwm[];
  56. extern uint16_t output_pwm_save[];
  57. extern uint16_t output_pwm_period[];
  58. extern uint16_t output_pwm_period_save[];
  59. //uint16_t output_state[DI_NUMBER]; // состояние выхода, 0 - норма, 1 - обрыв, 2 - КЗ
  60. // -------------------------------------------------------------------------- //
  61. // Структуры настроек. Хранятся во внутренней памяти контроллера.
  62. //
  63. // контроль состояний - обрыв, КЗ, норма
  64. typedef struct
  65. {
  66. uint16_t state; // состояние выхода
  67. uint16_t pwm; //
  68. uint16_t mode; // режим работы, 0 - выход, 1 - PWM
  69. uint16_t smode_state; // значение в безопасном режиме,
  70. // 0 - разомкнут, 1 - замкнут
  71. uint16_t smode_pwm; // значение PWM в безопасном режиме (%)
  72. uint16_t normal_state; // нормальное состояние выхода
  73. // 0 - разомкнут, 1 - замкнут
  74. } output_t;
  75. typedef struct
  76. {
  77. uint16_t smode; // безопасный режим 0 - включен, 1 - выключен
  78. uint16_t com_timeout; // время ожидания запроса от мастера
  79. } system_t;
  80. // Структура системных настроек
  81. /*
  82. typedef struct
  83. {
  84. uint16_t model; // Модель
  85. uint32_t proddate; // Дата производства
  86. uint32_t serial; // Серийный номер
  87. uint8_t fw_version[8]; // Версия ПО
  88. uint8_t test_state; // Статус тестирования
  89. } sys_settings_t;
  90. */
  91. #endif // __IO_H