浏览代码

更新UD故障码解析

lmstack 3 年之前
父节点
当前提交
c4a66e70a5
共有 2 个文件被更改,包括 60 次插入43 次删除
  1. 5 30
      LIB/BACKEND/DBManager.py
  2. 55 13
      demo.ipynb

+ 5 - 30
LIB/BACKEND/DBManager.py

@@ -117,13 +117,9 @@ class DBManager():
                     ,data['ffBatteryStatus']['soc'],data['ffBatteryStatus']['soh'],data['ffBatteryStatus']['cellVolBalance']]).reshape(1,data_len)
         elif mode == 1:
             data_len = 11
+            
             data_block = np.array([data['info']['obdTime'],data['ffBatteryStatus']['rssi']
-            ,data['ffBatteryStatus']['errorLevel'],data['ffBatteryStatus']['errorCode'],data['ffBatteryStatus']['switchState']
-            ,data['ffBatteryStatus']['current'],data['ffBatteryStatus']['voltageInner'],data['ffBatteryStatus']['chargeState'],
-            data['ffBatteryStatus']['cellVoltageDiff'],data['ffBatteryStatus']['soc'],data['ffBatteryStatus']['soh']]).reshape(1,data_len)
-        elif mode == 2:
-            data_len = 9
-            data_block = np.array([data['info']['obdTime'],data['ffBatteryStatus']['rssi'],data['ffBatteryStatus']['switchState']
+            ,data['ffBatteryStatus'].get('errorLevel'),data['ffBatteryStatus'].get('errorCode'),data['ffBatteryStatus']['switchState']
             ,data['ffBatteryStatus']['current'],data['ffBatteryStatus']['voltageInner'],data['ffBatteryStatus']['chargeState'],
             data['ffBatteryStatus']['cellVoltageDiff'],data['ffBatteryStatus']['soc'],data['ffBatteryStatus']['soh']]).reshape(1,data_len)
         data_block = np.append(data_block,CellU)
@@ -149,11 +145,6 @@ class DBManager():
                     ,data['ffGps']['speed'], data['ffGps']['isValid']]).reshape(1,6)
                 df = pd.DataFrame(
                     columns=['时间戳','定位类型', '纬度','经度','速度[km/h]','有效位'],data=data_block)
-        if mode == 2:
-            data_block = np.array([data['info']['obdTime'],data['ffGps']['locationType'],data['ffGps']['latitude'],data['ffGps']['longitude']
-            ,data['ffGps']['speed'], data['ffGps']['isValid']]).reshape(1,6)
-            df = pd.DataFrame(
-            columns=['时间戳','定位类型', '纬度','经度','速度[km/h]','有效位'],data=data_block)
         return df
 
     
@@ -169,8 +160,7 @@ class DBManager():
                 columns=['时间戳','加热目标温度', '加热超时','租赁开始时间','租赁天数','bms上传周期','gps上传周期'],data=data_block)
         if mode == 1:
                 df = pd.DataFrame()
-        if mode == 2:
-                df = pd.DataFrame()
+
         return df
     
     @staticmethod
@@ -191,12 +181,6 @@ class DBManager():
                                     data['ffBatteryAccum']['DSG_PHaccum'],data['ffBatteryAccum']['totalMileage']]).reshape(1,6)
                 df = pd.DataFrame(
                     columns=['时间戳','累计充电电量','累计充电能量','累计放电电量','累计放电能量', '累积里程'],data=data_block)
-        if mode == 2:
-            data_block = np.array([data['info']['obdTime'], data['ffBatteryAccum']['CHG_AHaccum'],
-                                data['ffBatteryAccum']['CHG_PHaccum'], data['ffBatteryAccum']['DSG_AHaccum'],
-                                data['ffBatteryAccum']['DSG_PHaccum'],data['ffBatteryAccum']['totalMileage']]).reshape(1,6)
-            df = pd.DataFrame(
-                columns=['时间戳','累计充电电量','累计充电能量','累计放电电量','累计放电能量', '累积里程'],data=data_block)
         return df
     
     @staticmethod
