hdf.c 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  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. GPIO_PinState Get_Pin(int Pin_No)
  12. {
  13. GPIO_PinState Pin_sts;
  14. switch (Pin_No)
  15. {
  16. case 0:
  17. Pin_sts = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_14);
  18. break;
  19. case 1:
  20. Pin_sts = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15);
  21. break;
  22. case 2:
  23. Pin_sts = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_6);
  24. break;
  25. case 3:
  26. Pin_sts = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_7);
  27. break;
  28. case 4:
  29. Pin_sts = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_8);
  30. break;
  31. case 5:
  32. Pin_sts = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9);
  33. break;
  34. case 6:
  35. Pin_sts = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_8);
  36. break;
  37. case 7:
  38. Pin_sts = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_11);
  39. break;
  40. default:
  41. break;
  42. }
  43. return Pin_sts;
  44. }
  45. void DF_State(uint8_t Cang_Num) //查询仓底阀状态
  46. {
  47. Cang_Inf* pcang = &cang_inf;
  48. XYF_Inf* pxyf = xyf_inf;
  49. RKG_Inf* prkg = rkg_inf;
  50. HDF_Inf* phdf = hdf_inf;
  51. uint8_t i = 0,j = 0,HDF_MAX = 3,PinNo;
  52. if(pcang->HDF_Type == 0) //底阀监测器
  53. {
  54. if(i < HDF_BUF_DEP)
  55. {
  56. PinNo = 0;
  57. if (pcang->XYF_Type == 2)
  58. {
  59. for (j = 0, HDF_MAX = 0; j < pcang->Cang_Num; ++j)
  60. {
  61. HDF_MAX += pcang->XYF_Num[j];
  62. }
  63. for (j = 0; j < HDF_MAX; ++j)
  64. {
  65. pxyf[j + 1].XYF_State1 = Get_Pin(PinNo++);
  66. }
  67. }
  68. if (pcang->RKG_Type == 2)
  69. {
  70. for (j = 0, HDF_MAX = 0; j < pcang->Cang_Num; ++j)
  71. {
  72. HDF_MAX += pcang->RKG_Num[j];
  73. }
  74. for (j = 0; j < HDF_MAX; ++j)
  75. {
  76. prkg[1 + j].RKDG_State = Get_Pin(PinNo++);
  77. }
  78. }
  79. for (j = 0, HDF_MAX = 0; j < pcang->Cang_Num; ++j)
  80. {
  81. HDF_MAX += pcang->HDF_Num[j];
  82. }
  83. for (j = 0; j < HDF_MAX; ++j)
  84. {
  85. phdf[1 + j].HDF_OFData[i] = Get_Pin(PinNo++);
  86. }
  87. i++;
  88. }
  89. if(i >= HDF_BUF_DEP)
  90. i = 0;
  91. }
  92. else if(pcang->HDF_Type == 1) //其他底阀监测
  93. {
  94. phdf[1].HDF_OFData[0] = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_14);
  95. phdf[2].HDF_OFData[0] = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15);
  96. phdf[3].HDF_OFData[0] = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_6);
  97. phdf[4].HDF_OFData[0] = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_7);
  98. phdf[5].HDF_OFData[0] = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_8);
  99. phdf[6].HDF_OFData[0] = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9);
  100. phdf[7].HDF_OFData[0] = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_8);
  101. phdf[8].HDF_OFData[0] = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_11);
  102. /* for(j = 1;j <= HDF_MAX;j++) //SLM HDF_MAX
  103. {
  104. if(phdf[j].HDF_ErrorCnt > phdf->HDF_StateKeepNum)
  105. phdf[j].HDF_Error = 1;
  106. }*/
  107. }
  108. }
  109. void Get_ZN_hdf_data(void)
  110. {
  111. uint8_t receive_error = 0;
  112. // uint16_t ModbusCRC = 0;
  113. // Cang_Inf* pcang = &cang_inf;
  114. HDF_Inf* phdf = hdf_inf;
  115. phdf[USART1_RX_BUF002[0]-0x20].RTData_Num = 1;
  116. if(USART3_RX_BUF002[0]==0x21||USART3_RX_BUF002[0]==0x22)
  117. {
  118. if(USART3_RX_BUF002[1]!=0x03&&USART3_RX_BUF002[1]!=0x06) //校验读写属性
  119. {
  120. receive_error = 1;
  121. }
  122. /* else if(ModbusCRC != LIB_CRC_MODBUS(USART3_RX_BUF002,6)) //校验CRC
  123. {
  124. receive_error = 0;
  125. }*/
  126. if((USART3_RX_BUF002[1] == 0x03)&&(receive_error == 0)) //读取数据返回
  127. {
  128. phdf[USART3_RX_BUF002[0]-0x20].HDF_ErrorCnt = 0;
  129. phdf[USART3_RX_BUF002[0]-0x20].RTData_Num = 1;
  130. // if(pcang->HDF_Type == 1)
  131. // phdf[USART3_RX_BUF002[0]-0x20].RTData_Num = 1; //海底阀开关数据
  132. phdf[USART3_RX_BUF002[0]-0x20].HDF_OFData[0] = USART3_RX_BUF002[3] ;
  133. // phdf[USART3_RX_BUF002[0]-0x20].HDF_OFState = USART3_RX_BUF002[4] ;
  134. __NOP();
  135. }
  136. else if((USART3_RX_BUF002[1] == 0x06)&&(receive_error == 0))
  137. {
  138. USART3_RX_BUF002[3] = USART3_RX_BUF002[3] ;
  139. }
  140. }
  141. else if(USART3_RX_BUF002[0]==0x23||USART3_RX_BUF002[0]==0x24)
  142. {
  143. if(USART3_RX_BUF002[1]!=0x03&&USART3_RX_BUF002[1]!=0x06) //校验读写属性
  144. {
  145. receive_error = 1;
  146. }
  147. /* else if(ModbusCRC != LIB_CRC_MODBUS(USART3_RX_BUF002,6)) //校验CRC
  148. {
  149. receive_error = 0;
  150. }*/
  151. if((USART3_RX_BUF002[1] == 0x03)&&(receive_error == 0)) //读取数据返回
  152. {
  153. phdf[USART3_RX_BUF002[0]-0x20].HDF_ErrorCnt = 0;
  154. phdf[USART3_RX_BUF002[0]-0x20].RTData_Num = 1;
  155. // if(pcang->HDF_Type == 1)
  156. // phdf[USART3_RX_BUF002[0]-0x20].RTData_Num = 1; //海底阀开关数据
  157. phdf[USART3_RX_BUF002[0]-0x22].HDF_Data[1] = 1;//USART3_RX_BUF002[3] ;
  158. phdf[USART3_RX_BUF002[0]-0x22].HDF_OFState1 = 1;//USART3_RX_BUF002[4] ;
  159. __NOP();
  160. }
  161. else if((USART3_RX_BUF002[1] == 0x06)&&(receive_error == 0))
  162. {
  163. USART3_RX_BUF002[3] = USART3_RX_BUF002[3] ;
  164. }
  165. }
  166. }
  167. void TOUCHUAN_UART_NUM(uint8_t* pTx)
  168. {
  169. KZQ_Inf* pkzq = &kzq_inf;
  170. int retry;
  171. // Cang_Inf* pcang = &cang_inf;
  172. // uint8_t i = 0;
  173. // uint16_t ModBusCRC = 0;
  174. // uint8_t receive_error = 0;
  175. // uint16_t ModbusCRC = 0;
  176. // HDF_Inf* phdf = hdf_inf;
  177. uint16_t Uart_num = 0;
  178. Uart_num=USART2_RX_BUF002[18];
  179. Uart_num = Uart_num << 8;
  180. Uart_num |= USART2_RX_BUF002[19];
  181. if(Uart_num == 1)
  182. {//if(Uart_num == 0x0001)
  183. if(pkzq->USE_XYF == 0)
  184. {//if(pkzq->USE_XYF == 0)
  185. if(pkzq->data_buf[7] == 0x06)
  186. {//if(pkzq->data_buf[7] == 0x06)
  187. pkzq->USE_XYF = 1;
  188. Uart_len_TouChuan=USART2_RX_BUF002[20];
  189. Uart_len_TouChuan = Uart_len_TouChuan << 8;
  190. Uart_len_TouChuan |= USART2_RX_BUF002[21];
  191. memcpy(XYF_TxBuf,&USART2_RX_BUF002[22],Uart_len_TouChuan);
  192. //osDelay(50);
  193. for(retry=0;retry<300;++retry)
  194. {
  195. if(flagU3Rx && (pkzq->USE_XYF==0))
  196. break;
  197. osDelay(1);
  198. }
  199. if(flagU3Rx)
  200. {
  201. pTx[20] = (data_lengthU3>>8)&0xff;
  202. pTx[21] = data_lengthU3&0xff;
  203. memcpy(pTx+22,USART3_RX_BUF002,data_lengthU3);
  204. flagU1Rx=0;
  205. }
  206. else
  207. {
  208. pTx[20] = 0;
  209. pTx[21] = 0;
  210. }
  211. }//if(pkzq->data_buf[7] == 0x06)
  212. }//if(pkzq->USE_XYF == 0)
  213. }//if(Uart_num == 0x0001)
  214. if(Uart_num == 0)
  215. {//if(Uart_num == 0x0001)
  216. if(pkzq->USE_RKG == 0)
  217. {//if(pkzq->USE_XYF == 0)
  218. if(pkzq->data_buf[7] == 0x06)
  219. {//if(pkzq->data_buf[7] == 0x06)
  220. pkzq->USE_RKG = 1;
  221. Uart_len_TouChuan=USART2_RX_BUF002[20];
  222. Uart_len_TouChuan = Uart_len_TouChuan << 8;
  223. Uart_len_TouChuan |= USART2_RX_BUF002[21];
  224. memcpy(RKG_TxBuf,&USART2_RX_BUF002[22],Uart_len_TouChuan);
  225. //osDelay(50);
  226. for(retry=0;retry<300;++retry)
  227. {
  228. if(flagU1Rx && (pkzq->USE_RKG == 0))
  229. break;
  230. osDelay(1);
  231. }
  232. if(flagU1Rx)
  233. {
  234. pTx[20] = (data_lengthU1>>8)&0xff;
  235. pTx[21] = data_lengthU1&0xff;
  236. memcpy(pTx+22,USART1_RX_BUF002,data_lengthU1);
  237. flagU1Rx=0;
  238. }
  239. else
  240. {
  241. pTx[20] = 0;
  242. pTx[21] = 0;
  243. }
  244. }//if(pkzq->data_buf[7] == 0x06)
  245. }//if(pkzq->USE_XYF == 0)
  246. }//if(Uart_num == 0x0001)
  247. }