soft_seed_device.c 41 KB

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