z8359531l 4 mesiacov pred
rodič
commit
d85d72b604

+ 3 - 0
Inc/soft_can.h

@@ -208,6 +208,9 @@ extern Radar Rupdate;
 //飞控发出给防地雷达的信息0x981300
 #define CAN_MSGID_RADAR_VERSION_INFO 0x13
 
+//电目断料计
+#define CAN_MSGID_DM_LACKLOSS 0x18F2AD0B
+
 //前避障雷达发出给飞控的信息
 #define CAN_MSGID_FRADAR_INFO 0x14
 //飞控发出给前避障雷达的信息

+ 16 - 1
Inc/soft_eft.h

@@ -8,6 +8,7 @@
 #define REVE_EFT_ACK    0x8853
 #define REVE_EFT_INFO   0x8852
 #define REVE_EFT_LOW    0x88F1
+#define BMS_LINE_TEMP   0x88AA
 
 #define Cal_Remove_Peel     20
 #define Cal_Weight          21
@@ -20,6 +21,7 @@
 
 void EftCanRecvHookFunction(uint32_t cellCanID, uint8_t data[], uint8_t len);
 void can_sendmsg_eft(void);
+void DMlacklossCanRecvFunction(uint32_t cellCanID, uint8_t data[], uint8_t len);
 
 #pragma pack(1)
 typedef struct {
@@ -43,7 +45,7 @@ typedef struct {
     uint8_t pump2_rpm;     //水泵2转速
     uint8_t cent1_rpm;     //喷头1转速
     uint8_t cent2_rpm;     //喷头1转速
-    uint64_t watering_warn_status; //水泵喷头报警状态
+    uint8_t watering_warn_status; //水泵喷头报警状态
     uint8_t seed_k[3];     //称重传感器K值
 
     char version[2];
@@ -52,6 +54,7 @@ typedef struct {
 #pragma pack()
 extern eft eft_info;
 
+#pragma pack(1)
 typedef struct 
 {
     uint16_t distance;
@@ -59,7 +62,19 @@ typedef struct
     uint8_t status; // 0满 1缺
     uint16_t cal_distance;
 }_mimo_lackloss;
+#pragma pack()
 extern _mimo_lackloss mimo_lackloss;
+extern _mimo_lackloss DM_lackloss;//电目断料计
+
+#pragma pack(1)
+typedef struct 
+{
+    uint8_t facid;
+    int16_t Positive_pole;
+    int16_t Negative_pole;
+}_Temp_sensor;
+#pragma pack()
+extern _Temp_sensor Temp_sensor;
 
 extern short tppwm_value;
 extern short sow_rotate_value;

+ 12 - 2
Inc/soft_p_2_c.h

@@ -79,7 +79,8 @@ enum vklink_MSGID_SET
 	MSGID_SET_RADAR_FB = 29,      // 设置当前雷达前后/恢复出厂 恩曌雷达有效
 	MSGID_SET_LACKLOSS_CAL = 30,  // 断料记校准
 	MSGID_SET_PUMP_ID = 32,       // 设置CAN水泵ID
-	MSGID_SET_PNCANID   = 55,	  //设置EFT水泵电调CAN ID
+	MSGID_SET_PNCANID   = 55,	  // 设置EFT水泵电调CAN ID
+	MSGID_SET_RESIWIRE_BLOWN = 60,// 熔断电阻丝
 	MSGID_SET_FRADAR_SN = 98,     // 设置雷达SN号
 	MSGID_SET_BRADAR_SN = 99,     // 设置雷达SN号
 	MSGID_SET_TRADAR_SN = 100,    // 设置雷达SN号
@@ -114,7 +115,8 @@ typedef enum
 	DEV_PART_RADAR,
 	DEV_PART_FRADAR,
 	DEV_PART_BRADAR,
-	DEV_QQ_BMS
+	DEV_QQ_BMS,
+	DEV_TEMPSENSOR
 } Dev_Type_NUM;
 
 enum LOCK_STATUS
@@ -174,6 +176,14 @@ typedef struct
 	short UAV_type;
 	short thr_pwm;
 	short Candebug_flag; // can调试 0开 1关
+	float QuaterQ0;
+	float QuaterQ1;
+	float QuaterQ2;
+	float QuaterQ3;
+	float pos_x;
+	float pos_y;
+	float pos_z;
+	int	pos_flag;
 } plane_para;
 #pragma pack()
 extern plane_para planep;

+ 8 - 2
Inc/soft_seed_device.h

@@ -1,6 +1,7 @@
 #ifndef _SOFT_SEED_DEVICE_H_
 #define _SOFT_SEED_DEVICE_H_
 #include "common.h"
+#include "soft_eft.h"
 
 void Weight_recieved_hookfuction(uint32_t CanID, uint8_t data[], uint8_t len);
 void update_device_type_data(void);
@@ -53,6 +54,7 @@ typedef struct
     uint16_t senor_k[4];   // 称重传感器K值
     uint8_t mode;          // 称重模式 1播撒 2喷洒
     uint16_t dose_rate;    // 最高下药率 kg/min
+    uint16_t Single_sensor[4];
 } weight;
 #pragma pack()
 extern weight weight_vkinfo;
@@ -105,6 +107,7 @@ enum FACID
     FAC_DM_RB = 28, //DM后避障
 
     FAC_QX_BMS = 30,  //协氢电池
+    FAC_DM_CHECKLOW = 31,//电目断料计
 
 };
 typedef struct
@@ -165,6 +168,8 @@ typedef struct
     uint16_t k4;
     uint16_t warn;
     uint16_t dose_rate;
+    uint16_t run_time;
+    uint16_t single_sensor[4];
 } Weight_info;
 #pragma pack(0)
 
@@ -334,7 +339,8 @@ typedef struct
     Part_Tradar Part_radarT;
     Connect_check Part_Tradar_Link;
 
-
+    _Temp_sensor Temp_sensor;
+    Connect_check Temp_Sensor_Link;
 
 } Device_type;
 extern Device_type Dev;
