hdf.c 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. #include "hdf.h"
  2. void TOUCHUAN_UART_NUM(uint8_t* pTx) ;
  3. void Get_ZN_hdf_data(void) ;
  4. HDF_Inf hdf_inf[SENSOR_DEEP];
  5. uint16_t Uart_len_TouChuan= 0;
  6. uint8_t Get_DFState(uint8_t Cang_Num) //查询仓底阀状态
  7. {
  8. HDF_Inf* phdf = hdf_inf;
  9. return !phdf[Cang_Num].HDF_OFData[0];
  10. }
  11. void DF_State(uint8_t Cang_Num) //查询仓底阀状态
  12. {
  13. Cang_Inf* pcang = &cang_inf;
  14. HDF_Inf* phdf = hdf_inf;
  15. uint8_t i = 0,j = 0,HDF_MAX = 3;
  16. if(pcang->HDF_Type == 0) //底阀监测器
  17. {
  18. if(i < HDF_BUF_DEP)
  19. {
  20. phdf[1].HDF_OFData[i] = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_14);
  21. phdf[2].HDF_OFData[i] = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15);
  22. phdf[3].HDF_OFData[i] = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_6);
  23. phdf[4].HDF_OFData[i] = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_7);
  24. phdf[5].HDF_OFData[i] = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_8);
  25. phdf[6].HDF_OFData[i] = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9);
  26. phdf[7].HDF_OFData[i] = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_8);
  27. phdf[8].HDF_OFData[i] = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_11);
  28. i++;
  29. }
  30. if(i >= HDF_BUF_DEP)
  31. i = 0;
  32. }
  33. else if(pcang->HDF_Type == 1) //其他底阀监测
  34. {
  35. phdf[1].HDF_OFData[0] = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_14);
  36. phdf[2].HDF_OFData[0] = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15);
  37. phdf[3].HDF_OFData[0] = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_6);
  38. phdf[4].HDF_OFData[0] = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_7);
  39. phdf[5].HDF_OFData[0] = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_8);
  40. phdf[6].HDF_OFData[0] = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9);
  41. phdf[7].HDF_OFData[0] = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_8);
  42. phdf[8].HDF_OFData[0] = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_11);
  43. /* for(j = 1;j <= HDF_MAX;j++) //SLM HDF_MAX
  44. {
  45. if(phdf[j].HDF_ErrorCnt > phdf->HDF_StateKeepNum)
  46. phdf[j].HDF_Error = 1;
  47. }*/
  48. }
  49. }
  50. void Get_ZN_hdf_data(void)
  51. {
  52. uint8_t receive_error = 0;
  53. // uint16_t ModbusCRC = 0;
  54. // Cang_Inf* pcang = &cang_inf;
  55. HDF_Inf* phdf = hdf_inf;
  56. phdf[USART1_RX_BUF002[0]-0x20].RTData_Num = 1;
  57. if(USART3_RX_BUF002[0]==0x21||USART3_RX_BUF002[0]==0x22)
  58. {
  59. if(USART3_RX_BUF002[1]!=0x03&&USART3_RX_BUF002[1]!=0x06) //校验读写属性
  60. {
  61. receive_error = 1;
  62. }
  63. /* else if(ModbusCRC != LIB_CRC_MODBUS(USART3_RX_BUF002,6)) //校验CRC
  64. {
  65. receive_error = 0;
  66. }*/
  67. if((USART3_RX_BUF002[1] == 0x03)&&(receive_error == 0)) //读取数据返回
  68. {
  69. phdf[USART3_RX_BUF002[0]-0x20].HDF_ErrorCnt = 0;
  70. phdf[USART3_RX_BUF002[0]-0x20].RTData_Num = 1;
  71. // if(pcang->HDF_Type == 1)
  72. // phdf[USART3_RX_BUF002[0]-0x20].RTData_Num = 1; //海底阀开关数据
  73. phdf[USART3_RX_BUF002[0]-0x20].HDF_OFData[0] = USART3_RX_BUF002[3] ;
  74. // phdf[USART3_RX_BUF002[0]-0x20].HDF_OFState = USART3_RX_BUF002[4] ;
  75. __NOP();
  76. }
  77. else if((USART3_RX_BUF002[1] == 0x06)&&(receive_error == 0))
  78. {
  79. USART3_RX_BUF002[3] = USART3_RX_BUF002[3] ;
  80. }
  81. }
  82. else if(USART3_RX_BUF002[0]==0x23||USART3_RX_BUF002[0]==0x24)
  83. {
  84. if(USART3_RX_BUF002[1]!=0x03&&USART3_RX_BUF002[1]!=0x06) //校验读写属性
  85. {
  86. receive_error = 1;
  87. }
  88. /* else if(ModbusCRC != LIB_CRC_MODBUS(USART3_RX_BUF002,6)) //校验CRC
  89. {
  90. receive_error = 0;
  91. }*/
  92. if((USART3_RX_BUF002[1] == 0x03)&&(receive_error == 0)) //读取数据返回
  93. {
  94. phdf[USART3_RX_BUF002[0]-0x20].HDF_ErrorCnt = 0;
  95. phdf[USART3_RX_BUF002[0]-0x20].RTData_Num = 1;
  96. // if(pcang->HDF_Type == 1)
  97. // phdf[USART3_RX_BUF002[0]-0x20].RTData_Num = 1; //海底阀开关数据
  98. phdf[USART3_RX_BUF002[0]-0x22].HDF_Data[1] = 1;//USART3_RX_BUF002[3] ;
  99. phdf[USART3_RX_BUF002[0]-0x22].HDF_OFState1 = 1;//USART3_RX_BUF002[4] ;
  100. __NOP();
  101. }
  102. else if((USART3_RX_BUF002[1] == 0x06)&&(receive_error == 0))
  103. {
  104. USART3_RX_BUF002[3] = USART3_RX_BUF002[3] ;
  105. }
  106. }
  107. }
  108. void TOUCHUAN_UART_NUM(uint8_t* pTx)
  109. {
  110. KZQ_Inf* pkzq = &kzq_inf;
  111. int retry;
  112. // Cang_Inf* pcang = &cang_inf;
  113. // uint8_t i = 0;
  114. // uint16_t ModBusCRC = 0;
  115. // uint8_t receive_error = 0;
  116. // uint16_t ModbusCRC = 0;
  117. // HDF_Inf* phdf = hdf_inf;
  118. uint16_t Uart_num = 0;
  119. Uart_num=USART2_RX_BUF002[18];
  120. Uart_num = Uart_num << 8;
  121. Uart_num |= USART2_RX_BUF002[19];
  122. if(Uart_num == 1)
  123. {//if(Uart_num == 0x0001)
  124. if(pkzq->USE_XYF == 0)
  125. {//if(pkzq->USE_XYF == 0)
  126. if(pkzq->data_buf[7] == 0x06)
  127. {//if(pkzq->data_buf[7] == 0x06)
  128. pkzq->USE_XYF = 1;
  129. Uart_len_TouChuan=USART2_RX_BUF002[20];
  130. Uart_len_TouChuan = Uart_len_TouChuan << 8;
  131. Uart_len_TouChuan |= USART2_RX_BUF002[21];
  132. memcpy(XYF_TxBuf,&USART2_RX_BUF002[22],Uart_len_TouChuan);
  133. //osDelay(50);
  134. for(retry=0;retry<300;++retry)
  135. {
  136. if(flagU3Rx && (pkzq->USE_XYF==0))
  137. break;
  138. osDelay(1);
  139. }
  140. if(flagU3Rx)
  141. {
  142. pTx[20] = (data_lengthU3>>8)&0xff;
  143. pTx[21] = data_lengthU3&0xff;
  144. memcpy(pTx+22,USART3_RX_BUF002,data_lengthU3);
  145. flagU1Rx=0;
  146. }
  147. else
  148. {
  149. pTx[20] = 0;
  150. pTx[21] = 0;
  151. }
  152. }//if(pkzq->data_buf[7] == 0x06)
  153. }//if(pkzq->USE_XYF == 0)
  154. }//if(Uart_num == 0x0001)
  155. if(Uart_num == 0)
  156. {//if(Uart_num == 0x0001)
  157. if(pkzq->USE_RKG == 0)
  158. {//if(pkzq->USE_XYF == 0)
  159. if(pkzq->data_buf[7] == 0x06)
  160. {//if(pkzq->data_buf[7] == 0x06)
  161. pkzq->USE_RKG = 1;
  162. Uart_len_TouChuan=USART2_RX_BUF002[20];
  163. Uart_len_TouChuan = Uart_len_TouChuan << 8;
  164. Uart_len_TouChuan |= USART2_RX_BUF002[21];
  165. memcpy(RKG_TxBuf,&USART2_RX_BUF002[22],Uart_len_TouChuan);
  166. //osDelay(50);
  167. for(retry=0;retry<300;++retry)
  168. {
  169. if(flagU1Rx && (pkzq->USE_RKG == 0))
  170. break;
  171. osDelay(1);
  172. }
  173. if(flagU1Rx)
  174. {
  175. pTx[20] = (data_lengthU1>>8)&0xff;
  176. pTx[21] = data_lengthU1&0xff;
  177. memcpy(pTx+22,USART1_RX_BUF002,data_lengthU1);
  178. flagU1Rx=0;
  179. }
  180. else
  181. {
  182. pTx[20] = 0;
  183. pTx[21] = 0;
  184. }
  185. }//if(pkzq->data_buf[7] == 0x06)
  186. }//if(pkzq->USE_XYF == 0)
  187. }//if(Uart_num == 0x0001)
  188. }