pressure.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #include "pressure.h"
  2. #include "main.h"
  3. #include "usart.h"
  4. Pressure_Inf pressure_inf[SENSOR_DEEP];
  5. uint8_t Pressure_Max = 0;
  6. void Pressure_state(uint16_t CangNum)
  7. {
  8. }
  9. void Pressure_Init(void)
  10. {
  11. Cang_Inf* pcang = &cang_inf;
  12. uint8_t i = 0;
  13. pcang->Pressure = Pressure_FST800_801;
  14. for(i = 0;i < pcang->Cang_Num;i++)
  15. {
  16. pcang->Pressure_Num[i] = 1;
  17. }
  18. Pressure_Max = 0;
  19. for(i = 0;i < pcang->Cang_Num;i++)
  20. Pressure_Max +=pcang->Pressure_Num[i];
  21. if(Pressure_Max > SENSOR_DEEP){
  22. Pressure_Max = SENSOR_DEEP;
  23. }
  24. }
  25. uint8_t Prase_Pressure(uint8_t* data, Pressure_Tpye type)
  26. {
  27. uint16_t ModbusCRC;
  28. uint8_t receive_error = 0;
  29. uint8_t id = 0;
  30. typedef union{
  31. float value;
  32. uint8_t arr[4];
  33. }Hex_to_float;
  34. static Hex_to_float hex_to_float;
  35. ModbusCRC = data[7]<<8;
  36. ModbusCRC |= data[8];
  37. if(data[1]!=0x03&&data[1]!=0x06) //校验读写属性
  38. {
  39. receive_error = 1;
  40. }
  41. else if(data[2] != 0x04) //校验数据长度
  42. {
  43. receive_error = 1;
  44. }
  45. else if(ModbusCRC != LIB_CRC_MODBUS(data,7)) //校验CRC
  46. {
  47. receive_error = 1;
  48. }
  49. id = data[0]-PRESSURE_STARTADDR;
  50. if(id >= SENSOR_DEEP){
  51. receive_error = 1;
  52. }
  53. if(receive_error == 0){
  54. pressure_inf[id].ErrorCnt = 0;
  55. pressure_inf[id].Error = 0;
  56. if(data[1] == 0x03){
  57. hex_to_float.arr[0] = data[6];
  58. hex_to_float.arr[1] = data[5];
  59. hex_to_float.arr[2] = data[4];
  60. hex_to_float.arr[3] = data[3];
  61. pressure_inf[id].pressure = hex_to_float.value;
  62. }
  63. return 0;
  64. }else{
  65. Pressure_Error(data[0]);
  66. return 1;
  67. }
  68. }
  69. void Pressure_Error(uint8_t addr)
  70. {
  71. uint8_t id =0;
  72. Cang_Inf* pcang = &cang_inf;
  73. id = addr-PRESSURE_STARTADDR;
  74. if(id >= SENSOR_DEEP){
  75. return ;
  76. }
  77. pressure_inf[id].ErrorCnt++;
  78. if (pressure_inf[id].ErrorCnt > pcang->sensorBusMaxReTry)
  79. {
  80. pressure_inf[id].ErrorCnt = pcang->sensorBusMaxReTry + 1;
  81. pressure_inf[id].Error = 1;
  82. }
  83. }