soft_seed_device.c 40 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208
  1. #include "soft_seed_device.h"
  2. #include "common.h"
  3. #include "string.h"
  4. #include "soft_p_2_c.h"
  5. #include "soft_eft.h"
  6. #include "soft_flow.h"
  7. #include "soft_water_device.h"
  8. #include "soft_uart.h"
  9. #include "soft_terrain.h"
  10. #include "soft_obstacle.h"
  11. #include "soft_bms.h"
  12. #include "soft_okcell.h"
  13. #include "soft_version.h"
  14. #include "math.h"
  15. #include "qingxie_bms.h"
  16. weight weight_vkinfo;
  17. seed seed_vkinfo;
  18. send_seed_device seed_dev;
  19. Weight_cal weight_order;
  20. /**
  21. * @file Weight_recieved_hookfuction
  22. * @brief VK协议称重传感器
  23. * @param none
  24. * @details
  25. * @author Zhang Sir
  26. **/
  27. void Weight_recieved_hookfuction(uint32_t CanID, uint8_t data[], uint8_t len)
  28. {
  29. switch (CanID)
  30. {
  31. //称重传感器
  32. case 0x81320:
  33. memcpy(&weight_vkinfo.sensor_status,&data[0],8);
  34. if(weight_vkinfo.weight < 0)
  35. {
  36. weight_vkinfo.weight = abs(weight_vkinfo.weight);
  37. }
  38. Dev.Weight.facid = FAC_VK;
  39. Dev.Weight_Link.connect_status = COMP_NORMAL;
  40. Dev.Weight_Link.recv_time = HAL_GetTick();
  41. break;
  42. //称重传感器设置回馈
  43. case 0x81322:
  44. switch (data[0])
  45. {
  46. //去皮校准ack
  47. case 0xf1:
  48. pmu_set_ack(_MSGID_SET,25,Cal_Remove_Peel,0);
  49. break;
  50. //称重校准ack
  51. case 0xf2:
  52. pmu_set_ack(_MSGID_SET,25,Cal_Weight,0);
  53. break;
  54. //恢复出厂设置ack
  55. case 0xf4:
  56. pmu_set_ack(_MSGID_SET,25,Cal_Seed_Back,0);
  57. break;
  58. case 0xf5:
  59. break;
  60. case 0xf6:
  61. {
  62. char ver_buf[10] = {0};
  63. int ver_temp32 = 0;
  64. memcpy(&ver_temp32,&data[1],4);
  65. Int2String(ver_temp32,&ver_buf[2],6);
  66. ver_buf[0] = '0';
  67. ver_buf[1] = data[7] + '0';
  68. regist_dev_info(&dev_weight,DEVICE_WEIGHT,false,NULL,0,(char *)&ver_buf[0],8,NULL,0,"weight",7);
  69. break;
  70. }
  71. //厂家编号
  72. case 0xf7:
  73. if(data[1] == 'Q' && data[2] == 'F') //0x 51 46
  74. {
  75. weight_vkinfo.serial_num = 3;
  76. Dev.Weight.facid = FAC_QIFEI;
  77. }
  78. else
  79. {
  80. weight_vkinfo.serial_num = 0;
  81. }
  82. weight_init_vk.step.fac_num_flag = 0;
  83. weight_init_count = 10;
  84. //memcpy(&weight_vkinfo.serial_num, &data[1],4);
  85. break;
  86. //读取传感器K值
  87. case 0xe1:
  88. if(data[7] == 0x1)
  89. {
  90. memcpy(&weight_vkinfo.senor_k[0],&data[1],4);
  91. }
  92. else if(data[7] == 0x2)
  93. {
  94. memcpy(&weight_vkinfo.senor_k[2],&data[1],4);
  95. }
  96. weight_init_vk.step.read_k_flag = 0;
  97. break;
  98. //设置传感器K值ack
  99. case 0xe2:
  100. pmu_set_ack(_MSGID_SET,Cal_Set_Sensor_K,0,0);
  101. weight_vkinfo.senor_k[data[7]] = data[1] + (data[2] << 8);
  102. break;
  103. //称重传感器模式读取
  104. case 0xe3:
  105. weight_vkinfo.mode = data[1];
  106. weight_init_vk.step.weight_mode_flag = 0;
  107. weight_init_count = 10;
  108. break;
  109. //称重传感器模式ack
  110. case 0xe4:
  111. pmu_set_ack(_MSGID_SET,Cal_Set_Sensor_Mode,0,0);
  112. weight_vkinfo.mode = data[1];
  113. break;
  114. //最大下药率读取
  115. case 0xe5:
  116. memcpy(&weight_vkinfo.dose_rate,&data[1],2);
  117. weight_init_vk.step.dose_rate_flag = 0;
  118. weight_init_count = 10;
  119. break;
  120. //最高下药率ack
  121. case 0xe6:
  122. pmu_set_ack(_MSGID_EFT_CON,Cal_Set_Doserate,0,0);
  123. weight_vkinfo.dose_rate = data[1] + (data[2] << 8);
  124. break;
  125. default:
  126. break;
  127. }
  128. break;
  129. //播撒器
  130. case 0x81323:
  131. memcpy(&seed_vkinfo,&data[0],7);
  132. Dev.Seed_Link.connect_status = COMP_NORMAL;
  133. Dev.Seed_Link.recv_time = HAL_GetTick();
  134. break;
  135. //播撒器回馈
  136. case 0x81325:
  137. switch (data[0])
  138. {
  139. case 0xf5:
  140. break;
  141. case 0xf6:
  142. break;
  143. case 0xf7:
  144. if(data[1] == 'Q' && data[2] == 'F')
  145. {
  146. seed_vkinfo.serial_num = 3;
  147. Dev.Seed.facid = FAC_QIFEI;
  148. }
  149. break;
  150. default:
  151. break;
  152. }
  153. break;
  154. case 0x81326:
  155. memcpy(&weight_vkinfo.Single_sensor[0],&data[0],8);
  156. break;
  157. default:
  158. break;
  159. }
  160. }
  161. //上电初始化发送的参数
  162. //device_type : 1 称重
  163. // : 2 播撒
  164. /**
  165. * @file seed_init_send_info
  166. * @brief 上电初始化发送的参数
  167. * @param 1 称重
  168. 2 播撒
  169. * @details
  170. * @author Zhang Sir
  171. **/
  172. Dev_weight_init weight_init_eft = {.step.read_k_flag = 1};
  173. Dev_weight_init weight_init_vk = {.step.dose_rate_flag = 1,
  174. .step.weight_mode_flag = 1,
  175. .step.read_k_flag = 1,
  176. .step.verison = 1,
  177. .step.fac_num_flag = 1};
  178. Dev_seed_init seed_init;
  179. bool recv_fmu_seed_info = false;
  180. uint8_t weight_init_count = 10;
  181. void seed_init_send_info(uint8_t device_type,char *factory)
  182. {
  183. uint8_t vk_canbuf[8] = {0,0,0,0,0,0XFE,0XFE,0};
  184. static uint8_t spread_init_count = 10;
  185. int vk_can_id = 0;
  186. if(strcmp(factory,"VK") == 0)
  187. {
  188. switch (device_type)
  189. {
  190. //称重
  191. case WEIGHT_DEVICE:
  192. vk_can_id = 0x81321;
  193. if(weight_init_vk.status != 0)
  194. {
  195. if(weight_init_vk.step.read_k_flag != 0)
  196. {
  197. vk_canbuf[0] = 0xE1;
  198. }
  199. else if(weight_init_vk.step.fac_num_flag != 0 && weight_init_count > 0)
  200. {
  201. vk_canbuf[0] = 0xF7;
  202. weight_init_count--;
  203. if(weight_init_count == 0)
  204. {
  205. weight_init_count = 10;
  206. weight_init_vk.step.fac_num_flag = 0;
  207. }
  208. }
  209. else if(weight_init_vk.step.verison != 0 && weight_init_count > 0)
  210. {
  211. vk_canbuf[0] = 0xF6;
  212. weight_init_count--;
  213. if(weight_init_count == 0)
  214. {
  215. weight_init_count = 10;
  216. weight_init_vk.step.verison = 0;
  217. }
  218. }
  219. else if (weight_init_vk.step.weight_mode_flag != 0 && weight_init_count > 0)
  220. {
  221. vk_canbuf[0] = 0xE3;
  222. weight_init_count--;
  223. if(weight_init_count == 0)
  224. {
  225. weight_init_count = 10;
  226. weight_init_vk.step.weight_mode_flag = 0;
  227. }
  228. }
  229. else if (weight_init_vk.step.dose_rate_flag != 0 && weight_init_count > 0)
  230. {
  231. vk_canbuf[0] = 0xE5;
  232. weight_init_count--;
  233. if(weight_init_count == 0)
  234. {
  235. weight_init_count = 10;
  236. weight_init_vk.step.dose_rate_flag = 0;
  237. }
  238. }
  239. // else if (weight_init_vk.step.dose_rate_flag != 0) //序列号和固件版本
  240. // {
  241. // vk_canbuf[0] = 0xf6;;
  242. // }
  243. // else if (weight_init_vk.step.dose_rate_flag != 0)
  244. // {
  245. // vk_canbuf[0] = 0xf5;
  246. // }
  247. can_send_msg_normal((unsigned char *)&vk_canbuf, 8, vk_can_id);
  248. }
  249. break;
  250. //播撒
  251. case SEED_DEVICE:
  252. vk_can_id = 0x81324;
  253. if(spread_init_count > 0)
  254. {
  255. //获取厂家信息
  256. vk_canbuf[0] = 0xf7;
  257. spread_init_count--;
  258. can_send_msg_normal((unsigned char *)&vk_canbuf, 8, vk_can_id);
  259. }
  260. break;
  261. default:
  262. break;
  263. }
  264. }
  265. else if (strcmp(factory,"EFT") == 0)
  266. {
  267. vk_can_id = SEND_EFT_INFO;
  268. switch (device_type)
  269. {
  270. case WEIGHT_DEVICE:
  271. if(weight_init_eft.status != 0 && eft_weightDev_priority == false)
  272. {
  273. if(weight_init_eft.step.read_k_flag != 0)
  274. {
  275. vk_canbuf[0] = 0xFD;
  276. vk_canbuf[5] = 0xf1;
  277. vk_canbuf[6] = 0xf3;
  278. }
  279. can_send_msg_normal((unsigned char *)&vk_canbuf, 8, vk_can_id);
  280. }
  281. break;
  282. case SEED_DEVICE:
  283. if(seed_init.status != 0)
  284. {
  285. if(seed_init.step.sn_flag != 0)
  286. {
  287. }
  288. else if(seed_init.step.version_flag != 0)
  289. {
  290. }
  291. //can_send_msg_normal((unsigned char *)&vk_canbuf, 8, vk_can_id);
  292. }
  293. break;
  294. default:
  295. break;
  296. }
  297. }
  298. }
  299. /**
  300. * @file Set_Seed_Weight_Par
  301. * @brief 设置称重播撒参数
  302. * @param 1 称重
  303. 2 播撒
  304. * @details
  305. * @author Zhang Sir
  306. **/
  307. void Set_Seed_Weight_Par(uint8_t device_type,char *factory)
  308. {
  309. uint8_t can_buf[8] = {0};
  310. if(strcmp(factory,"VK") == 0)
  311. {
  312. switch (device_type)
  313. {
  314. case WEIGHT_DEVICE:
  315. if(weight_order.type != 0)
  316. {
  317. can_buf[1] = 0x00; //D1 - D4
  318. can_buf[2] = 0x00;
  319. can_buf[3] = 0x00;
  320. can_buf[4] = 0x00;
  321. can_buf[5] = 0xFE;
  322. can_buf[6] = 0xFE;
  323. can_buf[7] = 0x00; //D5
  324. switch (weight_order.type)
  325. {
  326. //去皮校准
  327. case Weight_Peer:
  328. can_buf[0] = 0xF1;
  329. break;
  330. //重量校准
  331. case Weight_Kg:
  332. {
  333. int weight_kgCal = 0;
  334. weight_kgCal = weight_order.order_con2 + weight_order.order_con3 * 65536;
  335. can_buf[0] = 0xF2;
  336. memcpy(&can_buf[1], &weight_kgCal,4);
  337. }
  338. break;
  339. case Weight_Reserve:
  340. break;
  341. //恢复出厂设置
  342. case Weight_Bcak:
  343. can_buf[0] = 0xF4;
  344. break;
  345. //称重传感器K值
  346. case Weight_Set_K:
  347. can_buf[0] = 0xE2;
  348. can_buf[1] = weight_order.order_con2 & 0xff;
  349. can_buf[2] = (weight_order.order_con2 >> 8) & 0xff;
  350. can_buf[7] = weight_order.order_con1 - 1; //VK协议传感器编号是0-3
  351. break;
  352. //称重传感器模式
  353. case Weight_Mode:
  354. can_buf[0] = 0xE4;
  355. can_buf[1] = weight_order.order_con1 & 0xff;
  356. break;
  357. //最高下药率
  358. case Weight_Drug_Rate:
  359. can_buf[0] = 0xE6;
  360. can_buf[1] = weight_order.order_con1 & 0xff;
  361. can_buf[2] = (weight_order.order_con1 >> 8) & 0xff;
  362. break;
  363. default:
  364. break;
  365. }
  366. can_send_msg_normal((unsigned char *)&can_buf, 8, 0x81321);
  367. weight_order.type = 0;
  368. }
  369. break;
  370. case SEED_DEVICE:
  371. //更换信号输出方式 0 PWM 1 CAN
  372. if((seed_vkinfo.output != seed_output_mode) && recv_fmu_seed_info == true)
  373. {
  374. can_buf[0] = 0xF2;
  375. can_buf[1] = seed_output_mode;
  376. can_buf[2] = 0x00;
  377. can_buf[3] = 0x00;
  378. can_buf[4] = 0x00;
  379. can_buf[5] = 0xFE;
  380. can_buf[6] = 0xFE;
  381. can_buf[7] = 0;
  382. can_send_msg_normal((unsigned char *)&can_buf, 8, 0x81324);
  383. }
  384. break;
  385. default:
  386. break;
  387. }
  388. }
  389. else if (strcmp(factory,"EFT") == 0)
  390. {
  391. switch (device_type)
  392. {
  393. case SEED_DEVICE:
  394. //更换信号输出方式 0 PWM 1 CAN
  395. if((eft_info.can_enable != seed_output_mode) && recv_fmu_seed_info == true)
  396. {
  397. can_buf[0] = 0xF2;
  398. can_buf[1] = seed_output_mode;
  399. can_buf[2] = 0x00;
  400. can_buf[3] = 0x00;
  401. can_buf[4] = 0x00;
  402. can_buf[5] = 0xf1;
  403. can_buf[6] = 0xf3;
  404. can_buf[7] = 0;
  405. can_send_msg_normal((unsigned char *)&can_buf, 8, SEND_EFT_INFO);
  406. }
  407. break;
  408. case WEIGHT_DEVICE:
  409. if(eft_weightDev_priority == true)
  410. {
  411. can_buf[1] = 0x00; //D1 - D4
  412. can_buf[2] = 0x00;
  413. can_buf[3] = 0x00;
  414. can_buf[4] = 0x00;
  415. can_buf[5] = 0xF1;
  416. can_buf[6] = 0xF3;
  417. can_buf[7] = 0x00; //D5
  418. switch (weight_order.type)
  419. {
  420. //去皮校准
  421. case Weight_Peer:
  422. can_buf[0] = 0xE1;
  423. break;
  424. //重量校准
  425. case Weight_Kg:
  426. can_buf[0] = 0xE2;
  427. memcpy(&can_buf[1], &weight_order.order_con2,2);
  428. break;
  429. case Weight_Reserve:
  430. break;
  431. //恢复出厂设置
  432. case Weight_Bcak:
  433. can_buf[0] = 0xF4;
  434. break;
  435. //称重传感器K值
  436. case Weight_Set_K:
  437. z70weight.buf[0] = 0xE3;
  438. if(weight_order.order_con1 == 1)
  439. z70weight.info.k1 = weight_order.order_con2;
  440. else if(weight_order.order_con1 == 2)
  441. z70weight.info.k2 = weight_order.order_con2;
  442. else if(weight_order.order_con1 == 3)
  443. z70weight.info.k3 = weight_order.order_con2;
  444. else if(weight_order.order_con1 == 4)
  445. z70weight.info.k4 = weight_order.order_con2;
  446. memcpy(&can_buf,&z70weight.buf[0],8);
  447. break;
  448. default:
  449. break;
  450. }
  451. can_send_msg_normal((unsigned char *)&can_buf, 8, 0x88BB);
  452. weight_order.type = 0;
  453. }
  454. else
  455. {
  456. if(weight_order.type != 0)
  457. {
  458. can_buf[1] = 0x00;
  459. can_buf[2] = 0x00;
  460. can_buf[3] = 0x00;
  461. can_buf[4] = 0x00;
  462. can_buf[5] = 0xf1;
  463. can_buf[6] = 0xf3;
  464. can_buf[7] = 0;
  465. switch (weight_order.type)
  466. {
  467. case Weight_Peer:
  468. can_buf[0] = 0xF6;
  469. break;
  470. case Weight_Kg:
  471. can_buf[0] = 0xF7;
  472. can_buf[1] = (weight_order.order_con2 >> 8) & 0xff;
  473. can_buf[2] = weight_order.order_con2 & 0xff;
  474. break;
  475. case Weight_Reserve:
  476. break;
  477. case Weight_Bcak:
  478. can_buf[0] = 0xF5;
  479. break;
  480. case Weight_Set_K:
  481. can_buf[0] = 0xFC;
  482. can_buf[1] = eft_info.seed_k[0];
  483. can_buf[2] = eft_info.seed_k[1];
  484. can_buf[3] = eft_info.seed_k[2];
  485. can_buf[weight_order.order_con1] = weight_order.order_con2 & 0xff;
  486. break;
  487. default:
  488. break;
  489. }
  490. can_send_msg_normal((unsigned char *)&can_buf, 8, SEND_EFT_INFO);
  491. weight_order.type = 0;
  492. }
  493. }
  494. break;
  495. default:
  496. break;
  497. }
  498. }
  499. }
  500. /**
  501. * @file can_sendmsg_VK
  502. * @brief 播撒常发数据包
  503. * @param
  504. * @details
  505. * @author Zhang Sir
  506. **/
  507. void can_sendmsg_VK(void)
  508. {
  509. static uint8_t vk_count = 0;
  510. uint8_t vk_canbuf[8] = {0};
  511. if(Dev.Weight_Link.connect_status == COMP_NORMAL && (Dev.Weight.facid == FAC_VK ||
  512. Dev.Weight.facid == FAC_QIFEI) && HAL_GetTick() > 3000)
  513. {
  514. seed_init_send_info(WEIGHT_DEVICE,"VK");
  515. Set_Seed_Weight_Par(WEIGHT_DEVICE,"VK");
  516. }
  517. if(Dev.Seed_Link.connect_status == COMP_NORMAL && (Dev.Seed.facid == FAC_VK ||
  518. Dev.Seed.facid == FAC_QIFEI) && HAL_GetTick() > 2000)
  519. {
  520. seed_init_send_info(SEED_DEVICE,"VK");
  521. Set_Seed_Weight_Par(SEED_DEVICE,"VK");
  522. if(seed_output_mode == 1 )
  523. {
  524. if(HAL_GetTick() < 5000) //初始化自检
  525. {
  526. tppwm_value = 1000;
  527. sow_rotate_value = 1000;
  528. }
  529. //发送转速 和阀门
  530. vk_canbuf[0] = 0xf1;
  531. vk_canbuf[1] = tppwm_value & 0xff;
  532. vk_canbuf[2] = (tppwm_value >> 8) & 0xff;
  533. vk_canbuf[3] = sow_rotate_value & 0xff;
  534. vk_canbuf[4] = (sow_rotate_value >> 8) & 0xff;
  535. vk_canbuf[5] = 0xfe;
  536. vk_canbuf[6] = 0xfe;
  537. vk_canbuf[7] = vk_count;
  538. vk_count++;
  539. can_send_msg_normal((unsigned char *)&vk_canbuf, 8, 0x81324);
  540. }
  541. if(vk_count >= 255)
  542. {
  543. vk_count = 0;
  544. }
  545. }
  546. }
  547. Device_type Dev;
  548. comp_status seed_dev_link_status = COMP_NOEXIST;
  549. void check_dev_type_link(void )
  550. {
  551. int error_time = 0;
  552. error_time = HAL_GetTick() - Dev.Seed_Link.recv_time;
  553. if(Dev.Seed_Link.connect_status == COMP_NORMAL && error_time > 5000)
  554. {
  555. Dev.Seed_Link.connect_status = COMP_LOST;
  556. memset(&Dev.Seed.facid, 0, 7);
  557. }
  558. error_time = HAL_GetTick() - Dev.Weight_Link.recv_time;
  559. if(Dev.Pump_Link.connect_status == COMP_NORMAL && error_time > 5000)
  560. {
  561. Dev.Pump_Link.connect_status = COMP_LOST;
  562. memset(&Dev.Weight.facid, 0, 16);
  563. }
  564. error_time = HAL_GetTick() - Dev.Pump_Link.recv_time;
  565. if(Dev.Pump_Link.connect_status == COMP_NORMAL && error_time > 5000)
  566. {
  567. Dev.Pump_Link.connect_status = COMP_LOST;
  568. memset(&Dev.Pump.facid, 0, 11);
  569. }
  570. //
  571. error_time = HAL_GetTick() - Dev.Nozzle_Link.recv_time;
  572. if(Dev.Nozzle_Link.connect_status == COMP_NORMAL && error_time > 5000)
  573. {
  574. Dev.Nozzle_Link.connect_status = COMP_LOST;
  575. memset(&Dev.Nozzle.facid, 0, 11);
  576. }
  577. //
  578. error_time = HAL_GetTick() - Dev.Arm_Link.recv_time;
  579. if(Dev.Arm_Link.connect_status == COMP_NORMAL && error_time > 5000)
  580. {
  581. Dev.Arm_Link.connect_status = COMP_LOST;
  582. memset(&Dev.Arm.facid, 0, 2);
  583. }
  584. }
  585. void DM_obs_test( void )
  586. {
  587. if((Dev.Part_Fradar_Link.connect_status != COMP_NORMAL) || (Dev.Part_radarF.facid != FAC_DM_RF))
  588. return;
  589. static uint32_t time_50hz = 0;
  590. static uint32_t time_49hz = 0;
  591. static uint32_t time_48hz = 0;
  592. static uint32_t time_47hz = 0;
  593. uint8_t can_buf[8] = {0};
  594. if(Check_Timer_Ready(&time_50hz,20))
  595. {
  596. memcpy(&can_buf[0],&planep.QuaterQ0,4);
  597. memcpy(&can_buf[4],&planep.QuaterQ1,4);
  598. can_send_msg_normal((unsigned char *)&can_buf, 8, 0x2345);
  599. }
  600. if(Check_Timer_Ready(&time_49hz,20))
  601. {
  602. memcpy(&can_buf[0],&planep.QuaterQ2,4);
  603. memcpy(&can_buf[4],&planep.QuaterQ3,4);
  604. can_send_msg_normal((unsigned char *)&can_buf, 8, 0x2346);
  605. }
  606. if(Check_Timer_Ready(&time_48hz,19))
  607. {
  608. memcpy(&can_buf[0],&planep.pos_x,4);
  609. memcpy(&can_buf[4],&planep.pos_y,4);
  610. can_send_msg_normal((unsigned char *)&can_buf, 8, 0x2347);
  611. }
  612. if(Check_Timer_Ready(&time_47hz,19))
  613. {
  614. memcpy(&can_buf[0],&planep.pos_z,4);
  615. memcpy(&can_buf[4],&planep.pos_flag,4);
  616. can_send_msg_normal((unsigned char *)&can_buf, 8, 0x2348);
  617. }
  618. }
  619. /**
  620. * @file update_device_type_data
  621. * @brief 更新设备信息
  622. * @param
  623. * @details
  624. * @author Zhang Sir
  625. **/
  626. void update_device_type_data(void)
  627. {
  628. //50hz更新 5hz发送
  629. static uint32_t time_1hz = 0;
  630. static uint32_t time_330hz = 0;
  631. static uint32_t time_5hz = 0;
  632. static uint32_t time_50hz = 0;
  633. if(Check_Timer_Ready(&time_1hz,_1_HZ_))
  634. {
  635. Check_dev_link(&Dev.Seed_Link,5000,(char *)&Dev.Seed.facid,sizeof(Seed_info));
  636. Check_dev_link(&Dev.Weight_Link,5000,(char *)&Dev.Weight.facid,sizeof(Weight_info));
  637. Check_dev_link(&Dev.Pump_Link,5000,(char *)&Dev.Pump.facid,sizeof(Pump_info));
  638. Check_dev_link(&Dev.Nozzle_Link,5000,(char *)&Dev.Nozzle.facid,sizeof(Nozzle_info));
  639. Check_dev_link(&Dev.Arm_Link,5000,(char *)&Dev.Arm.facid,sizeof(Arm_info));
  640. Check_dev_link(&Dev.Flow_Link1,5000,(char *)&Dev.Flow.facid,sizeof(Flow_info));
  641. Check_dev_link(&Dev.Checklow_Link,5000,(char *)&Dev.Checklow.facid,sizeof(CheckLow_info));
  642. Check_dev_link(&Distributor_Link,5000,(char *)&distributor.arm_sensor1,sizeof(distributor_info));
  643. Check_dev_link(&Dev.Current_Link,5000,(char *)&Dev.Current.facid,sizeof(Current_info));
  644. Check_dev_link(&Dev.Lackloss_Link,5000,NULL,0);
  645. Check_dev_link(&Dev.L_pump1_Link,5000,(char *)&Dev.L_pump1.facid,sizeof(Linear_pump_info));
  646. Check_dev_link(&Dev.L_pump2_Link,5000,(char *)&Dev.L_pump2.facid,sizeof(Linear_pump_info));
  647. check_radar_link_status();
  648. }
  649. if(Check_Timer_Ready(&time_330hz,330))
  650. {
  651. //EFT播撒称重
  652. can_sendmsg_eft();
  653. }
  654. if(Check_Timer_Ready(&time_5hz,_5_HZ_))
  655. {
  656. //VK播撒称重
  657. can_sendmsg_VK();
  658. //流量计
  659. can_sendmsg_flow();
  660. //分电板
  661. Can_sendmsg_to_distributor();
  662. }
  663. if(Check_Timer_Ready(&time_50hz,_50_HZ_))
  664. {
  665. //好盈电调水泵
  666. Hobbywing_esc_func();
  667. //播撒器
  668. if(Dev.Seed_Link.connect_status == COMP_NORMAL)
  669. {
  670. switch (Dev.Seed.facid)
  671. {
  672. case FAC_VK:
  673. Dev.Seed.angle = 0;
  674. Dev.Seed.speed = 0;
  675. Dev.Seed.caplow = 0;
  676. Dev.Seed.warn = 0;
  677. break;
  678. case FAC_EFT:
  679. Dev.Seed.angle = eft_info.valve_angel;
  680. Dev.Seed.speed = eft_info.speed_rpm * 10;
  681. Dev.Seed.caplow = eft_info.warn_status & 0x1;
  682. Dev.Seed.warn = eft_info.warn_status >> 1;
  683. break;
  684. case FAC_QIFEI:
  685. Dev.Seed.angle = 0;
  686. Dev.Seed.speed = 0;
  687. Dev.Seed.caplow = 0;
  688. Dev.Seed.warn = 0;//weight_vkinfo.warn_status;
  689. break;
  690. default:
  691. break;
  692. }
  693. }
  694. //称重
  695. if(Dev.Weight_Link.connect_status == COMP_NORMAL)
  696. {
  697. switch (Dev.Weight.facid)
  698. {
  699. case FAC_VK:
  700. Dev.Weight.mode = weight_vkinfo.mode;
  701. Dev.Weight.kg = weight_vkinfo.weight / 10;
  702. Dev.Weight.rate = weight_vkinfo.weight_rate;
  703. Dev.Weight.k1 = weight_vkinfo.senor_k[0];
  704. Dev.Weight.k2 = weight_vkinfo.senor_k[1];
  705. Dev.Weight.k3 = weight_vkinfo.senor_k[2];
  706. Dev.Weight.k4 = weight_vkinfo.senor_k[3];
  707. Dev.Weight.warn = weight_vkinfo.warn_status;
  708. Dev.Weight.single_sensor[0] = weight_vkinfo.Single_sensor[0];
  709. Dev.Weight.single_sensor[1] = weight_vkinfo.Single_sensor[1];
  710. Dev.Weight.single_sensor[2] = weight_vkinfo.Single_sensor[2];
  711. Dev.Weight.single_sensor[3] = weight_vkinfo.Single_sensor[3];
  712. break;
  713. case FAC_EFT:
  714. Dev.Weight.mode = 0;
  715. Dev.Weight.kg = eft_info.weight / 10;
  716. Dev.Weight.rate = 0;
  717. Dev.Weight.k1 = eft_info.seed_k[0];
  718. Dev.Weight.k2 = eft_info.seed_k[1];
  719. Dev.Weight.k3 = eft_info.seed_k[2];
  720. Dev.Weight.k4 = 0;
  721. Dev.Weight.warn = eft_info.watering_warn_status >> 4 & 0xff;
  722. break;
  723. case FAC_LIFTWEIGHT:
  724. Dev.Weight.mode = 0;
  725. Dev.Weight.kg = eft_info.weight;
  726. Dev.Weight.rate = 0;
  727. Dev.Weight.k1 = eft_info.seed_k[0];
  728. Dev.Weight.k2 = eft_info.seed_k[1];
  729. Dev.Weight.k3 = eft_info.seed_k[2];
  730. Dev.Weight.k4 = 0;
  731. Dev.Weight.warn = (LiftingWeight_warning << 8) & 0xff00;
  732. break;
  733. case FAC_QIFEI:
  734. Dev.Weight.mode = weight_vkinfo.mode;
  735. Dev.Weight.kg = weight_vkinfo.weight / 10;
  736. Dev.Weight.rate = weight_vkinfo.weight_rate;
  737. Dev.Weight.k1 = weight_vkinfo.senor_k[0];
  738. Dev.Weight.k2 = weight_vkinfo.senor_k[1];
  739. Dev.Weight.k3 = weight_vkinfo.senor_k[2];
  740. Dev.Weight.k4 = weight_vkinfo.senor_k[3];
  741. Dev.Weight.warn = weight_vkinfo.warn_status;
  742. Dev.Weight.dose_rate = weight_vkinfo.dose_rate;
  743. break;
  744. default:
  745. break;
  746. }
  747. }
  748. //水泵
  749. if(Dev.Pump_Link.connect_status == COMP_NORMAL)
  750. {
  751. switch (Dev.Pump.facid)
  752. {
  753. case FAC_VK:
  754. break;
  755. case FAC_EFT:
  756. Dev.Pump.rpm1 = eft_info.pump1_rpm * 60;
  757. Dev.Pump.rpm2 = eft_info.pump2_rpm * 60;
  758. Dev.Pump.rpm3 = 0;
  759. Dev.Pump.rpm4 = 0;
  760. if( (eft_info.watering_warn_status & 0x3) != 0)
  761. {
  762. Dev.Pump.warn = (eft_info.watering_warn_status & 0x3) + (eft_info.watering_warn_status & 0xf0);
  763. }
  764. else if((eft_info.watering_warn_status & 0x3) == 0)
  765. {
  766. Dev.Pump.warn = 0;
  767. }
  768. Dev.Pump.warn = 0; //屏蔽报警
  769. break;
  770. // case FAC_HW_ESC:
  771. // Dev.Pump.rpm1 = EscMsg[1].motorRPM;
  772. // Dev.Pump.rpm2 = EscMsg[2].motorRPM;
  773. // Dev.Pump.rpm3 = 0;
  774. // Dev.Pump.rpm4 = 0;
  775. // Dev.Pump.warn = EscMsg[1].warn_flag;
  776. // break;
  777. default:
  778. break;
  779. }
  780. }
  781. //离心喷头
  782. if(Dev.Nozzle_Link.connect_status == COMP_NORMAL)
  783. {
  784. switch (Dev.Nozzle.facid)
  785. {
  786. case FAC_VK:
  787. break;
  788. case FAC_EFT:
  789. Dev.Nozzle.rpm1 = eft_info.cent1_rpm * 60;
  790. Dev.Nozzle.rpm2 = eft_info.cent2_rpm * 60;
  791. Dev.Nozzle.rpm3 = 0;
  792. Dev.Nozzle.rpm4 = 0;
  793. if( (eft_info.watering_warn_status & 0xc) != 0)
  794. {
  795. Dev.Nozzle.warn = ((eft_info.watering_warn_status >> 2) & 0x3) + (eft_info.watering_warn_status & 0xf0);
  796. }
  797. else if((eft_info.watering_warn_status & 0xc) == 0)
  798. {
  799. Dev.Nozzle.warn = 0;
  800. }
  801. Dev.Nozzle.warn = 0; //屏蔽报警
  802. break;
  803. default:
  804. break;
  805. }
  806. }
  807. //机臂传感器
  808. if(Dev.Arm_Link.connect_status == COMP_NORMAL)
  809. {
  810. switch (Dev.Arm.facid)
  811. {
  812. case FAC_VK:
  813. break;
  814. case FAC_EFT:
  815. Dev.Arm.status = eft_info.enginearm_lock;
  816. break;
  817. case FAC_VK_ALLINONE:
  818. Dev.Arm.status = (((uint8_t)HAL_GPIO_ReadPin( GPIOB, GPIO_PIN_12 ) & 0x1) << 3) | \
  819. (((uint8_t)HAL_GPIO_ReadPin( GPIOB, GPIO_PIN_13 ) & 0x1) << 2) | \
  820. (((uint8_t)HAL_GPIO_ReadPin( GPIOB, GPIO_PIN_14 ) & 0x1)) | \
  821. (((uint8_t)HAL_GPIO_ReadPin( GPIOB, GPIO_PIN_15 ) & 0x1) << 1);
  822. break;
  823. default:
  824. break;
  825. }
  826. }
  827. //线性水泵
  828. if(Dev.L_pump1_Link.connect_status == COMP_NORMAL)
  829. {
  830. switch (Dev.L_pump1.facid)
  831. {
  832. case FAC_VK:
  833. break;
  834. case FAC_EFT:
  835. Dev.L_pump1.warn = Lpump1.error_status;
  836. Dev.L_pump1.rpm = Lpump1.rpm;
  837. break;
  838. case FAC_HW_ESC:
  839. Dev.L_pump1.warn = EscMsg[1].warn_flag;
  840. Dev.L_pump1.rpm = EscMsg[1].motorRPM;
  841. break;
  842. default:
  843. break;
  844. }
  845. }
  846. if(Dev.L_pump2_Link.connect_status == COMP_NORMAL)
  847. {
  848. switch (Dev.L_pump2.facid)
  849. {
  850. case FAC_VK:
  851. break;
  852. case FAC_EFT:
  853. Dev.L_pump2.warn = Lpump2.error_status;
  854. Dev.L_pump2.rpm = Lpump2.rpm;
  855. break;
  856. case FAC_HW_ESC:
  857. Dev.L_pump2.warn = EscMsg[2].warn_flag;
  858. Dev.L_pump2.rpm = EscMsg[2].motorRPM;
  859. break;
  860. default:
  861. break;
  862. }
  863. }
  864. // if(Dev.L_pump2_Link.connect_status == COMP_NORMAL)
  865. // {
  866. // switch (Dev.L_pump2.facid)
  867. // {
  868. // case FAC_VK:
  869. // break;
  870. // case FAC_HW_ESC:
  871. // Dev.L_pump2.warn = EscMsg[1].warn_flag;
  872. // Dev.L_pump2.rpm = EscMsg[1].motorRPM;
  873. // break;
  874. // default:
  875. // break;
  876. // }
  877. // }
  878. //智能电池
  879. if(Dev.Bms_Link.connect_status == COMP_NORMAL)
  880. {
  881. Dev.Bms.index = 0;
  882. Dev.Bms.facid = bms_data.serial_num;
  883. bms_data.bms_version[0] = 'V';
  884. bms_data.bms_version[1] = 'K';
  885. bms_data.bms_version[2] = '3';
  886. bms_data.bms_group = group_num;
  887. memcpy(&Dev.Bms.buf[Dev.Bms.index],&bms_data.bms_version,5 + bms_data.bms_num * 2);
  888. Dev.Bms.index += (5 + bms_data.bms_num * 2);
  889. memcpy(&Dev.Bms.buf[Dev.Bms.index],&bms_data.bms_ids,43);
  890. Dev.Bms.index += 43;
  891. memset(&Dev.Bms.buf[Dev.Bms.index],0,2); //EFT协议新加插头问题
  892. Dev.Bms.index += 2;
  893. if(bms_data.bms_group == 2)
  894. {
  895. memcpy(&Dev.Bms.buf[Dev.Bms.index],&bms_data2.bms_num,1 + bms_data2.bms_num * 2);
  896. Dev.Bms.index += (1 + bms_data2.bms_num * 2);
  897. memcpy(&Dev.Bms.buf[Dev.Bms.index],&bms_data2.bms_ids,43);
  898. Dev.Bms.index += 43;
  899. memset(&Dev.Bms.buf[Dev.Bms.index],0,2); //EFT协议新加插头问题
  900. Dev.Bms.index += 2;
  901. }
  902. }
  903. if(_Aqx_bms_link.connect_status == COMP_NORMAL)
  904. {
  905. Dev.Bms.facid = FAC_QX_BMS;
  906. Dev.Bms.buf[0] = 0;//电池串数
  907. Dev.Bms.index = 0;
  908. Dev.Bms.index++;
  909. for(uint8_t i = 0; i < 4; i++)
  910. {
  911. if(_qx_bms_link[i].connect_status == COMP_NORMAL)
  912. {
  913. Dev.Bms.buf[0]++;
  914. memcpy(&Dev.Bms.buf[Dev.Bms.index],&_qx_bms[i].bat_voltage,sizeof(qingxie_bms_status_t));
  915. Dev.Bms.index += sizeof(qingxie_bms_status_t);
  916. }
  917. }
  918. }
  919. //流量计、断料记、雷达数据一直发
  920. if(true/*Dev.Flow_Link1.connect_status == COMP_NORMAL*/)
  921. {
  922. switch (Dev.Flow.facid)
  923. {
  924. case FAC_VK:
  925. Dev.Flow.speed1 = flow_dev1.speed;
  926. Dev.Flow.speed2 = flow_dev2.speed;
  927. Dev.Flow.ml1 = flow_dev1.irq_count;
  928. Dev.Flow.ml2 = flow_dev2.irq_count;
  929. Dev.Flow.warn1 = 0;
  930. Dev.Flow.warn2 = 0;
  931. Dev.Flow.k1 = 0;
  932. Dev.Flow.k2 = 0;
  933. break;
  934. case FAC_MIMO_SIG:// APP需要识别单双管
  935. Dev.Flow.speed1 = flow_mimo1.flow_speed;
  936. Dev.Flow.speed2 = flow_mimo2.flow_speed;
  937. Dev.Flow.ml1 = (flow_mimo1.total_ml + 65535 * flow_mimo1.overturn_count) * FlOW_KP * 60 / 1000;
  938. Dev.Flow.ml2 = (flow_mimo2.total_ml + 65535 * flow_mimo2.overturn_count) * FlOW_KP * 60 / 1000;
  939. Dev.Flow.warn1 = flow_mimo1.status;
  940. Dev.Flow.warn2 = flow_mimo2.status;
  941. Dev.Flow.k1 = flow_mimo1.flow_k;
  942. Dev.Flow.k2 = flow_mimo2.flow_k;
  943. break;
  944. case FAC_MIMO_DOU:
  945. Dev.Flow.speed1 = flow_mimo1.flow_speed;
  946. Dev.Flow.speed2 = flow_mimo2.flow_speed;
  947. Dev.Flow.ml1 = (flow_mimo1.total_ml + 65535 * flow_mimo1.overturn_count) * FlOW_KP * 60 / 1000;
  948. Dev.Flow.ml2 = (flow_mimo2.total_ml + 65535 * flow_mimo2.overturn_count) * FlOW_KP * 60 / 1000;
  949. Dev.Flow.warn1 = flow_mimo1.status;
  950. Dev.Flow.warn2 = flow_mimo2.status;
  951. Dev.Flow.k1 = flow_mimo1.flow_k;
  952. Dev.Flow.k2 = flow_mimo2.flow_k;
  953. break;
  954. case FAC_QIFEI_SIG:
  955. Dev.Flow.speed1 = flow_inf.ch1.speed;
  956. Dev.Flow.speed2 = flow_inf.ch2.speed;
  957. Dev.Flow.ml1 = (flow_inf.ch1.ml + 65535 * flow_inf.ch1.overturn) * FlOW_KP * 60 / 1000;
  958. Dev.Flow.ml2 = (flow_inf.ch2.ml + 65535 * flow_inf.ch2.overturn) * FlOW_KP * 60 / 1000;
  959. Dev.Flow.warn1 = flow_inf.ch1.warn;
  960. Dev.Flow.warn2 = flow_inf.ch2.warn;
  961. Dev.Flow.k1 = flow_inf.ch1.k;
  962. Dev.Flow.k2 = flow_inf.ch2.k;
  963. break;
  964. case FAC_QIFEI_DOU: // 12做个调换
  965. Dev.Flow.speed1 = flow_inf.ch2.speed;
  966. Dev.Flow.speed2 = flow_inf.ch1.speed;
  967. Dev.Flow.ml1 = (flow_inf.ch2.ml + 65535 * flow_inf.ch2.overturn) * FlOW_KP * 60 / 1000;
  968. Dev.Flow.ml2 = (flow_inf.ch1.ml + 65535 * flow_inf.ch1.overturn) * FlOW_KP * 60 / 1000;
  969. Dev.Flow.warn1 = flow_inf.ch2.warn;
  970. Dev.Flow.warn2 = flow_inf.ch1.warn;
  971. Dev.Flow.k1 = flow_inf.ch2.k;
  972. Dev.Flow.k2 = flow_inf.ch1.k;
  973. break;
  974. case FAC_HW_ESC:
  975. Dev.Flow.speed1 = EscMsg[1].motorRPM / FlOW_KP;
  976. Dev.Flow.speed2 = EscMsg[2].motorRPM / FlOW_KP;
  977. Dev.Flow.ml1 = 0;//(flow_inf.ch1.ml + 65535 * flow_inf.ch1.overturn) * FlOW_KP * 60 / 1000;
  978. Dev.Flow.ml2 = 0;//(flow_inf.ch2.ml + 65535 * flow_inf.ch2.overturn) * FlOW_KP * 60 / 1000;
  979. Dev.Flow.warn1 = 0;
  980. Dev.Flow.warn2 = 0;
  981. Dev.Flow.k1 = 0;
  982. Dev.Flow.k2 = 0;
  983. break;
  984. default:
  985. break;
  986. }
  987. switch (Dev.Checklow.facid)
  988. {
  989. case FAC_VK:
  990. Dev.Checklow.L1_status = (uint16_t)L3_status;
  991. Dev.Checklow.L2_status = (uint16_t)L4_status;
  992. Dev.Checklow.liquid_persent = decode_liquid_info();
  993. Dev.Checklow.seed_lackloss = mimo_lackloss.status;
  994. Dev.Checklow.warn = 0;
  995. Dev.Checklow.lack_distance = mimo_lackloss.distance / 10; //cm
  996. Dev.Checklow.lack_power = mimo_lackloss.strength;
  997. break;
  998. case FAC_DM_CHECKLOW:
  999. Dev.Checklow.L1_status = (uint16_t)L3_status;
  1000. Dev.Checklow.L2_status = (uint16_t)L4_status;
  1001. Dev.Checklow.liquid_persent = decode_liquid_info();
  1002. Dev.Checklow.seed_lackloss = DM_lackloss.status;
  1003. Dev.Checklow.warn = 0;
  1004. Dev.Checklow.lack_distance = DM_lackloss.distance;
  1005. Dev.Checklow.lack_power = DM_lackloss.strength;
  1006. break;
  1007. default:
  1008. break;
  1009. }
  1010. //雷达
  1011. Dev.Radar.height_T = get_radar_info(MSGID_SET_T_RADAR,0);
  1012. Dev.Radar.distance_F_Y = get_radar_info(MSGID_SET_F_RADAR,OBS_Y);
  1013. Dev.Radar.distance_F_Y_ori = Dev.Radar.distance_F_Y;
  1014. // if((Dev.Radar.distance_F_Y > 0) && (Fobs_handle_function() == false))
  1015. // Dev.Radar.distance_F_Y = 0;
  1016. Dev.Radar.distance_F_X = get_radar_info(MSGID_SET_F_RADAR,OBS_X);
  1017. Dev.Radar.signal_F_qulity = mimo_f_info.signal_qulity;
  1018. Dev.Radar.distance_B_Y = get_radar_info(MSGID_SET_B_RADAR,OBS_Y);
  1019. Dev.Radar.distance_B_Y_ori = Dev.Radar.distance_B_Y;
  1020. // if((Dev.Radar.distance_B_Y > 0) && (Bobs_handle_function() == false))
  1021. // Dev.Radar.distance_B_Y = 0;
  1022. Dev.Radar.distance_B_X = get_radar_info(MSGID_SET_B_RADAR,OBS_X);
  1023. Dev.Radar.signal_B_qulity = mimo_b_info.signal_qulity;
  1024. terrain_is_link = Dev.Radar.height_T > -1? true:false;
  1025. obs_f_is_link = Dev.Radar.distance_F_Y > -1? true:false;
  1026. obs_b_is_link = Dev.Radar.distance_B_Y > -1? true:false;
  1027. }
  1028. if(Dev.Current_Link.connect_status == COMP_NORMAL)
  1029. {
  1030. Dev.Current.facid = FAC_VK;
  1031. Dev.Current.tempture = power_BatteryInfo.temperature * 10;
  1032. Dev.Current.voltage = power_BatteryInfo.voltage * 10;
  1033. Dev.Current.current = power_BatteryInfo.current * 10;
  1034. }
  1035. if(Dev.Part_Tradar_Link.connect_status == COMP_NORMAL)
  1036. {
  1037. Dev.Part_radarT.height_part1 = T_radar[0].Distance * 0.05f * 100 * cos(T_radar[0].Amuzith * 0.1f / RAD);
  1038. Dev.Part_radarT.height_part2 = T_radar[1].Distance * 0.05f * 100 * cos(T_radar[1].Amuzith * 0.1f / RAD);
  1039. Dev.Part_radarT.height_part3 = T_radar[2].Distance * 0.05f * 100 * cos(T_radar[2].Amuzith * 0.1f / RAD);
  1040. }
  1041. if(Dev.Part_Fradar_Link.connect_status == COMP_NORMAL)
  1042. {
  1043. Dev.Part_radarF.X1 = F_4DRadar[0][0];
  1044. Dev.Part_radarF.Y1 = F_4DRadar[0][1];
  1045. Dev.Part_radarF.Z1 = F_4DRadar[0][2];
  1046. Dev.Part_radarF.X2 = F_4DRadar[1][0];
  1047. Dev.Part_radarF.Y2 = F_4DRadar[1][1];
  1048. Dev.Part_radarF.Z2 = F_4DRadar[1][2];
  1049. Dev.Part_radarF.X3 = F_4DRadar[2][0];
  1050. Dev.Part_radarF.Y3 = F_4DRadar[2][1];
  1051. Dev.Part_radarF.Z3 = F_4DRadar[2][2];
  1052. }
  1053. if(Dev.Temp_Sensor_Link.connect_status == COMP_NORMAL)
  1054. {
  1055. switch (Dev.Temp_sensor.facid)
  1056. {
  1057. case FAC_EFT:
  1058. Dev.Temp_sensor.Positive_pole = Temp_sensor.Positive_pole;
  1059. Dev.Temp_sensor.Negative_pole = Temp_sensor.Negative_pole;
  1060. break;
  1061. default:
  1062. break;
  1063. }
  1064. }
  1065. }
  1066. }
  1067. comp_status QIFEI_link_status = COMP_NOEXIST;
  1068. uint32_t get_QIFEI_time = 0;
  1069. volatile char get_QIFEI_time_sem = 0;
  1070. unsigned int get_QIFEI_time_err = 0;
  1071. void QIFEI_recieved_hookfuction(uint32_t CanID, uint8_t data[], uint8_t len)
  1072. {
  1073. uint8_t id = 0;
  1074. QIFEI_link_status = COMP_NORMAL;
  1075. get_QIFEI_time = HAL_GetTick();
  1076. id = data[0];
  1077. switch (CanID)
  1078. {
  1079. case 0x0AD2:
  1080. break;
  1081. case 0x0AD0:
  1082. switch (id)
  1083. {
  1084. case 0x01:
  1085. break;
  1086. default:
  1087. break;
  1088. }
  1089. break;
  1090. default:
  1091. break;
  1092. }
  1093. }