/* * oscil_can.h * * Created on: 24 ìàÿ 2020 ã. * Author: yura */ #ifndef SRC_LIBS_NIO12_ALARM_LOG_CAN_H_ #define SRC_LIBS_NIO12_ALARM_LOG_CAN_H_ #define CAN_BOX_PRIORITY_LOW_MAX_SIZE_BLOCKS 195L //3330L // 9999L #define ALARM_LOG_NUMBER_BOX_IN_CAN 0 #define ALARM_LOG_CODE_STATUS_LOG_STOP 1 // Ëîã îñòàíîâëåí #define ALARM_LOG_CODE_STATUS_LOG_RUN 2 // Ëîã èäåò... #define ALARM_LOG_CODE_STATUS_LOG_RUN_TO_STOP 3 // Ëîã èäåò, íî èäåò äîçàïèñü, ñêîðî îñòàíîâèòñÿ. /* #define OSCIL_CAN_NUMBER_CHANNEL 32 // ìàêñèìàëüíîå âîçìîæíîå êîë-âî êàíàëîâ äëÿ áóôåðà #define OSCIL_CAN_NUMBER_POINTS 500 // ìàêñèìàëüíîå âîçìîæíîå êîë-âî òî÷åê äëÿ áóôåðà (äëÿ îäíîãî êàíàëà) #define OSCIL_TIME_WAIT 5000 // ïåðèîä ïîñûëêè âñåãî ìàññèâà â CAN (ìëñåê) #define OSCIL_CAN_NUMBER_POINTS_ADD 100 // çàïàñ òî÷åê ïðè âûïîëíåíèè ôóíêöèè êîïèðîâàíèÿ ðàáî÷åãî áóôåðà âî âðåìåííûé. oscil_buffer->temp_oscil_buffer #define OSCIL_CAN_NUMBER_POINTS_AFTER_STOP 100 // ñêîëüêî òî÷åê çàïèñûâàòü ïîñëå îñòàíîâêè çàïèñè áóôåðà ïî àâàðèè èëè øèìó */ typedef struct { unsigned int global_enable; // ðàçðåøåíèå ïåðåäà÷è ëîãîâ unsigned int copy2temp; // êîïèðîâàòü ëîãè â temp ïåðåä ïåðåäà÷åé unsigned int stage; int cmd_fffc[3]; int cmd_fffd[3]; int cmd_fffe[3]; int cmd_ffff[3]; unsigned int post_points; // êîë-âî òî÷åê ïîñëå àâàðèè unsigned int step; // øàã îäíîé òî÷êè, ìêñåê unsigned int start; // êîä êîìàíäû START unsigned int oscills; // êîë-âî êàíàëîâ - êîëîíîê unsigned long real_points; // âñåãî êîë-âî òî÷åê, ïîëíûé ðàçìåð äàííûõ ïîëó÷èì = points*oscills // íóæíûé êóñîê äëÿ êîïèè, äàííîå êîëè÷åñòâî ñêîïèðóåòñÿ èç öèêëè÷åñêîãî áóôåðà âî âðåìåííûé ëîã. unsigned int stop; // êîä êîìàíäû START unsigned int crc16; // crc16 äàííûõ int *start_adr_real_logs; // íà÷àëî ìàññèâà äàííûõ, äî êîïèðîâàíèÿ // àäðåñ íà÷àëà ðåàëüíûõ ëîãîâ â öèêëè÷åñêîì áóôåðå int *start_adr_temp; // íà÷àëî ìàññèâà äàííûõ, ïîñëå êîïèðîâàíèÿ // àäðåñ äëÿ âðåìåííîãî ðàçìåùåíèÿ êîïèè ëîãà, ëîã ñêîïèðóåòñÿ èç öèêëè÷åñêîãî áóôåðà â ýòîò ðàçâåðíóâøèñü. int *finish_adr_real_log; // îêîí÷àíèå áëîêà ëîãîâ, äî êîïèðîâàíèÿ // êîíåö ëîãîâ â öèêëè÷åñêîì áóôåðå int *current_adr_real_log; // óêàçàòåëü íà àäðåñ ãäå îñòàíîâèëâñü çàïèñü ëîãîâ â öèêëè÷åñêîì áóôåðå // int *finish_adr_temp; // êîíåö ëîãà â temp áóôåðå unsigned long temp_points; // âñåãî êîë-âî òî÷åê, ïîëíûé ðàçìåð äàííûõ ïîëó÷èì = temp_points*oscills // ðåàëüíûé ðàçìåð öèêëè÷åñêãî áóôåðà â òî÷êàõ. unsigned long progress_can; // îáðàòíûé ñ÷åò÷èê, ñêîëüêî îñòàëîñü ïåðåäàòü unsigned int prev_status_alarm; // ïðåä. ñîñòîÿíèå status_alarm unsigned int status_alarm; // êîä àâàðèè, ëîã àâòîìàòè÷åñêè ïåðåäàåòñÿ ïðè èçìåíåíèè ýòîãî ñòàòóñà èç 0->1 unsigned int timer_send; // âðåìÿ ïåðåäà÷è âñåãî áëîêà unsigned int temp_log_ready; // ãîòîâíîñòü äàííûõ temp äëÿ ñ÷èòûâàíèÿ ïî CAN unsigned long can_max_size_one_block; // ðàçìåð îäíîãî áëîêà ïåðåäàâàåìîãî çà ðàç, íàäî êðàòíîå 3. void (*clear)(); // Clear buffers void (*send)(); // Send buffers void (*copy_temp_buffer)(); // Copy work buffers to temp buffers void (*prepare_data_can)(); // Ïðåäâàðèòåëüíàÿ ïîäãîòîâêà ïåðåä ïåðåäà÷åé } ALARM_LOG_CAN; typedef ALARM_LOG_CAN *ALARM_LOG_CAN_handle; #define ALARM_LOG_CAN_CAN_DEFAULTS { \ 0, \ 0, \ 0, \ {0,0,0}, \ {0,0,0}, \ {0,0,0}, \ {0,0,0}, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ 0, \ CAN_BOX_PRIORITY_LOW_MAX_SIZE_BLOCKS, \ alarm_log_clear_buffer, \ alarm_log_send_buffer, \ alarm_log_copy_temp_buffer, \ alarm_log_prepare_data_can \ } void alarm_log_clear_buffer(ALARM_LOG_CAN_handle); void alarm_log_send_buffer(ALARM_LOG_CAN_handle); //void alarm_log_next_position(ALARM_LOG_CAN_handle); void alarm_log_prepare_data_can(ALARM_LOG_CAN_handle); void alarm_log_copy_temp_buffer(ALARM_LOG_CAN_handle); extern ALARM_LOG_CAN alarm_log_can; #endif /* SRC_LIBS_NIO12_ALARM_LOG_CAN_H_ */