Quellcode durchsuchen

惠达喷洒,绞龙播撒

redaiyuyuyu vor 2 Monaten
Ursprung
Commit
e0ba63856c

+ 2 - 1
Core/Src/main.c

@@ -55,6 +55,7 @@
 #include "soft_update.h"
 #include "can_debug.h"
 
+
 /* USER CODE END Includes */
 
 /* Private typedef -----------------------------------------------------------*/
@@ -129,7 +130,7 @@ int main(void)
   /* USER CODE BEGIN 2 */
   
   user_init();
-
+  //cm_backtrace_init("CmBacktrace", HARDWARE_VERSION, SOFTWARE_VERSION);
   //获取时钟频率
   uint32_t Freq = 0;
   Freq = HAL_RCC_GetSysClockFreq();//72M

+ 3 - 0
user_inc/soft_can.h

@@ -112,6 +112,9 @@ extern Radar Rupdate;
 #define EFT_FILTER_ID      0x00008851U
 #define EFT_MASK_ID        0xFFFFFF00U
 
+//绞龙
+#define CAN_JIEXING1_ID (0x7010)
+#define CAN_JIEXING2_ID (0x7011)
 
 // 第2~0位,发送端ID,默认3
 #define CAN_FULLY_SENDNODE_ID_MASK  0x00000007       // 0 0000 0000 0000 0000 0000 0000 0111(29位扩展ID)

+ 2 - 0
user_inc/soft_eft.h

@@ -121,5 +121,7 @@ typedef struct
 #pragma pack()
 extern water_dev Lpump1;
 extern water_dev Lpump2;
+extern water_dev churn;
+extern water_dev turntable;
 
 #endif

+ 1 - 0
user_inc/soft_obstacle.h

@@ -67,6 +67,7 @@ typedef struct
     short dotcloud_switch_4DB;//点云
     short DM4DF_Blind_spot_distance;//4D前雷达盲区距离
     short DM4DB_Blind_spot_distance;//4D后雷达盲区距离
+    short Packing_auger_size;//绞龙类型
 
     bool get_angel_4DF;//获取角度成功
     bool get_ground_filter_4DF;//距离滤波成功

+ 2 - 0
user_inc/soft_p_2_c.h

@@ -90,6 +90,8 @@ enum vklink_MSGID_SET
 	MSGID_SET_PUMP_ID = 32,       // 设置CAN水泵ID
 	MSGID_SET_PNCANID   = 55,	  // 设置EFT水泵电调CAN ID
 	MSGID_SET_RESIWIRE_BLOWN = 60,// 熔断电阻丝
+	MSGID_SET_CHURN_RESET = 61,	  // 绞龙复位
+	MSGID_SET_CHURN_SIZE = 64, //设置绞龙型号
 	MSGID_SET_WEIGHT_RESETK = 62,// 称重恢复出厂
 	MSGID_SET_WEIGHTFAC_CAL = 63,// 称重出厂标定K
 	MSGID_SET_FRADAR_SN = 98,     // 设置雷达SN号

+ 30 - 4
user_inc/soft_seed_device.h

@@ -95,7 +95,10 @@ enum FACID
     FAC_OKCELL = 15,   // 正方电池
 
     FAC_HW_ESC = 16,   // 好盈水泵电调
-
+	
+	FAC_HD_PUMP = 17,	//惠达水泵控制器
+    FAC_HD_NOZZLE = 18,	//惠达喷头
+	
     FAC_MIMO_RT = 20,  //恩曌防地
     FAC_MIMO_RF = 21,  //恩曌前避障
     FAC_MIMO_RB = 22, //恩曌后避障
@@ -115,8 +118,9 @@ enum FACID
     FAC_DM_RF_4D = 37,  //DM 4d前避障
     FAC_DM_RB_4D = 38, //DM  4d后避障
     
-    FAC_MOCIB_RL = 39,  //莫之比左避障
-    FAC_MOCIB_RR = 40, //莫之比右避障
+    FAC_CHURN_SEED = 40,//绞龙播撒
+    FAC_MOCIB_RL = 41,  //莫之比左避障
+    FAC_MOCIB_RR = 42, //莫之比右避障
 };
 typedef struct
 {
@@ -160,6 +164,9 @@ typedef struct
     uint16_t speed;
     uint8_t caplow;
     uint16_t warn;
+    uint16_t runtime;
+    uint16_t churn_rpm;
+    uint16_t churn_warn;
 } Seed_info;
 #pragma pack(0)
 
