123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- #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;
- }
- }
|