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()