Ye Jin 1 жил өмнө
parent
commit
15ab638e4b

+ 2 - 2
User project/2.MotorDrive/Source/spdctrFSM.c

@@ -1,4 +1,4 @@
-/************************************************************************
+锘�/************************************************************************
  Project:             Welling Motor Control Paltform
  Filename:            sysfsm.c
  Partner Filename:    sysfsm.h
@@ -139,7 +139,7 @@ void ClzLoop_TbcupHook(void)
     cvb_stBrakeIn.uwSpdLpfAbsPu = scm_uwSpdFbkLpfAbsPu;
     cvb_voBrake(&cvb_stBrakeIn,&cvb_stBrakeCoef,&cvb_stBrakeOut);
  
-    /** Idref可变范围-3A~0A且未弱磁,暂不做过多处理;Angle在down中更新,暂不改为改为恒压制动角度 **/
+    /** Idref鍙�彉鑼冨洿-3A~0A涓旀湭寮辩�锛屾殏涓嶅仛杩囧�澶勭悊锛汚ngle鍦╠own涓�洿鏂帮紝鏆備笉鏀逛负鏀逛负鎭掑帇鍒跺姩瑙掑害 **/
     if(cvb_stBrakeIn.uwVdcLpfPu >= cvb_stBrakeCoef.uwVdcStartCvbPu)
     {
         scm_swIdRefPu = cvb_stBrakeOut.swIdRefPu;

+ 115 - 115
User project/3.BasicFunction/Include/enviolo_can.h

@@ -1,4 +1,4 @@
-#ifndef __ENVIOLO_CAN_H_
+锘�#ifndef __ENVIOLO_CAN_H_
 #define __ENVIOLO_CAN_H_
 
 #include "stdint.h"
@@ -8,172 +8,172 @@
 #define ENVIOLO_CONFIG_ID    0x7AC
 #define ENVIOLO_CONTROL_ID   0x7AD
 
-/*********************************Enviolo自动变速器通信协议内容******************************/
-//变速器运行信息
+/*********************************Enviolo鑷�姩鍙橀€熷櫒閫氫俊鍗忚�鍐呭�******************************/
+//鍙橀€熷櫒杩愯�淇℃伅
 typedef struct GEAR_INFO1
 {
-	uint8_t Pedal_Rpm;                      //踏频 1bit = 1rpm
-	uint8_t Actual_Ratio;                   //变速比 1bit = 0.1ratio
-	uint8_t Bike_Speed;                     //车速 1bit = 0.5km/h
-	uint8_t Battery_Vol;                    //电池电压 1bit = 0.25V
-	uint16_t Wheel_Rpm;                     //车轮转速 1bit = 1rpm
-	union STATUS_FLAG                       //状态标志
-	{
-		struct
-		{
-			uint8_t RS1                :1;
-			uint8_t RS2                :1;
-			uint8_t RS3                :1;
-			uint8_t ShiftActiveFlag    :1;  //档位切换
-			uint8_t CaliNeedFlag       :1;  //需要校准
-			uint8_t CaliSuccessFlag    :1;  //校准成功
-			uint8_t PowerOnFlag        :1;  //开机
-			uint8_t InitialFlag        :1;  //初始化完成			
-		}StatusFlagBit;
-		uint8_t Flag;
-	}StatusFlag;
-	union ERROR_FLAG                        //错误标志
-	{
-                struct
-		{
-			uint8_t OverCurrentFlag    :1;  //过流
-			uint8_t CaliFailFlag       :1;  //校准失败
-			uint8_t RS1                :1;
-			uint8_t StallFlag          :1;  //工作异常
-			uint8_t RS2                :1;
-			uint8_t RS3                :1;
-			uint8_t RS4                :1;
-			uint8_t RS5                :1;
-		}ErrorFlagBit;
-		uint8_t Flag;
-	}ErrorFlag;
-	uint8_t RS1;
+    uint8_t Pedal_Rpm;                      //韪忛� 1bit = 1rpm
+    uint8_t Actual_Ratio;                   //鍙橀€熸瘮 1bit = 0.1ratio
+    uint8_t Bike_Speed;                     //杞﹂€� 1bit = 0.5km/h
+    uint8_t Battery_Vol;                    //鐢垫睜鐢靛帇 1bit = 0.25V
+    uint16_t Wheel_Rpm;                     //杞﹁疆杞�€� 1bit = 1rpm
+    union STATUS_FLAG                       //鐘舵€佹爣蹇�
+    {
+        struct
+        {
+            uint8_t RS1                :1;
+            uint8_t RS2                :1;
+            uint8_t RS3                :1;
+            uint8_t ShiftActiveFlag    :1;  //妗d綅鍒囨崲
+            uint8_t CaliNeedFlag       :1;  //闇€瑕佹牎鍑�
+            uint8_t CaliSuccessFlag    :1;  //鏍″噯鎴愬姛
+            uint8_t PowerOnFlag        :1;  //寮€鏈�
+            uint8_t InitialFlag        :1;  //鍒濆�鍖栧畬鎴�			
+        }StatusFlagBit;
+        uint8_t Flag;
+    }StatusFlag;
+    union ERROR_FLAG                        //閿欒�鏍囧織
+    {
+        struct
+        {
+            uint8_t OverCurrentFlag    :1;  //杩囨祦
+            uint8_t CaliFailFlag       :1;  //鏍″噯澶辫触
+            uint8_t RS1                :1;
+            uint8_t StallFlag          :1;  //宸ヤ綔寮傚父
+            uint8_t RS2                :1;
+            uint8_t RS3                :1;
+            uint8_t RS4                :1;
+            uint8_t RS5                :1;
+        }ErrorFlagBit;
+        uint8_t Flag;
+    }ErrorFlag;
+    uint8_t RS1;
 }EnvioloGearInfo1_Struct_t;
 
-//变速器运行参数
+//鍙橀€熷櫒杩愯�鍙傛暟
 typedef struct GEAR_INFO2
 {
-	uint8_t PCB_Version_Major;
-	uint8_t PCB_Version_Mino;
-	uint8_t PCB_Version_BugFix;
-	uint8_t RS1;
-	uint8_t Soft_Version;
-	uint8_t RS2;
-	uint8_t RS3;
-	uint8_t RS4;
+    uint8_t PCB_Version_Major;
+    uint8_t PCB_Version_Mino;
+    uint8_t PCB_Version_BugFix;
+    uint8_t RS1;
+    uint8_t Soft_Version;
+    uint8_t RS2;
+    uint8_t RS3;
+    uint8_t RS4;
 }EnvioloGearInfo2_Struct_t;
 
-//变速器配置参数
+//鍙橀€熷櫒閰嶇疆鍙傛暟
 typedef struct CONFIG_PARAMS
 {
-        uint8_t FrontChain;                      //前牙盘 1bit = 1tooth
-	uint8_t RearTeeth;                       //后牙盘 1bit = 1tooth
-	uint8_t CadenceMin;                      //自动模式最低踏频 1bit = 1rpm
-	uint8_t CadenceMax;                      //自动模式最高踏频 1bit = 1rpm
-	uint8_t RS1;
-	uint8_t WheelSize;                       //轮胎周长 1bit = 1cm, offset = 100cm
-	uint8_t SleepTime;                       //自动关机时间 1bit = 1min
-	uint8_t RS2;
+    uint8_t FrontChain;                      //鍓嶇墮鐩� 1bit = 1tooth
+    uint8_t RearTeeth;                       //鍚庣墮鐩� 1bit = 1tooth
+    uint8_t CadenceMin;                      //鑷�姩妯″紡鏈€浣庤笍棰� 1bit = 1rpm
+    uint8_t CadenceMax;                      //鑷�姩妯″紡鏈€楂樿笍棰� 1bit = 1rpm
+    uint8_t RS1;
+    uint8_t WheelSize;                       //杞�儙鍛ㄩ暱 1bit = 1cm, offset = 100cm
+    uint8_t SleepTime;                       //鑷�姩鍏虫満鏃堕棿 1bit = 1min
+    uint8_t RS2;
 }EnvioloConfigParams_Struct_t;
 
-//变速器模式枚举
+//鍙橀€熷櫒妯″紡鏋氫妇
 typedef enum GEAR_MODE
 {
-	ENVIOLO_INACTIVE = 0x00,
-	ENVIOLO_ACTIVE = 0x01,
-	ENVIOLO_MANUAL_MODE = 0x03,
-	ENVIOLO_AUTO_MODE = 0x04,
-	ENVIOLO_CAL_MODE = 0x08
+    ENVIOLO_INACTIVE = 0x00,
+    ENVIOLO_ACTIVE = 0x01,
+    ENVIOLO_MANUAL_MODE = 0x03,
+    ENVIOLO_AUTO_MODE = 0x04,
+    ENVIOLO_CAL_MODE = 0x08
 }GearMode_Struct_t;
 
-//变速器控制参数
+//鍙橀€熷櫒鎺у埗鍙傛暟
 typedef struct CONTROL_PARAMS
 {
-	GearMode_Struct_t GearMode;
-	uint16_t RatioMode_Data;
-	uint16_t CadenceMode_Data;
-	uint8_t RS1;
-	uint8_t RS2;
-	uint8_t RS3;
+    GearMode_Struct_t GearMode;
+    uint16_t RatioMode_Data;
+    uint16_t CadenceMode_Data;
+    uint8_t RS1;
+    uint8_t RS2;
+    uint8_t RS3;
 }EnvioloControlParams_Struct_t;
 
 /**********************************End******************************/
 
-//变速器CAN报文数据
+//鍙橀€熷櫒CAN鎶ユ枃鏁版嵁
 typedef struct GEARBOX_CAN_DATA
 {
-	BOOL RefreshFlag;
-	uint8_t RS;
-	uint16_t ID;
-	uint8_t Data[8];
+    BOOL RefreshFlag;
+    uint8_t RS;
+    uint16_t ID;
+    uint8_t Data[8];
 }GearBox_CanData_Struct_t;
 
-/******************************仪表与变速器通信协议内容*******************************/
-//发送仪表运行信息变速器运行状态
+/******************************浠�〃涓庡彉閫熷櫒閫氫俊鍗忚�鍐呭�*******************************/
+//鍙戦€佷华琛ㄨ繍琛屼俊鎭�彉閫熷櫒杩愯�鐘舵€�
 typedef enum GEAR_BOX_STATUS
 {
-        GEAR_STATUS_INITIAL = (uint8_t)(1 << 5),    //初始化模式
-	GEAR_STATUS_MANUAL = (uint8_t)(2 << 5),     //手动模式
-	GEAR_STATUS_AUTO = (uint8_t)(4 << 5),       //自动模式
-        GEAR_STATUS_OFFLINE = (uint8_t)0xF0         //离线模式
+    GEAR_STATUS_INITIAL = (uint8_t)(1 << 5),    //鍒濆�鍖栨ā寮�
+    GEAR_STATUS_MANUAL = (uint8_t)(2 << 5),     //鎵嬪姩妯″紡
+    GEAR_STATUS_AUTO = (uint8_t)(4 << 5),       //鑷�姩妯″紡
+    GEAR_STATUS_OFFLINE = (uint8_t)0xF0         //绂荤嚎妯″紡
 }GearBox_Status_Struct_t;
 
-//仪表发送变速器工作模式
+//浠�〃鍙戦€佸彉閫熷櫒宸ヤ綔妯″紡
 typedef enum GEAR_BOX_MODE
 {
-        GEAR_MODE_NULL = (uint8_t)0x00,    //初始化模式位无效值
-	GEAR_MODE_MANUAL = (uint8_t)0x03,  //自动模式
-	GEAR_MODE_AUTO = (uint8_t)0x04,    //手动模式
-        GEAR_MODE_CAL = (uint8_t)0x08      //校准模式
+    GEAR_MODE_NULL = (uint8_t)0x00,    //鍒濆�鍖栨ā寮忎綅鏃犳晥鍊�
+    GEAR_MODE_MANUAL = (uint8_t)0x03,  //鑷�姩妯″紡
+    GEAR_MODE_AUTO = (uint8_t)0x04,    //鎵嬪姩妯″紡
+    GEAR_MODE_CAL = (uint8_t)0x08      //鏍″噯妯″紡
 }GearBox_Mode_Struct_t;
 
-//发送仪表校准状态
+//鍙戦€佷华琛ㄦ牎鍑嗙姸鎬�
 typedef enum GEAR_BOX_CAL_FLAG
 {
-	GEAR_CAL_SUCCESS = 0X00,           //无需校准或校准成功
-	GEAR_CAL_NEED = 0x01,              //需要校准
-	GEAR_CAL_PEDAL = 0x02              //提示踩踏
+    GEAR_CAL_SUCCESS = 0X00,           //鏃犻渶鏍″噯鎴栨牎鍑嗘垚鍔�
+    GEAR_CAL_NEED = 0x01,              //闇€瑕佹牎鍑�
+    GEAR_CAL_PEDAL = 0x02              //鎻愮ず韪╄笍
 }GearBox_CalFlag_Struct_t;
 
-//仪表设置变速器模式 0x4008
+//浠�〃璁剧疆鍙橀€熷櫒妯″紡 0x4008
 typedef struct OBC_SET_MODE
 {
-        GearBox_Mode_Struct_t Mode;      //变速器工作模式,手动、自动、校准
-	uint8_t Value;                     //手动模式变速比或自动模式目标踏频
-	uint8_t RS[6];
+    GearBox_Mode_Struct_t Mode;      //鍙橀€熷櫒宸ヤ綔妯″紡锛屾墜鍔ㄣ€佽嚜鍔ㄣ€佹牎鍑�
+    uint8_t Value;                     //鎵嬪姩妯″紡鍙橀€熸瘮鎴栬嚜鍔ㄦā寮忕洰鏍囪笍棰�
+    uint8_t RS[6];
 }GearBox_OBC_SetMode_Struct_t;
 
-//仪表配置变速器参数 0x4208
+//浠�〃閰嶇疆鍙橀€熷櫒鍙傛暟 0x4208
 typedef struct OBC_SET_PARAMS
 {
-        uint8_t GearNum;                 //手动模式档位数量
- 	uint8_t CadenceMin;                //自动模式最低踏频
-	uint8_t CadenceMax;                //自动模式最高踏频
-	uint8_t RS[5];
+    uint8_t GearNum;                 //鎵嬪姩妯″紡妗d綅鏁伴噺
+    uint8_t CadenceMin;                //鑷�姩妯″紡鏈€浣庤笍棰�
+    uint8_t CadenceMax;                //鑷�姩妯″紡鏈€楂樿笍棰�
+    uint8_t RS[5];
 }GearBox_OBC_SetParams_Struct_t;
 
 /*************************************End*************************************/
 
-//全局变量定义
-extern EnvioloGearInfo1_Struct_t EnvioloGearInfo1;            //Enviolo变速器运行信息,踏频、传动比、车速、电压、车轮转速、状态、错误码等
-extern EnvioloGearInfo2_Struct_t EnvioloGearInfo2;            //Enviolo变速器版本信息
-extern EnvioloConfigParams_Struct_t EnvioloConfigParams;      //Enviolo变速器配置参数,前牙盘、后牙盘、最低踏频、最高踏频、周长、自动关机时间等
-extern EnvioloControlParams_Struct_t EnvioloControlParams;    //Enviolo变速器控制参数,运行模式(手动、自动、校准)、目标传动比或目标踏频
+//鍏ㄥ眬鍙橀噺瀹氫箟
+extern EnvioloGearInfo1_Struct_t EnvioloGearInfo1;            //Enviolo鍙橀€熷櫒杩愯�淇℃伅锛岃笍棰戙€佷紶鍔ㄦ瘮銆佽溅閫熴€佺數鍘嬨€佽溅杞�浆閫熴€佺姸鎬併€侀敊璇�爜绛�
+extern EnvioloGearInfo2_Struct_t EnvioloGearInfo2;            //Enviolo鍙橀€熷櫒鐗堟湰淇℃伅
+extern EnvioloConfigParams_Struct_t EnvioloConfigParams;      //Enviolo鍙橀€熷櫒閰嶇疆鍙傛暟锛屽墠鐗欑洏銆佸悗鐗欑洏銆佹渶浣庤笍棰戙€佹渶楂樿笍棰戙€佸懆闀裤€佽嚜鍔ㄥ叧鏈烘椂闂寸瓑
+extern EnvioloControlParams_Struct_t EnvioloControlParams;    //Enviolo鍙橀€熷櫒鎺у埗鍙傛暟锛岃繍琛屾ā寮忥紙鎵嬪姩銆佽嚜鍔ㄣ€佹牎鍑嗭級銆佺洰鏍囦紶鍔ㄦ瘮鎴栫洰鏍囪笍棰�
 
-extern GearBox_CanData_Struct_t GearBox_CanData;              //变速器CAN报文
-extern BOOL GearBox_ComIsOK_Flag;                             //变速器通信状态
-extern uint32_t GearBox_ComTrigTime;                          //变速器通信超时计数
+extern GearBox_CanData_Struct_t GearBox_CanData;              //鍙橀€熷櫒CAN鎶ユ枃
+extern BOOL GearBox_ComIsOK_Flag;                             //鍙橀€熷櫒閫氫俊鐘舵€�
+extern uint32_t GearBox_ComTrigTime;                          //鍙橀€熷櫒閫氫俊瓒呮椂璁℃暟
 
-extern GearBox_OBC_SetMode_Struct_t GearBox_OBC_SetMode;      //仪表设置变速器配置参数,手动或自动或校准、手动变速比或自动踏频
-extern GearBox_OBC_SetParams_Struct_t GearBox_OBC_SetParams;  //仪表设置变速器工作参数,手动档位数量、自动最低踏频、自动最高踏频
-extern GearBox_Status_Struct_t GearBox_Status;                //变速器当前状态,初始化、手动、自动、离线
-extern GearBox_CalFlag_Struct_t GearBox_CalFlag;              //变速器校准标志,无需校准或校准成功、需要校准、提示踩踏
-extern uint16_t GearBox_RatioTable[24];                       //变速器变速比与档位对照表
+extern GearBox_OBC_SetMode_Struct_t GearBox_OBC_SetMode;      //浠�〃璁剧疆鍙橀€熷櫒閰嶇疆鍙傛暟锛屾墜鍔ㄦ垨鑷�姩鎴栨牎鍑嗐€佹墜鍔ㄥ彉閫熸瘮鎴栬嚜鍔ㄨ笍棰�
+extern GearBox_OBC_SetParams_Struct_t GearBox_OBC_SetParams;  //浠�〃璁剧疆鍙橀€熷櫒宸ヤ綔鍙傛暟锛屾墜鍔ㄦ。浣嶆暟閲忋€佽嚜鍔ㄦ渶浣庤笍棰戙€佽嚜鍔ㄦ渶楂樿笍棰�
+extern GearBox_Status_Struct_t GearBox_Status;                //鍙橀€熷櫒褰撳墠鐘舵€侊紝鍒濆�鍖栥€佹墜鍔ㄣ€佽嚜鍔ㄣ€佺�绾�
+extern GearBox_CalFlag_Struct_t GearBox_CalFlag;              //鍙橀€熷櫒鏍″噯鏍囧織锛屾棤闇€鏍″噯鎴栨牎鍑嗘垚鍔熴€侀渶瑕佹牎鍑嗐€佹彁绀鸿俯韪�
+extern uint16_t GearBox_RatioTable[24];                       //鍙橀€熷櫒鍙橀€熸瘮涓庢。浣嶅�鐓ц〃
 
-//全局函数定义
+//鍏ㄥ眬鍑芥暟瀹氫箟
 extern void GearBox_CanProcess(GearBox_CanData_Struct_t* CanData);
 extern void GearBox_Send_OBC_Params(GearBox_CalFlag_Struct_t CalFlag, GearBox_OBC_SetParams_Struct_t* p_GearBox_OBC_SetParams, uint8_t* p_EnvioloSoftVer);
-extern void GearBox_Init(void);//根据Enviolo的通信状态确定变速器是否在线,初始化变速器工作参数
-extern void GearBox_Loop(void);//变速器数据处理主函数
+extern void GearBox_Init(void);//鏍规嵁Enviolo鐨勯€氫俊鐘舵€佺‘瀹氬彉閫熷櫒鏄�惁鍦ㄧ嚎锛屽垵濮嬪寲鍙橀€熷櫒宸ヤ綔鍙傛暟
+extern void GearBox_Loop(void);//鍙橀€熷櫒鏁版嵁澶勭悊涓诲嚱鏁�
 
 #endif

+ 1 - 1
User project/3.BasicFunction/Source/can.c

@@ -205,7 +205,7 @@ void SendData(UWORD ID, UBYTE Mode, UWORD Command, const UBYTE *Data)
     	DataLength = 251 - 4 - 4;
     }
     memcpy(CanSendData_CRC_Buf + 4, CanSendData + 2, DataLength + 4);