@@ -397,6 +404,25 @@ typedef struct
     uint16_t order_con3;
 } Weight_cal;
 #pragma pack(0)
+
+#pragma pack(1)
+typedef struct 
+{
+    uint8_t flag:4;
+    uint16_t pump1:10;
+    uint16_t pump2:10;
+    uint16_t nozzle1:10;
+    uint16_t nozzle2:10;
+    uint16_t nozzle3:10;
+    uint16_t nozzle4:10;
+}soft_water70;
+#pragma pack()
+typedef union 
+{
+    uint8_t buf[8];
+    soft_water70 dev_water70;
+}water70_dev;
+extern water70_dev water70_info;
 extern Weight_cal weight_order;
 
 enum CalEnum
@@ -417,5 +443,5 @@ 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 );
-
+void can_sendmsg_eft_water(void);
 #endif

+ 17 - 0
user_inc/soft_water_device.h

@@ -14,6 +14,19 @@ typedef struct{
 extern liquid liquid_inf;
 extern comp_status liquid_link_status;
 
+#pragma pack(1)
+typedef struct 
+{
+    uint8_t dev_type;
+    uint16_t rpm;
+    uint8_t warning;
+    uint8_t reserve1;
+    uint8_t reserve2;
+    uint8_t reserve3;
+    uint8_t count;
+}Z70_tranfer;
+#pragma pack()
+extern Z70_tranfer z70_info;
 #pragma pack(1)
 typedef struct 
 {
@@ -203,6 +216,9 @@ Ready_Control
 #define HW_MAJORCONF_OPT0            0x00  //获取配置信息
 
 #define HW_GETESCID_OPT0             0x00  //获取ESCID及通道信息
+#define Z70_Public (uint8_t)0
+#define Z70_Churn     (uint8_t)7
+#define Z70_Turntable   (uint8_t)8
 typedef struct
 {
     Connect_check Esc_Link;
@@ -344,5 +360,6 @@ void can_sendmsg_flow(void);
 void can_sendmsg_esc(void);
 void HobbywingCanRecvHookFunction(uint32_t id, uint8_t data[], uint8_t len);
 void Hobbywing_esc_func(void);
+void Get_auger_sowing_mag(uint32_t CanID, uint8_t data[], uint8_t len);
 #endif
 

+ 4 - 0
user_src/soft_can.c

@@ -23,6 +23,7 @@
 #include "soft_update.h"
 #include "can_debug.h"
 #include "qingxie_bms.h"
+#include "soft_hd_water_pump.h"
 
 CAN_RxHeaderTypeDef RxHeader;
 CAN_TxHeaderTypeDef TxHeader;
@@ -121,6 +122,9 @@ void Can_decode_data_function(CAN_RxHeaderTypeDef Rxhead)
       //   break;
 
       //格式电池
+      case CAN_JIEXING1_ID ... CAN_JIEXING2_ID:
+        Get_auger_sowing_mag(RxHeader.ExtId, RxData, RxHeader.DLC);
+        break;
       case CAN_NEWTATTU_MSG ... CAN_NEWTATTU_MSG2:
         TattuCanRecvHookFunction(RxHeader.ExtId, RxData, RxHeader.DLC);
         break;

+ 16 - 3
user_src/soft_p_2_c.c

@@ -787,8 +787,8 @@ void pmu_to_con_DM4DBradar_msg(void)
     msg_buf[index++] = 'K';
     msg_buf[index++] = 'Z';
     msg_buf[index++] = '1';
-    memcpy(&msg_buf[index],&DM_4DRADARMAG.angel_4DF,16);
-    index += 16;
+    memcpy(&msg_buf[index],&DM_4DRADARMAG.angel_4DF,18);
+    index += 18;
     msg_buf[1] = index - 6;
     crc = Get_Crc16(msg_buf, index);
     msg_buf[index++] = crc;
@@ -2012,6 +2012,13 @@ void uart_recv_con_msg()
                 can_send_msg_normal(&can_buf[0], 8, 0x88BB);
                 }
                 break;
+            case MSGID_SET_CHURN_RESET:
+                    {
+                        uint8_t can_buf[8] = {0};
+                        put_date_to_can(can_buf,0xE6,0x00,0x00,0x00,0X00,0xF1,0XF3,0X00);
+                        can_send_msg_normal(&can_buf[0], 8, 0x7011);
+                    }
+                    break;
             case MSGID_SET_FRADAR_SN:
                 {
                     int radar_Sn = 0;
@@ -2113,7 +2120,7 @@ void uart_recv_con_msg()
                 uint16_t radar_id = 0;
                 uint8_t can_buf[8] = {0};
                 int radar_msg = 0;
-
+                uint8_t size = 0;
                 radar_id = fcu_protocol.payload[6] + fcu_protocol.payload[7]*256;
                 memcpy(&radar_msg,&fcu_protocol.payload[8],4);
                 switch (radar_id)
@@ -2166,6 +2173,12 @@ void uart_recv_con_msg()
                     can_buf[7] = 7;
                     can_send_msg_normal(can_buf,8,0XB81300);
                     break;
+                case 9:
+                {
+                    size = (uint8_t)radar_msg;
+                    put_date_to_can(can_buf, 0xE7, size, 0x00, 0x00, 0X00, 0xF1, 0XF3, 0X00);
+                    can_send_msg_normal(&can_buf[0], 8, 0x7011);
+                }
                 default:
                     break;
                 }

+ 50 - 1
user_src/soft_seed_device.c

@@ -15,6 +15,7 @@
 #include "qingxie_bms.h"
 #include "soft_adc.h"
 #include "soft_flash.h"
+#include "soft_hd_water_pump.h"
 weight weight_vkinfo;
 seed seed_vkinfo;
 send_seed_device seed_dev;
@@ -724,6 +725,7 @@ void  update_device_type_data(void)
     {
         //EFT播撒称重
         can_sendmsg_eft();
+        can_sendmsg_eft_water();
 
     }
     if(Check_Timer_Ready(&time_5hz,_5_HZ_))
@@ -741,6 +743,8 @@ void  update_device_type_data(void)
     {
         //好盈电调水泵
         Hobbywing_esc_func();
+		//惠达水泵
+		HD_pump_func();
         //播撒器
         if(Dev.Seed_Link.connect_status == COMP_NORMAL)
         {
@@ -764,7 +768,16 @@ void  update_device_type_data(void)
                 Dev.Seed.caplow = 0;
                 Dev.Seed.warn = 0;//weight_vkinfo.warn_status;
                 break;
-
+            case FAC_CHURN_SEED:
+                Dev.Seed.angle = 0;
+                //Dev.Seed.speed = eft_info.speed_rpm * 10;
+                Dev.Seed.caplow = 0;
+                //Dev.Seed.warn = eft_info.warn_status >> 1;
+                Dev.Seed.speed = turntable.rpm;
+                Dev.Seed.churn_rpm = churn.rpm;
+                Dev.Seed.warn = churn.error_status ;
+                Dev.Seed.churn_warn = churn.reserve;
+                break;
             default:
                 break;
             }
@@ -849,6 +862,14 @@ void  update_device_type_data(void)
                 }
                 Dev.Pump.warn = 0; //屏蔽报警
                 break;
+			case FAC_HD_PUMP:
+				Dev.Pump.rpm1 = HD_pump.pump1_speed;
+                Dev.Pump.rpm2 = HD_pump.pump2_speed;
+			    Dev.Pump.rpm3 = 0;
+                Dev.Pump.rpm4 = 0;
+				
+				
+				break;
 
             // case FAC_HW_ESC:
             //     Dev.Pump.rpm1 = EscMsg[1].motorRPM;
@@ -886,6 +907,12 @@ void  update_device_type_data(void)
                 }
                 Dev.Nozzle.warn = 0; //屏蔽报警
                 break;
+            case FAC_HD_NOZZLE:
+                Dev.Nozzle.rpm1 = NozzleMsg[1].speed;
+                Dev.Nozzle.rpm2 = NozzleMsg[2].speed;
+                Dev.Nozzle.rpm3 = NozzleMsg[3].speed;
+                Dev.Nozzle.rpm4 = NozzleMsg[4].speed;
+                break;
             default:
                 break;
             }
