import pandas as pd from utils.jsonUtil import JsonUtil # 全局变量 charset_unify = 'utf-8' CSVSuffix = '.csv' Field_NameOfTurbine = "turbine_name" Field_GeneratorTorque = "generator_torque" Field_GeneratorSpeed = "generator_speed" Field_RotorSpeed = "rotor_speed" Field_WindSpeed = "wind_speed" Field_AngleIncluded = "angle_included" Field_YearMonth = "year-month" Field_YearMonthDay = "year-month-day" Field_PowerFloor= "power_floor" Field_Cp = "cp" Field_CpMedian = "cp_median" Field_TSR = "tsr" Field_TSRMedian = "tsr_median" Field_YawError="yaw_error" Field_LableFlag="lab" class GraphSet: def __init__(self): self.multipl = None self.step = None self.min = None self.max = None class ConfBusiness: def __init__(self): self.farm_name = None self.rated_power = None self.rated_WindSpeed = None self.rotor_diameter = None self.density_air = None self.rotational_Speed_Ratio = None self.type_name = None self.time_period = None # 时间间隔,单位是秒 self.output_name = None self.output_prefix = None self.turbineInfoFilePathCSV = None # 风电机组信息 self.turbineGuaranteedPowerCurveFilePathCSV = None # 合同担保功率曲线 self.input_path = None self.skip_row_number = None # 跳过的行数 self.csvFileNameSplitStringForTurbine = None # 自文件名中获取机组号的分隔符 self.index_turbine = None # 自文件名中获取机组号的索引 self.filter = None self.output_path = None self.start_time_str = None self.end_time_str = None # 将字符串转换为 pd.Timestamp 类型 self.start_time = None self.end_time = None self.excludingMonths = None # 排除指定的月份数据 格式%Y-%m self.field_turbine_time = None # 字段名 时间 self.field_turbine_name = None # 字段名 机组名 self.field_wind_speed = None # 字段名 风速 self.field_power = None # 字段名 有功功率 self.field_pitch_angle1 = None # 字段名 桨距角1 self.field_pitch_angle2 = None # 字段名 桨距角2 self.field_pitch_angle3 = None # 字段名 桨距角3 self.field_turbine_state = None # 字段名 风机状态 self.field_gen_speed = None # 字段名 发电机转速 self.value_gen_speed_multiple = None # 值 发电机转速放大倍数 self.value_gen_speed_step = None # 值 发电机转速轴系间隔 self.value_gen_speed_min = None # 值 发电机转速最小 self.value_gen_speed_max = None # 值 发电机转速最大 self.field_rotor_speed = None # 字段名 叶轮转速 self.field_torque = None # 字段名 转矩 self.field_wind_dir = None # 字段名 风向 self.field_angle_included = None self.field_nacelle_pos = None # 字段名 机舱温度 self.field_env_temp = None # 字段名 环境温度 self.field_nacelle_temp = None # 字段名 机舱温度 self.field_temperature_large_components = None # 字段名列表 大部件温度传感器 self.temperature_Generator = None self.graphSets = None self.field_activePowerSet = None self.field_activePowerAvailable = None self.rated_cut_in_windspeed = None #额定切入风速 self.rated_cut_out_windspeed = None #额定切出风速 def loadConfig(self, jsonFilePath, charset=charset_unify): """ 配置初始化 """ # # 使用global声明,表示我们要修改的是全局变量config_data # global farm_name # 将配置数据存储在变量中 configData = JsonUtil.read_json(jsonFilePath) self.farm_name = configData['name_PowerFarm'] self.rated_power = configData['rated_Power_Turbine_Unit_kW'] self.rated_WindSpeed = configData["rated_WindSpeed"] self.rated_cut_in_windspeed = configData["rated_cut_in_windspeed"] #额定切入风速 self.rated_cut_out_windspeed = configData["rated_cut_out_windspeed"]#额定切出风速 self.rotor_diameter = configData['rotor_diameter'] self.rotational_Speed_Ratio = configData['rotational_Speed_Ratio'] self.density_air = configData['density_air'] self.type_name = configData['name_Type_For_Analysis'] # 时间间隔,单位是秒 self.time_period = configData['time_Period_Unit_Second'] self.output_name = configData['name_Output'] self.output_prefix = configData['outputFileDirectory'] self.turbineInfoFilePathCSV = configData["turbineInfoFilePathCSV"] self.turbineGuaranteedPowerCurveFilePathCSV = configData[ "turbineGuaranteedPowerCurveFilePathCSV"] self.input_path = configData['inputFileDirectoryByCSV'] self.csvFileNameSplitStringForTurbine = configData["csvFileNameSplitStringForTurbine"] self.index_turbine = configData["index_turbine"] self.skip_row_number = configData['skip_row_number'] self.filter = configData['filter'] self.output_path = self.output_prefix + \ r"/{}".format(self.farm_name) # start_time_str = '{} 00:00:00'.format(configData['date_Begin']) # end_time_str = '{} 23:59:59'.format(configData['date_End']) self.start_time_str = configData['date_Begin'] self.end_time_str = configData['date_End'] # 将字符串转换为 pd.Timestamp 类型 self.start_time = pd.to_datetime( self.start_time_str, format='%Y-%m-%d %H:%M:%S') self.end_time = pd.to_datetime( self.end_time_str, format='%Y-%m-%d %H:%M:%S') self.excludingMonths = configData['excludingMonths'] self.field_turbine_time = configData['turbine_Time'] self.field_turbine_name = configData['turbine_Name'] self.field_wind_speed = configData['speed_Wind'] self.field_power = configData['power_Active'] self.field_pitch_angle1 = configData['pitch_Angle1'] self.field_pitch_angle2 = configData['pitch_Angle2'] self.field_pitch_angle3 = configData['pitch_Angle3'] self.field_turbine_state = configData['state_Turbine'] self.field_gen_speed = configData['speed_Generator'] # self.value_gen_speed_multiple = configData['speed_Generator_Multiple'] # self.value_gen_speed_step = configData['speed_Generator_Step'] # self.value_gen_speed_min = configData['speed_Generato_min'] # self.value_gen_speed_max = configData['speed_Generato_max'] self.field_rotor_speed = configData['speed_Rotor'] self.field_torque = configData['torque'] self.field_wind_dir = configData['direction_Wind'] self.field_angle_included = configData['angle_included'] self.field_nacelle_pos = configData['nacelle_Pos'] self.field_env_temp = configData['temperature_Env'] self.field_nacelle_temp = configData['temperature_Nacelle'] self.field_temperature_large_components = configData['temperature_large_components'] self.temperature_Generator = configData["temperature_Generator"] self.graphSets = configData["graphSets"] self.field_Cabin_Vibrate_X = configData["Cabin_Vibrate_X"] self.field_Cabin_Vibrate_Y = configData["Cabin_Vibrate_Y"] self.field_activePowerSet = configData["activePowerSet"] self.field_activePowerAvailable = configData["activePowerAvailable"] return self # def add_W_if_starts_with_digit(self,s): # if s and s[0].isdigit(): # return 'W' + s # return s # 定义一个函数,用于检查字符串首字母是否为数字,并在是的情况下添加'W' def add_W_if_starts_with_digit(self, s): if isinstance(s, str) and s[0].isdigit(): return 'W' + s return s