/* * control_station.h * * Created on: 1 июн. 2020 г. * Author: Vladislav */ #ifndef SRC_LIBS_NIO12_CONTROL_STATION_H_ #define SRC_LIBS_NIO12_CONTROL_STATION_H_ #include // грузим внешние настройки проекта #include "word_structurs.h" ////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// #define COUNT_CONTROL_STATION CONTROL_STATION_LAST // кол-во постов управления //#define COUNT_CMD_ARR_CONTROL_STATION CONTROL_STATION_LAST // кол-во постов управления ////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// #define CONTROL_STATION_TIME_WAIT 250//500 // период опроса мсек #define CONTROL_STATION_SETUP_TIME_DETECT_ACTIVE 18//12//6 // в тиках от CONTROL_STATION_TIME_WAIT #define CONTROL_STATION_SETUP_TIME_DETECT_ACTIVE_RESEND_485 2 // в тиках от CONTROL_STATION_TIME_WAIT #define CONTROL_STATION_SETUP_TIME_SEND_CMD_AFTER_OFF 5 // в тиках от CONTROL_STATION_TIME_WAIT #define CONTROL_STATION_MAX_RAW_DATA 256 //128 // максимальное кол-во данных для сырых данных полученных от постов ////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// typedef struct { unsigned int time_detect_active[COUNT_CONTROL_STATION]; // текущий таймер для пропадании связи, сбрасывается при наличии связи unsigned int period_detect_active[COUNT_CONTROL_STATION]; // период обмена с постом unsigned int time_detect_answer_485[COUNT_CONTROL_STATION]; // текущий таймер для ожидания ответа по Modbus unsigned int setup_time_detect_active[COUNT_CONTROL_STATION]; // время до сброса при пропадании связи unsigned int setup_time_detect_active_resend_485[COUNT_CONTROL_STATION]; // время до сброса при пропадании связи, должен быть меньше setup_time_detect_active unsigned int setup_time_send_cmd_after_off[COUNT_CONTROL_STATION]; // время задержки на переключение команд, например на Go. Чтоб не было дребезга на вкл/выкл. unsigned int active_control_station[COUNT_CONTROL_STATION]; // активный пост управления, возможно их может быть несколько одновременно? unsigned int detect_get_data_control_station[COUNT_CONTROL_STATION]; // если есть обмен с постом, то выставляем тут флаг, он сбросится при update_timers unsigned int alive_control_station[COUNT_CONTROL_STATION]; // флаг о том что связь с постом есть int array_cmd[COUNT_CONTROL_STATION][CONTROL_STATION_CMD_LAST]; // массив данных полученных от каждого из постов, данные после parse int active_array_cmd[CONTROL_STATION_CMD_LAST]; // массив данных актуальных для автивного поста, данные после parse WORD_UINT2BITS_STRUCT raw_array_data[COUNT_CONTROL_STATION][CONTROL_STATION_MAX_RAW_DATA]; // сырой массив данных полученных от каждого из постов, без parse. unsigned int flag_message_sent[COUNT_CONTROL_STATION]; // флаг на ожидание ответа по системе запрос-ответ unsigned int flag_waiting_answer[COUNT_CONTROL_STATION]; // ожидать ли ответ по системе запрос-ответ unsigned int count_ok_modbus[COUNT_CONTROL_STATION]; // счетчик ошибок по команде modbus 15 unsigned int count_error_modbus[COUNT_CONTROL_STATION]; // счетчик ошибок по команде modbus 15 unsigned int flag_refresh_array[COUNT_CONTROL_STATION]; // флаг на ожидание обновления данных от modbus /* unsigned int cmd_go_from_control_station[COUNT_CONTROL_STATION]; // cmd_go от поста пуск/стоп ШИМа unsigned int set_izad_from_control_station[COUNT_CONTROL_STATION]; // ток от поста unsigned int set_rotor_from_control_station[COUNT_CONTROL_STATION]; // обороты от поста unsigned int cmd_charge_from_control_station[COUNT_CONTROL_STATION]; // сбор схемы от поста unsigned int cmd_uncharge_from_control_station[COUNT_CONTROL_STATION]; // разбор схемы от поста unsigned int cmd_checkback_from_control_station[COUNT_CONTROL_STATION]; // квитирование от поста unsigned int cmd_test_leds_from_control_station[COUNT_CONTROL_STATION]; // тест ламп от поста */ void (*clear)(); // Clear buffers void (*update_timers)(); // Обнуляем таймеры на постах с которыми есть обмен void (*detect_active_station)(); // определяем какой пост активен } CONTROL_STATION; typedef CONTROL_STATION *CONTROL_STATION_handle; #define CONTROL_STATION_DEFAULTS { \ {0}, \ {0}, \ {0}, \ {0}, \ {0}, \ {0}, \ {0}, \ {0}, \ {0}, \ {0}, \ {0}, \ {0}, \ {0}, \ {0}, \ {0}, \ {0}, \ {0}, \ control_station_clear, \ control_station_update_timers, \ control_station_detect_active_station \ } void control_station_clear(CONTROL_STATION_handle); void control_station_update_timers(CONTROL_STATION_handle); void control_station_detect_active_station(CONTROL_STATION_handle); extern CONTROL_STATION control_station; #endif /* SRC_LIBS_NIO12_CONTROL_STATION_H_ */