@@ -364,6 +370,6 @@ enum CalEnum
 void can_sendmsg_VK(void);
 void seed_init_send_info(uint8_t device_type, char *factory);
 void Set_Seed_Weight_Par(uint8_t device_type, char *factory);
-
+void DM_obs_test( void );
 
 #endif

+ 1 - 0
Inc/soft_timer.h

@@ -18,6 +18,7 @@ typedef struct
     bool L_pump1;
     bool L_pump2;
     bool part_radar;
+    bool tempSensor;
 }Dev_timer;
 extern Dev_timer devinfo_time;
 

+ 4 - 2
Inc/soft_version.h

@@ -53,10 +53,11 @@ enum _DEVICE_LIST
     DEVICE_P_TRADAR = 44, //分区仿地雷达
     DEVICE_TR60_F = 45, //EZ 4D避障前
     DEVICE_TR60_B = 46, //EZ 4D避障后
-    DEVICE_H_BMSA = 47, //HYDROGEN氢能源智能电池1
+		 DEVICE_H_BMSA = 47, //HYDROGEN氢能源智能电池1
     DEVICE_H_BMSB = 48, //HYDROGEN氢能源智能电池2
     DEVICE_REMOTEID = 49, //remote id设备
-    
+    DEVICE_TEMP_SENSOR = 50, //温度传感器
+		
     DEVICE_END
 };
 
@@ -97,6 +98,7 @@ extern dev_version_content dev_weight;
 extern dev_version_content dev_flowmeter;
 extern dev_version_content dev_arm;
 extern dev_version_content dev_current;
+extern dev_version_content dev_tempSensor;
 extern void *dev_ptr[];
 void get_device_version_and_sn(void);
 void regist_dev_info(dev_version_content *dev,uint8_t num,bool verify_flag,char *sn,uint8_t size1,

+ 37 - 0
README.md

@@ -0,0 +1,37 @@
+# V9_PMU
+
+#### 介绍
+V9农业飞控的电源管理模块工程
+
+#### 软件架构
+软件架构说明
+
+
+#### 安装教程
+
+1.  xxxx
+2.  xxxx
+3.  xxxx
+
+#### 使用说明
+
+1.  xxxx
+2.  xxxx
+3.  xxxx
+
+#### 参与贡献
+
+1.  Fork 本仓库
+2.  新建 Feat_xxx 分支
+3.  提交代码
+4.  新建 Pull Request
+
+
+#### 特技
+
+1.  使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
+2.  Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
+3.  你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
+4.  [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
+5.  Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
+6.  Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)

+ 2 - 0
Src/main.c

@@ -158,6 +158,8 @@ int main(void)
 
     //更新播撒,称重,水泵,离心喷头,流量计等设备信息
     update_device_type_data(); 
+
+    DM_obs_test();//test 
 //debug test
 #ifdef Debug_Mode
 

+ 385 - 22
Src/soft_bms.c

@@ -44,7 +44,7 @@ void update_bms_data( void )
     //VK电池
     Check_dev_link(&Device1.Vkbms_Link,5000,(char *)&Device1,sizeof(Vkbms_Device));
     Check_dev_link(&Device2.Vkbms_Link,5000,(char *)&Device2,sizeof(Vkbms_Device));
-
+    
     if ( okcell_device1.Okcell_Link.connect_status == COMP_NORMAL || okcell_device2.Okcell_Link.connect_status == COMP_NORMAL )
     {
         Dev.Bms_Link.connect_status = COMP_NORMAL;
@@ -357,7 +357,10 @@ void update_bms_data( void )
 
             //厂家还没加
             if(StrArrayNull( &bms_data.bms_ids[0], sizeof( bms_data.bms_ids ) ) == false && dev_bms1.regist.sn == false)
-                regist_dev_info(&dev_bms1,DEVICE_BMS1,false,(char *)bms_data.bms_ids,32,NULL,0,NULL,0,"vk",3);
+                regist_dev_info(&dev_bms1,DEVICE_BMS1,false,(char *)bms_data.bms_ids,32,NULL,0,NULL,0,NULL,0);
+            if(StrArrayNull( (uint8_t *)&Device1.vk_bms3.bms_company_info[0], sizeof( Device1.vk_bms3.bms_company_info ) ) == false && dev_bms1.regist.manu == false)
+                regist_dev_info(&dev_bms1,DEVICE_BMS1,false,NULL,0,NULL,0,NULL,0,&Device1.vk_bms3.bms_company_info[0],16);
+            
         }
         else
         {
@@ -387,7 +390,10 @@ void update_bms_data( void )
             //     bms_data2.serial_num = 11; //???
             // }
             if(StrArrayNull( &bms_data2.bms_ids[0], sizeof( bms_data2.bms_ids ) ) == false && dev_bms2.regist.sn == false)
-                regist_dev_info(&dev_bms2,DEVICE_BMS2,false,(char *)bms_data2.bms_ids,32,NULL,0,NULL,0,"vk",3);
+                regist_dev_info(&dev_bms2,DEVICE_BMS2,false,(char *)bms_data2.bms_ids,32,NULL,0,NULL,0,NULL,0);
+            if(StrArrayNull( (uint8_t *)&Device2.vk_bms3.bms_company_info[0], sizeof( Device2.vk_bms3.bms_company_info ) ) == false && dev_bms2.regist.manu == false)
+                regist_dev_info(&dev_bms2,DEVICE_BMS2,false,NULL,0,NULL,0,NULL,0,&Device2.vk_bms3.bms_company_info[0],16);
+            
         }
         else
         {
@@ -401,7 +407,7 @@ void update_bms_data( void )
             Dev.Bms_Link.connect_status = COMP_LOST;
             //memset(&bms_data, 0, sizeof(bms_data));
             //状态未置异常
-            bms_data.bms_ss = 0xFFFF;
+            bms_data.bms_ss = 0;
         }
     }
 }
@@ -420,7 +426,6 @@ void send_msg_to_VKbms(void)
     static uint8_t change_dev = 1;
     Vkbms_Device *ptr = NULL;
 
