123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- import pandas as pd
- import numpy as np
- import datetime
- import pika
- import json
- from USER.SPF.alibaba.Common import BatParam
- class BatCrtl():
- def __init__(self,sn,celltype,host,port,df_statcrtl_ram,df_rlycrtl_ram,df_diag,df_bms1,df_bms2,df_bms3): #参数初始化
- self.sn=sn
- self.celltype=celltype
- self.host=host
- self.port=port
- self.param=BatParam.BatParam(celltype)
-
- df_bms1['time']= pd.to_datetime(df_bms1['time'], format='%Y-%m-%d %H:%M:%S')
- df_bms2['time']= pd.to_datetime(df_bms2['time'], format='%Y-%m-%d %H:%M:%S')
- df_bms3['time']= pd.to_datetime(df_bms2['time'], format='%Y-%m-%d %H:%M:%S')
- self.df_bms1=df_bms1
- self.df_bms2=df_bms2
- self.df_bms3=df_bms3
- self.df_statcrtl_ram=df_statcrtl_ram.copy()
- self.df_rlycrtl_ram=df_rlycrtl_ram.copy()
- self.df_diag=df_diag[(df_diag['fault_code']==110) | (df_diag['fault_code']==119)]
-
- # self.bmstime=df_bms['time']
- # self.packcrnt=df_bms['PackCrnt']*self.param.PackCrntDec
- # self.bms_soc=df_bms['PackSOC']
- # self.bms_soh=df_bms['PackSOH']
- # self.bmsstat=df_bms['BMSStat']
- # self.cellvolt_name=['CellVolt'+str(x) for x in range(1,self.param.CellVoltNums+1)]
- # self.celltemp_name=['CellTemp'+str(x) for x in range(1,self.param.CellTempNums+1)]
- #主调用函数........................................................................
- def bat_crtl(self):
- df_res1=self._bat_rlycrtl()
- df_res2=self._bat_statecrtl()
- return df_res1,df_res2
-
- #Ribbit队列发送数据..............................................................
- def _rabbit_send(self, dict_send):
- # 建立一个实例
- credentials = pika.PlainCredentials('admin', 'admin')
- connection = pika.BlockingConnection(pika.ConnectionParameters(self.host,self.port,credentials=credentials))
- # 声明一个管道,在管道里发消息
- channel = connection.channel()
- # 在管道里声明queue
- channel.queue_declare(queue='cmdQueue',durable=True)
- channel.basic_publish(exchange='cmdExchange',routing_key='CmdDirectRouting',body=json.dumps(dict_send)) # 消息内容
- connection.close()
- #电池继电器下行控制.........................................................................................................................
- def _bat_rlycrtl(self):
- time_now=datetime.datetime.now()
- for i in range(1,4):
- sn='KPD00'+str(i)
- if sn in list(self.df_diag['sn']): #该sn发生4级或5级故障
- if (sn in list(self.df_rlycrtl_ram['sn'])): #ram是否包含该sn
- if self.df_rlycrtl_ram.loc[self.df_rlycrtl_ram[self.df_rlycrtl_ram['sn']==sn].index[0], 'batrlycrtl']==0:
- self.df_rlycrtl_ram.loc[self.df_rlycrtl_ram[self.df_rlycrtl_ram['sn']==sn].index[0], 'time']=time_now
- self.df_rlycrtl_ram.loc[self.df_rlycrtl_ram[self.df_rlycrtl_ram['sn']==sn].index[0], 'batrlycrtl']=1
- dict_send={"cmd_type":1,"sn":sn,"batrlycrtl":1}
- self._rabbit_send(dict_send)
- return self.df_rlycrtl_ram
- else:
- pass
- else:
- self.df_rlycrtl_ram[len(self.df_rlycrtl_ram)]=[time_now,sn,1]
- dict_send={"cmd_type":1,"sn":sn,"batrlycrtl":1}
- self._rabbit_send(dict_send)
- return self.df_rlycrtl_ram
- else: #该sn没有4级和5级故障
- if (sn in list(self.df_rlycrtl_ram['sn'])): #ram是否包含该sn
- if self.df_rlycrtl_ram.loc[self.df_rlycrtl_ram[self.df_rlycrtl_ram['sn']==sn].index[0], 'batrlycrtl']==1:
- self.df_rlycrtl_ram.loc[self.df_rlycrtl_ram[self.df_rlycrtl_ram['sn']==sn].index[0], 'time']=time_now
- self.df_rlycrtl_ram.loc[self.df_rlycrtl_ram[self.df_rlycrtl_ram['sn']==sn].index[0], 'batrlycrtl']=0
- dict_send={"cmd_type":1,"sn":sn,"batrlycrtl":0}
- self._rabbit_send(dict_send)
- return self.df_rlycrtl_ram
- else:
- pass
- else:
- self.df_rlycrtl_ram[len(self.df_rlycrtl_ram)]=[time_now,sn,0]
- dict_send={"cmd_type":1,"sn":sn,"batrlycrtl":0}
- self._rabbit_send(dict_send)
- return self.df_rlycrtl_ram
- return self.df_rlycrtl_ram
- #电池继电器下行控制.........................................................................................................................
- def _bat_statecrtl(self):
- time_now=datetime.datetime.now()
|