soft_seed_weight.c 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712
  1. #include "soft_seed_weight.h"
  2. #include "soft_device.h"
  3. #include "common.h"
  4. #include "string.h"
  5. #include "soft_can.h"
  6. #include "usart_data_handle.h"
  7. #include "main_task.h"
  8. #include "soft_update.h"
  9. #include "soft_version.h"
  10. #include "soft_water.h"
  11. #include "config.h"
  12. Spread_par spread_par;
  13. weight weight_vkinfo;
  14. uint8_t weight_type = 0;
  15. uint8_t spread_type = 0;
  16. /**
  17. * @file Eft_Spread_And_Mimolack_recieved_hookfuction
  18. * @brief eft播撒器带恩曌断料记
  19. * @param none
  20. * @details
  21. * @author Zhang Sir
  22. **/
  23. eft eft_info;
  24. _mimo_lackloss mimo_lackloss;
  25. void Eft_Spread_And_Mimolack_recieved_hookfuction(uint32_t CanID, uint8_t data[], uint8_t len)
  26. {
  27. switch (CanID)
  28. {
  29. //播撒器
  30. case CAN_EFT_SPREAD:
  31. if(spread_type == SPREAD_DEFAULT)
  32. spread_type = SPREAD_NORMAL;
  33. //eft是大端
  34. eft_info.valve_angel = data[0];
  35. eft_info.warn_status = data[1];
  36. eft_info.can_enable = data[2];
  37. eft_info.speed_rpm = data[5];
  38. Dev.Seed_Link.connect_status = COMP_NORMAL;
  39. Dev.Seed.facid = FAC_EFT;
  40. Dev.Seed_Link.recv_time = HAL_GetTick();
  41. break;
  42. case CAN_EFT_VERSION:
  43. if(data[5] == 0xF1 && data[6] == 0xF3)
  44. {
  45. switch (data[0])
  46. {
  47. case 0XF8:
  48. for(uint8_t i = 0;i < 3;i++)
  49. {
  50. dev_spreader.sn[2 * i] = ((data[2+i] >> 4) & 0xf) + '0';
  51. dev_spreader.sn[2 * i + 1] = (data[2+i] & 0xf )+ '0';
  52. }
  53. dev_spreader.sn[6] = ((data[7] >> 4) & 0xf) + '0';
  54. dev_spreader.sn[7] = (data[7] & 0xf )+ '0';
  55. regist_dev_info(&dev_spreader,DEVICE_SPREAD,false,dev_spreader.sn,8,NULL,0,NULL,0,"eftspreader",12);
  56. break;
  57. case 0XF9:
  58. for (uint8_t i = 1; i < 5; i++)
  59. {
  60. if(data[i] < 10)
  61. {
  62. dev_spreader.soft_serial[2 * (i - 1)] = '0';
  63. Int2String(data[i],&dev_spreader.soft_serial[2 * (i - 1) + 1],1);
  64. }
  65. else
  66. {
  67. Int2String(data[i],&dev_spreader.soft_serial[ (i - 1) * 2],2);
  68. }
  69. }
  70. regist_dev_info(&dev_spreader,DEVICE_SPREAD,false,NULL,0,dev_spreader.soft_serial,8,NULL,0,"eftspreader",12);
  71. break;
  72. case 0XFB:
  73. Dev.Seed.runtime = data[1] + (data[2] + data[3] * 256) * 60;
  74. spreader_runing_time = true;
  75. break;
  76. default:
  77. break;
  78. }
  79. }
  80. break;
  81. case CAN_MIMO_LACKLOSS:
  82. if(data[0] == 0x03)
  83. {
  84. Dev.Lackloss_Link.connect_status = COMP_NORMAL;
  85. Dev.Lackloss_Link.recv_time = HAL_GetTick();
  86. mimo_lackloss.distance = data[2] + data[1] * 256;
  87. mimo_lackloss.strength = data[4] + data[3] * 256;
  88. mimo_lackloss.status = data[7];
  89. }
  90. break;
  91. default:
  92. break;
  93. }
  94. }
  95. /**
  96. * @file can_recv_eft_front_plate
  97. * @brief eftz20前板
  98. * @param none
  99. * @details
  100. * @author Zhang Sir
  101. **/
  102. eft_fplate fplate;
  103. Connect_check z20_fplate_link;
  104. bool Z70_LiftingWeight_exist = false;
  105. void can_recv_eft_front_plate(uint32_t CanID, uint8_t data[], uint8_t len)
  106. {
  107. switch (CanID)
  108. {
  109. case CAN_EFT_FPLATE:
  110. if(weight_type == WEIGHT_DEFAULT)
  111. weight_type = WEIGHT_FPLATE;
  112. if(weight_type == WEIGHT_FPLATE)
  113. {
  114. memcpy(&fplate,&data[0],sizeof(eft_fplate));
  115. Dev.Weight_Link.connect_status = COMP_NORMAL;
  116. Dev.Weight.facid = FAC_EFT;
  117. Dev.Weight_Link.recv_time = HAL_GetTick();
  118. Dev.Temperature_Sensor_Link.connect_status = COMP_NORMAL;
  119. Dev.Temperature_Sensor.facid = FAC_EFT;
  120. Dev.Temperature_Sensor_Link.recv_time = HAL_GetTick();
  121. }
  122. Dev.Arm_Link.connect_status = COMP_NORMAL;
  123. Dev.Arm.facid = FAC_EFT;
  124. Dev.Arm_Link.recv_time = HAL_GetTick();
  125. break;
  126. case CAN_EFT_FPLATE_ACK:
  127. switch (data[0])
  128. {
  129. //LED控制ACK指令
  130. case 0xE1:
  131. last_light_brightness = pmu_pin.aux_light;
  132. break;
  133. //版本信息
  134. case 0xE2:
  135. for (uint8_t i = 1; i < 5; i++)
  136. {
  137. if(data[i] < 10)
  138. {
  139. dev_weight.soft_serial[2 * (i - 1)] = '0';
  140. Int2String(data[i],&dev_weight.soft_serial[2 * (i - 1) + 1],1);
  141. }
  142. else
  143. {
  144. Int2String(data[i],&dev_weight.soft_serial[ (i - 1) * 2],2);
  145. }
  146. }
  147. regist_dev_info(&dev_weight,DEVICE_WEIGHT,false,NULL,0,dev_weight.soft_serial,8,NULL,0,"eftweight",10);
  148. break;
  149. //序列号
  150. case 0xE3:
  151. for(uint8_t i = 0;i < 3;i++)
  152. {
  153. dev_weight.sn[2 * i] = ((data[2+i] >> 4) & 0xf) + '0';
  154. dev_weight.sn[2 * i + 1] = (data[2+i] & 0xf )+ '0';
  155. }
  156. dev_weight.sn[6] = ((data[7] >> 4) & 0xf) + '0';
  157. dev_weight.sn[7] = (data[7] & 0xf )+ '0';
  158. regist_dev_info(&dev_weight,DEVICE_WEIGHT,false,dev_weight.sn,8,NULL,0,NULL,0,"eftweight",10);
  159. break;
  160. //运行时间
  161. case 0xE4:
  162. Dev.Weight.runtime = data[1] + (data[2] + data[3] * 256) * 60;
  163. weight_runing_time = true;
  164. break;
  165. //设置波特率ACK
  166. case 0xF4:
  167. break;
  168. //去皮校准
  169. case 0xF6:
  170. pmu_set_ack(_MSGID_SET,25,Cal_Remove_Peel,0);
  171. break;
  172. //重量校准
  173. case 0xF7:
  174. pmu_set_ack(_MSGID_SET,25,Cal_Weight,0);
  175. break;
  176. case 0xEB:
  177. eft_dev_update_wait_ereseflash(data);
  178. break;
  179. //K值校准
  180. case 0xFC:
  181. eft_info.seed_k[weight_order.order_con1 - 1] = weight_order.order_con2;
  182. pmu_set_ack(_MSGID_SET,MSGID_SET_WEIGHT_K,0,0);
  183. break;
  184. //K值查询
  185. case 0xFD:
  186. memcpy(&eft_info.seed_k[0],&data[1],2);
  187. memcpy(&eft_info.seed_k[1],&data[3],2);
  188. memcpy(&eft_info.seed_k[2],&data[6],2);
  189. weight_init_eft.step.read_k_flag = 0;
  190. break;
  191. default:
  192. break;
  193. }
  194. break;
  195. default:
  196. break;
  197. }
  198. }
  199. /**
  200. * @file seed_init_send_info
  201. * @brief 播撒器初始化
  202. * @param
  203. * @details
  204. * @author Zhang Sir
  205. **/
  206. Dev_weight_init weight_init_eft = {.step.read_k_flag = 1};
  207. Dev_weight_init weight_init_vk = {.step.dose_rate_flag = 1,
  208. .step.weight_mode_flag = 1,
  209. .step.read_k_flag = 1,
  210. .step.fac_num_flag = 1};
  211. void seed_init_send_info(uint8_t device_type,char *factory)
  212. {
  213. uint8_t vk_canbuf[8] = {0,0,0,0,0,0XFE,0XFE,0};
  214. static uint8_t spread_init_count = 10;
  215. int vk_can_id = 0;
  216. if(strcmp(factory,"VK") == 0)
  217. {
  218. switch (device_type)
  219. {
  220. //称重
  221. case WEIGHT_DEVICE:
  222. vk_can_id = 0x81321;
  223. if(weight_init_vk.status != 0)
  224. {
  225. if(weight_init_vk.step.read_k_flag != 0)
  226. {
  227. vk_canbuf[0] = 0xE1;
  228. }
  229. else if(weight_init_vk.step.fac_num_flag != 0 && weight_init_count > 0)
  230. {
  231. vk_canbuf[0] = 0xF7;
  232. weight_init_count--;
  233. if(weight_init_count == 0)
  234. {
  235. weight_init_count = 10;
  236. weight_init_vk.step.fac_num_flag = 0;
  237. }
  238. }
  239. else if (weight_init_vk.step.weight_mode_flag != 0 && weight_init_count > 0)
  240. {
  241. vk_canbuf[0] = 0xE3;
  242. weight_init_count--;
  243. if(weight_init_count == 0)
  244. {
  245. weight_init_count = 10;
  246. weight_init_vk.step.weight_mode_flag = 0;
  247. }
  248. }
  249. else if (weight_init_vk.step.dose_rate_flag != 0 && weight_init_count > 0)
  250. {
  251. vk_canbuf[0] = 0xE5;
  252. weight_init_count--;
  253. if(weight_init_count == 0)
  254. {
  255. weight_init_count = 10;
  256. weight_init_vk.step.dose_rate_flag = 0;
  257. }
  258. }
  259. Can_Send_Msg_Func(CANID2, vk_canbuf, 8, vk_can_id, CAN_ID_EXT);
  260. }
  261. break;
  262. //播撒
  263. case SEED_DEVICE:
  264. vk_can_id = 0x81324;
  265. if(spread_init_count > 0)
  266. {
  267. //获取厂家信息
  268. vk_canbuf[0] = 0xf7;
  269. spread_init_count--;
  270. Can_Send_Msg_Func(CANID2, vk_canbuf, 8, vk_can_id, CAN_ID_EXT);
  271. }
  272. break;
  273. default:
  274. break;
  275. }
  276. }
  277. else if (strcmp(factory,"EFT") == 0)
  278. {
  279. switch (device_type)
  280. {
  281. case WEIGHT_DEVICE:
  282. if(weight_init_eft.status != 0)
  283. {
  284. if(weight_init_eft.step.read_k_flag != 0)
  285. {
  286. if(weight_type == WEIGHT_NORMAL || weight_type == WEIGHT_FPLATE)
  287. {
  288. vk_can_id = 0x8877;
  289. vk_canbuf[0] = 0xFD;
  290. vk_canbuf[5] = 0xf1;
  291. vk_canbuf[6] = 0xf3;
  292. Can_Send_Msg_Func(CANID1, vk_canbuf, 8, vk_can_id, CAN_ID_EXT);
  293. }
  294. else if(weight_type == WEIGHT_TRANFER)
  295. {
  296. vk_can_id = 0x7011;
  297. vk_canbuf[0] = 0xE4;
  298. vk_canbuf[5] = 0xf1;
  299. vk_canbuf[6] = 0xf3;
  300. Can_Send_Msg_Func(CANID2, vk_canbuf, 8, 0x7011, CAN_ID_EXT);
  301. }
  302. }
  303. }
  304. break;
  305. case SEED_DEVICE:
  306. if(seed_init.status != 0)
  307. {
  308. if(seed_init.step.sn_flag != 0)
  309. {
  310. }
  311. else if(seed_init.step.version_flag != 0)
  312. {
  313. }
  314. //Can_Send_Msg_Func(CANID1, vk_canbuf, 8, vk_can_id, CAN_ID_EXT);
  315. }
  316. break;
  317. default:
  318. break;
  319. }
  320. }
  321. }
  322. /**
  323. * @file Set_Seed_Weight_Par
  324. * @brief 设置称重播撒参数
  325. * @param 1 称重
  326. 2 播撒
  327. * @details
  328. * @author Zhang Sir
  329. **/
  330. seed seed_vkinfo;
  331. void Set_Seed_Weight_Par(uint8_t device_type,char *factory)
  332. {
  333. uint8_t can_buf[8] = {0};
  334. uint32_t can_id = 0;
  335. if(strcmp(factory,"VK") == 0)
  336. {
  337. switch (device_type)
  338. {
  339. case WEIGHT_DEVICE:
  340. if(weight_order.type != 0)
  341. {
  342. can_buf[1] = 0x00; //D1 - D4
  343. can_buf[2] = 0x00;
  344. can_buf[3] = 0x00;
  345. can_buf[4] = 0x00;
  346. can_buf[5] = 0xFE;
  347. can_buf[6] = 0xFE;
  348. can_buf[7] = 0x00; //D5
  349. switch (weight_order.type)
  350. {
  351. //去皮校准
  352. case Weight_Peer:
  353. can_buf[0] = 0xF1;
  354. break;
  355. //重量校准
  356. case Weight_Kg:
  357. can_buf[0] = 0xF2;
  358. memcpy(&can_buf[1], &weight_order.order_con2,2);
  359. break;
  360. case Weight_Reserve:
  361. break;
  362. //恢复出厂设置
  363. case Weight_Bcak:
  364. can_buf[0] = 0xF4;
  365. break;
  366. //称重传感器K值
  367. case Weight_Set_K:
  368. can_buf[0] = 0xE2;
  369. can_buf[1] = weight_order.order_con2 & 0xff;
  370. can_buf[2] = (weight_order.order_con2 >> 8) & 0xff;
  371. can_buf[7] = weight_order.order_con1 - 1; //VK协议传感器编号是0-3
  372. break;
  373. //称重传感器模式
  374. case Weight_Mode:
  375. can_buf[0] = 0xE4;
  376. can_buf[1] = weight_order.order_con1 & 0xff;
  377. break;
  378. //最高下药率
  379. case Weight_Drug_Rate:
  380. can_buf[0] = 0xE6;
  381. can_buf[1] = weight_order.order_con1 & 0xff;
  382. can_buf[2] = (weight_order.order_con1 >> 8) & 0xff;
  383. break;
  384. default:
  385. break;
  386. }
  387. Can_Send_Msg_Func(CANID2, can_buf, 8, 0x81321, CAN_ID_EXT);
  388. weight_order.type = 0;
  389. }
  390. break;
  391. case SEED_DEVICE:
  392. //更换信号输出方式 0 PWM 1 CAN
  393. if((seed_vkinfo.output != spread_par.output_mode) && recv_fmu_seed_info == true)
  394. {
  395. can_buf[0] = 0xF2;
  396. can_buf[1] = spread_par.output_mode;
  397. can_buf[2] = 0x00;
  398. can_buf[3] = 0x00;
  399. can_buf[4] = 0x00;
  400. can_buf[5] = 0xFE;
  401. can_buf[6] = 0xFE;
  402. can_buf[7] = 0;
  403. Can_Send_Msg_Func(CANID2, can_buf, 8, 0x81324, CAN_ID_EXT);
  404. }
  405. break;
  406. default:
  407. break;
  408. }
  409. }
  410. else if (strcmp(factory,"EFT") == 0)
  411. {
  412. switch (device_type)
  413. {
  414. case SEED_DEVICE:
  415. //更换信号输出方式 0 PWM 1 CAN
  416. if((eft_info.can_enable != spread_par.output_mode) && recv_fmu_seed_info == true)
  417. {
  418. can_buf[0] = 0xF2;
  419. can_buf[1] = spread_par.output_mode;
  420. can_buf[2] = 0x00;
  421. can_buf[3] = 0x00;
  422. can_buf[4] = 0x00;
  423. can_buf[5] = 0xf1;
  424. can_buf[6] = 0xf3;
  425. can_buf[7] = 0;
  426. Can_Send_Msg_Func(CANID2, can_buf, 8, SEND_EFT_INFO, CAN_ID_EXT);
  427. HAL_Delay(10);
  428. }
  429. break;
  430. case WEIGHT_DEVICE:
  431. if(weight_order.type != 0)
  432. {
  433. if(weight_type == WEIGHT_NORMAL || weight_type == WEIGHT_FPLATE)
  434. {
  435. can_id = 0x8877;
  436. can_buf[1] = 0x00;
  437. can_buf[2] = 0x00;
  438. can_buf[3] = 0x00;
  439. can_buf[4] = 0x00;
  440. can_buf[5] = 0xf1;
  441. can_buf[6] = 0xf3;
  442. can_buf[7] = 0;
  443. switch (weight_order.type)
  444. {
  445. case Weight_Peer:
  446. can_buf[0] = 0xF6;
  447. break;
  448. case Weight_Kg:
  449. can_buf[0] = 0xF7;
  450. can_buf[1] = (weight_order.order_con2 >> 8) & 0xff;
  451. can_buf[2] = weight_order.order_con2 & 0xff;
  452. break;
  453. case Weight_Reserve:
  454. break;
  455. case Weight_Bcak:
  456. can_buf[0] = 0xF5;
  457. break;
  458. case Weight_Set_K:
  459. can_buf[0] = 0xFC;
  460. can_buf[1] = eft_info.seed_k[0];
  461. can_buf[2] = eft_info.seed_k[0] >> 8;
  462. can_buf[3] = eft_info.seed_k[1];
  463. can_buf[4] = eft_info.seed_k[1] >> 8;
  464. can_buf[6] = eft_info.seed_k[2];
  465. can_buf[7] = eft_info.seed_k[2] >> 8;
  466. if(weight_order.order_con1 == 1)
  467. {
  468. can_buf[1] = weight_order.order_con2;
  469. can_buf[2] = weight_order.order_con2 >> 8;
  470. }
  471. else if(weight_order.order_con1 == 2)
  472. {
  473. can_buf[3] = weight_order.order_con2;
  474. can_buf[4] = weight_order.order_con2 >> 8;
  475. }
  476. else if(weight_order.order_con1 == 3)
  477. {
  478. can_buf[6] = weight_order.order_con2;
  479. can_buf[7] = weight_order.order_con2 >> 8;
  480. }
  481. break;
  482. default:
  483. break;
  484. }
  485. Can_Send_Msg_Func(CANID1, can_buf, 8, can_id, CAN_ID_EXT);
  486. }
  487. else if(weight_type == WEIGHT_TRANFER || weight_type == WEIGHT_LIFT)
  488. {
  489. if(weight_type == WEIGHT_LIFT)
  490. can_id = 0x88BB;
  491. else
  492. can_id = 0x7011;
  493. can_buf[1] = 0x00; //D1 - D4
  494. can_buf[2] = 0x00;
  495. can_buf[3] = 0x00;
  496. can_buf[4] = 0x00;
  497. can_buf[5] = 0xF1;
  498. can_buf[6] = 0xF3;
  499. can_buf[7] = 0x00; //D5
  500. switch (weight_order.type)
  501. {
  502. //去皮校准
  503. case Weight_Peer:
  504. can_buf[0] = 0xE1;
  505. break;
  506. //重量校准
  507. case Weight_Kg:
  508. can_buf[0] = 0xE2;
  509. memcpy(&can_buf[1], &weight_order.order_con2,2);
  510. break;
  511. case Weight_Reserve:
  512. break;
  513. //恢复出厂设置
  514. case Weight_Bcak:
  515. can_buf[0] = 0xF4;
  516. break;
  517. //称重传感器K值
  518. case Weight_Set_K:
  519. z70weight.buf[0] = 0xE3;
  520. if(weight_order.order_con1 == 1)
  521. z70weight.info.k1 = weight_order.order_con2;
  522. else if(weight_order.order_con1 == 2)
  523. z70weight.info.k2 = weight_order.order_con2;
  524. else if(weight_order.order_con1 == 3)
  525. z70weight.info.k3 = weight_order.order_con2;
  526. else if(weight_order.order_con1 == 4)
  527. z70weight.info.k4 = weight_order.order_con2;
  528. memcpy(&can_buf,&z70weight.buf[0],8);
  529. break;
  530. //称重传感器模式
  531. case Weight_Mode:
  532. can_buf[0] = 0xE4;
  533. can_buf[1] = weight_order.order_con1 & 0xff;
  534. break;
  535. //最高下药率
  536. case Weight_Drug_Rate:
  537. can_buf[0] = 0xE6;
  538. can_buf[1] = weight_order.order_con1 & 0xff;
  539. can_buf[2] = (weight_order.order_con1 >> 8) & 0xff;
  540. break;
  541. default:
  542. break;
  543. }
  544. Can_Send_Msg_Func(CANID2, can_buf, 8, can_id, CAN_ID_EXT);
  545. }
  546. HAL_Delay(10);
  547. weight_order.type = 0;
  548. }
  549. break;
  550. default:
  551. break;
  552. }
  553. }
  554. }
  555. /**
  556. * @file can_sendmsg_eft
  557. * @brief 发送信息给EFT
  558. * @param
  559. * @details
  560. * @author Zhang Sir
  561. **/
  562. uint16_t last_light_brightness = 0;
  563. void can_sendmsg_eft(void)
  564. {
  565. static int eft_count = 0;
  566. uint8_t eft_canbuf[8] = {0};
  567. if(Dev.Seed_Link.connect_status == COMP_NORMAL && spread_type == SPREAD_NORMAL)
  568. {
  569. seed_init_send_info(SEED_DEVICE,"EFT");
  570. Set_Seed_Weight_Par(SEED_DEVICE,"EFT");
  571. if(spread_par.output_mode == 1)
  572. {
  573. if(HAL_GetTick() < 5000) //初始化自检
  574. {
  575. spread_par.pwm_turntable = 1000;
  576. spread_par.pwm_valve = 1000;
  577. }
  578. //发送转速 和阀门
  579. eft_canbuf[0] = 0xf1;
  580. eft_canbuf[1] = (spread_par.pwm_turntable >> 8) & 0xff;
  581. eft_canbuf[2] = spread_par.pwm_turntable & 0xff;
  582. eft_canbuf[3] = (spread_par.pwm_valve >> 8) & 0xff;
  583. eft_canbuf[4] = spread_par.pwm_valve & 0xff;
  584. eft_canbuf[5] = 0xf1;
  585. eft_canbuf[6] = 0xf3;
  586. eft_canbuf[7] = eft_count;
  587. Can_Send_Msg_Func(CANID2, eft_canbuf, 8, SEND_EFT_INFO, CAN_ID_EXT);
  588. eft_count++;
  589. if(eft_count >= 256)
  590. {
  591. eft_count = 0;
  592. }
  593. }
  594. }
  595. if(Dev.Weight_Link.connect_status == COMP_NORMAL)
  596. {
  597. seed_init_send_info(WEIGHT_DEVICE,"EFT");
  598. Set_Seed_Weight_Par(WEIGHT_DEVICE,"EFT");
  599. }
  600. if(planep.UAV_type == AG_EFTZ)
  601. {
  602. eft_canbuf[0] = 0xE1;
  603. eft_canbuf[1] = (pmu_pin.aux_light & 0x1) > 0? (planep.lock_status > 3? (pmu_pin.aux_light >> 2 & 0x7f) : 20) : 0;
  604. eft_canbuf[2] = (pmu_pin.aux_light & 0x2) > 0? (planep.lock_status > 3? (pmu_pin.aux_light >> 9 & 0x7f) : 20) : 0;
  605. eft_canbuf[3] = 0;
  606. eft_canbuf[4] = 0;
  607. eft_canbuf[5] = 0xf1;
  608. eft_canbuf[6] = 0;//0xf3;
  609. eft_canbuf[7] = 0;
  610. Can_Send_Msg_Func(CANID1, eft_canbuf, 8, 0x8877, CAN_ID_EXT);
  611. }
  612. }
  613. /**
  614. * @file can_sendmsg_VK
  615. * @brief 播撒常发数据包
  616. * @param
  617. * @details
  618. * @author Zhang Sir
  619. **/
  620. void can_sendmsg_VK(void)
  621. {
  622. static uint8_t vk_count = 0;
  623. uint8_t vk_canbuf[8] = {0};
  624. if(Dev.Weight_Link.connect_status == COMP_NORMAL && (Dev.Weight.facid == FAC_VK ||
  625. Dev.Weight.facid == FAC_QIFEI) && HAL_GetTick() > 3000)
  626. {
  627. seed_init_send_info(WEIGHT_DEVICE,"VK");
  628. Set_Seed_Weight_Par(WEIGHT_DEVICE,"VK");
  629. }
  630. if(Dev.Seed_Link.connect_status == COMP_NORMAL && (Dev.Seed.facid == FAC_VK ||
  631. Dev.Seed.facid == FAC_QIFEI) && HAL_GetTick() > 2000)
  632. {
  633. seed_init_send_info(SEED_DEVICE,"VK");
  634. Set_Seed_Weight_Par(SEED_DEVICE,"VK");
  635. if(spread_par.output_mode == 1 )
  636. {
  637. if(HAL_GetTick() < 5000) //初始化自检
  638. {
  639. spread_par.pwm_turntable = 1000;
  640. spread_par.pwm_valve = 1000;
  641. }
  642. //发送转速 和阀门
  643. vk_canbuf[0] = 0xf1;
  644. vk_canbuf[1] = spread_par.pwm_turntable & 0xff;
  645. vk_canbuf[2] = (spread_par.pwm_turntable >> 8) & 0xff;
  646. vk_canbuf[3] = spread_par.pwm_valve & 0xff;
  647. vk_canbuf[4] = (spread_par.pwm_valve >> 8) & 0xff;
  648. vk_canbuf[5] = 0xfe;
  649. vk_canbuf[6] = 0xfe;
  650. vk_canbuf[7] = vk_count;
  651. vk_count++;
  652. Can_Send_Msg_Func(CANID2, vk_canbuf, 8, 0x81324, CAN_ID_EXT);
  653. }
  654. if(vk_count >= 255)
  655. {
  656. vk_count = 0;
  657. }
  658. }
  659. }