-    //处理 有问题,如果不是同时上电,后上电的电池2无法读取电池设备信息。
     static uint32_t bms_heart_time = 0;;
     unsigned int can_id = 0;
     uint8_t len = 0, msg_id = 0,i = 0;
@@ -521,7 +526,368 @@ void send_msg_to_VKbms(void)
         can_id = msg_id << 20 | 0x7 << 17 | ptr->source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
         can_send_msg_normal(&bms_can_buf[0], 0, can_id);
         bms_heart_time = HAL_GetTick();
-    }    
+    }
+
+
+    // if(Device1.Vkbms_Link.connect_status == COMP_NORMAL || Device2.Vkbms_Link.connect_status == COMP_NORMAL)
+    // {
+    //     static uint8_t bsm_step_num = 6;
+    //     static uint32_t bms_heart_time = 0;;
+    //     unsigned int can_id = 0;
+    //     uint8_t len = 0, msg_id = 0,i = 0;
+    //     uint8_t bms_can_buf[8] = {0};
+    //     uint16_t crc = 0;
+
+    //     //上电握手
+    //     if(Device1.ack_to_bms == true || Device2.ack_to_bms == true)
+    //     {
+    //         msg_id = 0x01;
+
+    //         if(Device1.ack_to_bms == true)
+    //         {
+    //             can_id = msg_id << 20 | 0x7 << 17 | Device1.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //             Device1.ack_to_bms = false;
+    //         }
+    //         else if (Device2.ack_to_bms == true)
+    //         {
+    //             can_id = msg_id << 20 | 0x7 << 17 | Device2.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //             Device2.ack_to_bms = false;
+    //         }
+    //         len = 2;
+    //         bms_can_buf[0] = 0x56;
+    //         bms_can_buf[1] = 0x31;
+    //         can_send_msg_normal(&bms_can_buf[0], len, can_id);
+    //     }
+
+    //     //读取电池信息
+    //     if(bms_step <= 2)
+    //     {
+    //         //上电发送的信息
+    //         switch (bms_step)
+    //         {
+    //         case 0:
+    //             if(bsm_step_num > 0)
+    //             {
+    //                 len = 0;
+    //                 msg_id = 0x03;//canid 4083768 3E5039
+    //                 can_id = msg_id << 20 | 0x7 << 17 | Device1.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //                 can_send_msg_normal(&bms_can_buf[0], len, can_id);
+    //                 if(Device2.Vkbms_Link.connect_status == COMP_NORMAL)
+    //                 {
+    //                     can_id = msg_id << 20 | 0x7 << 17 | Device2.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //                     can_send_msg_normal(&bms_can_buf[0], len, can_id);
+    //                 }
+    //                 bsm_step_num--;
+    //             }
+    //             else
+    //             {
+    //                 bsm_step_num = 5;
+    //                 bms_step = 1; 
+    //             }
+    //             break;
+    //         case 1:
+    //             if(bsm_step_num > 0)
+    //             {
+    //                 len = 0;
+    //                 msg_id = 0x04; //canid 5132344 4E5039
+    //                 can_id = msg_id << 20 | 0x7 << 17 | Device1.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //                 can_send_msg_normal(&bms_can_buf[0], len, can_id);
+    //                 if(Device2.Vkbms_Link.connect_status == COMP_NORMAL)
+    //                 {
+    //                     can_id = msg_id << 20 | 0x7 << 17 | Device2.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //                     can_send_msg_normal(&bms_can_buf[0], len, can_id);
+    //                 }
+    //                 bsm_step_num--;
+    //             }
+    //             else
+    //             {
+    //                 bsm_step_num = 5;
+    //                 bms_step = 2; 
+    //             }
+    //             break;
+    //         case 2:
+    //             if(bsm_step_num > 0)
+    //             {
+    //                 len = 0;
+    //                 msg_id = 0x05;//canid 6180920 5E5039
+    //                 can_id = msg_id << 20 | 0x7 << 17 | Device1.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //                 can_send_msg_normal(&bms_can_buf[0], len, can_id);
+    //                 if(Device2.Vkbms_Link.connect_status == COMP_NORMAL)
+    //                 {
+    //                     can_id = msg_id << 20 | 0x7 << 17 | Device2.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //                     can_send_msg_normal(&bms_can_buf[0], len, can_id);
+    //                 }
+    //                 bsm_step_num--;
+    //             }
+    //             else
+    //             {
+    //                 bsm_step_num = 5;
+    //                 bms_step = 3; 
+    //             }
+    //             break;
+        
+    //         default:
+    //             break;
+    //         }
+    //     }
+    //     //秘钥匹配
+    //     else if(start_msg.key_to_bms == true && bsm_step_num > 0 && bms_step == 3 ) //上个if语句发完再发
+    //     {
+    //         msg_id = 0x07;
+
+    //         crc = Get_Crc16(&start_msg.key_data[0],20);
+
+    //         memcpy(&bms_can_buf[0],&crc,2);
+    //         memcpy(&bms_can_buf[2],&start_msg.key_data[i],6);
+
+    //         can_id = msg_id << 20 | 0x7 << 17 | Device1.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x0 << 3 | 1;
+    //         can_send_msg_normal(&bms_can_buf[0], 8, can_id);
+    //         i += 6;
+            
+    //         can_id = msg_id << 20 | 0x7 << 17 | Device1.source_id << 11 | 0x1 << 5 | 0x0 << 4 | 0x0 << 3 | 2;
+    //         can_send_msg_normal(&start_msg.key_data[i], 8, can_id);
+    //         i += 8;
+
+    //         can_id = msg_id << 20 | 0x7 << 17 | Device1.source_id << 11 | 0x1 << 5 | 0x0 << 4 | 0x1 << 3 | 3;
+    //         can_send_msg_normal(&start_msg.key_data[i], 6, can_id);
+
+    //         bsm_step_num--;
+    //         if(bsm_step_num == 0)
+    //         {
+    //             bsm_step_num = 5;
+    //             bms_step = 4; 
+    //         }
+    //     }
+    //     //开启mos
+    //     else if(start_msg.mos_status == true && bsm_step_num > 0 && (bms_step == 4 || start_msg.mos_status == true))
+    //     {
+    //         msg_id = 0x08;
+
+    //         can_id = msg_id << 20 | 0x7 << 17 | Device1.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //         bms_can_buf[0] = 0x01;
+    //         can_send_msg_normal(&bms_can_buf[0], 1, can_id);
+    //         bsm_step_num--;
+    //     }
+    //     else if(utc_time != 0 && utc_send_time > 0 )
+    //     {
+    //         msg_id = 0x09;
+    //         can_id = msg_id << 20 | 0x7 << 17 | Device1.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //         memcpy(&bms_can_buf[0],&utc_time,4);
+    //         can_send_msg_normal(&bms_can_buf[0], 4, can_id);
+    //         if(Device2.Vkbms_Link.connect_status == COMP_NORMAL)
+    //         {
+    //             can_id = msg_id << 20 | 0x7 << 17 | Device2.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //             can_send_msg_normal(&bms_can_buf[0], 4, can_id);
+    //         }
+    //         utc_send_time--;
+    //     }
+    //     else if(HAL_GetTick() - bms_heart_time > 1000)//实时信息应答包
+    //     {
+    //         msg_id = 0x02;
+    //         can_id = msg_id << 20 | 0x7 << 17 | Device1.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //         can_send_msg_normal(&bms_can_buf[0], 0, can_id);
+    //         if(Device2.Vkbms_Link.connect_status == COMP_NORMAL)
+    //         {
+    //             can_id = msg_id << 20 | 0x7 << 17 | Device2.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //             can_send_msg_normal(&bms_can_buf[0], 0, can_id);
+    //         }
+    //         bms_heart_time = HAL_GetTick();
+    //     }
+    // }
+    //开启mos
+    // else if(start_msg.mos_status == true)
+    // {
+    //     msg_id = 0x08;
+
+    //     can_id = msg_id << 20 | 0x7 << 17 | ptr->source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //     bms_can_buf[0] = 0x01;
+    //     can_send_msg_normal(&bms_can_buf[0], 1, can_id);
+    // }
+    // else if(utc_time != 0 && utc_send_time > 0 )
+    // {
+    //     msg_id = 0x09;
+    //     can_id = msg_id << 20 | 0x7 << 17 | ptr->source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //     memcpy(&bms_can_buf[0],&utc_time,4);
+    //     can_send_msg_normal(&bms_can_buf[0], 4, can_id);
+
+    //     utc_send_time--;
+    // }
+    // else if(HAL_GetTick() - bms_heart_time > 500)//实时信息应答包
+    // {
+    //     msg_id = 0x02;
+    //     can_id = msg_id << 20 | 0x7 << 17 | ptr->source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //     can_send_msg_normal(&bms_can_buf[0], 0, can_id);
+    //     bms_heart_time = HAL_GetTick();
+    // }
+
+
+    // if(Device1.Vkbms_Link.connect_status == COMP_NORMAL || Device2.Vkbms_Link.connect_status == COMP_NORMAL)
+    // {
+    //     static uint8_t bsm_step_num = 6;
+    //     static uint32_t bms_heart_time = 0;;
+    //     unsigned int can_id = 0;
+    //     uint8_t len = 0, msg_id = 0,i = 0;
+    //     uint8_t bms_can_buf[8] = {0};
+    //     uint16_t crc = 0;
+
+    //     //上电握手
+    //     if(Device1.ack_to_bms == true || Device2.ack_to_bms == true)
+    //     {
+    //         msg_id = 0x01;
+
+    //         if(Device1.ack_to_bms == true)
+    //         {
+    //             can_id = msg_id << 20 | 0x7 << 17 | Device1.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //             Device1.ack_to_bms = false;
+    //         }
+    //         else if (Device2.ack_to_bms == true)
+    //         {
+    //             can_id = msg_id << 20 | 0x7 << 17 | Device2.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //             Device2.ack_to_bms = false;
+    //         }
+    //         len = 2;
+    //         bms_can_buf[0] = 0x56;
+    //         bms_can_buf[1] = 0x31;
+    //         can_send_msg_normal(&bms_can_buf[0], len, can_id);
+    //     }
+
+    //     //读取电池信息
+    //     if(bms_step <= 2)
+    //     {
+    //         //上电发送的信息
+    //         switch (bms_step)
+    //         {
+    //         case 0:
+    //             if(bsm_step_num > 0)
+    //             {
+    //                 len = 0;
+    //                 msg_id = 0x03;//canid 4083768 3E5039
+    //                 can_id = msg_id << 20 | 0x7 << 17 | Device1.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //                 can_send_msg_normal(&bms_can_buf[0], len, can_id);
+    //                 if(Device2.Vkbms_Link.connect_status == COMP_NORMAL)
+    //                 {
+    //                     can_id = msg_id << 20 | 0x7 << 17 | Device2.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //                     can_send_msg_normal(&bms_can_buf[0], len, can_id);
+    //                 }
+    //                 bsm_step_num--;
+    //             }
+    //             else
+    //             {
+    //                 bsm_step_num = 5;
+    //                 bms_step = 1; 
+    //             }
+    //             break;
+    //         case 1:
+    //             if(bsm_step_num > 0)
+    //             {
+    //                 len = 0;
+    //                 msg_id = 0x04; //canid 5132344 4E5039
+    //                 can_id = msg_id << 20 | 0x7 << 17 | Device1.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //                 can_send_msg_normal(&bms_can_buf[0], len, can_id);
+    //                 if(Device2.Vkbms_Link.connect_status == COMP_NORMAL)
+    //                 {
+    //                     can_id = msg_id << 20 | 0x7 << 17 | Device2.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //                     can_send_msg_normal(&bms_can_buf[0], len, can_id);
+    //                 }
+    //                 bsm_step_num--;
+    //             }
+    //             else
+    //             {
+    //                 bsm_step_num = 5;
+    //                 bms_step = 2; 
+    //             }
+    //             break;
+    //         case 2:
+    //             if(bsm_step_num > 0)
+    //             {
+    //                 len = 0;
+    //                 msg_id = 0x05;//canid 6180920 5E5039
+    //                 can_id = msg_id << 20 | 0x7 << 17 | Device1.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //                 can_send_msg_normal(&bms_can_buf[0], len, can_id);
+    //                 if(Device2.Vkbms_Link.connect_status == COMP_NORMAL)
+    //                 {
+    //                     can_id = msg_id << 20 | 0x7 << 17 | Device2.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //                     can_send_msg_normal(&bms_can_buf[0], len, can_id);
+    //                 }
+    //                 bsm_step_num--;
+    //             }
+    //             else
+    //             {
+    //                 bsm_step_num = 5;
+    //                 bms_step = 3; 
+    //             }
+    //             break;
+        
+    //         default:
+    //             break;
+    //         }
+    //     }
+    //     //秘钥匹配
+    //     else if(start_msg.key_to_bms == true && bsm_step_num > 0 && bms_step == 3 ) //上个if语句发完再发
+    //     {
+    //         msg_id = 0x07;
+
+    //         crc = Get_Crc16(&start_msg.key_data[0],20);
+
+    //         memcpy(&bms_can_buf[0],&crc,2);
+    //         memcpy(&bms_can_buf[2],&start_msg.key_data[i],6);
+
+    //         can_id = msg_id << 20 | 0x7 << 17 | Device1.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x0 << 3 | 1;
+    //         can_send_msg_normal(&bms_can_buf[0], 8, can_id);
+    //         i += 6;
+            
+    //         can_id = msg_id << 20 | 0x7 << 17 | Device1.source_id << 11 | 0x1 << 5 | 0x0 << 4 | 0x0 << 3 | 2;
+    //         can_send_msg_normal(&start_msg.key_data[i], 8, can_id);
+    //         i += 8;
+
+    //         can_id = msg_id << 20 | 0x7 << 17 | Device1.source_id << 11 | 0x1 << 5 | 0x0 << 4 | 0x1 << 3 | 3;
+    //         can_send_msg_normal(&start_msg.key_data[i], 6, can_id);
+
+    //         bsm_step_num--;
+    //         if(bsm_step_num == 0)
+    //         {
+    //             bsm_step_num = 5;
+    //             bms_step = 4; 
+    //         }
+    //     }
+    //     //开启mos
+    //     else if(start_msg.mos_status == true && bsm_step_num > 0 && (bms_step == 4 || start_msg.mos_status == true))
+    //     {
+    //         msg_id = 0x08;
+
+    //         can_id = msg_id << 20 | 0x7 << 17 | Device1.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //         bms_can_buf[0] = 0x01;
+    //         can_send_msg_normal(&bms_can_buf[0], 1, can_id);
+    //         bsm_step_num--;
+    //     }
+    //     else if(utc_time != 0 && utc_send_time > 0 )
+    //     {
+    //         msg_id = 0x09;
+    //         can_id = msg_id << 20 | 0x7 << 17 | Device1.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //         memcpy(&bms_can_buf[0],&utc_time,4);
+    //         can_send_msg_normal(&bms_can_buf[0], 4, can_id);
+    //         if(Device2.Vkbms_Link.connect_status == COMP_NORMAL)
+    //         {
+    //             can_id = msg_id << 20 | 0x7 << 17 | Device2.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //             can_send_msg_normal(&bms_can_buf[0], 4, can_id);
+    //         }
+    //         utc_send_time--;
+    //     }
+    //     else if(HAL_GetTick() - bms_heart_time > 1000)//实时信息应答包
+    //     {
+    //         msg_id = 0x02;
+    //         can_id = msg_id << 20 | 0x7 << 17 | Device1.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //         can_send_msg_normal(&bms_can_buf[0], 0, can_id);
+    //         if(Device2.Vkbms_Link.connect_status == COMP_NORMAL)
+    //         {
+    //             can_id = msg_id << 20 | 0x7 << 17 | Device2.source_id << 11 | 0x1 << 5 | 0x1 << 4 | 0x1 << 3 | 1;
+    //             can_send_msg_normal(&bms_can_buf[0], 0, can_id);
+    //         }
+    //         bms_heart_time = HAL_GetTick();
+    //     }
+    // }
+        
+    
 }
 
 /**
@@ -548,16 +914,11 @@ void bms_function()
         //给智能电池发送上电信息
         send_msg_to_okcell(); 
         send_msg_to_herewin();
-        send_msg_to_poweramp();
-        send_info_to_Qx();
+        //send_msg_to_poweramp(); 
     }
 }
 
 
-
-#define max(a, b) ((a) > (b) ? (a) : (b))
-#define min(a, b) ((a) < (b) ? (a) : (b))
-
 /**
   * @file    BMSCanRecvHookFunction
   * @brief   VK智能电池协议
@@ -565,8 +926,8 @@ void bms_function()
   * @details 
   * @author  Zhang Sir 
  **/
