CBMSBatCtrl.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import pandas as pd
  2. import numpy as np
  3. import datetime
  4. import pika
  5. import json
  6. from USER.SPF.alibaba.Common import BatParam
  7. class BatCrtl():
  8. def __init__(self,sn,celltype,host,port,df_statcrtl_ram,df_rlycrtl_ram,df_diag,df_bms1,df_bms2,df_bms3): #参数初始化
  9. self.sn=sn
  10. self.celltype=celltype
  11. self.host=host
  12. self.port=port
  13. self.param=BatParam.BatParam(celltype)
  14. df_bms1['time']= pd.to_datetime(df_bms1['time'], format='%Y-%m-%d %H:%M:%S')
  15. df_bms2['time']= pd.to_datetime(df_bms2['time'], format='%Y-%m-%d %H:%M:%S')
  16. df_bms3['time']= pd.to_datetime(df_bms2['time'], format='%Y-%m-%d %H:%M:%S')
  17. self.df_bms1=df_bms1
  18. self.df_bms2=df_bms2
  19. self.df_bms3=df_bms3
  20. self.df_statcrtl_ram=df_statcrtl_ram.copy()
  21. self.df_rlycrtl_ram=df_rlycrtl_ram.copy()
  22. self.df_diag=df_diag[(df_diag['fault_code']==110) | (df_diag['fault_code']==119)]
  23. # self.bmstime=df_bms['time']
  24. # self.packcrnt=df_bms['PackCrnt']*self.param.PackCrntDec
  25. # self.bms_soc=df_bms['PackSOC']
  26. # self.bms_soh=df_bms['PackSOH']
  27. # self.bmsstat=df_bms['BMSStat']
  28. # self.cellvolt_name=['CellVolt'+str(x) for x in range(1,self.param.CellVoltNums+1)]
  29. # self.celltemp_name=['CellTemp'+str(x) for x in range(1,self.param.CellTempNums+1)]
  30. #主调用函数........................................................................
  31. def bat_crtl(self):
  32. df_res1=self._bat_rlycrtl()
  33. df_res2=self._bat_statecrtl()
  34. return df_res1,df_res2
  35. #Ribbit队列发送数据..............................................................
  36. def _rabbit_send(self, dict_send):
  37. # 建立一个实例
  38. credentials = pika.PlainCredentials('admin', 'admin')
  39. connection = pika.BlockingConnection(pika.ConnectionParameters(self.host,self.port,credentials=credentials))
  40. # 声明一个管道,在管道里发消息
  41. channel = connection.channel()
  42. # 在管道里声明queue
  43. channel.queue_declare(queue='cmdQueue',durable=True)
  44. channel.basic_publish(exchange='cmdExchange',routing_key='CmdDirectRouting',body=json.dumps(dict_send)) # 消息内容
  45. connection.close()
  46. #电池继电器下行控制.........................................................................................................................
  47. def _bat_rlycrtl(self):
  48. time_now=datetime.datetime.now()
  49. for i in range(1,4):
  50. sn='KPD00'+str(i)
  51. if sn in list(self.df_diag['sn']): #该sn发生4级或5级故障
  52. if (sn in list(self.df_rlycrtl_ram['sn'])): #ram是否包含该sn
  53. if self.df_rlycrtl_ram.loc[self.df_rlycrtl_ram[self.df_rlycrtl_ram['sn']==sn].index[0], 'batrlycrtl']==0:
  54. self.df_rlycrtl_ram.loc[self.df_rlycrtl_ram[self.df_rlycrtl_ram['sn']==sn].index[0], 'time']=time_now
  55. self.df_rlycrtl_ram.loc[self.df_rlycrtl_ram[self.df_rlycrtl_ram['sn']==sn].index[0], 'batrlycrtl']=1
  56. dict_send={"cmd_type":1,"sn":sn,"batrlycrtl":1}
  57. self._rabbit_send(dict_send)
  58. return self.df_rlycrtl_ram
  59. else:
  60. pass
  61. else:
  62. self.df_rlycrtl_ram[len(self.df_rlycrtl_ram)]=[time_now,sn,1]
  63. dict_send={"cmd_type":1,"sn":sn,"batrlycrtl":1}
  64. self._rabbit_send(dict_send)
  65. return self.df_rlycrtl_ram
  66. else: #该sn没有4级和5级故障
  67. if (sn in list(self.df_rlycrtl_ram['sn'])): #ram是否包含该sn
  68. if self.df_rlycrtl_ram.loc[self.df_rlycrtl_ram[self.df_rlycrtl_ram['sn']==sn].index[0], 'batrlycrtl']==1:
  69. self.df_rlycrtl_ram.loc[self.df_rlycrtl_ram[self.df_rlycrtl_ram['sn']==sn].index[0], 'time']=time_now
  70. self.df_rlycrtl_ram.loc[self.df_rlycrtl_ram[self.df_rlycrtl_ram['sn']==sn].index[0], 'batrlycrtl']=0
  71. dict_send={"cmd_type":1,"sn":sn,"batrlycrtl":0}
  72. self._rabbit_send(dict_send)
  73. return self.df_rlycrtl_ram
  74. else:
  75. pass
  76. else:
  77. self.df_rlycrtl_ram[len(self.df_rlycrtl_ram)]=[time_now,sn,0]
  78. dict_send={"cmd_type":1,"sn":sn,"batrlycrtl":0}
  79. self._rabbit_send(dict_send)
  80. return self.df_rlycrtl_ram
  81. return self.df_rlycrtl_ram
  82. #电池继电器下行控制.........................................................................................................................
  83. def _bat_statecrtl(self):
  84. time_now=datetime.datetime.now()