From def6828641ac982dac39147e2ac3875c0b134e52 Mon Sep 17 00:00:00 2001 From: "LIN\\54376" <543769318@qq.com> Date: Thu, 11 Sep 2025 11:31:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Eudp=20clinet=20=E6=AF=8F?= =?UTF-8?q?=E6=AC=A1=E6=B5=8B=E9=87=8F=E6=AF=8F=E6=AC=A1=E5=8F=91=E9=80=81?= =?UTF-8?q?=20=E7=BC=A9=E7=9F=AD=E5=89=8D=E8=BF=9B=E9=81=BF=E9=9A=9C?= =?UTF-8?q?=E8=B7=9D=E7=A6=BB=20=E7=A1=AE=E5=AE=9A=E6=AD=A3=E5=8E=8B?= =?UTF-8?q?=E8=8C=83=E5=9B=B4=20=E6=89=BE=E7=BA=A0=E9=80=9F=E5=BA=A6?= =?UTF-8?q?=E9=99=90=E4=BD=8D=E6=94=BE=E5=A4=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .settings/language.settings.xml | 4 +- BASE/Inc/MSP/msp_PaintThickness.h | 1 + BASE/Src/BSP/bsp_client_setting.c | 82 +++++++++---------------------- BASE/Src/MSP/msp_PaintThickness.c | 16 +++++- Core/Protobuf/PSource/bsp_GV.pb.h | 17 ++++--- Core/Protobuf/Proto/bsp_GV.proto | 6 ++- Core/Src/FSM.c | 4 +- Core/Src/main.c | 3 ++ Core/Src/robot_state.c | 4 +- 9 files changed, 62 insertions(+), 75 deletions(-) diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index 805db99..13fd3c0 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/BASE/Inc/MSP/msp_PaintThickness.h b/BASE/Inc/MSP/msp_PaintThickness.h index 5ddecc0..35e4164 100644 --- a/BASE/Inc/MSP/msp_PaintThickness.h +++ b/BASE/Inc/MSP/msp_PaintThickness.h @@ -11,6 +11,7 @@ #include "stdint.h" extern int32_t* PaintThickness; +extern int32_t* PaintThickness_Count; extern void Paint_Thickness_intialize(); diff --git a/BASE/Src/BSP/bsp_client_setting.c b/BASE/Src/BSP/bsp_client_setting.c index b61ae20..88a3f40 100644 --- a/BASE/Src/BSP/bsp_client_setting.c +++ b/BASE/Src/BSP/bsp_client_setting.c @@ -16,6 +16,7 @@ void decode_received_data_from_client(uint8_t *buffer, uint16_t length); struct UARTHandler *client_setting_Handler; //相当于当前行及下一行这两个结构体与绑定的共享地址 DispacherController *client_setting_dispacher; +int LastCount; void client_setting_intialize(struct UARTHandler *Handler) { @@ -35,79 +36,42 @@ void client_setting_intialize(struct UARTHandler *Handler) void UpdateIV()//往安卓发的 { -//根据提供的缓冲区和大小创建一个输出流对象 - pb_ostream_t IV_o_stream = pb_ostream_from_buffer( - &client_setting_Handler->Tx_Buf[2], - sizeof(client_setting_Handler->Tx_Buf) - 2); - //将 IV 结构体中的数值按照 Protobuf 协议进行编码,并将编码后的字节流存储到 client_setting_Handler->Tx_Buf 数组(从第三个元素开始) - pb_encode(&IV_o_stream, IV_struct_define_fields, &IV); + if(GV.Robot_PaintThickness_Count > LastCount) + { - client_setting_Handler->Tx_Buf[0] = 0x55; - client_setting_Handler->Tx_Buf[1] = 0x55; - client_setting_Handler->TxCount = IV_o_stream.bytes_written + 4; + } + else + { + return; + } + client_setting_Handler->Tx_Buf[0] = 0x01; + client_setting_Handler->Tx_Buf[1] = 0x03; + client_setting_Handler->Tx_Buf[2] = 0x02; + client_setting_Handler->TxCount = 7; + + + client_setting_Handler->Tx_Buf[3] = (GV.Robot_PaintThickness>>8) &0xff; + client_setting_Handler->Tx_Buf[4] = GV.Robot_PaintThickness & 0xff; - uint16_t crc=MB_CRC16(&(client_setting_Handler->Tx_Buf[0]), IV_o_stream.bytes_written + 2); + uint16_t crc=MB_CRC16(&(client_setting_Handler->Tx_Buf[0]), 5); - client_setting_Handler->Tx_Buf[IV_o_stream.bytes_written + 2] = (crc>>8) &0xff; - client_setting_Handler->Tx_Buf[IV_o_stream.bytes_written + 3] = crc & 0xff;; + client_setting_Handler->Tx_Buf[6] = (crc>>8) &0xff; + client_setting_Handler->Tx_Buf[5] = crc & 0xff; client_setting_Handler->UART_Tx(client_setting_Handler); + + LastCount = GV.Robot_PaintThickness_Count; } void decode_received_data_from_client(uint8_t *buffer, uint16_t length) { - uint8_t data[20]; + uint8_t data[2000]; memcpy(data,buffer,length); - //if (*buffer == 0x55 && *(buffer + 1) == 0x55 && length >= 4) - if (buffer[0] == 0x55 && buffer[1] == 0x55 && length >= 4) - { - uint16_t crc_check = ((buffer[length - 1] << 8) | buffer[length - 2]); - uint16_t crc_check1 = MB_CRC16(buffer, length - 2); - /* CRC 校验正确 */ - if (crc_check == MB_CRC16(buffer, length - 2)) - { - //if (*(buffer + 2) == 0x01 && *(buffer + 3) == 0x01) //01 01 设置PV - if (buffer[2] == 0x01 && buffer[3] == 0x01) //01 01 设置PV - { - PV_struct_define decoded_PV = PV_struct_define_init_default; - pb_istream_t i_pv_stream = - { 0 }; - - i_pv_stream = pb_istream_from_buffer(&buffer[4], length - 4); - pb_decode(&i_pv_stream, PV_struct_define_fields, &decoded_PV); - //将CV写入EEPROM - //CV_struct_define saved_cV = GF_BSP_EEPROM_Get_CV(); - GV.PV = decoded_PV; - GF_BSP_EEPROM_Set_CV(CV); - } - else if (*(buffer + 2) == 0x02 && *(buffer + 3) == 0x01) //设置PV - { - - } - else if (*(buffer + 2) == 0x03 && *(buffer + 3) == 0x01) //返回IV - { - - } - else - { - - } - - } - else - { - //Decode Error; - //log_error("wire sensor decoding failed"); - LOGFF(DL_ERROR, "androidd decoding failed"); - - } - - } - } +} // client_setting_Handler->Tx_Buf[0]='1'; // client_setting_Handler->Tx_Buf[1]=','; diff --git a/BASE/Src/MSP/msp_PaintThickness.c b/BASE/Src/MSP/msp_PaintThickness.c index 3d4b1aa..25c746c 100644 --- a/BASE/Src/MSP/msp_PaintThickness.c +++ b/BASE/Src/MSP/msp_PaintThickness.c @@ -14,6 +14,10 @@ void GF_PT_Inquiry();//inqure data from the, in fact this is a modbus 03 functio int32_t* PaintThickness; +int32_t PaintThickness_LastLength; +int32_t* PaintThickness_Count; + + struct UARTHandler *PaintThickness_sensor; DispacherController *PaintThickness_sensor_dispacherController; @@ -51,6 +55,16 @@ void decode_PaintThickness(uint8_t *buffer, uint16_t length) { //memcpy(data_PaintThickness,buffer,length); LOG("start decoding and the length is %d",length); + + if(length >= PaintThickness_LastLength + 5) + { + *PaintThickness_Count = *PaintThickness_Count + 1; + } + else + { + return; + } + /* 校验 */ //;<:> uint8_t crc_check[4] = {';','<',':','>'}; @@ -78,7 +92,7 @@ void decode_PaintThickness(uint8_t *buffer, uint16_t length) *PaintThickness = atof(PaintThickness_in) * 10; - + PaintThickness_LastLength = length; HardWareErrorController->Set_PCOMHardWare(HardWareErrorController,"PaintThickness_sensor",1); LOG("decode_PaintThickness succeeded and the force is %d",*PaintThickness); diff --git a/Core/Protobuf/PSource/bsp_GV.pb.h b/Core/Protobuf/PSource/bsp_GV.pb.h index 2a61a9c..e662655 100644 --- a/Core/Protobuf/PSource/bsp_GV.pb.h +++ b/Core/Protobuf/PSource/bsp_GV.pb.h @@ -43,6 +43,7 @@ typedef struct _GV_struct_define { int32_t Robot_ForceValue; int32_t Robot_DynamometerValue; int32_t Robot_PaintThickness; + int32_t Robot_PaintThickness_Count; int32_t Robot_Speed_mpm; bool has_Robot_Ultrasonic; MSP_UltrasonicParameters Robot_Ultrasonic; @@ -55,8 +56,8 @@ extern "C" { #endif /* Initializer values for message structs */ -#define GV_struct_define_init_default {false, PV_struct_define_init_default, false, MotorParameters_init_default, false, MotorParameters_init_default, false, SP_MSP_U7_Button_init_default, 0, false, ErrorData_init_default, false, MSP_TL720DParameters_init_default, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false, MSP_UltrasonicParameters_init_default, 0} -#define GV_struct_define_init_zero {false, PV_struct_define_init_zero, false, MotorParameters_init_zero, false, MotorParameters_init_zero, false, SP_MSP_U7_Button_init_zero, 0, false, ErrorData_init_zero, false, MSP_TL720DParameters_init_zero, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false, MSP_UltrasonicParameters_init_zero, 0} +#define GV_struct_define_init_default {false, PV_struct_define_init_default, false, MotorParameters_init_default, false, MotorParameters_init_default, false, SP_MSP_U7_Button_init_default, 0, false, ErrorData_init_default, false, MSP_TL720DParameters_init_default, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false, MSP_UltrasonicParameters_init_default, 0} +#define GV_struct_define_init_zero {false, PV_struct_define_init_zero, false, MotorParameters_init_zero, false, MotorParameters_init_zero, false, SP_MSP_U7_Button_init_zero, 0, false, ErrorData_init_zero, false, MSP_TL720DParameters_init_zero, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false, MSP_UltrasonicParameters_init_zero, 0} /* Field tags (for use in manual encoding/decoding) */ #define GV_struct_define_PV_tag 1 @@ -76,8 +77,9 @@ extern "C" { #define GV_struct_define_Robot_ForceValue_tag 15 #define GV_struct_define_Robot_DynamometerValue_tag 16 #define GV_struct_define_Robot_PaintThickness_tag 17 -#define GV_struct_define_Robot_Speed_mpm_tag 18 -#define GV_struct_define_Robot_Ultrasonic_tag 19 +#define GV_struct_define_Robot_PaintThickness_Count_tag 18 +#define GV_struct_define_Robot_Speed_mpm_tag 19 +#define GV_struct_define_Robot_Ultrasonic_tag 20 #define GV_struct_define_Emergency_tag 21 /* Struct field encoding specification for nanopb */ @@ -99,8 +101,9 @@ X(a, STATIC, SINGULAR, INT32, Robot_ChgLength, 14) \ X(a, STATIC, SINGULAR, INT32, Robot_ForceValue, 15) \ X(a, STATIC, SINGULAR, INT32, Robot_DynamometerValue, 16) \ X(a, STATIC, SINGULAR, INT32, Robot_PaintThickness, 17) \ -X(a, STATIC, SINGULAR, INT32, Robot_Speed_mpm, 18) \ -X(a, STATIC, OPTIONAL, MESSAGE, Robot_Ultrasonic, 19) \ +X(a, STATIC, SINGULAR, INT32, Robot_PaintThickness_Count, 18) \ +X(a, STATIC, SINGULAR, INT32, Robot_Speed_mpm, 19) \ +X(a, STATIC, OPTIONAL, MESSAGE, Robot_Ultrasonic, 20) \ X(a, STATIC, SINGULAR, INT32, Emergency, 21) #define GV_struct_define_CALLBACK NULL #define GV_struct_define_DEFAULT NULL @@ -119,7 +122,7 @@ extern const pb_msgdesc_t GV_struct_define_msg; /* Maximum encoded size of messages (where known) */ #define BSP_GV_PB_H_MAX_SIZE GV_struct_define_size -#define GV_struct_define_size 1087 +#define GV_struct_define_size 1099 #ifdef __cplusplus } /* extern "C" */ diff --git a/Core/Protobuf/Proto/bsp_GV.proto b/Core/Protobuf/Proto/bsp_GV.proto index b61d650..953b679 100644 --- a/Core/Protobuf/Proto/bsp_GV.proto +++ b/Core/Protobuf/Proto/bsp_GV.proto @@ -32,9 +32,11 @@ message GV_struct_define int32 Robot_ForceValue = 15; int32 Robot_DynamometerValue = 16; int32 Robot_PaintThickness = 17; - int32 Robot_Speed_mpm = 18; + int32 Robot_PaintThickness_Count = 18; - MSP_UltrasonicParameters Robot_Ultrasonic = 19; + int32 Robot_Speed_mpm = 19; + + MSP_UltrasonicParameters Robot_Ultrasonic = 20; int32 Emergency = 21; }; diff --git a/Core/Src/FSM.c b/Core/Src/FSM.c index c36521b..fec5433 100644 --- a/Core/Src/FSM.c +++ b/Core/Src/FSM.c @@ -236,7 +236,7 @@ void Dangerous_Test() } //前进避障计数 - if(GV.Robot_Ultrasonic.USValue_4 <= 5000 + if(GV.Robot_Ultrasonic.USValue_4 <= 4500 && GV.Robot_Ultrasonic.USValue_4 != 0) { GV.Robot_Ultrasonic.USValue_Count_4 ++; @@ -288,7 +288,7 @@ void Dym_Test() { //计数,置位标志 //前进探边计数 - if(GV.Robot_Ultrasonic.Dym_Value <= 10300 || GV.Robot_Ultrasonic.Dym_Value >= 11000) + if(GV.Robot_Ultrasonic.Dym_Value <= 10500 || GV.Robot_Ultrasonic.Dym_Value >= 15000) { GV.Robot_Ultrasonic.Dym_Value_Count ++; if(GV.Robot_Ultrasonic.Dym_Value_Count >= 3) diff --git a/Core/Src/main.c b/Core/Src/main.c index 17b97c1..1ac3762 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -267,6 +267,7 @@ void CV_GV_Init() CMCUValue_in = &GV.Robot_ForceValue; DynamometerValue_in = &GV.Robot_DynamometerValue; PaintThickness = &GV.Robot_PaintThickness; + PaintThickness_Count = &GV.Robot_PaintThickness_Count; USValue_in = &GV.Robot_Ultrasonic; //Error Config @@ -312,6 +313,8 @@ void GF_Robot_Init() T_F4_Remote_Controller_intialize(&RS_485_3_UART_Handler); Paint_Thickness_intialize(&RS_485_4_UART_Handler); + client_setting_intialize(&LPUART1_UART_Handler); + GF_BSP_FDCAN_Init(); GF_BSP_CANHandler_Init(can1_sendListPeriod, can1_DispacherPeriod, can2_sendListPeriod, can2_DispacherPeriod); diff --git a/Core/Src/robot_state.c b/Core/Src/robot_state.c index 37081f6..adfb70d 100644 --- a/Core/Src/robot_state.c +++ b/Core/Src/robot_state.c @@ -346,9 +346,9 @@ void VehicleAutoTurn(double InclinometerAngle, double expectationAngle, double K deltaAngle=-deltaAngle; } - if(deltaSpeed >= 400) + if(deltaSpeed >= 500) { - deltaSpeed = 400; + deltaSpeed = 500; } GV.LeftFrontMotor.Target_Velcity=0;