soft_version.c 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580
  1. #include "soft_version.h"
  2. #include "soft_obstacle.h"
  3. #include "soft_terrain.h"
  4. #include "stm32f3xx_hal.h"
  5. #include "soft_flow.h"
  6. #include "soft_can.h"
  7. #include "soft_p_2_c.h"
  8. #include "config.h"
  9. #include "soft_eft.h"
  10. #include "string.h"
  11. #include "soft_bms.h"
  12. #include "soft_seed_device.h"
  13. #include "soft_water_device.h"
  14. #include "drv_vkweigher_vls300.h"
  15. dev_version_content dev_pmu;
  16. dev_version_content dev_ter;
  17. dev_version_content dev_obsf;
  18. dev_version_content dev_obsb;
  19. dev_version_content dev_bms1;
  20. dev_version_content dev_bms2;
  21. dev_version_content dev_spreader;
  22. dev_version_content dev_weight;
  23. dev_version_content dev_flowmeter;
  24. dev_version_content dev_pump;
  25. dev_version_content dev_arm;
  26. dev_version_content dev_lack;
  27. dev_version_content dev_centri;
  28. dev_version_content dev_current;
  29. dev_version_content dev_pump1,dev_pump2;
  30. dev_version_content dev_nozzle1,dev_nozzle2,dev_nozzle3,dev_nozzle4;
  31. dev_version_content dev_part_tradar;
  32. dev_version_content dev_tradar_f;
  33. dev_version_content dev_tradar_b;
  34. dev_version_content dev_h_bmsA;
  35. dev_version_content dev_h_bmsB;
  36. dev_version_content dev_remoteid;
  37. dev_version_content dev_tempSensor;
  38. dev_version_content dev_obsl;
  39. dev_version_content dev_obsr;
  40. dev_version_content dev_lift_weight;
  41. dev_version_content dev_null;
  42. // void *dev_ptr[10] = {&temp,
  43. // &dev_pmu,
  44. // &dev_ter,
  45. // &dev_obsf,
  46. // &dev_obsb,
  47. // &dev_bms1,
  48. // &dev_bms2,
  49. // &dev_spreader,
  50. // &dev_weight,
  51. // &dev_flowmeter,
  52. // &dev_arm,
  53. // };
  54. void *dev_ptr[] = {&dev_null,
  55. &dev_null,
  56. &dev_null,
  57. &dev_pmu,
  58. &dev_null,
  59. &dev_null,
  60. &dev_null,
  61. &dev_null,
  62. &dev_null,
  63. &dev_null,
  64. &dev_null,
  65. &dev_ter,
  66. &dev_obsf,
  67. &dev_obsb,
  68. &dev_bms1,
  69. &dev_bms2,
  70. &dev_null,
  71. &dev_null,
  72. &dev_null,
  73. &dev_null,
  74. &dev_null,
  75. &dev_null,
  76. &dev_null,
  77. &dev_null,
  78. &dev_null,
  79. &dev_null,
  80. &dev_spreader,
  81. &dev_weight,
  82. &dev_pump,
  83. &dev_centri,
  84. &dev_flowmeter,
  85. &dev_arm,
  86. &dev_lack,
  87. &dev_null,
  88. &dev_current,
  89. &dev_null,
  90. &dev_pump1,
  91. &dev_pump2,
  92. &dev_null,
  93. &dev_null,
  94. &dev_nozzle1,
  95. &dev_nozzle2,
  96. &dev_nozzle3,
  97. &dev_nozzle4,
  98. &dev_part_tradar,
  99. &dev_tradar_f,
  100. &dev_tradar_b,
  101. &dev_h_bmsA,
  102. &dev_h_bmsB,
  103. &dev_remoteid,
  104. &dev_tempSensor,
  105. &dev_obsl,
  106. &dev_obsr,
  107. &dev_lift_weight,
  108. };
  109. short dev_num = sizeof( dev_ptr )/sizeof( void * );
  110. /**
  111. * @file get_radar_version_and_sn
  112. * @brief 获取雷达版本和SN号
  113. * @param none
  114. * @details
  115. * @author Zhang Sir
  116. **/
  117. void get_radar_version_and_sn(void)
  118. {
  119. uint8_t radar_can_buf[8] = {0};
  120. static uint8_t mimo_area_40flag = 10;
  121. //版本信息识别 mocib mimo
  122. //新加同时获取SN号
  123. if(uavr11_info.Link.connect_status == COMP_NORMAL && uavr11_info.get_radar_ver_flag == false)
  124. {
  125. radar_can_buf[0] = 0x11;
  126. can_send_msg_normal(radar_can_buf, 1, 0x00eeff11);
  127. }
  128. else if(uavr11_info.Link.connect_status == COMP_NORMAL && uavr11_info.get_radar_sn_flag == false)
  129. {
  130. radar_can_buf[0] = 0x85;
  131. can_send_msg_normal(radar_can_buf, 1, 0x210);
  132. }
  133. if(uavr12_info.Link.connect_status == COMP_NORMAL && uavr12_info.get_radar_ver_flag == false)
  134. {
  135. radar_can_buf[0] = 0x12;
  136. can_send_msg_normal(radar_can_buf, 1, 0x00eeff12);
  137. }
  138. else if(uavr12_info.Link.connect_status == COMP_NORMAL && uavr12_info.get_radar_sn_flag == false)
  139. {
  140. radar_can_buf[0] = 0x85;
  141. can_send_msg_normal(radar_can_buf, 1, 0x220);
  142. }
  143. if(uavr56_info.Link.connect_status == COMP_NORMAL && uavr56_info.get_radar_ver_flag == false)
  144. {
  145. radar_can_buf[0] = 0x0b;
  146. can_send_msg_normal(radar_can_buf, 1, 0x00eeff0b);
  147. }
  148. else if(uavr56_info.Link.connect_status == COMP_NORMAL && uavr56_info.get_radar_sn_flag == false)
  149. {
  150. radar_can_buf[0] = 0x85;
  151. can_send_msg_normal(radar_can_buf, 1, 0x230);
  152. }
  153. if(mimo_f_info.Link.connect_status == COMP_NORMAL && mimo_f_info.get_radar_ver_flag == false)
  154. {
  155. radar_can_buf[0] = 0x55;
  156. radar_can_buf[1] = 0xAA;
  157. radar_can_buf[2] = 0x03;
  158. radar_can_buf[3] = 0x70;
  159. radar_can_buf[4] = 0x03;
  160. radar_can_buf[5] = 0x01;
  161. radar_can_buf[6] = 0x74;
  162. can_send_msg_normalstd(radar_can_buf, 7, 0xFA);
  163. }
  164. else if(mimo_b_info.Link.connect_status == COMP_NORMAL && mimo_b_info.get_radar_ver_flag == false)
  165. {
  166. radar_can_buf[0] = 0x55;
  167. radar_can_buf[1] = 0xAA;
  168. radar_can_buf[2] = 0x03;
  169. radar_can_buf[3] = 0x70;
  170. radar_can_buf[4] = 0x04;
  171. radar_can_buf[5] = 0x01;
  172. radar_can_buf[6] = 0x75;
  173. can_send_msg_normalstd(radar_can_buf, 7, 0xFA);
  174. }
  175. else if(mimo_ter_info.Link.connect_status == COMP_NORMAL && mimo_ter_info.get_radar_ver_flag == false)
  176. {
  177. radar_can_buf[0] = 0x55;
  178. radar_can_buf[1] = 0xAA;
  179. radar_can_buf[2] = 0x03;
  180. radar_can_buf[3] = 0x70;
  181. radar_can_buf[4] = 0x00;
  182. radar_can_buf[5] = 0x01;
  183. radar_can_buf[6] = 0x71;
  184. can_send_msg_normalstd(radar_can_buf, 7, 0xFA);
  185. }
  186. if((DM_ter_info.Link.connect_status == COMP_NORMAL && DM_ter_info.get_radar_ver_flag == false) ||
  187. (FourD_ter_info.Link.connect_status == COMP_NORMAL && FourD_ter_info.get_radar_ver_flag == false))
  188. {
  189. radar_can_buf[0] = 1;
  190. radar_can_buf[7] = 7;
  191. can_send_msg_normal(radar_can_buf, 8, 0x981300);
  192. }
  193. else if((DM_f_info.Link.connect_status == COMP_NORMAL || Dev.Part_Fradar_Link.connect_status == COMP_NORMAL) && DM_f_info.get_radar_ver_flag == false)
  194. {
  195. radar_can_buf[0] = 1;
  196. radar_can_buf[7] = 7;
  197. can_send_msg_normal(radar_can_buf, 8, 0XA81300);
  198. }
  199. else if( Dev.Part_Bradar_Link.connect_status == COMP_NORMAL && DM_4DB_info.get_radar_ver_flag == false)
  200. {
  201. radar_can_buf[0] = 1;
  202. radar_can_buf[7] = 7;
  203. can_send_msg_normal(radar_can_buf, 8, 0XB81300);
  204. }
  205. // else if(DM_B_info.Link.connect_status == COMP_NORMAL && DM_B_info.get_radar_ver_flag == false)
  206. // {
  207. // radar_can_buf[0] = 1;
  208. // radar_can_buf[7] = 7;
  209. // can_send_msg_normal(radar_can_buf, 8, 0XB81300);
  210. // }
  211. //恩曌一批雷达盲区20cm有问题,盲区需要改成40CM
  212. if(mimo_ter_info.Link.connect_status == COMP_NORMAL
  213. && memcmp(mimo_ter_info.version,"EB00190110",10) == 0 && mimo_area_40flag > 0)
  214. {
  215. radar_can_buf[0] = 0x4D;
  216. radar_can_buf[1] = 0x69;
  217. radar_can_buf[2] = 0x6E;
  218. radar_can_buf[3] = 0x44;
  219. radar_can_buf[4] = 0x69;
  220. radar_can_buf[5] = 0x73;
  221. radar_can_buf[6] = 0x28;
  222. radar_can_buf[7] = 0x34;
  223. can_send_msg_normalstd(radar_can_buf, 8, 0x500);
  224. radar_can_buf[0] = 0x30;
  225. radar_can_buf[1] = 0x29;
  226. radar_can_buf[2] = 0x0D;
  227. radar_can_buf[3] = 0x0A;;
  228. can_send_msg_normalstd(radar_can_buf, 4, 0x500);
  229. mimo_area_40flag--;
  230. }
  231. }
  232. /**
  233. * @file get_flowmeter_version_and_sn
  234. * @brief 获取流量计版本、SN号、K值
  235. * @param none
  236. * @details
  237. * @author Zhang Sir
  238. **/
  239. void get_flowmeter_version_and_sn(void)
  240. {
  241. static uint8_t send_interval = 0;
  242. if((Dev.Flow_Link1.connect_status == COMP_NORMAL || Dev.Flow_Link2.connect_status == COMP_NORMAL) &&
  243. (Dev.Flow.facid == FAC_MIMO_SIG || Dev.Flow.facid == FAC_MIMO_DOU))
  244. {
  245. uint8_t can_buf[8] = {0};
  246. //读取K值 和序列号
  247. if(flow_mimo1.get_k_count < 5 && Dev.Flow_Link1.connect_status == COMP_NORMAL )
  248. {
  249. //K值
  250. can_buf[0] = 0xfa;
  251. can_buf[1] = 0x10;
  252. can_buf[2] = 0x00;
  253. can_buf[3] = 0xB1;
  254. can_buf[4] = 0xD1;
  255. can_buf[5] = 0x00;
  256. can_buf[6] = 0x00;
  257. for(uint8_t i = 1; i < 7; i++)
  258. {
  259. can_buf[7] += can_buf[i];
  260. }
  261. if(send_interval == 0)
  262. {
  263. can_send_msg_normalstd(can_buf, 8, 0xFA);
  264. send_interval = 1;
  265. }
  266. can_buf[7] = 0;
  267. //序列号
  268. can_buf[0] = 0xfa;
  269. can_buf[1] = 0x10;
  270. can_buf[2] = 0x00;
  271. can_buf[3] = 0xB2;
  272. can_buf[4] = 0xEB;
  273. can_buf[5] = 0x00;
  274. can_buf[6] = 0x00;
  275. for(uint8_t i = 1; i < 7; i++)
  276. {
  277. can_buf[7] += can_buf[i];
  278. }
  279. if(send_interval == 1)
  280. {
  281. can_send_msg_normalstd(can_buf, 8, 0xFA);
  282. send_interval = 2;
  283. }
  284. can_buf[7] = 0;
  285. //软件版本
  286. can_buf[0] = 0xfa;
  287. can_buf[1] = 0x10;
  288. can_buf[2] = 0x00;
  289. can_buf[3] = 0xB2;
  290. can_buf[4] = 0xEC;
  291. can_buf[5] = 0x00;
  292. can_buf[6] = 0x00;
  293. for(uint8_t i = 1; i < 7; i++)
  294. {
  295. can_buf[7] += can_buf[i];
  296. }
  297. if(send_interval == 2)
  298. {
  299. can_send_msg_normalstd(can_buf, 8, 0xFA);
  300. send_interval = 0;
  301. }
  302. can_buf[7] = 0;
  303. if(send_interval == 0)
  304. flow_mimo1.get_k_count++;
  305. }
  306. else if(flow_mimo2.get_k_count < 5 && Dev.Flow_Link2.connect_status == COMP_NORMAL)
  307. {
  308. can_buf[0] = 0xfa;
  309. can_buf[1] = 0x10;
  310. can_buf[2] = 0x01;
  311. can_buf[3] = 0xB1;
  312. can_buf[4] = 0xD1;
  313. can_buf[5] = 0x00;
  314. can_buf[6] = 0x00;
  315. for(uint8_t i = 1; i < 7; i++)
  316. {
  317. can_buf[7] += can_buf[i];
  318. }
  319. if(send_interval == 0)
  320. {
  321. can_send_msg_normalstd(can_buf, 8, 0xFA);
  322. send_interval = 1;
  323. }
  324. can_buf[7] = 0;
  325. //序列号
  326. can_buf[0] = 0xfa;
  327. can_buf[1] = 0x10;
  328. can_buf[2] = 0x00;
  329. can_buf[3] = 0xB2;
  330. can_buf[4] = 0xEB;
  331. can_buf[5] = 0x00;
  332. can_buf[6] = 0x00;
  333. for(uint8_t i = 1; i < 7; i++)
  334. {
  335. can_buf[7] += can_buf[i];
  336. }
  337. if(send_interval == 1)
  338. {
  339. can_send_msg_normalstd(can_buf, 8, 0xFA);
  340. send_interval = 2;
  341. }
  342. can_buf[7] = 0;
  343. //软件版本
  344. can_buf[0] = 0xfa;
  345. can_buf[1] = 0x10;
  346. can_buf[2] = 0x00;
  347. can_buf[3] = 0xB2;
  348. can_buf[4] = 0xEC;
  349. can_buf[5] = 0x00;
  350. can_buf[6] = 0x00;
  351. for(uint8_t i = 1; i < 7; i++)
  352. {
  353. can_buf[7] += can_buf[i];
  354. }
  355. if(send_interval == 2)
  356. {
  357. can_send_msg_normalstd(can_buf, 8, 0xFA);
  358. send_interval = 0;
  359. }
  360. can_buf[7] = 0;
  361. flow_mimo2.get_k_count++;
  362. }
  363. //设置流量计K
  364. if(flow_mimo1.send_k_count > 0 && Dev.Flow_Link1.connect_status == COMP_NORMAL )
  365. {
  366. can_buf[0] = 0xfa;
  367. can_buf[1] = 0x10;
  368. can_buf[2] = 0x00;
  369. can_buf[3] = 0xB1;
  370. can_buf[4] = 0xC1;
  371. can_buf[5] = flow_mimo1.flow_calk >> 8;
  372. can_buf[6] = flow_mimo1.flow_calk;
  373. can_buf[7] = 0;
  374. for(uint8_t i = 1; i < 7; i++)
  375. {
  376. can_buf[7] += can_buf[i];
  377. }
  378. flow_mimo1.send_k_count--;
  379. can_send_msg_normalstd(can_buf, 8, 0xFA);
  380. HAL_Delay(5);
  381. }
  382. else if(flow_mimo2.send_k_count > 0 && Dev.Flow_Link2.connect_status == COMP_NORMAL)
  383. {
  384. can_buf[0] = 0xfa;
  385. can_buf[1] = 0x10;
  386. can_buf[2] = 0x01;
  387. can_buf[3] = 0xB1;
  388. can_buf[4] = 0xC1;
  389. can_buf[5] = flow_mimo2.flow_calk >> 8;
  390. can_buf[6] = flow_mimo2.flow_calk;
  391. can_buf[7] = 0;
  392. for(uint8_t i = 1; i < 7; i++)
  393. {
  394. can_buf[7] += can_buf[i];
  395. }
  396. flow_mimo2.send_k_count--;
  397. can_send_msg_normalstd(can_buf, 8, 0xFA);
  398. }
  399. if(flow_inf.ch1.clear_background == true)
  400. {
  401. can_buf[0] = 0xfa;
  402. can_buf[1] = 0x10;
  403. can_buf[2] = 0x00;
  404. can_buf[3] = 0xB2;
  405. can_buf[4] = 0xE2;
  406. can_buf[5] = 0;
  407. can_buf[6] = 0;
  408. can_buf[7] = 0;
  409. for(uint8_t i = 1; i < 7; i++)
  410. {
  411. can_buf[7] += can_buf[i];
  412. }
  413. can_send_msg_normalstd(can_buf, 8, 0xFA);
  414. }
  415. else if(flow_inf.ch2.clear_background == true)
  416. {
  417. can_buf[0] = 0xfa;
  418. can_buf[1] = 0x10;
  419. can_buf[2] = 0x01;
  420. can_buf[3] = 0xB2;
  421. can_buf[4] = 0xE2;
  422. can_buf[5] = 0;
  423. can_buf[6] = 0;
  424. can_buf[7] = 0;
  425. for(uint8_t i = 1; i < 7; i++)
  426. {
  427. can_buf[7] += can_buf[i];
  428. }
  429. can_send_msg_normalstd(can_buf, 8, 0xFA);
  430. }
  431. }
  432. }
  433. /**
  434. * @file get_seed_version_and_sn
  435. * @brief 获取播撒器版本和SN号
  436. * @param none
  437. * @details
  438. * @author Zhang Sir
  439. **/
  440. void get_seed_version_and_sn(void)
  441. {
  442. static uint8_t get_counts = 5;
  443. uint8_t can_buf[8] = {0};
  444. if(Dev.Weight_Link.connect_status == COMP_NORMAL && Dev.Weight.facid == FAC_VK && get_counts > 0)
  445. {
  446. can_buf[0] = 0xF6;
  447. can_buf[5] = 0xFE;
  448. can_buf[6] = 0xFE;
  449. can_send_msg_normal(&can_buf[0], 8, 0x81321);
  450. get_counts--;
  451. }
  452. if( dev_weight.regist.sn == false &&Dev.Weight_Link.connect_status == COMP_NORMAL && Dev.Weight.facid == FAC_LIFTWEIGHT)
  453. {
  454. put_date_to_can(can_buf,0xF3,0,0,0,0,0xF1,0xF3,0 );
  455. can_send_msg_normal(&can_buf[0], 8, 0X88BB);
  456. }
  457. else if(dev_weight.regist.soft == false && Dev.Weight_Link.connect_status == COMP_NORMAL && Dev.Weight.facid == FAC_LIFTWEIGHT)
  458. {
  459. put_date_to_can(can_buf,0xF4,0,0,0,0,0xF1,0xF3,0 );
  460. can_send_msg_normal(&can_buf[0], 8, 0X88BB);
  461. }
  462. else if(weight_runing_time == false && Dev.Weight_Link.connect_status == COMP_NORMAL && Dev.Weight.facid == FAC_LIFTWEIGHT)
  463. {
  464. put_date_to_can(can_buf,0xF5,0,0,0,0,0xF1,0xF3,0 );
  465. can_send_msg_normal(&can_buf[0], 8, 0X88BB);
  466. }
  467. }
  468. /**
  469. * @file get_device_version_and_sn
  470. * @brief 版本号
  471. * @param none
  472. * @details
  473. * @author Zhang Sir
  474. **/
  475. void get_device_version_and_sn(void)
  476. {
  477. static uint32_t circu_time = 0;
  478. if(Check_Timer_Ready(&circu_time,_2_HZ_))
  479. {
  480. //获取雷达版本和SN号
  481. get_radar_version_and_sn();
  482. //获取流量计版本和SN号
  483. get_flowmeter_version_and_sn();
  484. //获取播撒器称重版本和SN号
  485. get_seed_version_and_sn();
  486. }
  487. }
  488. /**
  489. * @file regist_dev_info
  490. * @brief 注册设备信息
  491. * @param none
  492. * @details
  493. * @author Zhang Sir
  494. **/
  495. void regist_dev_info(dev_version_content *dev,uint8_t num,bool verify_flag,char *sn,uint8_t size1,
  496. char *soft_serial,uint8_t size2,char *hard_serial,uint8_t size3,char *manu,uint8_t size4)
  497. {
  498. dev->num = num;
  499. dev->verify = verify_flag;
  500. if(dev->regist.dev == false)
  501. {
  502. dev->regist.dev = true;
  503. dev->send_times++;
  504. }
  505. if(sn != NULL && size1 <= 32 && dev->regist.sn == false)
  506. {
  507. memcpy(dev->sn,sn,size1);
  508. dev->regist.sn = true;
  509. dev->send_times++;
  510. }
  511. if(soft_serial != NULL && size2 <= 16 && dev->regist.soft == false)
  512. {
  513. memcpy(dev->soft_serial,soft_serial,size2);
  514. dev->regist.soft = true;
  515. dev->send_times++;
  516. }
  517. if(hard_serial != NULL && size3 <= 16 && dev->regist.hard == false)
  518. {
  519. memcpy(dev->hard_serial,hard_serial,size3);
  520. dev->regist.hard = true;
  521. dev->send_times++;
  522. }
  523. if(manu != NULL && size4 <= 16 && dev->regist.manu == false)
  524. {
  525. memcpy(dev->manu,manu,size4);
  526. dev->regist.manu = true;
  527. dev->send_times++;
  528. }
  529. };