Prechádzať zdrojové kódy

添加OBD油门数据解析

limengqi 10 mesiacov pred
rodič
commit
ba136713c7

+ 8 - 12
src/canbus/canbus.cpp

@@ -401,19 +401,15 @@ int Canbus::read_data(TPCANMsg *pMsgBuff)
     //通过读取车辆OBD的数据,赋值给OBD的变量  原始代码 结束
 
     //通过设置相关变量,赋值给OBD的变量   测试版代码 开始
-  if(pMsgBuff->ID == robot::common::Car1)
+  if(pMsgBuff->ID == robot::common::ObdAccPsng)
   {
-     T_VEHICLE_STATUS_1 tVehicle1 = *((T_VEHICLE_STATUS_1*)MessageCoder::CanMsgAnalyse(robot::common::VehicleStatus1,pMsgBuff->DATA));
-     status1.uiAccPsng = tVehicle1.uiAccPsng;
-     status1.uiBrkPsng = tVehicle1.uiBrkPsng;
-     obd.AccPsng = tVehicle1.uiAccPsng * 0.1;
-     obd.BrkPsng = tVehicle1.uiBrkPsng * 0.1;
-  }
-  else if(pMsgBuff->ID == robot::common::Car2)
-  {
-    T_VEHICLE_STATUS_2 tVehicle2 = *((T_VEHICLE_STATUS_2*)MessageCoder::CanMsgAnalyse(robot::common::VehicleStatus2,pMsgBuff->DATA));
-    status2.iStrAng = tVehicle2.iStrAng;
-    obd.StrAng = tVehicle2.iStrAng * 0.01;
+   T_OBD_ACC_PSNG tOBDAccPsng = *((T_OBD_ACC_PSNG*)MessageCoder::CanMsgAnalyse(robot::common::ObdAccPsng,pMsgBuff->DATA));
+     status1.uiAccPsng = tOBDAccPsng.obdAccPsng;
+     status1.uiBrkPsng = 0;
+     obd.AccPsng = tOBDAccPsng.obdAccPsng;
+     obd.BrkPsng = 0;
+     status2.iStrAng = 0;
+     obd.StrAng = 0;
   }
   else if((pMsgBuff->ID >= robot::common::RobotWorkMd && pMsgBuff->ID <= robot::common::ICUMonitor) ||
           (pMsgBuff->ID >= robot::common::BrkPedalActCtrReq && pMsgBuff->ID <= robot::common::IOMode) ||

+ 15 - 0
src/canbus/candatatype.h

@@ -2192,6 +2192,21 @@ typedef struct
   unsigned int uiZSftArmCtrAlive;   //换挡臂 Z 控制器心跳
 }T_ZSFT_STATUS;
 
+/************OBD实际油门踏板行程*******/
+typedef struct
+{
+    unsigned int obdAccPsng : 16;		//实际油门踏板行程
+    unsigned int : 16;
+    unsigned int : 32;
+}T_OBD_070;
+
+//实际油门踏板行程
+typedef struct
+{
+    unsigned int obdAccPsng;			//实际油门踏板行程
+}T_OBD_ACC_PSNG;
+//最小值 005   最大值09DA
+
 
 } // namespace canbus
 

+ 25 - 0
src/canbus/messagecoder.cpp

@@ -635,6 +635,26 @@ void MessageCoder::CanMsgAnalyseErr(unsigned char * ucData, T_MOT_CTR_ERR * tMot
     tMotCtrErr->uiErrz = tCtrErrCode.z;
 }
 
+//OBD实际油门踏板行程--数据解析
+void MessageCoder::OBDAnalyseID_070(unsigned char *ucData, T_OBD_ACC_PSNG *tOBDAccPsng)
+{
+    T_OBD_070 tOBD070 = { 0 };
+    unsigned char ucCanMsgSrc[8] = { 0 };
+
+    memcpy(ucCanMsgSrc, ucData, 8);
+    memcpy(&tOBD070, ucCanMsgSrc, 8);
+    unsigned int psng = tOBD070.obdAccPsng -5;
+    if(psng > 2500)
+    {
+      tOBDAccPsng->obdAccPsng = 100;
+    }
+    else
+    {
+      tOBDAccPsng->obdAccPsng = psng / 2500 * 1000;
+    }
+}
+
+
 //控制器上电命令--数据组包
 void MessageCoder::CanMsgPackageID_7F2(T_POWER_ON_REQUEST * tPowOnReq, TPCANMsg *tCanMsg)
 {
@@ -1395,6 +1415,11 @@ void * MessageCoder::CanMsgAnalyse(int id,unsigned char * ucData)
         CanMsgAnalyseErr(ucData, &tMotCtrErrStr);
         p = &tMotCtrErrStr;
         break;
+    case robot::common::ObdAccPsng:
+      T_OBD_ACC_PSNG tObdAccPsng ;
+      OBDAnalyseID_070(ucData,&tObdAccPsng);
+      p = &tObdAccPsng;
+      break;
     default:
         break;
     }

+ 3 - 0
src/canbus/messagecoder.h

@@ -102,6 +102,9 @@ private:
     //油门(acc)、制动(brk)、挡位(sft)X、挡位(sft)Y、转向(str)电机报警--数据解析
     static void CanMsgAnalyseErr(unsigned char *ucData, T_MOT_CTR_ERR *tMotCtrErr);
 
+    //OBD实际油门踏板行程--数据解析
+    static void OBDAnalyseID_070(unsigned char *ucData, T_OBD_ACC_PSNG *tOBDAccPsng);
+
     //控制器上电命令--数据组包
     static void CanMsgPackageID_7F2(T_POWER_ON_REQUEST *tPowOnReq, TPCANMsg *tCanMsg);
 

+ 2 - 1
src/common/canmsgobdmsgid.h

@@ -129,7 +129,8 @@ const int Car1 = 0x3F1;
 const int Car2 = 0x3F2;
 
 //OBD实际油门踏板行程
-const int ObdAccPsng = 0x1A1;
+//const int ObdAccPsng = 0x1A1;
+const int ObdAccPsng = 0x070;
 //OBD实际制动踏板行程
 const int ObdBrkPsng = 0x0F1;
 //OBD实际挡位