matlab_23550/Inu/Src/N12_Libs/alarm_log_can.h
Razvalyaev 7e0063eee0 #3 Скомпилилось, но пока ничего не вызывается
Все основные файлы подтянуты без изменений

Изменены (только папка main_matlab):
- заглушки для ненужных функций (main_matlab.c)
- iq библиотека (IQmathLib_matlab.c)
- библиотеки DSP281x
2025-01-13 11:09:58 +03:00

136 lines
5.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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_ */