def hydraulic_yaw_brake_open_half_pressure2(self): """ 1.偏航半释放阀为1时,液压偏航制动入口压力2和液压偏航制动出口压力2最小值超出[25,47]范围, 2.液压偏航制动入口压力2和液压偏航制动出口压力2差值大于2或小于-1,持续3秒。 满足其一 """ try: # 获取 0时间 11偏航半释放阀 10偏航制动入口压力2 8偏航制动出口压力2 tickets = [self.tickets[0], self.tickets[11], self.tickets[10], self.tickets[8]] df = self.df[['time', tickets[0], tickets[1], tickets[2], tickets[3]]] except Exception as e: log.warning(e) log.warning("液压跳过函数67") self.send_message({"message": {"function": 66, "result": -1}}) return # 情况1 偏航半释放阀为1时,液压偏航制动入口压力2和液压偏航制动出口压力2最小值超出[25, 47]范围, df_h = df.drop(df[(df[tickets[1]] != 1)].index).copy() # # 获得 每一秒 液压偏航制动入口压力2和液压偏航制动出口压力2最小值,判断是否在[25, 47]范围 df_h['min'] = df_h.loc[:, [tickets[2], tickets[3]]].min(axis=1, skipna=True) df_h = df_h[(df_h['min'] > 47) | (df_h['min'] < 25)] # 情况2 液压偏航制动入口压力2和液压偏航制动出口压力2差值大于2或小于 - 1,持续3秒 df_l = df[(df[tickets[2]] - df[tickets[3]] < -1) | (df[tickets[2]] - df[tickets[3]] > 2)].copy() if df_h.empty and df_l.empty: log.info("正常") self.send_message({"message": {"function": 66, "result": 1}}) else: flag = False if not df_h.empty: result = tool.duration_calculation_to_csv(tickets, df_h, 1, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/偏航半释放压力2异常1.csv') if result[0]: flag = True log.info("正常") self.send_message({"message": {"function": 66, "result": 1}}) else: flag = False self.send_message({"message": {"function": 66, "result": 0, "details": result[1]}}) else: flag = True if not df_l.empty: result = tool.duration_calculation_to_csv(tickets, df_l, 3, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/偏航半释放压力2异常2.csv') if result[0]: if flag: log.info("正常") self.send_message({"message": {"function": 66, "result": 1}}) else: self.send_message({"message": {"function": 66, "result": 0, "details": result[1]}})
def hydraulic_pump_outlet_pressure(self): """ 液压泵1启动 或 液压泵2启动 = 1时,液压泵出口压力 <150bar 或 >175bar,持续10s """ try: # 获取 0时间 3液压泵1开 4液压泵2开 13液压泵出口压力 tickets = [self.tickets[0], self.tickets[3], self.tickets[4], self.tickets[13]] df = self.df[['time', tickets[0], tickets[1], tickets[2], tickets[3]]] except Exception as e: log.warning(e) log.warning("液压跳过函数69") self.send_message({"message": {"function": 68, "result": -1}}) return df = df[(df[tickets[1]] == 1) | (df[tickets[2]] == 1)] if df.empty: log.info("正常") self.send_message({"message": {"function": 68, "result": 1}}) else: df = df[(df[tickets[3]] > 175) | (df[tickets[3]] < 150)] if df.empty: log.info("正常") self.send_message({"message": {"function": 68, "result": 1}}) else: # ------------------判断连续性 result = tool.duration_calculation_to_csv(tickets, df, 10, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/液压泵出口压力异常.csv') if result[0]: log.info("正常") self.send_message({"message": {"function": 68, "result": 1}}) else: self.send_message({"message": {"function": 68, "result": 0, "details": result[1]}})
def hydraulic_yaw_brake2(self): """ 机组运行模式 = 14,液压偏航制动入口压力1 > 150时,液压偏航制动入口压力1 - 液压偏航制动出口压力1 > 2bar,持续 10 s """ try: # 获取 0时间 1机组运行模式 10偏航制动入口压力2 8偏航制动出口压力2 tickets = [self.tickets[0], self.tickets[1], self.tickets[10], self.tickets[8]] df = self.df[['time', tickets[0], tickets[1], tickets[2], tickets[3]]] except Exception as e: log.warning(e) log.warning("液压跳过函数74") self.send_message({"message": {"function": 73, "result": -1}}) return df = df[(df[tickets[1]] == 14) & (df[tickets[2]] > 150)] if df.empty: log.info("正常") self.send_message({"message": {"function": 73, "result": 1}}) else: df = df[(df[tickets[2]] - df[tickets[3]] > 2)] if df.empty: log.info("正常") self.send_message({"message": {"function": 73, "result": 1}}) else: # ------------------判断连续性 result = tool.duration_calculation_to_csv(tickets, df, 10, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/偏航制动器2异常.csv') if result[0]: log.info("正常") self.send_message({"message": {"function": 73, "result": 1}}) else: self.send_message({"message": {"function": 73, "result": 0, "details": result[1]}})
def generator_inRecycle_outlet_temperature(self): """ 机组运行模式 = 14, 发电机内冷出口温度1 和 发电机内冷出口温度2 任意一个 > 60℃,持续时间1min """ try: # 获取 0时间 1机组运行模式 13发电机空空冷内循环出口温度1 14发电机空空冷内循环出口温度2 tickets = [self.tickets[0], self.tickets[1], self.tickets[13], self.tickets[14]] df = self.df[['time', tickets[0], tickets[1], tickets[2], tickets[3]]] except Exception as e: log.warning(e) log.warning("发电机跳过函数46") self.send_message({"message": {"function": 45, "result": -1}}) return df = df.drop(df[(df[tickets[1]] != 14)].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 45, "result": 1}}) else: df = df[(df[tickets[2]] > 60) | (df[tickets[3]] > 60)] if df.empty: log.info("正常") self.send_message({"message": {"function": 45, "result": 1}}) else: # ------------------判断连续性 result = tool.duration_calculation_to_csv(tickets, df, 60, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/发电机内冷出口温度高.csv') if result[0]: log.info("正常") self.send_message({"message": {"function": 45, "result": 1}}) else: self.send_message({"message": {"function": 45, "result": 0, "details": result[1]}})
def hydraulic_sys(self): """ 12≤ 机组运行模式 ≤14,液压系统压力 < 150bar 或 > 175bar, 持续20s """ try: # 获取 0时间 1机组运行模式 2液压系统压力 tickets = [self.tickets[0], self.tickets[1], self.tickets[2]] df = self.df[['time', tickets[0], tickets[1], tickets[2]]] except Exception as e: log.warning(e) log.warning("液压跳过函数64") self.send_message({"message": {"function": 63, "result": -1}}) return df = df.drop(df[((df[tickets[1]] > 14) | (df[tickets[1]] < 12))].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 63, "result": 1}}) else: df = df[(df[tickets[2]] > 175) | (df[tickets[2]] < 150)] if df.empty: log.info("正常") self.send_message({"message": {"function": 63, "result": 1}}) else: # ------------------判断连续性 result = tool.duration_calculation_to_csv(tickets, df, 20, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/液压系统压力异常.csv') if result[0]: log.info("正常") self.send_message({"message": {"function": 63, "result": 1}}) else: self.send_message({"message": {"function": 63, "result": 0, "details": result[1]}})
def pitch_driver_ratiator_temperature(self): """ 机组运行模式=14,驱动器1-3散热器温度 最大值与最小值差值超10℃,或最大值超过60℃,或最小值低于-5℃,但是不等于-40℃,并且持续超过1min """ try: # 获取 0时间 1机组模式 17-19变桨驱动柜散热器温度1-3 tickets = [ self.tickets[0], self.tickets[1], self.tickets[17], self.tickets[18], self.tickets[19] ] df = self.df[[ 'time', tickets[0], tickets[1], tickets[2], tickets[3], tickets[4] ]] except Exception as e: log.warning(e) log.warning("变桨跳过函数54") self.send_message({"message": {"function": 53, "result": -1}}) return df = df.drop(df[(df[tickets[1]] != 14)].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 53, "result": 1}}) else: df['maxvalue'] = df[[tickets[2], tickets[3], tickets[4]]].max(axis=1) df['minvalue'] = df[[tickets[2], tickets[3], tickets[4]]].min(axis=1) df = df[(df['maxvalue'] - df['minvalue'] > 10) | (df['maxvalue'] > 60) | ((df['minvalue'] < -5) & (df['minvalue'] != -40))] if df.empty: log.info("正常") self.send_message({"message": {"function": 53, "result": 1}}) else: # ------------------判断连续性 result = tool.duration_calculation_to_csv( tickets, df, 60, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/变桨驱动器散热器温度异常.csv') if result[0]: log.info("正常") self.send_message( {"message": { "function": 53, "result": 1 }}) else: self.send_message({ "message": { "function": 53, "result": 0, "details": result[1] } })
def pitch_battery_box_temperature_difference(self): """ 机组运行模式=14,两两桨叶电池箱温差绝对值 ≥10℃,并且持续超过1min """ try: # 获取 0时间 1机组模式 20-22变桨后备电源柜温度1-3 tickets = [ self.tickets[0], self.tickets[1], self.tickets[20], self.tickets[21], self.tickets[22] ] df = self.df[[ 'time', tickets[0], tickets[1], tickets[2], tickets[3], tickets[4] ]] except Exception as e: log.warning(e) log.warning("变桨跳过函数56") self.send_message({"message": {"function": 55, "result": -1}}) return df = df.drop(df[(df[tickets[1]] != 14)].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 55, "result": 1}}) else: # 绝对值 ≥10℃,并且持续超过1min df['电源柜1-电源柜2'] = (df[tickets[2]] - df[tickets[3]]).abs() df['电源柜1-电源柜3'] = (df[tickets[2]] - df[tickets[4]]).abs() df['电源柜2-电源柜3'] = (df[tickets[3]] - df[tickets[4]]).abs() df = df[(df['电源柜1-电源柜2'] >= 10) | (df['电源柜1-电源柜3'] >= 10) | (df['电源柜2-电源柜3'] >= 10)] if df.empty: log.info("正常") self.send_message({"message": {"function": 55, "result": 1}}) else: # ------------------判断连续性 result = tool.duration_calculation_to_csv( tickets, df, 60, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/桨叶电池箱温差异常.csv') if result[0]: log.info("正常") self.send_message( {"message": { "function": 55, "result": 1 }}) else: self.send_message({ "message": { "function": 55, "result": 0, "details": result[1] } })
def pitch_battery_box_temperature(self): """ 单个桨叶电池箱温度(变桨后备电源柜温度1-3) > 55℃ 或 < -5℃,且 ≠ -40℃,持续1min; """ try: # 获取 0时间 1机组运行模式 20-22变桨后备电源柜温度1-3 tickets = [ self.tickets[0], self.tickets[1], self.tickets[20], self.tickets[21], self.tickets[22] ] df = self.df[[ 'time', tickets[0], tickets[1], tickets[2], tickets[3], tickets[4] ]] except Exception as e: log.warning(e) log.warning("变桨跳过函数55") self.send_message({"message": {"function": 54, "result": -1}}) return df = df[(df[tickets[2]] != -40) & (df[tickets[3]] != -40) & (df[tickets[4]] != -40)] if df.empty: log.info("正常") self.send_message({"message": {"function": 54, "result": 1}}) else: df = df[(df[tickets[2]] < -5) | (df[tickets[2]] > 55) | (df[tickets[3]] < -5) | (df[tickets[3]] > 55) | (df[tickets[4]] < -5) | (df[tickets[4]] > 55)] if df.empty: log.info("正常") self.send_message({"message": {"function": 54, "result": 1}}) else: # ------------------判断连续性 result = tool.duration_calculation_to_csv( tickets, df, 60, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/桨叶电池箱温度异常.csv') if result[0]: log.info("正常") self.send_message( {"message": { "function": 54, "result": 1 }}) else: self.send_message({ "message": { "function": 54, "result": 0, "details": result[1] } })
def sensor_yaw_driver_cabinet_temperature(self): """ 变频器1温度 至 变频器17温度中 的最大值≠0 且 >60℃,持续10min """ try: # 获取 1 时间 8-24变频器1-17温度 tickets = [ self.tickets[0], self.tickets[8], self.tickets[9], self.tickets[10], self.tickets[11], self.tickets[12], self.tickets[13], self.tickets[14], self.tickets[15], self.tickets[16], self.tickets[17], self.tickets[18], self.tickets[19], self.tickets[20], self.tickets[21], self.tickets[22], self.tickets[23], self.tickets[24] ] df = self.df[[ 'time', tickets[0], tickets[1], tickets[2], tickets[3], tickets[4], tickets[5], tickets[6], tickets[7], tickets[8], tickets[9], tickets[10], tickets[11], tickets[12], tickets[13], tickets[14], tickets[15], tickets[16], tickets[17] ]] except Exception as e: log.warning(e) log.info("跳过函数82") self.send_message({"message": {"function": 81, "result": -1}}) return df['maxvalue'] = df.loc[:, [ tickets[1], tickets[2], tickets[3], tickets[4], tickets[5], tickets[6], tickets[7], tickets[8], tickets[9], tickets[10], tickets[11], tickets[12], tickets[13], tickets[14], tickets[15], tickets[16], tickets[17] ]].max(axis=1, skipna=True) df = df[(df['maxvalue'] > 60) & (df['maxvalue'] != 0)] if df.empty: log.info("正常") self.send_message({"message": {"function": 81, "result": 1}}) else: # ------------------判断连续性 result = tool.duration_calculation_to_csv( tickets, df, 600, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/偏航驱动柜温度异常.csv') if result[0]: log.info("正常") self.send_message({"message": {"function": 81, "result": 1}}) else: self.send_message({ "message": { "function": 81, "result": 0, "details": result[1] } })
def sensor_nacelle_signal_cabinet_temperature(self): """ 11≤ 机组运行模式 ≤14,机舱信号柜温度 >45°,且机舱温度 <40°,且异常持续时间超过5min """ try: # 获取 0时间 1机组运行模式 7机舱低压柜温度 6机舱温度 tickets = [ self.tickets[0], self.tickets[1], self.tickets[7], self.tickets[6] ] df = self.df[[ 'time', tickets[0], tickets[1], tickets[2], tickets[3] ]] except Exception as e: log.warning(e) log.info("跳过函数6") self.send_message({"message": {"function": 79, "result": -1}}) return df = df.drop(df[((df[tickets[1]] > 14) | (df[tickets[1]] < 11))].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 79, "result": 1}}) else: df = df[(df[tickets[2]] > 45) & (df[tickets[3]] < 40)] if df.empty: log.info("正常") self.send_message({"message": {"function": 79, "result": 1}}) else: # ------------------判断连续性 result = tool.duration_calculation_to_csv( tickets, df, 300, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/机舱信号柜温度异常.csv') if result[0]: log.info("正常") self.send_message( {"message": { "function": 79, "result": 1 }}) else: self.send_message({ "message": { "function": 79, "result": 0, "details": result[1] } })
def pitch_rotor_speed(self): """ 11≤ 机组运行模式 ≤14,叶轮转速1 和 叶轮转速2 都≥12.8rpm,持续 5s """ try: # 获取 0时间 1机组运行模式 11叶轮速度1 12叶轮速度2 tickets = [ self.tickets[0], self.tickets[1], self.tickets[11], self.tickets[12] ] df = self.df[[ 'time', tickets[0], tickets[1], tickets[2], tickets[3] ]] except Exception as e: log.warning(e) log.warning("变桨跳过函数50") self.send_message({"message": {"function": 49, "result": -1}}) return df = df.drop(df[((df[tickets[1]] > 14) | (df[tickets[1]] < 11))].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 49, "result": 1}}) else: df = df[(df[tickets[2]] >= 12.8) & (df[tickets[3]] >= 12.8)] if df.empty: log.info("正常") self.send_message({"message": {"function": 49, "result": 1}}) else: # ------------------判断连续性 result = tool.duration_calculation_to_csv( tickets, df, 5, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/叶轮转速超速.csv') if result[0]: log.info("正常") self.send_message( {"message": { "function": 49, "result": 1 }}) else: self.send_message({ "message": { "function": 49, "result": 0, "details": result[1] } })
def hydraulic_stop(self): """ 机组运行模式=14,机组未偏航期间(偏航CW和偏航CCW都为0),液压泵未启动时, 液压系统压力值的瞬时值与上一秒瞬时值差值的绝对值≥0.1bar,持续1min """ try: # 获取 0时间 1机组运行模式 2液压系统压力 3液压泵1开 4液压泵2开 5顺时针偏航 6逆时针偏航 tickets = [self.tickets[0], self.tickets[1], self.tickets[2], self.tickets[3], self.tickets[4], self.tickets[5], self.tickets[6]] df = self.df[['time', tickets[0], tickets[1], tickets[2], tickets[3], tickets[4], tickets[5], tickets[6]]] except Exception as e: log.warning(e) log.warning("液压跳过函数65") self.send_message({"message": {"function": 64, "result": -1}}) return df = df[(df[tickets[1]] == 14) & (df[tickets[3]] == 0) & (df[tickets[4]] == 0)] if df.empty: log.info("正常") self.send_message({"message": {"function": 64, "result": 1}}) else: df = df[(df[tickets[5]] == 0) & (df[tickets[6]] == 0)] if df.empty: log.info("正常") self.send_message({"message": {"function": 64, "result": 1}}) else: # 液压系统压力值的瞬时值与上一秒瞬时值差值的绝对值≥0.1bar, 持续1min # df['shift'] = df[tickets[2]].shift(1) df['diff'] = df[tickets[2]].diff(1).abs() # df = df[(df['shift'] >= 0.1)] df = df[(df['diff'] >= 0.1)] if df.empty: log.info("正常") self.send_message({"message": {"function": 64, "result": 1}}) else: # ------------------判断连续性 result = tool.duration_calculation_to_csv(tickets, df, 60, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/液压泵频繁启停异常.csv') if result[0]: log.info("正常") self.send_message({"message": {"function": 64, "result": 1}}) else: self.send_message({"message": {"function": 64, "result": 0, "details": result[1]}})
def generator_inRecycle_temperature_difference(self): """ 机组运行模式 = 14, 发电机绕组温度(任选一个) > 90℃, 发电机内冷入口温度1 - 发电机内冷出口温度1 ≤ 10 或 发电机内冷入口温度2 - 发电机内冷出口温度2 ≤ 10 ,持续时间10min """ try: # 获取 0时间 1机组运行模式 2-7发电机绕组温度(1-6) # 11发电机空空冷内循环入口温度1 12发电机空空冷内循环入口温度2 13发电机空空冷内循环出口温度1 14发电机空空冷内循环出口温度2英文标签 tickets = [self.tickets[0], self.tickets[1], self.tickets[2], self.tickets[3], self.tickets[4], self.tickets[5], self.tickets[6], self.tickets[7], self.tickets[11], self.tickets[12], self.tickets[13], self.tickets[14]] df = self.df[['time', tickets[0], tickets[1], tickets[2], tickets[3], tickets[4], tickets[5], tickets[6], tickets[7], tickets[8], tickets[9], tickets[10], tickets[11]]] except Exception as e: log.warning(e) log.warning("发电机跳过函数47") self.send_message({"message": {"function": 46, "result": -1}}) return df = df.drop(df[(df[tickets[1]] != 14)].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 46, "result": 1}}) else: df = df[(df[tickets[2]] > 90) | (df[tickets[3]] > 90) | (df[tickets[4]] > 90) | ( df[tickets[5]] > 90) | (df[tickets[6]] > 90) | (df[tickets[7]] > 90)] if df.empty: log.info("正常") self.send_message({"message": {"function": 46, "result": 1}}) else: df = df[(df[tickets[8]] - df[tickets[10]] <= 10) | (df[tickets[9]] - df[tickets[11]] <= 10)] if df.empty: log.info("正常") self.send_message({"message": {"function": 46, "result": 1}}) else: # ------------------判断连续性 result = tool.duration_calculation_to_csv(tickets, df, 600, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/发电机内冷温差异常.csv') if result[0]: log.info("正常") self.send_message({"message": {"function": 46, "result": 1}}) else: self.send_message({"message": {"function": 46, "result": 0, "details": result[1]}})
def converter_igbt2_temperature(self): """ 变频器从机IGBT温度 ≠ 0 且 >60℃ 或 <-10℃ """ try: # 获取 0时间 3变频器从机igbt温度 tickets = [self.tickets[0], self.tickets[3]] df = self.df[['time', tickets[0], tickets[1]]] except Exception as e: log.warning(e) log.warning("变频器跳过函数58") self.send_message({"message": {"function": 57, "result": -1}}) return df = df.drop(df[(df[tickets[1]] == 0)].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 57, "result": 1}}) else: df = df[(df[tickets[1]] < -10) | (df[tickets[1]] > 60)] if df.empty: log.info("正常") self.send_message({"message": {"function": 57, "result": 1}}) else: # ------------------判断连续性 result = tool.duration_calculation_to_csv( tickets, df, 1, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/变频器从机IGBT温度异常.csv') if result[0]: log.info("正常") self.send_message( {"message": { "function": 57, "result": 1 }}) else: self.send_message({ "message": { "function": 57, "result": 0, "details": result[1] } })
def generator_outRecycle_temperature_difference(self): """ 机组运行模式 = 14, 发电机内冷入口温度1 和 发电机内冷入口温度2都 > 60℃ 发电机外冷出口温度1 - 发电机外冷入口温度1 ≤ 5 或 发电机外冷出口温度2 - 发电机外冷入口温度2 ≤ 10 ,持续时间10min """ try: # 获取 0时间 1机组运行模式 11发电机空空冷内循环入口温度1 12发电机空空冷内循环入口温度2 # 15发电机空空冷外循环入口温度1 16发电机空空冷外循环入口温度2 17发电机空空冷外循环出口温度1 18发电机空空冷外循环出口温度2英文标签 tickets = [self.tickets[0], self.tickets[1], self.tickets[11], self.tickets[12], self.tickets[15], self.tickets[16], self.tickets[17], self.tickets[18]] df = self.df[['time', tickets[0], tickets[1], tickets[2], tickets[3], tickets[4], tickets[5], tickets[6], tickets[7]]] except Exception as e: log.warning(e) log.warning("发电机跳过函数48") self.send_message({"message": {"function": 47, "result": -1}}) return df = df.drop(df[(df[tickets[1]] != 14)].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 47, "result": 1}}) else: df = df[(df[tickets[2]] > 60) & (df[tickets[3]] > 60)] if df.empty: log.info("正常") self.send_message({"message": {"function": 47, "result": 1}}) else: df = df[(df[tickets[6]] - df[tickets[4]] <= 5) | (df[tickets[7]] - df[tickets[5]] <= 10)] if df.empty: log.info("正常") self.send_message({"message": {"function": 47, "result": 1}}) else: # ------------------判断连续性 result = tool.duration_calculation_to_csv(tickets, df, 600, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/发电机外冷温差异常.csv') if result[0]: log.info("正常") self.send_message({"message": {"function": 47, "result": 1}}) else: self.send_message({"message": {"function": 47, "result": 0, "details": result[1]}})
def sensor_nacelle_signal_cabinet_heart(self): """ 11≤ 机组运行模式 ≤14,机舱信号柜温度 < 5℃,持续3min """ try: # 获取 0时间 1机组运行模式 7机舱低压柜温度 tickets = [self.tickets[0], self.tickets[1], self.tickets[7]] df = self.df[['time', tickets[0], tickets[1], tickets[2]]] except Exception as e: log.warning(e) log.info("跳过函数81") self.send_message({"message": {"function": 80, "result": -1}}) return df = df.drop(df[((df[tickets[1]] > 14) | (df[tickets[1]] < 11))].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 80, "result": 1}}) else: df = df.drop(df[(df[tickets[2]] >= 5)].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 80, "result": 1}}) else: # ------------------判断连续性 result = tool.duration_calculation_to_csv( tickets, df, 180, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/机舱信号柜加热器异常.csv') if result[0]: log.info("正常") self.send_message( {"message": { "function": 80, "result": 1 }}) else: self.send_message({ "message": { "function": 80, "result": 0, "details": result[1] } })
def sensor_tower_base_transformer_temperature(self): """ 塔基变压器温度≠0时,塔基变压器温度>80℃或者<10℃,持续1min """ try: # 获取 0时间 2塔基变压器温度 tickets = [self.tickets[0], self.tickets[2]] df = self.df[['time', tickets[0], tickets[1]]] except Exception as e: log.warning(e) log.warning("传感器跳过函数75") self.send_message({"message": {"function": 74, "result": -1}}) return df = df.drop(df[(df[tickets[1]] == 0)].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 74, "result": 1}}) else: df = df[(df[tickets[1]] > 80) | (df[tickets[1]] < 10)] if df.empty: log.info("正常") self.send_message({"message": {"function": 74, "result": 1}}) else: # ------------------判断连续性 result = tool.duration_calculation_to_csv( tickets, df, 60, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/塔基变压器温度异常.csv') if result[0]: log.info("正常") self.send_message( {"message": { "function": 74, "result": 1 }}) else: self.send_message({ "message": { "function": 74, "result": 0, "details": result[1] } })
def hydraulic_oil_temperature(self): """ 12≤机组运行模式≤14,液压泵主泵处油温和液压回油口油温≠0,两者最小值<20℃,最大值>60℃,持续1min """ try: # 获取 0时间 1机组运行模式 12液压主泵处油温 14液压回油口油温 tickets = [self.tickets[0], self.tickets[1], self.tickets[12], self.tickets[14]] df = self.df[['time', tickets[0], tickets[1], tickets[2], tickets[3]]] except Exception as e: log.warning(e) log.warning("液压跳过函数68") self.send_message({"message": {"function": 67, "result": -1}}) return df = df.drop(df[((df[tickets[1]] > 14) | (df[tickets[1]] < 12))].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 67, "result": 1}}) else: df = df[(df[tickets[2]] != 0) & (df[tickets[3]] != 0)] if df.empty: log.info("正常") self.send_message({"message": {"function": 67, "result": 1}}) else: # 判断两者最小值<20℃,最大值>60℃ df['min'] = df.loc[:, [tickets[2], tickets[3]]].min(axis=1, skipna=True) df['max'] = df.loc[:, [tickets[2], tickets[3]]].max(axis=1, skipna=True) df = df[(df['min'] < 20) & (df['max'] > 60)] if df.empty: log.info("正常") self.send_message({"message": {"function": 67, "result": 1}}) else: # ------------------判断连续性 持续1min result = tool.duration_calculation_to_csv(tickets, df, 60, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/液压系统油温异常.csv') if result[0]: log.info("正常") self.send_message({"message": {"function": 67, "result": 1}}) else: self.send_message({"message": {"function": 67, "result": 0, "details": result[1]}})
def yaw_brake_pressure(self): """ 机组运行模式=14,机组不偏航时(偏航CW和偏航CCW都为0), 液压偏航制动入口压力1、液压偏航制动出口压力1、液压偏航制动入口压力2、液压偏航制动出口压力2最小值< 150bar或最大值>175bar,持续20s """ try: # 获取 0时间 1机组运行模式 5顺时针偏航 6逆时针偏航 7偏航制动出口压力1 9偏航制动入口压力1 # 8偏航制动出口压力2 10偏航制动入口压力2 tickets = [self.tickets[0], self.tickets[1], self.tickets[5], self.tickets[6], self.tickets[7], self.tickets[9], self.tickets[8], self.tickets[10]] df = self.df[['time', tickets[0], tickets[1], tickets[2], tickets[3], tickets[4], tickets[5], tickets[6], tickets[7]]] except Exception as e: log.warning(e) log.warning("液压跳过函数72") self.send_message({"message": {"function": 71, "result": -1}}) return df = df[(df[tickets[1]] == 14) & ((df[tickets[2]] == 0) & (df[tickets[3]] == 0))] if df.empty: log.info("正常") self.send_message({"message": {"function": 71, "result": 1}}) else: # 获取4个的最大最小值 df['max'] = df.loc[:, [tickets[4], tickets[5], tickets[6], tickets[7]]].max(axis=1, skipna=True) df['min'] = df.loc[:, [tickets[4], tickets[5], tickets[6], tickets[7]]].min(axis=1, skipna=True) df = df[((df['min'] < 150) | (df['max'] > 175))] if df.empty: log.info("正常") self.send_message({"message": {"function": 71, "result": 1}}) else: # ------------------判断连续性 20s result = tool.duration_calculation_to_csv(tickets, df, 20, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/偏航压力异常.csv') if result[0]: log.info("正常") self.send_message({"message": {"function": 71, "result": 1}}) else: self.send_message({"message": {"function": 71, "result": 0, "details": result[1]}})
def generator_winding_temperature(self): """ 机组运行模式 = 14,发电机绕组温度(1-6) > 105℃,持续10min """ try: # 获取 1时间 2机组运行模式 2-7发电机绕组温度(1-6) tickets = [self.tickets[0], self.tickets[1], self.tickets[2], self.tickets[3], self.tickets[4], self.tickets[5], self.tickets[6], self.tickets[7]] df = self.df[['time', tickets[0], tickets[1], tickets[2], tickets[3], tickets[4], tickets[5], tickets[6], tickets[7]]] except Exception as e: log.warning(e) log.warning("发电机跳过函数37") self.send_message({"message": {"function": 36, "result": -1}}) return df = df.drop(df[(df[tickets[1]] != 14)].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 36, "result": 1}}) else: df = df[(df[tickets[2]] > 105) | (df[tickets[3]] > 105) | (df[tickets[4]] > 105) | ( df[tickets[5]] > 105) | (df[tickets[6]] > 105) | (df[tickets[7]] > 105)] if df.empty: log.info("正常") self.send_message({"message": {"function": 36, "result": 1}}) else: # ------------------判断连续性 result = tool.duration_calculation_to_csv(tickets, df, 600, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/发电机绕组温度高.csv') if result[0]: log.info("正常") self.send_message({"message": {"function": 36, "result": 1}}) else: self.send_message({"message": {"function": 36, "result": 0, "details": result[1]}})
def hydraulic_rotor_lock_pressure(self): """ 液压系统压力 > 150时,液压叶轮锁定压力1 和 液压叶轮锁定压力2 >120bar 或 <80bar,持续1min """ try: # 获取 0时间 2液压系统压力 15叶轮锁定压力1 16叶轮锁定压力2 tickets = [self.tickets[0], self.tickets[2], self.tickets[15], self.tickets[16]] df = self.df[['time', tickets[0], tickets[1], tickets[2], tickets[3]]] except Exception as e: log.warning(e) log.warning("液压跳过函数70") self.send_message({"message": {"function": 69, "result": -1}}) return df = df.drop(df[(df[tickets[1]] <= 150)].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 69, "result": 1}}) else: df = df[((df[tickets[2]] > 120) | (df[tickets[2]] < 80)) & ( (df[tickets[3]] > 120) & (df[tickets[3]] < 80))] if df.empty: log.info("正常") self.send_message({"message": {"function": 69, "result": 1}}) else: # ------------------判断连续性 result = tool.duration_calculation_to_csv(tickets, df, 60, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/液压叶轮锁定压力异常.csv') if result[0]: log.info("正常") self.send_message({"message": {"function": 69, "result": 1}}) else: self.send_message({"message": {"function": 69, "result": 0, "details": result[1]}})
def generator_nacelle_bearing_temperature(self): """ 12 ≤ 机组运行模式 ≤ 14,发电机机舱侧轴承温度 > 83℃,持续10min """ try: # 获取 0时间 1机组模式 9发电机机舱侧轴承温度 tickets = [self.tickets[0], self.tickets[1], self.tickets[9]] df = self.df[['time', tickets[0], tickets[1], tickets[2]]] except Exception as e: log.warning(e) log.warning("发电机跳过函数39") self.send_message({"message": {"function": 38, "result": -1}}) return df = df.drop(df[(df[tickets[1]] > 14) | (df[tickets[1]] < 12)].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 38, "result": 1}}) else: # 删除温度<=83 df = df.drop(df[(df[tickets[2]] <= 83)].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 38, "result": 1}}) else: # ------------------判断连续性 result = tool.duration_calculation_to_csv(tickets, df, 600, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/发电机机舱侧轴承温度高.csv') if result[0]: log.info("正常") self.send_message({"message": {"function": 38, "result": 1}}) else: self.send_message({"message": {"function": 38, "result": 0, "details": result[1]}})
def generator_bearing_temperature_sensor(self): """ 变流器功率 > 4500KW,发电机机舱侧轴承温度 - 发电机齿轮箱侧轴承温度 < 5℃,持续10min """ try: # 获取 0时间 10变流器功率 9发电机机舱侧轴承温度 8发电机齿轮箱侧轴承温度 tickets = [self.tickets[0], self.tickets[10], self.tickets[9], self.tickets[8]] df = self.df[['time', tickets[0], tickets[1], tickets[2], tickets[3]]] except Exception as e: log.warning(e) log.warning("发电机跳过函数40") self.send_message({"message": {"function": 39, "result": -1}}) return df = df.drop(df[(df[tickets[1]] <= 4500)].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 39, "result": 1}}) else: # 删除 2-3 >= 5 df = df.drop(df[(df[tickets[2]] - df[tickets[3]] >= 5)].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 39, "result": 1}}) else: # ------------------判断连续性 result = tool.duration_calculation_to_csv(tickets, df, 600, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/发电机轴承温度传感器异常.csv') if result[0]: log.info("正常") self.send_message({"message": {"function": 39, "result": 1}}) else: self.send_message({"message": {"function": 39, "result": 0, "details": result[1]}})
def generator_outRecycle_outlet_temperature_sensor(self): """ 机组运行模式 = 14,发电机外冷出口温度1 和 发电机外冷出口温度2的 温差绝对值 > 5℃,持续时间1min" """ try: # 获取 0时间 1机组运行模式 17发电机空空冷外循环出口温度1 18发电机空空冷外循环出口温度2 tickets = [self.tickets[0], self.tickets[1], self.tickets[17], self.tickets[18]] df = self.df[['time', tickets[0], tickets[1], tickets[2], tickets[3]]] except Exception as e: log.warning(e) log.warning("发电机跳过函数44") self.send_message({"message": {"function": 43, "result": -1}}) return df = df.drop(df[(df[tickets[1]] != 14)].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 43, "result": 1}}) else: # 删除 (2-3).abs() <= 5 df = df.drop(df[((df[tickets[2]] - df[tickets[3]]).abs() <= 5)].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 43, "result": 1}}) else: # ------------------判断连续性 result = tool.duration_calculation_to_csv(tickets, df, 60, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/发电机外冷出口温度传感器异常.csv') if result[0]: log.info("正常") self.send_message({"message": {"function": 43, "result": 1}}) else: self.send_message({"message": {"function": 43, "result": 0, "details": result[1]}})
def hydraulic_rotor_lock_actived_accumlator_pressure(self): """ 1.液压系统压力>150时,叶轮锁定储能罐压力1和叶轮锁定储能罐压力2>120bar或<70bar,持续1min 2.液压叶轮锁定压力1 < 50bar且≠0时,叶轮锁定储能罐压力1 < 70bar 3.液压叶轮锁定压力2 < 50bar且≠0时,叶轮锁定储能罐压力2 < 70bar 满足其一,报出叶轮锁定储能罐压力异常 """ try: # 获取 0时间 2液压系统压力 15叶轮锁定压力1 16叶轮锁定压力2 17叶轮锁蓄能器压力1 18叶轮锁蓄能器压力2 tickets = [self.tickets[0], self.tickets[2], self.tickets[15], self.tickets[16], self.tickets[17], self.tickets[18]] df = self.df[['time', tickets[0], tickets[1], tickets[2], tickets[3], tickets[4], tickets[5]]] except Exception as e: log.warning(e) log.warning("液压跳过函数71") self.send_message({"message": {"function": 70, "result": -1}}) return # 情况1 1>150 & (4>120 | 4<70) & (5>120 | 5<70) df_h = df[((df[tickets[1]] > 150) & ((df[tickets[4]] > 120) | (df[tickets[4]] < 70)) & ( (df[tickets[5]] > 120) | (df[tickets[5]] < 70)))].copy() # 情况2 2<50 & 2!=0 & 4<70 df_l = df[((df[tickets[2]] < 50) & (df[tickets[2]] != 0) & (df[tickets[4]] < 70))].copy() # 情况3 3<50 & 3!=0 & 5<70 df_e = df[((df[tickets[3]] < 50) & (df[tickets[3]] != 0) & (df[tickets[5]] < 70))].copy() # 判断是否未空 if df_h.empty and df_l.empty and df_e.empty: log.info("正常") self.send_message({"message": {"function": 70, "result": 1}}) else: # ------------------判断连续性 flag = False if not df_h.empty: result = tool.duration_calculation_to_csv(tickets, df_h, 60, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/叶轮锁定储能罐压力异常1.csv') if result[0]: flag = True log.info("正常") self.send_message({"message": {"function": 70, "result": 1}}) else: flag = False self.send_message({"message": {"function": 70, "result": 0, "details": result[1]}}) else: flag = True if not df_l.empty: result = tool.duration_calculation_to_csv(tickets, df_l, 1, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/叶轮锁定储能罐压力异常2.csv') if result[0]: if flag: log.info("正常") self.send_message({"message": {"function": 70, "result": 1}}) flag = True else: flag = False self.send_message({"message": {"function": 70, "result": 0, "details": result[1]}}) else: flag = True if not df_e.empty: result = tool.duration_calculation_to_csv(tickets, df_e, 1, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/叶轮锁定储能罐压力异常3.csv') if result[0]: if flag: log.info("正常") self.send_message({"message": {"function": 70, "result": 1}}) else: self.send_message({"message": {"function": 70, "result": 0, "details": result[1]}})
def generator_winding_PT100(self): """ 1≤机组运行模式≤14,6个发电机绕组中任意两个变量值差值的绝对值>10,且持续10min """ log.info("发动机正在处理") try: # 获取 0时间 1机组模式 2-7发电机绕组温度1-6 tickets = [self.tickets[0], self.tickets[1], self.tickets[2], self.tickets[3], self.tickets[4], self.tickets[5], self.tickets[6], self.tickets[7]] df = self.df[['time', tickets[0], tickets[1], tickets[2], tickets[3], tickets[4], tickets[5], tickets[6], tickets[7]]] except Exception as e: log.warning(e) log.warning("发电机跳过函数36") self.send_message({"message": {"function": 35, "result": -1}}) return df = df.drop(df[(df[tickets[1]] > 14) | (df[tickets[1]] < 1)].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 35, "result": 1}}) else: # 6个发电机绕组中任意两个变量值差值的绝对值>10,且持续10min """ 1-2 1-3 1-4 1-5 1-6 2-3 2-4 2-5 2-6 3-4 -3-5 -3-6 4-5 4-6 5-6 做差 """ # df = df.drop(df[(df[tickets[1]] != 14)].index) df['绕组1-绕组2'] = (df[tickets[2]] - df[tickets[3]]).abs() df['绕组1-绕组3'] = (df[tickets[2]] - df[tickets[4]]).abs() df['绕组1-绕组4'] = (df[tickets[2]] - df[tickets[5]]).abs() df['绕组1-绕组5'] = (df[tickets[2]] - df[tickets[6]]).abs() df['绕组1-绕组6'] = (df[tickets[2]] - df[tickets[7]]).abs() df['绕组2-绕组3'] = (df[tickets[3]] - df[tickets[4]]).abs() df['绕组2-绕组4'] = (df[tickets[3]] - df[tickets[5]]).abs() df['绕组2-绕组5'] = (df[tickets[3]] - df[tickets[6]]).abs() df['绕组2-绕组6'] = (df[tickets[3]] - df[tickets[7]]).abs() df['绕组3-绕组4'] = (df[tickets[4]] - df[tickets[5]]).abs() df['绕组3-绕组5'] = (df[tickets[4]] - df[tickets[6]]).abs() df['绕组3-绕组6'] = (df[tickets[4]] - df[tickets[7]]).abs() df['绕组4-绕组5'] = (df[tickets[5]] - df[tickets[6]]).abs() df['绕组4-绕组6'] = (df[tickets[5]] - df[tickets[7]]).abs() df['绕组5-绕组6'] = (df[tickets[6]] - df[tickets[7]]).abs() df = df[(df["绕组1-绕组2"] > 10) | (df["绕组1-绕组3"] > 10) | (df["绕组1-绕组4"] > 10) | (df["绕组1-绕组5"] > 10) | (df["绕组1-绕组6"] > 10) | (df["绕组2-绕组3"] > 10) | (df["绕组2-绕组4"] > 10) | (df["绕组2-绕组5"] > 10) | (df["绕组2-绕组6"] > 10) | (df["绕组3-绕组4"] > 10) | (df["绕组3-绕组5"] > 10) | (df["绕组3-绕组6"] > 10) | (df["绕组4-绕组5"] > 10) | (df["绕组4-绕组6"] > 10) | (df["绕组5-绕组6"] > 10) ] if df.empty: log.info("正常") self.send_message({"message": {"function": 35, "result": 1}}) else: # ------------------判断连续性 持续10min result = tool.duration_calculation_to_csv(tickets, df, 600, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/发电机绕组PT100温度异常.csv') if result[0]: log.info("正常") self.send_message({"message": {"function": 35, "result": 1}}) else: self.send_message({"message": {"function": 35, "result": 0, "details": result[1]}})
def converter2_water_temperature(self): """ 1、变频器从机冷却液温度 > 45℃ 且 变频器从机外循环风扇运行 = 1,变频器从机循环水泵运行 = 1时,持续10min 2、任何情况下,变频器从机冷却液温度 > 48℃ 满足其一 """ try: # 获取 0时间 9变频器从机冷却液温度 10变频器从机风扇运行1 11变频器从机水泵运行 tickets = [ self.tickets[0], self.tickets[9], self.tickets[10], self.tickets[11] ] df = self.df[[ 'time', tickets[0], tickets[1], tickets[2], tickets[3] ]] except Exception as e: log.warning(e) log.warning("变频器跳过函数61") self.send_message({"message": {"function": 60, "result": -1}}) return # 情况1 1>45℃ 且 2=1,3=1时,持续10min df_h = df[(df[tickets[1]] > 45) & (df[tickets[2]] == 1) & (df[tickets[3]] == 1)].copy() # 情况2 1>48℃ df_l = df[(df[tickets[1]] > 48)].copy() # 判断是否未空 if df_h.empty and df_l.empty: log.info("正常") self.send_message({"message": {"function": 60, "result": 1}}) else: # ------------------判断连续性 flag = False if not df_h.empty: result = tool.duration_calculation_to_csv( tickets, df_h, 600, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/变频器从机冷却液温度异常1.csv') if result[0]: flag = True log.info("正常") self.send_message( {"message": { "function": 60, "result": 1 }}) else: flag = False self.send_message({ "message": { "function": 60, "result": 0, "details": result[1] } }) else: flag = True if not df_l.empty: result = tool.duration_calculation_to_csv( tickets, df_l, 1, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/变频器从机冷却液温度异常2.csv') if result[0]: if flag: log.info("正常") self.send_message( {"message": { "function": 60, "result": 1 }}) else: self.send_message({ "message": { "function": 60, "result": 0, "details": result[1] } })
def pitch_motor_temperature(self): """ 11≤ 机组运行模式 ≤14,单个桨叶电机温度 > 120℃, 或两两温差绝对值≥30℃,持续1min """ try: # 获取 0时间 1机组模式 14-16变桨电机温度1-3 tickets = [ self.tickets[0], self.tickets[1], self.tickets[14], self.tickets[15], self.tickets[16] ] df = self.df[[ 'time', tickets[0], tickets[1], tickets[2], tickets[3], tickets[4] ]] except Exception as e: log.warning(e) log.warning("变桨跳过函数51") self.send_message({"message": {"function": 50, "result": -1}}) return df = df.drop(df[(df[tickets[1]] > 14) | (df[tickets[1]] < 11)].index) if df.empty: log.info("正常") self.send_message({"message": {"function": 50, "result": 1}}) else: df['桨叶电机1-桨叶电机2'] = (df[tickets[2]] - df[tickets[3]]).abs() df['桨叶电机1-桨叶电机3'] = (df[tickets[2]] - df[tickets[4]]).abs() df['桨叶电机2-桨叶电机3'] = (df[tickets[3]] - df[tickets[4]]).abs() # 情况1 单个桨叶电机温度 > 120℃,1min df_h = df[(df[tickets[2]] > 120) | (df[tickets[3]] > 120) | (df[tickets[4]] > 120)].copy() # 情况2 两两温差绝对值≥30℃,且持续时间超过1min df_l = df[(df['桨叶电机1-桨叶电机2'] >= 30) | (df['桨叶电机1-桨叶电机3'] >= 30) | (df['桨叶电机2-桨叶电机3'] >= 30)].copy() if df_h.empty and df_l.empty: log.info("正常") self.send_message({"message": {"function": 50, "result": 1}}) else: # ------------------判断连续性 flag = False if not df_h.empty: result = tool.duration_calculation_to_csv( tickets, df_h, 60, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/桨叶电机温度异常1.csv') if result[0]: flag = True log.info("正常") self.send_message( {"message": { "function": 50, "result": 1 }}) else: flag = False self.send_message({ "message": { "function": 50, "result": 0, "details": result[1] } }) else: flag = True if not df_l.empty: result = tool.duration_calculation_to_csv( tickets, df_l, 60, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/桨叶电机温度异常2.csv') if result[0]: if flag: log.info("正常") self.send_message( {"message": { "function": 50, "result": 1 }}) else: self.send_message({ "message": { "function": 50, "result": 0, "details": result[1] } })
def converter2_water_pressure(self): """ 1、变频器从机循环水泵运行=1时,变频器从机冷却液压力>5.5bar或<3.5bar,持续10min 2、变频器从机循环水泵运行=0时,变频器从机冷却液压力>3bar或<1.2bar,持续10min 满足其一 """ try: # 获取 0时间 11变频器从机水泵运行 13变频器从机冷却液压力 tickets = [self.tickets[0], self.tickets[11], self.tickets[13]] df = self.df[['time', tickets[0], tickets[1], tickets[2]]] except Exception as e: log.warning(e) log.warning("变频器跳过函数63") self.send_message({"message": {"function": 62, "result": -1}}) return # 情况1 1=1时,2>5.5bar或<3.5bar,持续10min df_h = df[(df[tickets[1]] == 1) & ((df[tickets[2]] > 5.5) | (df[tickets[2]] < 3.5))].copy() # 情况2 1=0时,2>3bar或<1.2bar,持续10min df_l = df[(df[tickets[1]] == 0) & ((df[tickets[2]] > 3) | (df[tickets[2]] < 1.2))].copy() if df_h.empty and df_l.empty: log.info("正常") self.send_message({"message": {"function": 62, "result": 1}}) else: # ------------------判断连续性 flag = False if not df_h.empty: result = tool.duration_calculation_to_csv( tickets, df_h, 600, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/变频器从机冷却液压力异常1.csv') if result[0]: flag = True log.info("正常") self.send_message( {"message": { "function": 62, "result": 1 }}) else: flag = False self.send_message({ "message": { "function": 62, "result": 0, "details": result[1] } }) else: flag = True if not df_l.empty: result = tool.duration_calculation_to_csv( tickets, df_l, 600, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/变频器从机冷却液压力异常2.csv') if result[0]: if flag: log.info("正常") self.send_message( {"message": { "function": 62, "result": 1 }}) else: self.send_message({ "message": { "function": 62, "result": 0, "details": result[1] } })
def converter_generator_speed(self): """ 1、机组运行模式=14,(变流器发电机转速/齿轮箱变比(23.187)-叶轮转速2)>1.5,持续10s; 2、变流器发电机转速>300rpm 满足以上其一 """ try: # 获取 0时间 1机组运行模式 4变流器发电机转速 5叶轮转速2 tickets = [ self.tickets[0], self.tickets[1], self.tickets[4], self.tickets[5] ] df = self.df[[ 'time', tickets[0], tickets[1], tickets[2], tickets[3] ]] except Exception as e: log.warning(e) log.warning("变频器跳过函数59") self.send_message({"message": {"function": 58, "result": -1}}) return # 情况1 1=14,(2/23.187 - 3)>1.5,持续10s df_h = df[(df[tickets[1]] == 14) & (df[tickets[2]] / 23.187 - df[tickets[3]] > 1.5)].copy() # 情况2 2 > 300rpm df_l = df[(df[tickets[2]] > 300)].copy() # 判断是否未空 if df_h.empty and df_l.empty: log.info("正常") self.send_message({"message": {"function": 58, "result": 1}}) else: # ------------------判断连续性 flag = False if not df_h.empty: result = tool.duration_calculation_to_csv( tickets, df_h, 10, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/变流器发电机转速异常1.csv') if result[0]: flag = True log.info("正常") self.send_message( {"message": { "function": 58, "result": 1 }}) else: flag = False self.send_message({ "message": { "function": 58, "result": 0, "details": result[1] } }) else: flag = True if not df_l.empty: result = tool.duration_calculation_to_csv( tickets, df_l, 1, str(gl.now_file).split(r'/')[-1].split('.')[0] + '/变流器发电机转速异常2.csv') if result[0]: if flag: log.info("正常") self.send_message( {"message": { "function": 58, "result": 1 }}) else: self.send_message({ "message": { "function": 58, "result": 0, "details": result[1] } })