bgy.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #include "bgy.h"
  2. #include "config.h"
  3. Biguayou_Inf biguayou_inf[SENSOR_DEEP];
  4. void BGY_Init(void);
  5. void BGY_state(uint16_t CangNum);
  6. void Get_Biguayou_data(void);
  7. uint16_t BGY_SetThreshold(uint8_t* pTx);
  8. uint16_t BGY_Max = 0;
  9. void BGY_Init(void)
  10. {
  11. Cang_Inf* pcang = &cang_inf;
  12. uint16_t Flash_buf[20] = {0};
  13. uint8_t i = 0;
  14. Flash_ReadBytes(Flash_buf,ADDR_BGYSENSOR_TYPE,1);
  15. if(Flash_buf[0] != 0xFFFF)
  16. pcang->BGY_Type = Flash_buf[0];
  17. else
  18. pcang->BGY_Type = 1;
  19. Flash_ReadBytes(Flash_buf,ADDR_BGY_NUM,8);
  20. for(i = 0;i < pcang->Cang_Num;i++)
  21. {
  22. if(Flash_buf[i] != 0xFFFF)
  23. pcang->BGY_Num[i] = Flash_buf[i];
  24. else
  25. pcang->BGY_Num[i] = 1;
  26. }
  27. for(i = 0;i < pcang->Cang_Num;i++)
  28. BGY_Max +=pcang->BGY_Num[i];
  29. }
  30. void BGY_state(uint16_t CangNum)
  31. {
  32. //j = 0
  33. Biguayou_Inf* pBGY = biguayou_inf;
  34. uint8_t i = 0;
  35. for(i = 1;i <= BGY_Max;i++)
  36. {
  37. pBGY[i].BGY_State = 0;
  38. pBGY[i].BGY_Error = 0;
  39. if(pBGY[i].BGY_SVAL[0] == 0x01)
  40. pBGY[i].BGY_State = 0x01;
  41. else if(pBGY[i].BGY_SVAL[0] == 0x00)
  42. pBGY[i].BGY_State = 0x00;
  43. else
  44. {
  45. pBGY[i].BGY_SVAL[0] = 0x00;
  46. pBGY[i].BGY_ErrorCnt++;
  47. }
  48. if(pBGY[i].BGY_ErrorCnt > pBGY->BGY_StateKeepNum)
  49. pBGY[i].BGY_Error = 1;
  50. }
  51. }
  52. void Get_Biguayou_data(void)
  53. {
  54. //j = 0i = 0
  55. uint16_t ModbusCRC=0;
  56. uint16_t receive_error = 0;
  57. Biguayou_Inf* pBGY = biguayou_inf;
  58. ModbusCRC = USART3_RX_BUF002[5]<<8;
  59. ModbusCRC |= USART3_RX_BUF002[6];
  60. if(USART3_RX_BUF002[1]!=0x03&&USART3_RX_BUF002[1]!=0x06) //校验读写属性
  61. {
  62. receive_error = 1;
  63. }
  64. else if(USART3_RX_BUF002[2] != 0x02) //校验数据长度
  65. {
  66. receive_error = 1;
  67. }
  68. else if(ModbusCRC != LIB_CRC_MODBUS(USART3_RX_BUF002,5)) //校验CRC
  69. {
  70. receive_error = 1;
  71. }
  72. if(USART3_RX_BUF002[1]==0x03)
  73. {
  74. pBGY[USART3_RX_BUF002[0]-0x80].RTData_Num = 1;
  75. pBGY[USART3_RX_BUF002[0]-0x80].BGY_SSWD[0] = USART3_RX_BUF002[3]; //
  76. pBGY[USART3_RX_BUF002[0]-0x80].BGY_SVAL[0] = USART3_RX_BUF002[4];
  77. }
  78. else if(USART3_RX_BUF002[1]==0x06)
  79. {
  80. USART3_RX_BUF002[3] = USART3_RX_BUF002[3];
  81. }
  82. }
  83. uint16_t BGY_SetThreshold(uint8_t* pTx)
  84. {
  85. // Biguayou_Inf* pBGY = biguayou_inf;
  86. KZQ_Inf* pkzq = &kzq_inf;
  87. // uint16_t flash_buf[10] = {0};
  88. uint8_t i = 0;
  89. uint16_t ModBusCRC = 0;
  90. if(pkzq->data_buf[7] == 0x06)
  91. {
  92. pkzq->USE_XYF = 1;
  93. ALL_TxBuf[i++] = pkzq->data_buf[17];
  94. ALL_TxBuf[i++] = 0x06;
  95. ALL_TxBuf[i++] = 0x12;
  96. ALL_TxBuf[i++] = pkzq->data_buf[18];
  97. ALL_TxBuf[i++] = pkzq->data_buf[19];
  98. ALL_TxBuf[i++] = pkzq->data_buf[18];
  99. ALL_TxBuf[i++] = pkzq->data_buf[19];
  100. ModBusCRC = LIB_CRC_MODBUS(ALL_TxBuf,8);
  101. ALL_TxBuf[i++] = ModBusCRC>>8;
  102. ALL_TxBuf[i++] = ModBusCRC&0xff;
  103. return 1;
  104. }
  105. else
  106. {
  107. return 0;
  108. }
  109. }