@@ -207,8 +191,6 @@ class DBManager():
                               '单体压差', 'SOC[%]','SOH[%]','单体均衡状态']
             elif mode == 1:
                 name_const = ['时间戳','GSM信号','故障等级', '故障代码','开关状态', '总电流[A]','总电压[V]','充电状态', '单体压差', 'SOC[%]','SOH[%]']
-            elif mode == 2:
-                name_const = ['时间戳','GSM信号','开关状态', '总电流[A]','总电压[V]','充电状态', '单体压差', 'SOC[%]','SOH[%]']
             i=0
             CellUNum = 0
             CellTNum = 0
@@ -244,8 +226,7 @@ class DBManager():
                 df_all = pd.DataFrame(columns=['时间戳','定位类型', '卫星数','纬度','经度','速度[km/h]','海拔','航向'])
             elif mode == 1:
                 df_all = pd.DataFrame(columns=['时间戳','定位类型', '纬度','经度','速度[km/h]','有效位'])
-            elif mode == 2:
-                df_all = pd.DataFrame(columns=['时间戳','定位类型', '纬度','经度','速度[km/h]','有效位'])
+            
             for line in DBManager._download_json_data(urls):
                 df_add = DBManager._convert_to_dataframe_gps(line, mode)
                 df_all = df_all.append(df_add,ignore_index=True)
@@ -257,8 +238,6 @@ class DBManager():
                 df_all = pd.DataFrame(columns=['时间戳','加热目标温度', '加热超时','租赁开始时间','租赁天数','bms上传周期','gps上传周期'])
             elif mode == 1:
                 df_all = pd.DataFrame()
-            elif mode == 2:
-                df_all = pd.DataFrame()    
             for line in DBManager._download_json_data(urls):
                 df_add = DBManager._convert_to_dataframe_system(line, mode)
                 df_all = df_all.append(df_add,ignore_index=True)
@@ -272,8 +251,6 @@ class DBManager():
                                                '累计高温充电电量', '累计高温充电能量'])
             elif mode == 1:
                 df_all = pd.DataFrame(columns=['时间戳','累计充电电量','累计充电能量','累计放电电量','累计放电能量', '累积里程'])
-            elif mode == 2:
-                df_all = pd.DataFrame(columns=['时间戳','累计充电电量','累计充电能量','累计放电电量','累计放电能量', '累积里程'])
             for line in DBManager._download_json_data(urls):
                 df_add = DBManager._convert_to_dataframe_accum(line, mode)
                 df_all = df_all.append(df_add,ignore_index=True)
@@ -307,9 +284,7 @@ class DBManager():
         
         
         # mode: 0:正常取数; 1:7255 取数
-        if sn[0:2] == 'UD':
-            mode = 2
-        elif sn[0:2] == 'MG':
+        if sn[0:2] == 'UD' or sn[0:2] == 'MG':
             mode = 1
         else:
             mode = 0

+ 55 - 13
demo.ipynb

