|
@@ -6,7 +6,7 @@ import google.protobuf.text_format as tf
|
|
|
import threading
|
|
|
import datetime
|
|
|
import uuid
|
|
|
-
|
|
|
+import math
|
|
|
class CommandInfo:
|
|
|
def __init__(self,type,table):
|
|
|
self.type=type
|
|
@@ -190,6 +190,27 @@ class DBCommand():
|
|
|
time_mns=diff.total_seconds()/60
|
|
|
queue_id=int(last_num+1+ time_mns*1)
|
|
|
|
|
|
+ #停车入队前,按照库内轴距更新测量轴距值 --------------------------------------------
|
|
|
+ database_wheelbase=self.get_wheelbase(cursor,cmd.car_number)
|
|
|
+ new_wheelbase=cmd.entrance_measure_info.wheelbase
|
|
|
+ if database_wheelbase is not None:
|
|
|
+ [wheelbase,delta]=database_wheelbase
|
|
|
+ entrance_wheelbase=cmd.entrance_measure_info.wheelbase
|
|
|
+ if abs(entrance_wheelbase-wheelbase)>0.1: #与入口测量偏差过大,不更新
|
|
|
+ print("车辆:%s 测量轴距与数据库相差太大(测量:%f 数据库:%f),不做融合,以测量为准"%(cmd.car_number,entrance_wheelbase,wheelbase))
|
|
|
+ else:
|
|
|
+ sum=(delta*delta)+0.05*0.05
|
|
|
+ new_wheelbase=entrance_wheelbase*delta*delta/sum+wheelbase*(0.05*0.05)/sum
|
|
|
+ print("车辆:%s 停车更新轴距:%f ,测量:%f,数据库:%f"%(cmd.car_number,new_wheelbase,entrance_wheelbase,wheelbase))
|
|
|
+ new_measure_info=message.measure_info()
|
|
|
+ new_measure_info.CopyFrom(cmd.entrance_measure_info)
|
|
|
+ new_measure_info.wheelbase=new_wheelbase
|
|
|
+ cmd.entrance_measure_info.CopyFrom(new_measure_info)
|
|
|
+
|
|
|
+ else:
|
|
|
+ print("车辆:%s 不存在数据库轴距,使用测量轴距:%f"%(cmd.car_number,cmd.entrance_measure_info.wheelbase))
|
|
|
+ #-----------------------------------
|
|
|
+
|
|
|
SQL="insert into command_queue values('%s','%s',%d,%d,1,0,NULL,'%s', %d , NULL)"%(
|
|
|
cmd.car_number,cmd.primary_key,cmd.unit_id,queue_id
|
|
|
,tf.MessageToString(cmd.entrance_measure_info,as_utf8=True), cmd.terminal_id )
|
|
@@ -197,8 +218,9 @@ class DBCommand():
|
|
|
#更新指令时间表,
|
|
|
dt=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
|
SQL="update queue_number_data set last_number=%d,input_time=str_to_date('%s','%%Y-%%m-%%d %%H:%%i:%%S') where unit=%d"%(queue_id,dt,cmd.unit_id)
|
|
|
-
|
|
|
cursor.execute(SQL)
|
|
|
+
|
|
|
+
|
|
|
self.conn.commit()
|
|
|
cursor.close()
|
|
|
return tf.MessageToString(cmd,as_utf8=True)
|
|
@@ -287,9 +309,62 @@ class DBCommand():
|
|
|
SQL="update queue_number_data set last_number=%d,input_time=str_to_date('%s','%%Y-%%m-%%d %%H:%%i:%%S') where unit=%d"%(queue_id,dt,unit_id)
|
|
|
cursor.execute(SQL)
|
|
|
|
|
|
+ #取车指令入队完成,记录轴距信息
|
|
|
+ self.update_wheelbase(cursor,cmd.car_number)
|
|
|
+
|
|
|
self.conn.commit()
|
|
|
cursor.close()
|
|
|
return tf.MessageToString(cmd,as_utf8=True)
|
|
|
+ def update_wheelbase(self,cursor,car_number):
|
|
|
+ #取车指令入队成功,此处将车辆夹持杆轴距偏差按照 delta=0.03 更新 ----------------------------
|
|
|
+ #获取车辆表中的轴距信息
|
|
|
+ SQL="select actually_measure_info,plc_measure_info from vehicle where car_number='%s'"%car_number
|
|
|
+ cursor.execute(SQL)
|
|
|
+ records=cursor.fetchall()
|
|
|
+ act_info=message.measure_info() #入口测量数据
|
|
|
+ plc_info=message.measure_info() #plc反馈数据(夹持杆雷达)
|
|
|
+ clamp_wheelbase=None
|
|
|
+ if len(records)==1: #找到记录
|
|
|
+ if records[0][0] is not None and records[0][1] is not None:
|
|
|
+ tf.Parse(records[0][0],act_info)
|
|
|
+ tf.Parse(records[0][1],plc_info)
|
|
|
+ if abs(act_info.wheelbase-plc_info.wheelbase)<0.05: #入口数据与夹持数据相近,可靠,
|
|
|
+ clamp_wheelbase=plc_info.wheelbase
|
|
|
+
|
|
|
+ #夹持数据存在,且可靠数据,存库,
|
|
|
+ if(clamp_wheelbase is not None):
|
|
|
+ SQL="select * from car_parameter where car_number='%s'"%car_number
|
|
|
+ cursor.execute(SQL)
|
|
|
+ records=cursor.fetchall()
|
|
|
+
|
|
|
+ update_wheelbase=clamp_wheelbase
|
|
|
+ update_delta=0.03
|
|
|
+ SQL="insert into car_parameter values('%s',%f,%f,%f,0.03)"%(car_number,update_wheelbase,update_delta,plc_info.width)
|
|
|
+ if len(records)==1:#有历史数据
|
|
|
+ wheel_base=float(records[0][1])
|
|
|
+ wheel_base_delta=float(records[0][2])
|
|
|
+ if abs(clamp_wheelbase-wheel_base)>0.05: #可能存在改装或者换牌,重置delta
|
|
|
+ print("车辆:%s 可能存在换牌或者改装,重置轴距信息"%(car_number))
|
|
|
+ else: #计算新值
|
|
|
+ dcdc=update_delta*update_delta
|
|
|
+ dd=wheel_base_delta*wheel_base_delta
|
|
|
+ update_wheelbase=clamp_wheelbase*dd/(dcdc+dd)+wheel_base*dcdc/(dd+dcdc)
|
|
|
+ update_delta=math.sqrt(dcdc*dd/(dcdc+dd))
|
|
|
+ print("车辆:%s 更新数据库轴距:%.5f,标准差:%.5f"%(car_number,update_wheelbase,update_delta))
|
|
|
+ SQL="update car_parameter set wheelbase=%f,var_wheelbase=%f where car_number='%s'"%(update_wheelbase,update_delta,car_number)
|
|
|
+ else:
|
|
|
+ print("新车:%s 第一次光临,存入轴距:%f"%(car_number,update_wheelbase))
|
|
|
+ cursor.execute(SQL)
|
|
|
+ def get_wheelbase(self,cursor,car_number):
|
|
|
+ SQL="select * from car_parameter where car_number='%s'"%(car_number)
|
|
|
+ cursor.execute(SQL)
|
|
|
+ records=cursor.fetchall()
|
|
|
+ if len(records)==1:
|
|
|
+ wheelbase=float(records[0][1])
|
|
|
+ delta=float(records[0][2])
|
|
|
+ return [wheelbase,delta]
|
|
|
+ else:
|
|
|
+ return None
|
|
|
|
|
|
@staticmethod
|
|
|
def table_type(table):
|