tem.c 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #include "tem.h"
  2. #include "usart.h"
  3. Tem_Inf tem_inf[SENSOR_DEEP];
  4. //extern void Pressure_state(uint16_t CangNum);
  5. void Tem_Init(void)
  6. {
  7. }
  8. uint8_t Parse_Tem(uint8_t* data, Tem_Tpye type)
  9. {
  10. uint8_t cang_id = data[0] - TEM_STARTADDR;
  11. uint8_t error = 0;
  12. uint16_t ModbusCRC;
  13. uint16_t ADC_Value1, ADC_Value2;
  14. float voltage1, voltage2;
  15. uint8_t i=0;
  16. //tem_inf[cang_id].RTData_Num = 1;//三点测温
  17. //tem_inf[cang_id].ErrorCnt = 0;
  18. if(Tem_FST100_611 == type){ //一次获取两个仓的温度数据
  19. ModbusCRC = data[7]<<8;
  20. ModbusCRC |= data[8];
  21. if(data[1]!=0x03) //校验读写属性
  22. {
  23. error = 1;
  24. }
  25. else if(data[2] != 0x04) //校验数据长度
  26. {
  27. error = 1;
  28. }
  29. else if(ModbusCRC != LIB_CRC_MODBUS(data,7)) //校验CRC
  30. {
  31. error = 1;
  32. }
  33. if(0 == error){
  34. tem_inf[cang_id].RTData_Num = 1;
  35. tem_inf[cang_id].ErrorCnt = 0;
  36. tem_inf[cang_id].Error = 0;
  37. tem_inf[cang_id+1].RTData_Num = 1;
  38. tem_inf[cang_id+1].ErrorCnt = 0;
  39. tem_inf[cang_id+1].Error = 0;
  40. ADC_Value1 = data[3]<<8|data[4];
  41. ADC_Value2 = data[5]<<8|data[6];
  42. voltage1 = ADC_Value1*(1.0)*5/4096; // 0-5V 12bit
  43. voltage2 = ADC_Value2*(1.0)*5/4096;
  44. tem_inf[cang_id].temperature1 = (voltage1-1.5)*(120+40)/(4.5-0.5);
  45. tem_inf[cang_id+1].temperature1 = (voltage2-1.5)*(120+40)/(4.5-0.5);
  46. }
  47. }else if(Tem_HUATIAN_THREE == type){
  48. if(data[1]!=0x03) //校验读写属性
  49. {
  50. error = 1;
  51. }
  52. else if(data[2] != 0x02) //校验数据长度
  53. {
  54. error = 1;
  55. }
  56. else if(ModbusCRC != LIB_CRC_MODBUS(data,5)) //校验CRC
  57. {
  58. error = 1;
  59. }
  60. if(0 == error){
  61. //do nothing
  62. }
  63. }
  64. return error;
  65. }
  66. void Tem_Error(uint8_t addr)
  67. {
  68. uint8_t id = addr - TEM_STARTADDR;
  69. Cang_Inf* pcang = &cang_inf;
  70. if(Tem_FST100_611 == pcang->Temperture){
  71. tem_inf[id].ErrorCnt++;
  72. tem_inf[id+1].ErrorCnt++;
  73. if (tem_inf[id].ErrorCnt > pcang->sensorBusMaxReTry)
  74. {
  75. tem_inf[id].ErrorCnt = pcang->sensorBusMaxReTry + 1;
  76. tem_inf[id].Error = 1;
  77. tem_inf[id+1].ErrorCnt = pcang->sensorBusMaxReTry + 1;
  78. tem_inf[id+1].Error = 1;
  79. }
  80. }
  81. }