@@ -2,7 +2,7 @@
  "cells": [
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 3,
    "metadata": {},
    "outputs": [
     {
@@ -11,9 +11,7 @@
      "text": [
       "### start to get data PK504B10100004410 from 2021-06-29 00:00:00 to 2021-06-30 00:00:00\n",
       "# get data from 2021-06-29 00:00:00 to 2021-06-30 00:00:00......... \n",
-      "Server Error, retry 0...... \n",
-      "# get data from 2021-06-30 00:00:00 to 2021-06-30 00:00:00......... \n",
-      "Server Error, retry 0...... \n",
+      "Server Error, retry 1...... \n",
       "all data-getting done, bms_count is 4052, gps_count is 1676, system_count is 86, accum_count is 511 \n",
       "\n"
      ]
@@ -31,12 +29,17 @@
     "end_time = \"2021-06-30 00:00:00\"\r\n",
     "\r\n",
     "dbManager = DBManager.DBManager()\r\n",
-    "df_data = dbManager.get_data(sn=sn, start_time=start_time, end_time=end_time, data_groups=['bms', 'gps', 'accum', 'system'])"
+    "df_data = dbManager.get_data(sn=sn, start_time=start_time, end_time=end_time, data_groups=['bms', 'gps', 'accum', 'system'])\r\n",
+    "# \r\n",
+    "df_bms = df_data['bms']\r\n",
+    "df_gps = df_data['gps']\r\n",
+    "df_accum = df_data['accum']\r\n",
+    "df_system = df_data['system']"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 1,
    "metadata": {},
    "outputs": [
     {
@@ -44,12 +47,10 @@
      "output_type": "stream",
      "text": [
       "downloading......\n",
-      "### start to get data PK50201A000002140 from 2021-06-29 00:00:00 to 2021-06-30 00:00:00\n",
+      "### start to get data PK504B10100004410 from 2021-06-29 00:00:00 to 2021-06-30 00:00:00\n",
       "# get data from 2021-06-29 00:00:00 to 2021-06-30 00:00:00......... \n",
-      "# get data from 2021-06-30 00:00:00 to 2021-06-30 00:00:00......... \n",
-      "Server Error, retry 0...... \n",
-      "Server Error, retry 0...... \n",
-      "all data-getting done, bms_count is 77, gps_count is 0, system_count is 10, accum_count is 8 \n",
+      "Server Error, retry 1...... \n",
+      "all data-getting done, bms_count is 4052, gps_count is 1676, system_count is 86, accum_count is 511 \n",
       "\n",
       "downloading success!\n"
      ]
@@ -72,10 +73,51 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 4,
    "metadata": {},
    "outputs": [],
-   "source": []
+   "source": [
+    "# 数据预处理\r\n",
+    "import sys\r\n",
+    "import CONFIGURE.PathSetting as PathSetting\r\n",
+    "sys.path.append(PathSetting.backend_path)\r\n",
+    "import DataPreProcess\r\n",
+    "\r\n",
+    "dataPrePro = DataPreProcess.DataPreProcess()\r\n",
+    "# 时间完全相同的数据仅保留一行\r\n",
+    "df_bms_pro, df_gps_pro = dataPrePro.time_filter(df_bms, df_gps)\r\n",
+    "\r\n",
+    "# bms数据按照电流和状态分段, 然后在状态分段内部,根据时间跳变继续分段(解决段内数据丢失)\r\n",
+    "df_bms_pro = dataPrePro.data_split_by_status(df_bms_pro)\r\n",
+    "df_bms_pro = dataPrePro.data_split_by_time(df_bms_pro)\r\n",
+    "\r\n",
+    "# bms数据将两次充电间的状态合并\r\n",
+    "df_bms_pro = dataPrePro.combine_drive_stand(df_bms_pro)\r\n",
+    "# bms 数据计算行车和充电开始前后的静置时间\r\n",
+    "df_bms_pro = dataPrePro.cal_stand_time(df_bms_pro)\r\n",
+    "# gps 数据可靠性判断, 并增加里程和速度至gps数据(根据未合并的数据段判断)\r\n",
+    "df_bms_pro, df_gps_pro, res_record= dataPrePro.gps_data_judge(df_bms_pro, df_gps_pro)\r\n",
+    "# gps 数据可靠性判断, 并增加里程和速度至gps数据(根据已合并的数据段判断)\r\n",
+    "df_bms_pro, df_gps_pro, res_record= dataPrePro.data_gps_judge_after_combine(df_bms_pro, df_gps_pro)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "wrote Tools.html\n"
+     ]
+    }
+   ],
+   "source": [
+    "# 生成pydoc 说明文档\r\n",
+    "! python -m pydoc -w LIB\\BACKEND\\Tools.py"
+   ]
   }
  ],
  "metadata": {