-    CRC_Result = CRC32_Calculate(CanSendData_CRC_Buf, DataLength + 8); //֡ͷ2bytes + ID 2bytes + ģʽ 1byte + ����γ��� 1byte + ������ 2bytes
+    CRC_Result = CRC32_Calculate(CanSendData_CRC_Buf, DataLength + 8); //帧头2bytes + ID 2bytes + 模式 1byte + 命令段长度 1byte + 命令字 2bytes
     CanSendData[6 + DataLength] = (UBYTE)((CRC_Result >> 24) & 0xFF);
     CanSendData[7 + DataLength] = (UBYTE)((CRC_Result >> 16) & 0xFF);
     CanSendData[8 + DataLength] = (UBYTE)((CRC_Result >> 8) & 0xFF);

+ 24 - 24
User project/3.BasicFunction/Source/canAppl.c

@@ -259,7 +259,7 @@ void Can_voInitMC_Run(void)
     mth_voLPFilterCoef(1000000 / 100, EVENT_1MS_HZ, &BMS_swCurIdcLpf.uwKx); // 100Hz
 }
 
-void Can_voMC_Run_1ms(void) /* parasoft-suppress METRICS-28 "鏈」鐩湀澶嶆潅搴︽棤娉曟洿鏀癸紝鍚庣画閬垮厤" */
+void Can_voMC_Run_1ms(void) 
 {
     if (cp_stBikeRunInfoPara.BikeSpeedKmH > 30)
     {
@@ -575,7 +575,8 @@ void Can_voMC_Run_5ms(void)
     {
         ULONG ulBikeSpeedCalTrip = 0;
         static ULONG ulBikeSpeedCalTripCount = 0;
-        cp_stBikeRunInfoPara.BikeSpeedKmH = (((ULONG)cadence_stFreGetOut.uwLPFFrequencyPu * cof_uwFbHz * 60) >> 20)*ass_stParaCong.uwNmFrontChainring/ass_stParaCong.uwNmBackChainring*(ass_stParaCong.uwWheelPerimeter + ass_stParaCong.swDeltPerimeter)*6/1000;
+        cp_stBikeRunInfoPara.BikeSpeedKmH = (((ULONG)cadence_stFreGetOut.uwLPFFrequencyPu * cof_uwFbHz * 60) >> 20) \
+                                            * ass_stParaCong.uwNmFrontChainring/ass_stParaCong.uwNmBackChainring*(ass_stParaCong.uwWheelPerimeter + ass_stParaCong.swDeltPerimeter)*6/1000;
         ulBikeSpeedCalTripCount++;
         ulBikeSpeedCalTrip = cp_stBikeRunInfoPara.BikeSpeedKmH * 5 * ulBikeSpeedCalTripCount / 36000;
         if(ulBikeSpeedCalTrip > 100)
@@ -617,8 +618,8 @@ void Can_voMC_Run_200ms(void)
         SendData(ID_MC_TO_CDL, MODE_REPORT, 0xBA20, (UBYTE *)&MC_RunInfoToCDL.SysStatus);
     }
 
-    MC_RunInfo.BikeSpeed = cp_stBikeRunInfoPara.BikeSpeedKmH;                ///>杞﹂€?0.1km/h锛屽湴鍧€鍋忕Щ0
-    MC_RunInfo.MotorSpeed = (SWORD)((SLONG)scm_uwSpdFbkLpfAbsPu * (SLONG)cof_uwVbRpm >> 15); ///>杈撳嚭杞€?1rpm锛屽湴鍧€鍋忕Щ2
+    MC_RunInfo.BikeSpeed = cp_stBikeRunInfoPara.BikeSpeedKmH;                //0.1km/h
+    MC_RunInfo.MotorSpeed = (SWORD)((SLONG)scm_uwSpdFbkLpfAbsPu * (SLONG)cof_uwVbRpm >> 15); //1rpm
     TempPower = scm_swMotorPwrInLpfWt;
     if (TempPower > 5000)
     {
@@ -645,26 +646,26 @@ void Can_voMC_Run_200ms(void)
       MC_RunInfo.Power = (PowerFlt < 0) ? 0 : (PowerFlt) >> 10;
     }while(0);
     
-    //MC_RunInfo.Power = TempPower / 10;                                                                    ///>鐢靛姛鐜?1W锛屽湴鍧€鍋忕Щ4
+    //MC_RunInfo.Power = TempPower / 10;                                                                    //>电功率 1W
     //MC_RunInfo.Power = (scm_swIqFdbLpfPu * 250 * cof_uwIbAp / 1500) >> 14;                                      //MaxIq = 15A,MaxPower=250W
-    MC_RunInfo.BusVoltage = (UWORD)((((ULONG)adc_stUpOut.uwVdcLpfPu + (ULONG)BMS_VoltEstimat.uwVdcCompPu) * cof_uwUbVt * 100) >> 14); ///>姣嶇嚎鐢靛帇 1mV锛屽湴鍧€鍋忕Щ6
-    //MC_RunInfo.BusCurrent = (UWORD)((ULONG)BMS_VoltEstimat.swIdcPu * cof_uwIbAp * 100 >> 14);                                  ///>姣嶇嚎鐢垫祦 1mA锛屽湴鍧€鍋忕Щ8
+    MC_RunInfo.BusVoltage = (UWORD)((((ULONG)adc_stUpOut.uwVdcLpfPu + (ULONG)BMS_VoltEstimat.uwVdcCompPu) * cof_uwUbVt * 100) >> 14); //母线电压 1mV
+    //MC_RunInfo.BusCurrent = (UWORD)((ULONG)BMS_VoltEstimat.swIdcPu * cof_uwIbAp * 100 >> 14);                                  //母线电流 1mA
     MC_RunInfo.BusCurrent = (scm_swIqFdbLpfPu * cof_uwIbAp * 10) >> 14;
-    MC_RunInfo.Cadence = (UBYTE)(((ULONG)cadence_stFreGetOut.uwLPFFrequencyPu * cof_uwFbHz * 60) >> 20);                              ///>韪忛 1rpm锛屽湴鍧€鍋忕Щ10
-    MC_RunInfo.Torque = (UBYTE)(((ULONG)torsensor_stTorSensorOut.uwTorqueLPFPu * cof_uwTorqNm / 10) >> 14);                    ///>韪╄笍鍔涚煩 1Nm锛屽湴鍧€鍋忕Щ11
-    MC_RunInfo.CadenceDir = (MC_CadenceDir_Struct_t)cadence_stFreGetOut.cadence_dir;                                  ///>韪╄笍鏂瑰悜 0-姝?1-鍙?2-鍋滄锛屽湴鍧€鍋忕Щ12
-    MC_RunInfo.GearSt = (UBYTE)MC_ControlCode.GearSt;                                                                        ///>鍔╁姏妗d綅锛屽湴鍧€鍋忕Щ13
-    MC_RunInfo.LightSwitch = MC_ControlCode.LightSwitch;                                                              ///>鐏紑鍏?0xF0-鍏筹紝0xF1-寮€锛屽湴鍧€鍋忕Щ14
-    MC_RunInfo.SOC = (UBYTE)Can_SOC_Cal();                                                                                   ///>鍓╀綑鐢甸噺 1%锛屽湴鍧€鍋忕Щ15
+    MC_RunInfo.Cadence = (UBYTE)(((ULONG)cadence_stFreGetOut.uwLPFFrequencyPu * cof_uwFbHz * 60) >> 20);                              //踏频 1rpm
+    MC_RunInfo.Torque = (UBYTE)(((ULONG)torsensor_stTorSensorOut.uwTorqueLPFPu * cof_uwTorqNm / 10) >> 14);                    //踩踏力矩 1Nm
+    MC_RunInfo.CadenceDir = (MC_CadenceDir_Struct_t)cadence_stFreGetOut.cadence_dir;                                  //踩踏方向 0-正,1-反,2-停止
+    MC_RunInfo.GearSt = (UBYTE)MC_ControlCode.GearSt;                                                                        //助力档位
+    MC_RunInfo.LightSwitch = MC_ControlCode.LightSwitch;                                                              //灯开关 0xF0-关,0xF1-开
+    MC_RunInfo.SOC = (UBYTE)Can_SOC_Cal();                                                                                   //剩余电量 1%
     Can_Trip_Cal();
-    MC_RunInfo.ODO_Km = (UWORD)(MC_RideLog.ODO_Km / 10);                                                                       ///>鎬婚噷绋?1km锛屽湴鍧€鍋忕Щ18
+    MC_RunInfo.ODO_Km = (UWORD)(MC_RideLog.ODO_Km / 10);                                                                       //总里程 1km
 
     if (cp_stBikeRunInfoPara.blGearStUpdate)
     {
         if((cp_stBikeRunInfoPara.uwBikeGear > 0) && (cp_stBikeRunInfoPara.uwBikeGear <= 5))
         {
             MC_RunInfo.PowerPerKm =
-                    (UBYTE)(*(&cp_stHistoryPara.uwG1AvgPwrConsumption + (cp_stBikeRunInfoPara.uwBikeGear - 1)) / 10); ///>楠炲啿娼庨崝鐔烩偓?0.01Ah/km 閿涘苯婀撮崸鈧崑蹇曅?0 
+                    (UBYTE)(*(&cp_stHistoryPara.uwG1AvgPwrConsumption + (cp_stBikeRunInfoPara.uwBikeGear - 1)) / 10); //平均功耗 0.01Ah/km
             MC_RunInfo.RemainDistance = BMS_RunInfo.RC / MC_RunInfo.PowerPerKm / 10;
         }
         else
@@ -680,10 +681,10 @@ void Can_voMC_Run_200ms(void)
         cp_stBikeRunInfoPara.uwAvePowerCNT = 0;
         cp_stBikeRunInfoPara.uwCruisDis = 0;
     }
-    MC_RunInfo.T_PCB = (UBYTE)adc_stUpOut.PCBTemp + (UBYTE)40;                    ///>PCB娓╁害 +40鈩冿紝鍦板潃鍋忕Щ21
-    MC_RunInfo.T_Coil = (UBYTE)adc_stUpOut.PCBTemp + (UBYTE)40;                   ///>缁曠粍娓╁害 +40鈩冿紝鍦板潃鍋忕Щ22
-    MC_RunInfo.T_MCU = (UBYTE)adc_stUpOut.PCBTemp + (UBYTE)40;                    ///>MCU娓╁害 +40鈩冿紝鍦板潃鍋忕Щ23
-    MC_RunInfo.Ride_Time = (UWORD)(cp_stBikeRunInfoPara.ulRiTime >> 10);     ///>寮€鏈哄悗楠戣鏃堕棿 1s锛屽湴鍧€鍋忕Щ26
+    MC_RunInfo.T_PCB = (UBYTE)adc_stUpOut.PCBTemp + (UBYTE)40;                    //>PCB温度 +40℃
+    MC_RunInfo.T_Coil = (UBYTE)adc_stUpOut.PCBTemp + (UBYTE)40;                   //绕组温度 +40℃
+    MC_RunInfo.T_MCU = (UBYTE)adc_stUpOut.PCBTemp + (UBYTE)40;                    //MCU温度 +40℃,
+    MC_RunInfo.Ride_Time = (UWORD)(cp_stBikeRunInfoPara.ulRiTime >> 10);     //开机后骑行时间 1s
 
     if (MC_WorkMode == 1)
     {
@@ -721,7 +722,7 @@ void Can_RemainTrip_Cal(void)
 {
     if(blBMSCommFault == FALSE)
     {
-        UWORD uwCruisCoef;                         //鎷ц墷鑹ц剾鑶告湪鑷夊獟Q12
+        UWORD uwCruisCoef;                         //单位功耗
         cp_stBikeRunInfoPara.uwCruisDis++;        // 0.1 km
         if (cp_stBikeRunInfoPara.uwCruisDis >= 5) // 5 = 0.5km
         {
@@ -823,7 +824,7 @@ static BOOL  blSOCfirstSet = FALSE;
 UWORD Can_SOC_Cal(void)
 {
     UWORD templenght, VoltageAvg = 0;
-    //寮€鏈?s绛夊緟鐢靛帇绋冲畾鍚庡垵濮嬪寲鐢甸噺
+
     if (cp_ulSystickCnt < 1000)
     {
         return (UWORD)0;
@@ -857,7 +858,6 @@ UWORD Can_SOC_Cal(void)
         }
         blSOCfirstSet = TRUE;
     }
-    //1min鏇存柊涓€娆$數閲?
     else
     {
         templenght = 300; // 60s in 200ms time task
@@ -907,14 +907,14 @@ void Can_GearSt_switch(void)
 {
     cp_stBikeRunInfoPara.uwBikeGearLast = cp_stBikeRunInfoPara.uwBikeGear;
 
-    if (MC_WorkMode == 1) // 閰嶇疆妯″紡涓嶈嚜鍔ㄥ叧闂姪鍔?
+    if (MC_WorkMode == 1) 
     {
         ulOBC_ComTimeOutCount = cp_ulSystickCnt;
     }
 #ifdef RUN_ARCH_SIM 
     ulOBC_ComTimeOutCount = cp_ulSystickCnt;
 #endif
-    if ((cp_ulSystickCnt - ulOBC_ComTimeOutCount) < 3000) // 鎺у埗鍣ㄤ笌浠〃閫氫俊涓柇瓒呰繃3s锛屽叧闂姪鍔?
+    if ((cp_ulSystickCnt - ulOBC_ComTimeOutCount) < 3000) 
     {
         if (MC_ControlCode.GearSt <= 0x05)
         {

+ 303 - 301
User project/3.BasicFunction/Source/enviolo_can.c

@@ -1,346 +1,348 @@
-#include "enviolo_can.h"
+锘�#include "enviolo_can.h"
 #include "can.h"
 #include "canAppl.h"
 #include "string.h"
 #include "CodePara.h"
 #include "AssistCurve.h"
 
-/********全局变量定义********/
+/********鍏ㄥ眬鍙橀噺瀹氫箟********/
 EnvioloGearInfo1_Struct_t EnvioloGearInfo1 = {0, 0, 0, 0, 0, 0, 0, 0};
 EnvioloGearInfo2_Struct_t EnvioloGearInfo2 = {0, 0, 0, 0, 0, 0, 0, 0};
-EnvioloConfigParams_Struct_t EnvioloConfigParams = {43, 20, 30, 90, 0, 119, 5, 0};        //默认前牙盘43T,后牙盘20T,最低踏频30rpm,最高踏频90rpm,车轮周长219cm,自动关机时间5min
-EnvioloControlParams_Struct_t EnvioloControlParams = {ENVIOLO_INACTIVE, 0, 0, 0, 0, 0};   //默认未激活,目标变速比0,目标踏频0
-GearBox_CanData_Struct_t GearBox_CanData = {FALSE, 0, 0, {0, }};                          //CAN报文数据
-BOOL GearBox_ComIsOK_Flag = FALSE;                                                        //变速器通信状态
-uint32_t GearBox_ComTrigTime = 0;                                                         //变速器通信超时计数
-GearBox_OBC_SetMode_Struct_t GearBox_OBC_SetMode = {GEAR_MODE_NULL, 0, 0, 0, 0, 0, 0, 0}; //默认无效值,目标0
-GearBox_OBC_SetParams_Struct_t GearBox_OBC_SetParams = {9, 30, 120, 0, 0, 0, 0, 0};        //默认9档,最低踏频30rpm,最高踏频90rpm
-GearBox_Status_Struct_t GearBox_Status = GEAR_STATUS_OFFLINE;                             //变速器状态默认为初始化
-GearBox_CalFlag_Struct_t GearBox_CalFlag = GEAR_CAL_SUCCESS;                              //变速器默认校准完成
-uint16_t GearBox_RatioTable[24] = {500, 662, 824, 986, 1148, 1310, 1472, 1634, 1800, };   //变速器变速比与档位对照表,默认9速
+EnvioloConfigParams_Struct_t EnvioloConfigParams = {43, 20, 30, 90, 0, 119, 5, 0};        //榛樿�鍓嶇墮鐩�43T锛屽悗鐗欑洏20T锛屾渶浣庤笍棰�30rpm锛屾渶楂樿笍棰�90rpm锛岃溅杞�懆闀�219cm锛岃嚜鍔ㄥ叧鏈烘椂闂�5min
+EnvioloControlParams_Struct_t EnvioloControlParams = {ENVIOLO_INACTIVE, 0, 0, 0, 0, 0};   //榛樿�鏈�縺娲伙紝鐩�爣鍙橀€熸瘮0锛岀洰鏍囪笍棰�0
+GearBox_CanData_Struct_t GearBox_CanData = {FALSE, 0, 0, {0, }};                          //CAN鎶ユ枃鏁版嵁
+BOOL GearBox_ComIsOK_Flag = FALSE;                                                        //鍙橀€熷櫒閫氫俊鐘舵€�
+uint32_t GearBox_ComTrigTime = 0;                                                         //鍙橀€熷櫒閫氫俊瓒呮椂璁℃暟
+GearBox_OBC_SetMode_Struct_t GearBox_OBC_SetMode = {GEAR_MODE_NULL, 0, 0, 0, 0, 0, 0, 0}; //榛樿�鏃犳晥鍊硷紝鐩�爣0
+GearBox_OBC_SetParams_Struct_t GearBox_OBC_SetParams = {9, 30, 120, 0, 0, 0, 0, 0};        //榛樿�9妗o紝鏈€浣庤笍棰�30rpm锛屾渶楂樿笍棰�90rpm
+GearBox_Status_Struct_t GearBox_Status = GEAR_STATUS_OFFLINE;                             //鍙橀€熷櫒鐘舵€侀粯璁や负鍒濆�鍖�
+GearBox_CalFlag_Struct_t GearBox_CalFlag = GEAR_CAL_SUCCESS;                              //鍙橀€熷櫒榛樿�鏍″噯瀹屾垚
+uint16_t GearBox_RatioTable[24] = {500, 662, 824, 986, 1148, 1310, 1472, 1634, 1800, };   //鍙橀€熷櫒鍙橀€熸瘮涓庢。浣嶅�鐓ц〃锛岄粯璁�9閫�
 
-/********局部函数定义********/
-//发送Enviolo变速器配置参数
+/********灞€閮ㄥ嚱鏁板畾涔�********/
+//鍙戦€丒nviolo鍙橀€熷櫒閰嶇疆鍙傛暟
 void GearBox_Send_EnvioloConfigParams(EnvioloConfigParams_Struct_t* p_EnvioloConfigParams)
 {
-        uint8_t Data[8] = {0,};
-	memcpy(Data, (uint8_t*)&p_EnvioloConfigParams->FrontChain, 8);
-	CAN_SendData(ENVIOLO_CONFIG_ID, Data, 8);
+    uint8_t Data[8] = {0,};
+    memcpy(Data, (uint8_t*)&p_EnvioloConfigParams->FrontChain, 8);
+    CAN_SendData(ENVIOLO_CONFIG_ID, Data, 8);
 }
 
-//发送Enviolo变速器工作参数
+//鍙戦€丒nviolo鍙橀€熷櫒宸ヤ綔鍙傛暟
 void GearBox_Send_EnvioloControlParams(EnvioloControlParams_Struct_t* p_EnvioloControlParams)
 {
-        uint8_t Data[8] = {0,};
-	//避免大小端和内存对齐问题,赋值处理
-	Data[0] = p_EnvioloControlParams->GearMode;
-	Data[1] = p_EnvioloControlParams->RatioMode_Data >> 8;
-	Data[2] = p_EnvioloControlParams->RatioMode_Data & 0xFF;
-	Data[3] = p_EnvioloControlParams->CadenceMode_Data >> 8;
-	Data[4] = p_EnvioloControlParams->CadenceMode_Data & 0xFF;
-	Data[5] = 0;
-	Data[6] = 0;
-	Data[7] = 0;
-	CAN_SendData(ENVIOLO_CONTROL_ID, Data, 8);
+    uint8_t Data[8] = {0,};
+    //閬垮厤澶у皬绔�拰鍐呭瓨瀵归綈闂��锛岃祴鍊煎�鐞�
+    Data[0] = p_EnvioloControlParams->GearMode;
+    Data[1] = p_EnvioloControlParams->RatioMode_Data >> 8;
+    Data[2] = p_EnvioloControlParams->RatioMode_Data & 0xFF;
+    Data[3] = p_EnvioloControlParams->CadenceMode_Data >> 8;
+    Data[4] = p_EnvioloControlParams->CadenceMode_Data & 0xFF;
+    Data[5] = 0;
+    Data[6] = 0;
+    Data[7] = 0;
+    CAN_SendData(ENVIOLO_CONTROL_ID, Data, 8);
 }
 
-//根据变速器的变速比计算档位
+//鏍规嵁鍙橀€熷櫒鐨勫彉閫熸瘮璁$畻妗d綅
 uint8_t GearBox_CalGearSt(uint16_t Ratio, uint8_t Num)
 {
-	uint8_t Result = 0;
-	if(Ratio <= 500)
-		Result = 1;
-	else if(Ratio >= 1800)
-		Result = Num;
-	else
-                Result = (Ratio - 500) / (1300 / Num) + 1;
-        return Result;
+    uint8_t Result = 0;
+    if(Ratio <= 500)
+        Result = 1;
+    else if(Ratio >= 1800)
+        Result = Num;
+    else
+        Result = (Ratio - 500) / (1300 / Num) + 1;
+    return Result;
 }
 
-/*************************全局函数定义*******************************/
+/*************************鍏ㄥ眬鍑芥暟瀹氫箟*******************************/
 
-//变速器CAN报文解析
+//鍙橀€熷櫒CAN鎶ユ枃瑙f瀽
 void GearBox_CanProcess(GearBox_CanData_Struct_t* CanData)
 {
-	if(CanData->RefreshFlag == TRUE)
-	{
-	    //更新通信检测标志
-		GearBox_ComIsOK_Flag = TRUE;
-		GearBox_ComTrigTime = cp_ulSystickCnt;
-		//数据解析
-		if(CanData->ID == ID_ENVIOLO_TO_MC_1)
-		{
-                        EnvioloGearInfo1.Pedal_Rpm = CanData->Data[0];
-			EnvioloGearInfo1.Actual_Ratio = CanData->Data[1];
-			EnvioloGearInfo1.Bike_Speed = CanData->Data[2];
-			EnvioloGearInfo1.Battery_Vol = CanData->Data[3];
-			EnvioloGearInfo1.Wheel_Rpm = (uint16_t)(CanData->Data[4] << 8) + CanData->Data[5];
-			EnvioloGearInfo1.StatusFlag.Flag = CanData->Data[6];
-			EnvioloGearInfo1.ErrorFlag.Flag = CanData->Data[7];
-			//变速器校准成功标志1
-			if(EnvioloGearInfo1.StatusFlag.StatusFlagBit.CaliSuccessFlag == 1)
-			{
-				GearBox_CalFlag = GEAR_CAL_SUCCESS;
-			}
-			//变速器校准成功标志0
-			else
-			{
-				GearBox_CalFlag = GEAR_CAL_NEED;
-			}
-		}
-		else if(CanData->ID == ID_ENVIOLO_TO_MC_2)
-		{
-                        memcpy((uint8_t*)&EnvioloGearInfo2.PCB_Version_Major, (uint8_t*)CanData->Data, 8);
-		}
-		CanData->RefreshFlag = FALSE;
-	}
+    if(CanData->RefreshFlag == TRUE)
+    {
+        //鏇存柊閫氫俊妫€娴嬫爣蹇�
+        GearBox_ComIsOK_Flag = TRUE;
+        GearBox_ComTrigTime = cp_ulSystickCnt;
+        //鏁版嵁瑙f瀽
+        if(CanData->ID == ID_ENVIOLO_TO_MC_1)
+        {
+            EnvioloGearInfo1.Pedal_Rpm = CanData->Data[0];
+            EnvioloGearInfo1.Actual_Ratio = CanData->Data[1];
+            EnvioloGearInfo1.Bike_Speed = CanData->Data[2];
+            EnvioloGearInfo1.Battery_Vol = CanData->Data[3];
+            EnvioloGearInfo1.Wheel_Rpm = (uint16_t)(CanData->Data[4] << 8) + CanData->Data[5];
+            EnvioloGearInfo1.StatusFlag.Flag = CanData->Data[6];
+            EnvioloGearInfo1.ErrorFlag.Flag = CanData->Data[7];
+            //鍙橀€熷櫒鏍″噯鎴愬姛鏍囧織1
+            if(EnvioloGearInfo1.StatusFlag.StatusFlagBit.CaliSuccessFlag == 1)
+            {
+                GearBox_CalFlag = GEAR_CAL_SUCCESS;
+            }
+            //鍙橀€熷櫒鏍″噯鎴愬姛鏍囧織0
+            else
+            {
+                GearBox_CalFlag = GEAR_CAL_NEED;
+            }
+        }
+        else if(CanData->ID == ID_ENVIOLO_TO_MC_2)
+        {
+            memcpy((uint8_t*)&EnvioloGearInfo2.PCB_Version_Major, (uint8_t*)CanData->Data, 8);
+        }
+        
+        CanData->RefreshFlag = FALSE;
+    }
 }
 
-//发送仪表变速器参数
+//鍙戦€佷华琛ㄥ彉閫熷櫒鍙傛暟
 void GearBox_Send_OBC_Params(GearBox_CalFlag_Struct_t CalFlag, GearBox_OBC_SetParams_Struct_t* p_GearBox_OBC_SetParams, uint8_t* p_EnvioloSoftVer)
 {
-        uint8_t Data[16] = {0,};
-	Data[0] = CalFlag;
-	memcpy(Data + 1, (uint8_t*)&p_GearBox_OBC_SetParams->GearNum, 3);
-	Data[5] = *p_EnvioloSoftVer;
-	SendData(ID_MC_TO_PBU, MODE_REPORT, 0x5510, Data);
+    uint8_t Data[16] = {0,};
+    Data[0] = CalFlag;
+    memcpy(Data + 1, (uint8_t*)&p_GearBox_OBC_SetParams->GearNum, 3);
+    Data[5] = *p_EnvioloSoftVer;
+    SendData(ID_MC_TO_PBU, MODE_REPORT, 0x5510, Data);
 }
 
-//初始化变速器工作参数
+//鍒濆�鍖栧彉閫熷櫒宸ヤ綔鍙傛暟
 void GearBox_Init(void)
 {
-    //根据仪表配置的变速器档位数量初始化变速比与档位对照表    
-        do
-	{
-                uint16_t K;
-		if(GearBox_OBC_SetParams.GearNum < 5)
-			GearBox_OBC_SetParams.GearNum = 5;
-		else if(GearBox_OBC_SetParams.GearNum > 24)
-			GearBox_OBC_SetParams.GearNum = 24;
-		K = (18000 - 5000) / (GearBox_OBC_SetParams.GearNum - 1);
-                for(uint8_t i = 0 ; i < (sizeof(GearBox_RatioTable) >> 1); i++)
-                    GearBox_RatioTable[i] = 0;
-		for(uint8_t i = 0; i < (GearBox_OBC_SetParams.GearNum - 1); i++)
-		{
-			GearBox_RatioTable[i] = 500 + (i * K) / 10;
-		}
-		GearBox_RatioTable[GearBox_OBC_SetParams.GearNum - 1] = 1800;
-	}while(0);
+    //鏍规嵁浠�〃閰嶇疆鐨勫彉閫熷櫒妗d綅鏁伴噺鍒濆�鍖栧彉閫熸瘮涓庢。浣嶅�鐓ц〃    
+    do
+    {
+        uint16_t K;
+        if(GearBox_OBC_SetParams.GearNum < 5)
+            GearBox_OBC_SetParams.GearNum = 5;
+        else if(GearBox_OBC_SetParams.GearNum > 24)
+            GearBox_OBC_SetParams.GearNum = 24;
+        K = (18000 - 5000) / (GearBox_OBC_SetParams.GearNum - 1);
+        for(uint8_t i = 0 ; i < (sizeof(GearBox_RatioTable) >> 1); i++)
+            GearBox_RatioTable[i] = 0;
+        for(uint8_t i = 0; i < (GearBox_OBC_SetParams.GearNum - 1); i++)
+        {
+            GearBox_RatioTable[i] = 500 + (i * K) / 10;
+        }
+        GearBox_RatioTable[GearBox_OBC_SetParams.GearNum - 1] = 1800;
+    }while(0);
 
-	//初始化变速器参数
-	do
-	{
-		EnvioloConfigParams.FrontChain = MC_UpcInfo.stBikeInfo.uwNmFrontChainring;  //前牙盘,小牙盘升速比2.4
-		EnvioloConfigParams.RearTeeth = MC_UpcInfo.stBikeInfo.uwNmBackChainring;             //后牙盘
-		EnvioloConfigParams.WheelSize = MC_UpcInfo.stBikeInfo.uwWheelPerimeter + MC_UpcInfo.stBikeInfo.swWheelSizeAdjust - 100;  //周长,偏移100cm
-		EnvioloConfigParams.CadenceMin = GearBox_OBC_SetParams.CadenceMin;  //最低踏频
-		EnvioloConfigParams.CadenceMax = GearBox_OBC_SetParams.CadenceMax;  //最高踏频
-	}while(0);
+    //鍒濆�鍖栧彉閫熷櫒鍙傛暟
+    do
+    {
+        EnvioloConfigParams.FrontChain = MC_UpcInfo.stBikeInfo.uwNmFrontChainring;  //鍓嶇墮鐩橈紝灏忕墮鐩樺崌閫熸瘮2.4
+        EnvioloConfigParams.RearTeeth = MC_UpcInfo.stBikeInfo.uwNmBackChainring;             //鍚庣墮鐩�
+        EnvioloConfigParams.WheelSize = MC_UpcInfo.stBikeInfo.uwWheelPerimeter + MC_UpcInfo.stBikeInfo.swWheelSizeAdjust - 100;  //鍛ㄩ暱锛屽亸绉�100cm
+        EnvioloConfigParams.CadenceMin = GearBox_OBC_SetParams.CadenceMin;  //鏈€浣庤笍棰�
+        EnvioloConfigParams.CadenceMax = GearBox_OBC_SetParams.CadenceMax;  //鏈€楂樿笍棰�
+    }while(0);
 }
 
-//变速器处理主函数
+//鍙橀€熷櫒澶勭悊涓诲嚱鏁�
 void GearBox_Loop(void)
 {
-    //开机3s后变速器仍离线直接退出
-	if((cp_ulSystickCnt > 3000) && (GearBox_Status == GEAR_STATUS_OFFLINE))
-	{
-		MC_RunInfo.GearBoxInfo = GEAR_STATUS_OFFLINE;
-		return;
-	}
-	
-	//解析变速器CAN数据
-	GearBox_CanProcess(&GearBox_CanData);
+    //寮€鏈�3s鍚庡彉閫熷櫒浠嶇�绾跨洿鎺ラ€€鍑�
+    if((cp_ulSystickCnt > 3000) && (GearBox_Status == GEAR_STATUS_OFFLINE))
+    {
+        MC_RunInfo.GearBoxInfo = GEAR_STATUS_OFFLINE;
+        return;
+    }
 
-	//变速器在线检测
-	if(GearBox_ComIsOK_Flag == TRUE)
-	{
-                if((cp_ulSystickCnt - GearBox_ComTrigTime) > 1000) //变速器超时1s认为离线
-		{
-			GearBox_ComIsOK_Flag = FALSE;
-		}
-	}
+    //瑙f瀽鍙橀€熷櫒CAN鏁版嵁
+    GearBox_CanProcess(&GearBox_CanData);
 
-	//变速器状态更新
-	switch(GearBox_Status)
-	{
-		case GEAR_STATUS_OFFLINE: //初始状态为离线模式,检测到变速器通讯正常,跳转为初始化模式
-		{
-			MC_RunInfo.GearBoxInfo = GearBox_Status;
-			//发送指令,激活变速器
-			do
-			{
-				static uint32_t SendPeriodCnt = 0;
-				if((cp_ulSystickCnt - SendPeriodCnt) > 200)
-				{
-					EnvioloControlParams.GearMode = ENVIOLO_ACTIVE;
-					GearBox_Send_EnvioloControlParams(&EnvioloControlParams);
-					SendPeriodCnt = cp_ulSystickCnt;
-				}
-			}while(0);
+    //鍙橀€熷櫒鍦ㄧ嚎妫€娴�
+    if(GearBox_ComIsOK_Flag == TRUE)
+    {
+        if((cp_ulSystickCnt - GearBox_ComTrigTime) > 1000) //鍙橀€熷櫒瓒呮椂1s璁や负绂荤嚎
+        {
+            GearBox_ComIsOK_Flag = FALSE;
+        }
+    }
 
-			//变速器通讯正常,跳转初始化模式
-			if(GearBox_ComIsOK_Flag == TRUE)
-			{
-				GearBox_Status = GEAR_STATUS_INITIAL;
-			}
-			break;
-		}
-		case GEAR_STATUS_INITIAL:  //初始化模式,发送变速器状态给仪表
-		{
-                        MC_RunInfo.GearBoxInfo = (GearBox_Status & 0xE0) + 0x00;
-			//初始化完成,主动发送OBC变速器参数,发送5次。
-			do
-			{
-				static uint32_t SendPeriodCnt = 0;
-				static uint8_t SendCount = 0;
-				if(SendCount >= 5)
-					continue;
-				if((cp_ulSystickCnt - SendPeriodCnt) > 200)
-				{
-					GearBox_Send_OBC_Params(GearBox_CalFlag, &GearBox_OBC_SetParams, &EnvioloGearInfo2.Soft_Version);
-					SendPeriodCnt = cp_ulSystickCnt;
-					SendCount++;
-				}
-			}while(0);
-			
-			//等待仪表设置变速器工作模式,跳转到对应的模式
-			if(GearBox_OBC_SetMode.Mode != GEAR_MODE_NULL)
-			{
-				if(GearBox_OBC_SetMode.Mode == GEAR_MODE_MANUAL) //仪表设置变速器进入手动模式
-				{
-					GearBox_Status = GEAR_STATUS_MANUAL;
-				}
-				else if((GearBox_OBC_SetMode.Mode == GEAR_MODE_AUTO) || (GearBox_OBC_SetMode.Mode == GEAR_MODE_CAL)) //仪表设置变速器进入自动模式或校准模式
-				{
-					GearBox_Status = GEAR_STATUS_AUTO;
-				}
-			}			
-			break;
-		}
-		case GEAR_STATUS_MANUAL: case GEAR_STATUS_AUTO:  //手动、自动、校准,三种模式共用一个状态
-		{
-			//进入校准模式
-			if(GearBox_OBC_SetMode.Mode == GEAR_MODE_CAL)
-			{
-				EnvioloControlParams.GearMode = ENVIOLO_CAL_MODE;
-				EnvioloControlParams.RatioMode_Data = 0;
-				EnvioloControlParams.CadenceMode_Data = 0;
-			}
-			//进入手动模式
-			else if(GearBox_OBC_SetMode.Mode == GEAR_MODE_MANUAL)
-			{
-				GearBox_Status = GEAR_STATUS_MANUAL;
-				EnvioloControlParams.GearMode = ENVIOLO_MANUAL_MODE;
-				if(GearBox_OBC_SetMode.Value < 1)
-					EnvioloControlParams.RatioMode_Data = GearBox_RatioTable[0];
-				else if(GearBox_OBC_SetMode.Value > GearBox_OBC_SetParams.GearNum)
-					EnvioloControlParams.RatioMode_Data = GearBox_RatioTable[GearBox_OBC_SetParams.GearNum - 1];
-				else
-					EnvioloControlParams.RatioMode_Data = GearBox_RatioTable[GearBox_OBC_SetMode.Value - 1];
-				EnvioloControlParams.CadenceMode_Data = 0;
-			}
-			//进入自动模式
-			else if(GearBox_OBC_SetMode.Mode == GEAR_MODE_AUTO)
-			{
-				GearBox_Status = GEAR_STATUS_AUTO;
-				EnvioloControlParams.GearMode = ENVIOLO_AUTO_MODE;
-				if(GearBox_OBC_SetMode.Value < GearBox_OBC_SetParams.CadenceMin)
-					EnvioloControlParams.CadenceMode_Data = GearBox_OBC_SetParams.CadenceMin;
-				else if(GearBox_OBC_SetMode.Value > GearBox_OBC_SetParams.CadenceMax)
-					EnvioloControlParams.CadenceMode_Data = GearBox_OBC_SetParams.CadenceMax;
-                                else
-                                        EnvioloControlParams.CadenceMode_Data = GearBox_OBC_SetMode.Value;
-				EnvioloControlParams.RatioMode_Data = 0;
-			}
-			//更新变速器运行信息,高5位表示变速器状态,低5位表示变速器当前档位
-			if(GearBox_ComIsOK_Flag == FALSE) //离线模式
-			{
-				MC_RunInfo.GearBoxInfo = GEAR_STATUS_OFFLINE;
-			}
-			else //在线时发送变速器信息
-			{
-                                if(GearBox_Status == GEAR_STATUS_MANUAL) //手动模式低五位发送挡位
-				{
-					MC_RunInfo.GearBoxInfo = (GearBox_Status & 0xE0) + (GearBox_CalGearSt(EnvioloGearInfo1.Actual_Ratio * 100, GearBox_OBC_SetParams.GearNum) & 0x1F);
-				}
-				else if(GearBox_Status == GEAR_STATUS_AUTO) //自动模式低五位发送变速比,单位0.1
-				{
-					MC_RunInfo.GearBoxInfo = (GearBox_Status & 0xE0) + (EnvioloGearInfo1.Actual_Ratio & 0x1F);
-				}
-			}					
-			//定时发送变速器控制指令
-			do
-			{
-				static uint32_t SendPeriodCnt = 0;
-				static uint8_t SendPluseCnt = 0;
-				static uint8_t SendCalCnt = 0;
+    //鍙橀€熷櫒鐘舵€佹洿鏂�
+    switch(GearBox_Status)
+    {
+        case GEAR_STATUS_OFFLINE: //鍒濆�鐘舵€佷负绂荤嚎妯″紡锛屾�娴嬪埌鍙橀€熷櫒閫氳�姝e父锛岃烦杞�负鍒濆�鍖栨ā寮�
+                                  {
+                                      MC_RunInfo.GearBoxInfo = GearBox_Status;
+                                      //鍙戦€佹寚浠わ紝婵€娲诲彉閫熷櫒
+                                      do
+                                      {
+                                          static uint32_t SendPeriodCnt = 0;
+                                          if((cp_ulSystickCnt - SendPeriodCnt) > 200)
+                                          {
+                                              EnvioloControlParams.GearMode = ENVIOLO_ACTIVE;
+                                              GearBox_Send_EnvioloControlParams(&EnvioloControlParams);
+                                              SendPeriodCnt = cp_ulSystickCnt;
+                                          }
+                                      }while(0);
 
-				if((cp_ulSystickCnt - SendPeriodCnt) > 1000) 
-				{
-					if(GearBox_OBC_SetMode.Mode == GEAR_MODE_CAL) //校准指令只发送5次
-					{
-						if(SendCalCnt < 5)
-						{
-							GearBox_Send_EnvioloControlParams(&EnvioloControlParams); //发送控制指令
-							SendCalCnt++;
-						}
-						SendPluseCnt = 0;
-					}
-					else //手动和自动指令定时发送
-					{
-						if(SendPluseCnt < 1)
-						{
-							GearBox_Send_EnvioloConfigParams(&EnvioloConfigParams); //发送配置参数
-							SendPluseCnt++;
-						}
-						else if(SendPluseCnt < 5)
-						{
-							GearBox_Send_EnvioloControlParams(&EnvioloControlParams); //发送控制指令
-							SendPluseCnt++;
-							if(SendPluseCnt >= 5)
-							{
-								SendPluseCnt = 0;
-							}
-						}
-						SendCalCnt = 0;
-					}
-					SendPeriodCnt = cp_ulSystickCnt;
-				}				 
-			}while(0);
-			//校准模式定时发送踩踏提示
-			do
-			{
-                                static uint32_t SendPeriodCnt = 0;
-				static uint8_t SendCount = 0xFF;
-				GearBox_CalFlag_Struct_t CalFlgTemp = GEAR_CAL_PEDAL;				
-				
-				if((cp_ulSystickCnt - SendPeriodCnt) > 1000)
-				{
-				  //校准中发送踩踏提示
-					if(GearBox_CalFlag == GEAR_CAL_NEED)
-					{
+                                      //鍙橀€熷櫒閫氳�姝e父锛岃烦杞�垵濮嬪寲妯″紡
+                                      if(GearBox_ComIsOK_Flag == TRUE)
+                                      {
+                                          GearBox_Status = GEAR_STATUS_INITIAL;
+                                      }
+                                  break;
+                                  }
+    case GEAR_STATUS_INITIAL:  //鍒濆�鍖栨ā寮忥紝鍙戦€佸彉閫熷櫒鐘舵€佺粰浠�〃
+                                {
+                                    MC_RunInfo.GearBoxInfo = (GearBox_Status & 0xE0) + 0x00;
+                                    //鍒濆�鍖栧畬鎴愶紝涓诲姩鍙戦€丱BC鍙橀€熷櫒鍙傛暟锛屽彂閫�5娆°€�
+                                    do
+                                    {
+                                        static uint32_t SendPeriodCnt = 0;
+                                        static uint8_t SendCount = 0;
+                                        if(SendCount >= 5)
+                                            continue;
+                                        if((cp_ulSystickCnt - SendPeriodCnt) > 200)
+                                        {
+                                            GearBox_Send_OBC_Params(GearBox_CalFlag, &GearBox_OBC_SetParams, &EnvioloGearInfo2.Soft_Version);
+                                            SendPeriodCnt = cp_ulSystickCnt;
+                                            SendCount++;
+                                        }
+                                    }while(0);
+
+                                    //绛夊緟浠�〃璁剧疆鍙橀€熷櫒宸ヤ綔妯″紡锛岃烦杞�埌瀵瑰簲鐨勬ā寮�
+                                    if(GearBox_OBC_SetMode.Mode != GEAR_MODE_NULL)
+                                    {
+                                      if(GearBox_OBC_SetMode.Mode == GEAR_MODE_MANUAL) //浠�〃璁剧疆鍙橀€熷櫒杩涘叆鎵嬪姩妯″紡
+                                      {
+                                          GearBox_Status = GEAR_STATUS_MANUAL;
+                                      }
+                                      else if((GearBox_OBC_SetMode.Mode == GEAR_MODE_AUTO) || (GearBox_OBC_SetMode.Mode == GEAR_MODE_CAL)) //浠�〃璁剧疆鍙橀€熷櫒杩涘叆鑷�姩妯″紡鎴栨牎鍑嗘ā寮�
+                                      {
+                                          GearBox_Status = GEAR_STATUS_AUTO;
+                                      }
+                                    }			
+                                break;
+                                }
+    case GEAR_STATUS_MANUAL: case GEAR_STATUS_AUTO:  //鎵嬪姩銆佽嚜鍔ㄣ€佹牎鍑嗭紝涓夌�妯″紡鍏辩敤涓€涓�姸鎬�
+                                {
+                                    //杩涘叆鏍″噯妯″紡
+                                    if(GearBox_OBC_SetMode.Mode == GEAR_MODE_CAL)
+                                    {
+                                        EnvioloControlParams.GearMode = ENVIOLO_CAL_MODE;
+                                        EnvioloControlParams.RatioMode_Data = 0;
+                                        EnvioloControlParams.CadenceMode_Data = 0;
+                                    }
+                                    //杩涘叆鎵嬪姩妯″紡
+                                    else if(GearBox_OBC_SetMode.Mode == GEAR_MODE_MANUAL)
+                                    {
+                                        GearBox_Status = GEAR_STATUS_MANUAL;
+                                        EnvioloControlParams.GearMode = ENVIOLO_MANUAL_MODE;
+                                        if(GearBox_OBC_SetMode.Value < 1)
+                                            EnvioloControlParams.RatioMode_Data = GearBox_RatioTable[0];
+                                        else if(GearBox_OBC_SetMode.Value > GearBox_OBC_SetParams.GearNum)
+                                            EnvioloControlParams.RatioMode_Data = GearBox_RatioTable[GearBox_OBC_SetParams.GearNum - 1];
+                                        else
+                                            EnvioloControlParams.RatioMode_Data = GearBox_RatioTable[GearBox_OBC_SetMode.Value - 1];
+                                        EnvioloControlParams.CadenceMode_Data = 0;
+                                    }
+                                    //杩涘叆鑷�姩妯″紡
+                                    else if(GearBox_OBC_SetMode.Mode == GEAR_MODE_AUTO)
+                                    {
+                                        GearBox_Status = GEAR_STATUS_AUTO;
+                                        EnvioloControlParams.GearMode = ENVIOLO_AUTO_MODE;
+                                        if(GearBox_OBC_SetMode.Value < GearBox_OBC_SetParams.CadenceMin)
+                                            EnvioloControlParams.CadenceMode_Data = GearBox_OBC_SetParams.CadenceMin;
+                                        else if(GearBox_OBC_SetMode.Value > GearBox_OBC_SetParams.CadenceMax)
+                                            EnvioloControlParams.CadenceMode_Data = GearBox_OBC_SetParams.CadenceMax;
+                                        else
+                                            EnvioloControlParams.CadenceMode_Data = GearBox_OBC_SetMode.Value;
+                                        EnvioloControlParams.RatioMode_Data = 0;
+                                    }
+                                    //鏇存柊鍙橀€熷櫒杩愯�淇℃伅锛岄珮5浣嶈〃绀哄彉閫熷櫒鐘舵€侊紝浣�5浣嶈〃绀哄彉閫熷櫒褰撳墠妗d綅
+                                    if(GearBox_ComIsOK_Flag == FALSE) //绂荤嚎妯″紡
+                                    {
+                                        MC_RunInfo.GearBoxInfo = GEAR_STATUS_OFFLINE;
+                                    }
+                                    else //鍦ㄧ嚎鏃跺彂閫佸彉閫熷櫒淇℃伅
+                                    {
+                                        if(GearBox_Status == GEAR_STATUS_MANUAL) //鎵嬪姩妯″紡浣庝簲浣嶅彂閫佹尅浣�
+                                        {
+                                            MC_RunInfo.GearBoxInfo = (GearBox_Status & 0xE0) + (GearBox_CalGearSt(EnvioloGearInfo1.Actual_Ratio * 100, GearBox_OBC_SetParams.GearNum) & 0x1F);
+                                        }
+                                        else if(GearBox_Status == GEAR_STATUS_AUTO) //鑷�姩妯″紡浣庝簲浣嶅彂閫佸彉閫熸瘮锛屽崟浣�0.1
+                                        {
+                                            MC_RunInfo.GearBoxInfo = (GearBox_Status & 0xE0) + (EnvioloGearInfo1.Actual_Ratio & 0x1F);
+                                        }
+                                    }					
+                                    //瀹氭椂鍙戦€佸彉閫熷櫒鎺у埗鎸囦护
+                                    do
+                                    {
+                                        static uint32_t SendPeriodCnt = 0;
+                                        static uint8_t SendPluseCnt = 0;
+                                        static uint8_t SendCalCnt = 0;
+
+                                        if((cp_ulSystickCnt - SendPeriodCnt) > 1000) 
+                                        {
+                                            if(GearBox_OBC_SetMode.Mode == GEAR_MODE_CAL) //鏍″噯鎸囦护鍙�彂閫�5娆�
+                                            {
+                                                if(SendCalCnt < 5)
+                                                {
+                                                    GearBox_Send_EnvioloControlParams(&EnvioloControlParams); //鍙戦€佹帶鍒舵寚浠�
+                                                    SendCalCnt++;
+                                                }
+                                                SendPluseCnt = 0;
+                                            }
+                                            else //鎵嬪姩鍜岃嚜鍔ㄦ寚浠ゅ畾鏃跺彂閫�
+                                            {
+                                                if(SendPluseCnt < 1)
+                                                {
+                                                    GearBox_Send_EnvioloConfigParams(&EnvioloConfigParams); //鍙戦€侀厤缃�弬鏁�
+                                                    SendPluseCnt++;
+                                                }
+                                                else if(SendPluseCnt < 5)
+                                                {
+                                                    GearBox_Send_EnvioloControlParams(&EnvioloControlParams); //鍙戦€佹帶鍒舵寚浠�
+                                                    SendPluseCnt++;
+                                                    if(SendPluseCnt >= 5)
+                                                    {
+                                                        SendPluseCnt = 0;
+                                                    }
+                                                }
+                                            
+                                                SendCalCnt = 0;
+                                            }
+                                            
+                                            SendPeriodCnt = cp_ulSystickCnt;
+                                        }				 
+                                    }while(0);
+                                    //鏍″噯妯″紡瀹氭椂鍙戦€佽俯韪忔彁绀�
+                                    do
+                                    {
+                                        static uint32_t SendPeriodCnt = 0;
+                                        static uint8_t SendCount = 0xFF;
+                                        GearBox_CalFlag_Struct_t CalFlgTemp = GEAR_CAL_PEDAL;				
+
+                                        if((cp_ulSystickCnt - SendPeriodCnt) > 1000)
+                                        {
+                                        //鏍″噯涓�彂閫佽俯韪忔彁绀�
+                                            if(GearBox_CalFlag == GEAR_CAL_NEED)
+                                            {
                                                 CalFlgTemp = GEAR_CAL_PEDAL;
-						GearBox_Send_OBC_Params(CalFlgTemp, &GearBox_OBC_SetParams, &EnvioloGearInfo2.Soft_Version);
-						SendCount = 0;
-					}
-					//校准成功发送校准完成,发送5次
-					else if(GearBox_CalFlag == GEAR_CAL_SUCCESS)
-					{
+                                                GearBox_Send_OBC_Params(CalFlgTemp, &GearBox_OBC_SetParams, &EnvioloGearInfo2.Soft_Version);
+                                                SendCount = 0;
+                                            }
+                                            //鏍″噯鎴愬姛鍙戦€佹牎鍑嗗畬鎴愶紝鍙戦€�5娆�
+                                            else if(GearBox_CalFlag == GEAR_CAL_SUCCESS)
+                                            {
                                                 CalFlgTemp = GEAR_CAL_SUCCESS;
-						if(SendCount < 5)
-						{
-							GearBox_Send_OBC_Params(CalFlgTemp, &GearBox_OBC_SetParams, &EnvioloGearInfo2.Soft_Version);
-							SendCount++;
-						}
-					}
-					SendPeriodCnt = cp_ulSystickCnt;
-				}
-			}while(0);
-			break;
-		}		
-		default:
-			break;
-	}
-
+                                                if(SendCount < 5)
+                                                {
+                                                    GearBox_Send_OBC_Params(CalFlgTemp, &GearBox_OBC_SetParams, &EnvioloGearInfo2.Soft_Version);
+                                                    SendCount++;
+                                                }
+                                            }
+                                            SendPeriodCnt = cp_ulSystickCnt;
+                                        }
+                                    }while(0);
+                                    break;
+                                    }		
+    default:
+                                    break;
+    }
 }
 

+ 3 - 3
User project/3.BasicFunction/Source/ntc_sensor.c

@@ -1,4 +1,4 @@
-/**
+/**
  * @file ntc_sensor.c
  * @author zhouxiong(wangzy49@midea.com)
  * @brief 
@@ -21,7 +21,7 @@
  *
  ******************************/
 
-//PCBζȴ«¸ÐÆ÷¼Ä´æÆ÷ÓëζȶÔÕÕ±í£¬-40~140ÉãÊ϶È
+//PCB温度传感器寄存器与温度对照表,-40~140摄�度
 const UWORD NTC_Table_PCB[181] = 
 {
   99,
@@ -207,7 +207,7 @@ const UWORD NTC_Table_PCB[181] =
   3995
 };
 
-//Á¦¾ØÎ¶ȴ«¸ÐÆ÷¼Ä´æÆ÷ÓëζȶÔÕÕ±í£¬-40~140ÉãÊ϶È
+//力矩温度传感器寄存器与温度对照表,-40~140摄�度
 const UWORD NTC_Table_Torque[181] = 
 {
   3996,

+ 16 - 16
User project/4.BasicHardwSoftwLayer/2.BasicSoftwLayer/Include/queue.h

@@ -1,4 +1,4 @@
-/************************************************************************
+锘�/************************************************************************
  Project:             Welling Motor Control Paltform
  Filename:            QUEUE.h
  Partner Filename:    QUEUE.c
@@ -34,23 +34,23 @@ Revising History (ECL of this file):
 
 typedef struct
 {
-    UWORD               ErrorIndex;  // 故障序列号,地址偏移 0
-    UWORD               NotesInfo1;  //备注信息1,地址偏移 2
-    UWORD               NotesInfo2;  //备注信息2,地址偏移 4
-    UWORD               NotesInfo3;  //备注信息3,地址偏移 6
-    ULONG               ErrorCode;   //故障码 4 bytes, 地址偏移 8
-    ULONG               RunTime;     //运行时间 4bytes, 地址偏移 12
-    MC_RunInfo_Struct_t RunInfo;     //运行信息 32bytes, 地址偏移 16
-    SWORD               IqCurrentPu; // Iq电流,地址偏移 48
-    SWORD               IqVoltagePu; // Iq电压,地址偏移 50
-    SWORD               IdCurrentPu; // Id电流,地址偏移 52
-    SWORD               IdVoltagePu; // Id电压,地址偏移 54
+    UWORD               ErrorIndex;  // 鏁呴殰搴忓垪鍙凤紝鍦板潃鍋忕Щ 0
+    UWORD               NotesInfo1;  //澶囨敞淇℃伅1锛屽湴鍧€鍋忕Щ 2
+    UWORD               NotesInfo2;  //澶囨敞淇℃伅2锛屽湴鍧€鍋忕Щ 4
+    UWORD               NotesInfo3;  //澶囨敞淇℃伅3锛屽湴鍧€鍋忕Щ 6
+    ULONG               ErrorCode;   //鏁呴殰鐮� 4 bytes, 鍦板潃鍋忕Щ 8
+    ULONG               RunTime;     //杩愯�鏃堕棿 4bytes, 鍦板潃鍋忕Щ 12
+    MC_RunInfo_Struct_t RunInfo;     //杩愯�淇℃伅 32bytes, 鍦板潃鍋忕Щ 16
+    SWORD               IqCurrentPu; // Iq鐢垫祦锛屽湴鍧€鍋忕Щ 48
+    SWORD               IqVoltagePu; // Iq鐢靛帇锛屽湴鍧€鍋忕Щ 50
+    SWORD               IdCurrentPu; // Id鐢垫祦锛屽湴鍧€鍋忕Щ 52
+    SWORD               IdVoltagePu; // Id鐢靛帇锛屽湴鍧€鍋忕Щ 54
     UBYTE               ubHead;
     UBYTE               ubRear;
-    UWORD               RS1;         // 预留信息 1,2bytes,地址偏移 56
-    UWORD               RS2;         // 预留信息 1,2bytes,地址偏移 58
-    UWORD               RS3;         // 预留信息 1,2bytes,地址偏移 60
-} ERROR_LOG;                         //共64字节
+    UWORD               RS1;         // 棰勭暀淇℃伅 1锛�2bytes锛屽湴鍧€鍋忕Щ 56
+    UWORD               RS2;         // 棰勭暀淇℃伅 1锛�2bytes锛屽湴鍧€鍋忕Щ 58
+    UWORD               RS3;         // 棰勭暀淇℃伅 1锛�2bytes锛屽湴鍧€鍋忕Щ 60
+} ERROR_LOG;                         //鍏�64瀛楄妭
 
 typedef struct
 {