-// uint16_t bms_test = 0;
-// uint16_t bms_re = 0;
+uint16_t bms_test = 0;
+uint16_t bms_re = 0;
 uint8_t fmu_send_vkbms_msgid = 0;
 void BMSCanRecvHookFunction(uint32_t CanID, uint8_t data[], uint8_t len)
 {
@@ -618,17 +979,20 @@ void BMSCanRecvHookFunction(uint32_t CanID, uint8_t data[], uint8_t len)
     // 中间帧
     else if(Bmspointer->if_mul_frame == true && bms_SOF == 0 && bms_EOF == 0 && pack_msg_id == msg_id)
     {
-        if(Bmspointer->mul_frame_num == frame_num || ( Bmspointer->mul_frame_num == 0 && frame_num == 1)
-                /*&& ((Bmspointer->mul_frame_i + len) <= sizeof(vkbms2))*/ )
+        if(Bmspointer->mul_frame_num == frame_num /*&& ((Bmspointer->mul_frame_i + len) <= sizeof(vkbms2))*/ )
         {
-            memcpy(&Bmspointer->bms_can_buf[Bmspointer->mul_frame_i],&data[0],len);
-
-            if(( Bmspointer->mul_frame_num == 0 && frame_num == 1))
+            if(msg_id == 0x03)
             {
-                Bmspointer->mul_frame_num++;
+                msg_id = 0x03;
             }
+            memcpy(&Bmspointer->bms_can_buf[Bmspointer->mul_frame_i],&data[0],len);
+
             Bmspointer->mul_frame_i += len;
             Bmspointer->mul_frame_num++;
+            if(Bmspointer->mul_frame_num == 8)
+            {
+                Bmspointer->mul_frame_num = 1;
+            }
 
             if(Bmspointer->mul_frame_num >= 8)
             {
@@ -667,8 +1031,7 @@ void BMSCanRecvHookFunction(uint32_t CanID, uint8_t data[], uint8_t len)
     case 0X02:
         if(Bmspointer->recv_mul_freme_complete == true)
         {   
-            //兆源使用两块正方电池有问题,需要进一步排查
-            memcpy(&Bmspointer->vk_bms2.voltage, &Bmspointer->bms_can_buf[2], min( Bmspointer->mul_frame_i - 2,  sizeof(vkbms2)));
+            memcpy(&Bmspointer->vk_bms2.voltage, &Bmspointer->bms_can_buf[2], sizeof(vkbms2));
             Bmspointer->recv_mul_freme_complete = false;
         }
         break; 

+ 3 - 0
Src/soft_can.c

@@ -140,6 +140,9 @@ void Can_decode_data_function(CAN_RxHeaderTypeDef Rxhead)
       case QINGXIE_BMS3_CAN_ID1 ... QINGXIE_BMS3_CAN_ID3:
          QxBmsCanRecvHookFunction(Rxhead.ExtId, RxData, RxHeader.DLC);
          break;
+      case CAN_MSGID_DM_LACKLOSS:
+         DMlacklossCanRecvFunction(Rxhead.ExtId, RxData, RxHeader.DLC);
+         break;
       default:
         //好盈ID基本没有固定位,全检测
         HobbywingCanRecvHookFunction(Rxhead.ExtId, RxData, RxHeader.DLC);

+ 51 - 3
Src/soft_eft.c

@@ -3,6 +3,7 @@
 #include "soft_p_2_c.h"
 #include "string.h"
 #include "soft_seed_device.h"
+#include "soft_version.h"
 
 
 uint8_t seed_output_mode = 1;
@@ -18,8 +19,9 @@ short sow_rotate_value = 1000;
   * @details 
   * @author  Zhang Sir 
  **/
-
+_Temp_sensor Temp_sensor;
 _mimo_lackloss mimo_lackloss;
+_mimo_lackloss DM_lackloss;
 void EftCanRecvHookFunction(uint32_t cellCanID, uint8_t data[], uint8_t len)
 {
     switch (cellCanID)
@@ -111,7 +113,15 @@ void EftCanRecvHookFunction(uint32_t cellCanID, uint8_t data[], uint8_t len)
             break;
         }
         break;
-    
+    case BMS_LINE_TEMP:
+        Temp_sensor.Positive_pole = data[0] * 256 + data[1];
+        Temp_sensor.Negative_pole = data[2] * 256 + data[3];
+
+        Dev.Temp_Sensor_Link.connect_status = COMP_NORMAL;
+        Dev.Temp_sensor.facid = FAC_EFT;
+        Dev.Temp_Sensor_Link.recv_time = HAL_GetTick();
+        regist_dev_info(&dev_tempSensor,DEVICE_TEMP_SENSOR,false,NULL,0,NULL,0,NULL,0,"EFT",4);
+        break;
     default:
         break;
     }
@@ -180,5 +190,43 @@ void can_sendmsg_eft(void)
         can_send_msg_normal((unsigned char *)&eft_canbuf, 8, SEND_EFT_INFO);
     }
 }
-
+void DMlacklossCanRecvFunction(uint32_t cellCanID, uint8_t data[], uint8_t len)//电目断料计接收函数
+{
+    /*if(cellCanID==CAN_MSGID_DM_LACKLOSS)
+    {
+        uint32_t DMLackloss_recvtime=0;
+        Dev.DM_Lackloss_Link.connect_status=COMP_NORMAL;
+        
+        Dev.DM_Lackloss_Link.recv_time = HAL_GetTick();
+
+        DMLackloss_recvtime=Dev.DM_Lackloss_Link.recv_time;
+
+        DM_lackloss.status=(data[0] ^ 1);
+        DM_lackloss.distance=DMLackloss_recvtime & 0xFFFF;
+        DM_lackloss.strength=(DMLackloss_recvtime >> 16) & 0xFFFF;
+    }*/
+    switch (data[0])
+    {
+    case 0XA0:
+        Dev.Checklow.facid = FAC_DM_CHECKLOW;
+        Dev.Lackloss_Link.connect_status= COMP_NORMAL;
+        Dev.Lackloss_Link.recv_time = HAL_GetTick();
+        DM_lackloss.status = 0;
+        break;
+    case 0XA1:
+        Dev.Checklow.facid = FAC_DM_CHECKLOW;
+        Dev.Lackloss_Link.connect_status = COMP_NORMAL;
+        Dev.Lackloss_Link.recv_time = HAL_GetTick();
+        DM_lackloss.status = 1;
+        break;
+    case 0XB0:
+        pmu_set_ack(_MSGID_SET,MSGID_SET_LACKLOSS_CAL,0x01,0x00);
+        break;
+    case 0XB1 ... 0XB2:
+        pmu_set_ack(_MSGID_SET,MSGID_SET_LACKLOSS_CAL,0x02,0x00);
+        break;
+    default:
+        break;
+    }
+}
 

+ 1 - 1
Src/soft_flash.c

@@ -279,7 +279,7 @@ void write_flash_function(void)
 
     if(write_uav_information == true)
     {
-        if(planep.UAV_type != uavinf.uavtype || uavinf.abnormal_outage_flag != 0 || uavinf.reset_reason != reset_reason_temp)
+        if(planep.UAV_type != uavinf.uavtype || uavinf.abnormal_outage_flag != 0  /*uavinf.reset_reason != reset_reason_temp*/)
         {
             uavinf.uavtype = check_flash_par_normal(planep.UAV_type,0,50,0);
             reset_reason_temp = uavinf.reset_reason;

+ 8 - 1
Src/soft_p_2_c.c

@@ -724,6 +724,13 @@ void pmu_to_con_devtype_data(void)
         index += sizeof(Current_info);  
         devinfo_time.current = false;
     }
+    else if(Dev.Temp_Sensor_Link.connect_status == COMP_NORMAL && devinfo_time.tempSensor == true)
+    {
+        msg_buf[index++] = DEV_TEMPSENSOR;
+        memcpy(&msg_buf[index],&Dev.Temp_sensor.facid,sizeof(_Temp_sensor));
+        index += sizeof(_Temp_sensor);  
+        devinfo_time.tempSensor = false;
+    }
     else
     {
         send_flag = false;
@@ -1196,7 +1203,7 @@ void check_fmu_link()
         recv_fmu_data = false;
     }
 
-    Check_Rst();
+    //Check_Rst();
 }
 
 /******************void uart_recv_con_msg()************************

+ 68 - 42
Src/soft_seed_device.c

@@ -39,7 +39,7 @@ void Weight_recieved_hookfuction(uint32_t CanID, uint8_t data[], uint8_t len)
             weight_vkinfo.weight = abs(weight_vkinfo.weight);
         }
 
-        //Dev.Weight_facid = 0;
+        Dev.Weight.facid = FAC_VK;
         Dev.Weight_Link.connect_status = COMP_NORMAL;
         Dev.Weight_Link.recv_time = HAL_GetTick();
 
@@ -64,12 +64,14 @@ void Weight_recieved_hookfuction(uint32_t CanID, uint8_t data[], uint8_t len)
             break;
         case 0xf6:
         {
-            char ver_buf[6] = {0};
+            char ver_buf[8] = {0};
             int ver_temp32 = 0;
             memcpy(&ver_temp32,&data[1],4);
-            Int2String(ver_temp32,ver_buf,6);
-            if(dev_weight.regist.dev == false)
-                regist_dev_info(&dev_weight,DEVICE_WEIGHT,false,NULL,0,(char *)&ver_buf[0],6,NULL,0,"weight",7);
+            Int2String(ver_temp32,&ver_buf[2],6);
+            ver_buf[0] = '0';
+            ver_buf[1] = data[7] + '0';
+
+            regist_dev_info(&dev_weight,DEVICE_WEIGHT,false,NULL,0,(char *)&ver_buf[0],8,NULL,0,"weight",7);
             break;
         }
         //厂家编号
@@ -156,6 +158,9 @@ void Weight_recieved_hookfuction(uint32_t CanID, uint8_t data[], uint8_t len)
             break;
         }
         break;
+    case 0x81326:
+        memcpy(&weight_vkinfo.Single_sensor[0],&data[0],8);
+        break;
     default:
         break;
     }
@@ -589,48 +594,43 @@ void check_dev_type_link(void )
 
 }
 
-void tes_mmm(void )
+void DM_obs_test( void )
 {
-    Dev.Nozzle_Link.connect_status = COMP_NORMAL;
-    Dev.Nozzle_Link.recv_time = HAL_GetTick();
-
-    Dev.Arm_Link.connect_status = COMP_NORMAL;
-    Dev.Arm_Link.recv_time = HAL_GetTick();
-
-    Dev.Pump_Link.connect_status = COMP_NORMAL;
-    Dev.Pump_Link.recv_time = HAL_GetTick();
-
-    Dev.Weight_Link.connect_status = COMP_NORMAL;
-    Dev.Weight_Link.recv_time = HAL_GetTick();
-
-    Dev.Seed_Link.connect_status = COMP_NORMAL;
-    Dev.Seed_Link.recv_time = HAL_GetTick();
+    static uint32_t time_50hz = 0;
+    static uint32_t time_49hz = 0;
+    static uint32_t time_48hz = 0;
+    static uint32_t time_47hz = 0;
+    uint8_t can_buf[8] = {0};
+    if(Check_Timer_Ready(&time_50hz,20))
+    {
+        memcpy(&can_buf[0],&planep.QuaterQ0,4);
+        memcpy(&can_buf[4],&planep.QuaterQ1,4);
+        can_send_msg_normal((unsigned char *)&can_buf, 8, 0x2345);   
+    }
 
+    if(Check_Timer_Ready(&time_49hz,20))
+    {
+        memcpy(&can_buf[0],&planep.QuaterQ2,4);
+        memcpy(&can_buf[4],&planep.QuaterQ3,4);
+        can_send_msg_normal((unsigned char *)&can_buf, 8, 0x2346);
+    }
 
+    if(Check_Timer_Ready(&time_48hz,50))
+    {
+        memcpy(&can_buf[0],&planep.pos_x,4);
+        memcpy(&can_buf[4],&planep.pos_y,4);
+        can_send_msg_normal((unsigned char *)&can_buf, 8, 0x2347);
+    }
 
-    Dev.Flow.speed1 = 5000;
-    Dev.Flow.ml1 = 50000;
-    Dev.Flow.warn1 = 1;
-    
+    if(Check_Timer_Ready(&time_47hz,50))
+    {
+        memcpy(&can_buf[0],&planep.pos_z,4);
+        memcpy(&can_buf[4],&planep.pos_flag,4);
+        can_send_msg_normal((unsigned char *)&can_buf, 8, 0x2348);
+    }
 
-    eft_info.weight = 12000;
-    eft_info.seed_k[0] = 10;
-    eft_info.seed_k[1] = 15;
-    eft_info.seed_k[2] = 40;
-    eft_info.valve_angel = 50;
-    eft_info.speed_rpm = 50;
-    eft_info.warn_status = uart_info.uart3_recv_buf[0];
-    eft_info.pump1_rpm = 20;
-    eft_info.pump2_rpm =  40;
-    
-    eft_info.cent1_rpm = 20;
-    eft_info.cent2_rpm =  40;
 
-    eft_info.enginearm_lock = 6;
-    eft_info.watering_warn_status =uart_info.uart3_recv_buf[0];
 }
-
-
 /**
   * @file    update_device_type_data
   * @brief   更新设备信息
@@ -729,6 +729,10 @@ void  update_device_type_data(void)
                 Dev.Weight.k3 = weight_vkinfo.senor_k[2];
                 Dev.Weight.k4 = weight_vkinfo.senor_k[3];
                 Dev.Weight.warn = weight_vkinfo.warn_status;
+                Dev.Weight.single_sensor[0] = weight_vkinfo.Single_sensor[0];
+                Dev.Weight.single_sensor[1] = weight_vkinfo.Single_sensor[1];
+                Dev.Weight.single_sensor[2] = weight_vkinfo.Single_sensor[2];
+                Dev.Weight.single_sensor[3] = weight_vkinfo.Single_sensor[3];
                 break;
             case FAC_EFT:
                 Dev.Weight.mode = 0;
@@ -738,7 +742,7 @@ void  update_device_type_data(void)
                 Dev.Weight.k2 = eft_info.seed_k[1];
                 Dev.Weight.k3 = eft_info.seed_k[2];
                 Dev.Weight.k4 = 0;
-                Dev.Weight.warn = 0;
+                Dev.Weight.warn = eft_info.watering_warn_status >> 4 & 0xff;
                 break;
             case FAC_QIFEI:
                 Dev.Weight.mode = weight_vkinfo.mode;
@@ -1029,6 +1033,15 @@ void  update_device_type_data(void)
                 Dev.Checklow.lack_distance = mimo_lackloss.distance / 10; //cm
                 Dev.Checklow.lack_power = mimo_lackloss.strength;
                 break;
+            case FAC_DM_CHECKLOW:
+                Dev.Checklow.L1_status = (uint16_t)L3_status;
+                Dev.Checklow.L2_status = (uint16_t)L4_status;
+                Dev.Checklow.liquid_persent = decode_liquid_info();
+                Dev.Checklow.seed_lackloss = DM_lackloss.status;
+                Dev.Checklow.warn = 0;
+                Dev.Checklow.lack_distance = DM_lackloss.distance;
+                Dev.Checklow.lack_power = DM_lackloss.strength;
+                break;
             default:
                 break;
             }
@@ -1074,6 +1087,20 @@ void  update_device_type_data(void)
             Dev.Part_radarT.height_part2 = T_radar[1].Distance * 0.05f * 100 * cos(T_radar[1].Amuzith * 0.1f / RAD);
             Dev.Part_radarT.height_part3 = T_radar[2].Distance * 0.05f * 100 * cos(T_radar[2].Amuzith * 0.1f / RAD);
         }
+
+        if(Dev.Temp_Sensor_Link.connect_status == COMP_NORMAL)
+        {
+            switch (Dev.Temp_sensor.facid)
+            {
+            case FAC_EFT:
+                Dev.Temp_sensor.Positive_pole = Temp_sensor.Positive_pole;
+                Dev.Temp_sensor.Negative_pole = Temp_sensor.Negative_pole;
+                break;
+            
+            default:
+                break;
+            }
+        }
     }
 }
 
@@ -1109,4 +1136,3 @@ void QIFEI_recieved_hookfuction(uint32_t CanID, uint8_t data[], uint8_t len)
         break;
     }
 }
-

+ 1 - 0
Src/soft_timer.c

@@ -35,6 +35,7 @@ void timer_function()
     if (  Check_Timer_Ready(&time_1hz,_1_HZ_) )
     {
         devinfo_time.arm = true;
+        devinfo_time.tempSensor = true;
     }
     if (  Check_Timer_Ready(&time_2hz,_2_HZ_) )
     {

+ 16 - 1
Src/soft_version.c

@@ -36,6 +36,7 @@ dev_version_content dev_tradar_b;
 dev_version_content dev_h_bmsA;
 dev_version_content dev_h_bmsB;
 dev_version_content dev_remoteid;
+dev_version_content dev_tempSensor;
 
 dev_version_content dev_null;
 
@@ -102,6 +103,7 @@ void *dev_ptr[] = {&dev_null,
                    &dev_h_bmsA,
                    &dev_h_bmsB,
                    &dev_remoteid,
+                   &dev_tempSensor,
                   };
 short dev_num = sizeof( dev_ptr )/sizeof( void * );
 /**
@@ -437,7 +439,20 @@ void get_flowmeter_version_and_sn(void)
  **/
 void get_seed_version_and_sn(void)
 {
+    static uint8_t get_counts = 5;
+    static uint32_t get_time = 0;
+    uint8_t can_buf[8] = {0}; 
+    if(Dev.Weight_Link.connect_status == COMP_NORMAL && Dev.Weight.facid == FAC_VK && get_counts > 0 &&
+        HAL_GetTick() - get_time > 1000)
+    {
+        can_buf[0] = 0xF6;
+        can_buf[5] = 0xFE;
+        can_buf[6] = 0xFE;
 
+        can_send_msg_normal(&can_buf[0], 8, 0x81321);
+        get_time = HAL_GetTick();
+        get_counts--;
+    }
 }
 
 
@@ -461,7 +476,7 @@ void get_device_version_and_sn(void)
         //获取流量计版本和SN号
         get_flowmeter_version_and_sn();
 
-        //获取播撒器版本和SN号
+        //获取播撒器称重版本和SN号
         get_seed_version_and_sn();
 
     }

BIN
build/V9_AG_PMU_APP_.bin