@@ -1238,3 +1265,25 @@ void QIFEI_recieved_hookfuction(uint32_t CanID, uint8_t data[], uint8_t len)
         break;
     }
 }
+water70_dev water70_info;
+void can_sendmsg_eft_water(void)
+{
+    uint8_t can_buf[8] = {0};
+
+    if(Dev.Seed_Link.connect_status != COMP_NOEXIST && Dev.Seed.facid == FAC_CHURN_SEED)
+    {
+        water70_info.dev_water70.flag = planep.lock_status == STA_LOCK ? 0x5 : 0xA;
+
+        water70_info.dev_water70.pump1 = math_cons_i16(tppwm_value,1000,2000) - 1000;
+        water70_info.dev_water70.pump2 = math_cons_i16(sow_rotate_value,1000,2000) - 1000;
+
+        water70_info.dev_water70.nozzle1 = pmu_pin.nozz1_fm - 1000;
+        water70_info.dev_water70.nozzle2 = pmu_pin.nozz2_zp - 1000;
+        water70_info.dev_water70.nozzle3 = pmu_pin.nozz3 - 1000;
+        water70_info.dev_water70.nozzle4 = pmu_pin.nozz4 - 1000;
+
+        memcpy(&can_buf, &water70_info.buf[0], sizeof(soft_water70));
+        can_send_msg_normal( &can_buf[0], 8, 0x7011 );
+    }
+
+}

