epm/User/app.h

120 lines
4.0 KiB
C

#ifndef __APP_H__
#define __APP_H__
#include "lib/inc/lib.h"
#include "agreement/agreement.h"
#include "agreement/agreement_slave.h"
#define PID_IP 0 // IP PID开关
#define UART_RXSIZE (300u)
#define UART_DATA_ANALYSIS_PORT DATA_1
#define PROJECT_NAME "epm"
#define VERSION "1.0"
#define LEFT_VALVE 0
#define RIGHT_VALVE 1
#define FLASH_USER_AREA 0x08010000UL // 用户区域的起始地址
#define FLASH_PROCESS_CONFIG FLASH_USER_AREA + (FLASH_PAGE_SIZE * 0) // 配置流程存储的地址
#define FLASH_DEVICE_ADDRESS FLASH_USER_AREA + (FLASH_PAGE_SIZE * 14) // 设备地址存储的地址
#define FLASH_IP_OUT_MODE_ADDRESS FLASH_USER_AREA + (FLASH_PAGE_SIZE * 15) // IP输出模式存储的地址
#define FLASH_IP_OUT_PWM_FREQUENCY_ADDRESS FLASH_USER_AREA + (FLASH_PAGE_SIZE * 16) // IP输出PWM频率存储的地址
// 比例阀参数定义
#define PROPORTIONAL_VALVE_MAX 900 // 单位kpa
#define PROPORTIONAL_VALVE_MIN 0 // 单位kpa
// 压力传感器参数定义
#define PRESURE_SENSOR_MAX 1000 // 单位kpa
#define PRESURE_SENSOR_MIN -100 // 单位kpa
typedef union
{
uint16_t data;
struct
{
uint8_t r1 : 1, // 两通阀1
r2 : 1, // 两通阀2
r3 : 1, // 两通阀3
r4 : 1, // 三通阀4
r5 : 1, // 三通阀5
r6 : 1, // 两通阀6
r7 : 1, // 两通阀7
r8 : 1, // 三通阀8
r9 : 1, // 三通阀9
r10 : 1, //
r11 : 1, //
r12 : 1; //
} bits;
} relay_t; // 继电器状态 1-12
typedef struct
{
bool is_open;
uint32_t calibration_value;
uint32_t original_value;
} calibration_sensor_data_t;
typedef struct
{
calibration_sensor_data_t proportional_valve_in1; // 比例阀
calibration_sensor_data_t ip_in6;
calibration_sensor_data_t ntc_in12;
calibration_sensor_data_t minor_loop_in13; // 小回路
calibration_sensor_data_t laser_in0; // 没有处理
calibration_sensor_data_t presure_in7;
calibration_sensor_data_t presure_in8;
calibration_sensor_data_t presure_in9;
calibration_sensor_data_t presure_in10;
calibration_sensor_data_t presure_in11;
calibration_sensor_data_t presure_in12;
} adc_t;
typedef struct
{
uint8_t process_index; // 当前执行的流程编号
uint8_t plan_index; // 当前执行的方案编号
uint8_t action_index; // 当前执行的动作编号
} process_state_t;
typedef struct
{
relay_t relay; // 继电器状态
adc_t adc; // 采集的传感器数据
run_state_e task_run_state; // 任务运行状态
process_state_t process_state; // 流程状态
uint32_t device_address; // 设备地址
uint32_t ip_out_mode; // IP输出模式
uint32_t ip_out_pwm_frequency; // IP输出PWM频率
bool master_active; // 主机是否活跃,在任务中设置不活跃,收到串口数据改成活跃
} app_t;
typedef void (*agreement_req_cb_t)(uint8_t *data, uint16_t len);
extern volatile app_t app; // APP全局变量
extern uint16_t ip_dac_value;
extern float32 ip_pwm_duty;
extern uint16_t proportional_valve_dac_value;
extern bool app_init(void);
extern void flash_load(void);
extern void flow_init(void);
extern void flow_start(void);
extern bool uart_init(agreement_req_cb_t cb);
extern void uart_recv_data(uint8_t *data, uint16_t len);
extern void register_request_done(void);
extern bool need_reset(void);
extern uint32_t get_ip_dac_out(void);
extern uint32_t get_proportional_valve_dac_out(void);
extern float32_t get_proportional_valve_adc_in(uint32_t adc_val);
extern float32_t get_ip_adc_in(uint32_t adc_val);
extern void dac_init_flag_reset(void);
extern run_state_e get_task_run_state(void);
extern float32_t get_pressure_sensor_adc_in(int32_t adc_val);
extern void set_valve_status(unit_e unit, uint8_t index, uint8_t status);
extern void laser_zero_flag_reset(void);
#endif // __APP_H__