#include "pressure.h" #include "main.h" #include "usart.h" Pressure_Inf pressure_inf[SENSOR_DEEP]; uint8_t Pressure_Max = 0; void Pressure_state(uint16_t CangNum) { } void Pressure_Init(void) { Cang_Inf* pcang = &cang_inf; uint8_t i = 0; pcang->Pressure = Pressure_FST800_801; for(i = 0;i < pcang->Cang_Num;i++) { pcang->Pressure_Num[i] = 1; } Pressure_Max = 0; for(i = 0;i < pcang->Cang_Num;i++) Pressure_Max +=pcang->Pressure_Num[i]; if(Pressure_Max > SENSOR_DEEP){ Pressure_Max = SENSOR_DEEP; } } uint8_t Prase_Pressure(uint8_t* data, Pressure_Tpye type) { uint16_t ModbusCRC; uint8_t receive_error = 0; uint8_t id = 0; typedef union{ float value; uint8_t arr[4]; }Hex_to_float; static Hex_to_float hex_to_float; ModbusCRC = data[7]<<8; ModbusCRC |= data[8]; if(data[1]!=0x03&&data[1]!=0x06) //校验读写属性 { receive_error = 1; } else if(data[2] != 0x04) //校验数据长度 { receive_error = 1; } else if(ModbusCRC != LIB_CRC_MODBUS(data,7)) //校验CRC { receive_error = 1; } id = data[0]-PRESSURE_STARTADDR; if(id >= SENSOR_DEEP){ receive_error = 1; } if(receive_error == 0){ pressure_inf[id].ErrorCnt = 0; pressure_inf[id].Error = 0; if(data[1] == 0x03){ hex_to_float.arr[0] = data[6]; hex_to_float.arr[1] = data[5]; hex_to_float.arr[2] = data[4]; hex_to_float.arr[3] = data[3]; pressure_inf[id].pressure = hex_to_float.value; } return 0; }else{ Pressure_Error(data[0]); return 1; } } void Pressure_Error(uint8_t addr) { uint8_t id =0; Cang_Inf* pcang = &cang_inf; id = addr-PRESSURE_STARTADDR; if(id >= SENSOR_DEEP){ return ; } pressure_inf[id].ErrorCnt++; if (pressure_inf[id].ErrorCnt > pcang->sensorBusMaxReTry) { pressure_inf[id].ErrorCnt = pcang->sensorBusMaxReTry + 1; pressure_inf[id].Error = 1; } }