+ 9 - 1
user_src/soft_uart.c

@@ -330,7 +330,15 @@ void check_uart_data(rkfifo_t *fifo)
 			break;
 		case RX_PAYLOAD_LEN:
 			vk_data.len = c;
-			recv_step = RX_SEQ;
+			if (vk_data.len >= 256 - 8)
+			{
+				recv_step = RX_HEAD;
+			}
+			else
+
+			{
+				recv_step = RX_SEQ;
+			}
 			break;
 		case RX_SEQ:
 			vk_data.seq = c;

+ 2 - 2
user_src/soft_version.c

@@ -191,9 +191,9 @@ void get_radar_version_and_sn(void)
         radar_can_buf[7] = 7;
         can_send_msg_normal(radar_can_buf, 8, 0x981300);
     }
-    else if((DM_f_info.Link.connect_status == COMP_NORMAL || Dev.Part_Fradar_Link.connect_status)  && DM_f_info.get_radar_ver_flag == false)
+    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)
     {
-        radar_can_buf[0] = 1;
+         radar_can_buf[0] = 1;
         radar_can_buf[7] = 7;
         can_send_msg_normal(radar_can_buf, 8, 0XA81300);
     }

+ 56 - 0
user_src/soft_water_device.c

@@ -7,6 +7,9 @@
 #include "soft_crc.h"
 #include "soft_version.h"
 #include "soft_flash.h"
+#include "soft_tattu.h"
+#include "soft_terrain.h"
+#include "soft_obstacle.h"
 /**
   * @file    liquid_recieved_hookfuction
   * @brief   液位计解析
@@ -1041,4 +1044,57 @@ void Hobbywing_esc_func(void)
     }
 
 }
+Z70_tranfer z70_info;
+water_dev churn,turntable;
+void Get_auger_sowing_mag(uint32_t CanID, uint8_t data[], uint8_t len)
+{
+    if(CanID == CAN_JIEXING1_ID)
+    {
+        memcpy(&z70_info, &data[0], len);
+        switch (z70_info.dev_type)
+        {
+         case Z70_Churn:
+            churn.rpm = z70_info.rpm;
+            churn.error_status = z70_info.warning;
+            churn.reserve = (z70_info.reserve1 & 0x01) | ((z70_info.reserve2 & 0x07) << 1);
+            //churn.reserve += (1<<(z70_info.reserve2 & 0x07));
+
+            static uint8_t churn_size = 0;
+            if(churn_size != z70_info.reserve3 & 0x07)
+            {
+               churn_size = z70_info.reserve3 & 0x07;
+               DM_4DRADARMAG.Packing_auger_size = churn_size;
+               DM4Dmsg_send_fmu = true;
+            }
+             
+            Dev.Seed_Link.connect_status = COMP_NORMAL;
+            Dev.Seed_Link.recv_time = HAL_GetTick();
+            Dev.Seed.facid = FAC_CHURN_SEED;
+            break;
+        case Z70_Turntable:
+            turntable.rpm = z70_info.rpm;
+            turntable.error_status = z70_info.warning;
+
+            Dev.Seed_Link.connect_status = COMP_NORMAL;
+            Dev.Seed_Link.recv_time = HAL_GetTick();
+            Dev.Seed.facid = FAC_CHURN_SEED;
+            break;
+        default:
+            break;
+        }
+    }
+    else if(CanID == CAN_JIEXING2_ID)
+    {
+        if(data[0] == 0xe6)
+        {
+            pmu_set_ack(_MSGID_SET,MSGID_SET_CHURN_RESET,0,0);
+        }
+        else if(data[0] == 0xe7)
+        {
+            DM_4DRADARMAG.Packing_auger_size = data[1];
+            DM4Dmsg_send_fmu = true;
+        }
+    }
+
+}