confBusiness.py 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. import pandas as pd
  2. from utils.jsonUtil import JsonUtil
  3. # 全局变量
  4. charset_unify = 'utf-8'
  5. CSVSuffix = '.csv'
  6. Field_NameOfTurbine = "turbine_name"
  7. Field_GeneratorTorque = "generator_torque"
  8. Field_GeneratorSpeed = "generator_speed"
  9. Field_RotorSpeed = "rotor_speed"
  10. Field_WindSpeed = "wind_speed"
  11. Field_AngleIncluded = "angle_included"
  12. Field_YearMonth = "year-month"
  13. Field_YearMonthDay = "year-month-day"
  14. Field_PowerFloor= "power_floor"
  15. Field_Cp = "cp"
  16. Field_CpMedian = "cp_median"
  17. Field_TSR = "tsr"
  18. Field_TSRMedian = "tsr_median"
  19. Field_YawError="yaw_error"
  20. Field_LableFlag="lab"
  21. class GraphSet:
  22. def __init__(self):
  23. self.multipl = None
  24. self.step = None
  25. self.min = None
  26. self.max = None
  27. class ConfBusiness:
  28. def __init__(self):
  29. self.farm_name = None
  30. self.rated_power = None
  31. self.rated_WindSpeed = None
  32. self.rotor_diameter = None
  33. self.density_air = None
  34. self.rotational_Speed_Ratio = None
  35. self.type_name = None
  36. self.time_period = None # 时间间隔,单位是秒
  37. self.output_name = None
  38. self.output_prefix = None
  39. self.turbineInfoFilePathCSV = None # 风电机组信息
  40. self.turbineGuaranteedPowerCurveFilePathCSV = None # 合同担保功率曲线
  41. self.input_path = None
  42. self.skip_row_number = None # 跳过的行数
  43. self.csvFileNameSplitStringForTurbine = None # 自文件名中获取机组号的分隔符
  44. self.index_turbine = None # 自文件名中获取机组号的索引
  45. self.filter = None
  46. self.output_path = None
  47. self.start_time_str = None
  48. self.end_time_str = None
  49. # 将字符串转换为 pd.Timestamp 类型
  50. self.start_time = None
  51. self.end_time = None
  52. self.excludingMonths = None # 排除指定的月份数据 格式%Y-%m
  53. self.field_turbine_time = None # 字段名 时间
  54. self.field_turbine_name = None # 字段名 机组名
  55. self.field_wind_speed = None # 字段名 风速
  56. self.field_power = None # 字段名 有功功率
  57. self.field_pitch_angle1 = None # 字段名 桨距角1
  58. self.field_pitch_angle2 = None # 字段名 桨距角2
  59. self.field_pitch_angle3 = None # 字段名 桨距角3
  60. self.field_turbine_state = None # 字段名 风机状态
  61. self.field_gen_speed = None # 字段名 发电机转速
  62. self.value_gen_speed_multiple = None # 值 发电机转速放大倍数
  63. self.value_gen_speed_step = None # 值 发电机转速轴系间隔
  64. self.value_gen_speed_min = None # 值 发电机转速最小
  65. self.value_gen_speed_max = None # 值 发电机转速最大
  66. self.field_rotor_speed = None # 字段名 叶轮转速
  67. self.field_torque = None # 字段名 转矩
  68. self.field_wind_dir = None # 字段名 风向
  69. self.field_angle_included = None
  70. self.field_nacelle_pos = None # 字段名 机舱温度
  71. self.field_env_temp = None # 字段名 环境温度
  72. self.field_nacelle_temp = None # 字段名 机舱温度
  73. self.field_temperature_large_components = None # 字段名列表 大部件温度传感器
  74. self.temperature_Generator = None
  75. self.graphSets = None
  76. self.field_activePowerSet = None
  77. self.field_activePowerAvailable = None
  78. self.rated_cut_in_windspeed = None #额定切入风速
  79. self.rated_cut_out_windspeed = None #额定切出风速
  80. def loadConfig(self, jsonFilePath, charset=charset_unify):
  81. """
  82. 配置初始化
  83. """
  84. # # 使用global声明,表示我们要修改的是全局变量config_data
  85. # global farm_name
  86. # 将配置数据存储在变量中
  87. configData = JsonUtil.read_json(jsonFilePath)
  88. self.farm_name = configData['name_PowerFarm']
  89. self.rated_power = configData['rated_Power_Turbine_Unit_kW']
  90. self.rated_WindSpeed = configData["rated_WindSpeed"]
  91. self.rated_cut_in_windspeed = configData["rated_cut_in_windspeed"] #额定切入风速
  92. self.rated_cut_out_windspeed = configData["rated_cut_out_windspeed"]#额定切出风速
  93. self.rotor_diameter = configData['rotor_diameter']
  94. self.rotational_Speed_Ratio = configData['rotational_Speed_Ratio']
  95. self.density_air = configData['density_air']
  96. self.type_name = configData['name_Type_For_Analysis']
  97. # 时间间隔,单位是秒
  98. self.time_period = configData['time_Period_Unit_Second']
  99. self.output_name = configData['name_Output']
  100. self.output_prefix = configData['outputFileDirectory']
  101. self.turbineInfoFilePathCSV = configData["turbineInfoFilePathCSV"]
  102. self.turbineGuaranteedPowerCurveFilePathCSV = configData[
  103. "turbineGuaranteedPowerCurveFilePathCSV"]
  104. self.input_path = configData['inputFileDirectoryByCSV']
  105. self.csvFileNameSplitStringForTurbine = configData["csvFileNameSplitStringForTurbine"]
  106. self.index_turbine = configData["index_turbine"]
  107. self.skip_row_number = configData['skip_row_number']
  108. self.filter = configData['filter']
  109. self.output_path = self.output_prefix + \
  110. r"/{}".format(self.farm_name)
  111. # start_time_str = '{} 00:00:00'.format(configData['date_Begin'])
  112. # end_time_str = '{} 23:59:59'.format(configData['date_End'])
  113. self.start_time_str = configData['date_Begin']
  114. self.end_time_str = configData['date_End']
  115. # 将字符串转换为 pd.Timestamp 类型
  116. self.start_time = pd.to_datetime(
  117. self.start_time_str, format='%Y-%m-%d %H:%M:%S')
  118. self.end_time = pd.to_datetime(
  119. self.end_time_str, format='%Y-%m-%d %H:%M:%S')
  120. self.excludingMonths = configData['excludingMonths']
  121. self.field_turbine_time = configData['turbine_Time']
  122. self.field_turbine_name = configData['turbine_Name']
  123. self.field_wind_speed = configData['speed_Wind']
  124. self.field_power = configData['power_Active']
  125. self.field_pitch_angle1 = configData['pitch_Angle1']
  126. self.field_pitch_angle2 = configData['pitch_Angle2']
  127. self.field_pitch_angle3 = configData['pitch_Angle3']
  128. self.field_turbine_state = configData['state_Turbine']
  129. self.field_gen_speed = configData['speed_Generator']
  130. # self.value_gen_speed_multiple = configData['speed_Generator_Multiple']
  131. # self.value_gen_speed_step = configData['speed_Generator_Step']
  132. # self.value_gen_speed_min = configData['speed_Generato_min']
  133. # self.value_gen_speed_max = configData['speed_Generato_max']
  134. self.field_rotor_speed = configData['speed_Rotor']
  135. self.field_torque = configData['torque']
  136. self.field_wind_dir = configData['direction_Wind']
  137. self.field_angle_included = configData['angle_included']
  138. self.field_nacelle_pos = configData['nacelle_Pos']
  139. self.field_env_temp = configData['temperature_Env']
  140. self.field_nacelle_temp = configData['temperature_Nacelle']
  141. self.field_temperature_large_components = configData['temperature_large_components']
  142. self.temperature_Generator = configData["temperature_Generator"]
  143. self.graphSets = configData["graphSets"]
  144. self.field_Cabin_Vibrate_X = configData["Cabin_Vibrate_X"]
  145. self.field_Cabin_Vibrate_Y = configData["Cabin_Vibrate_Y"]
  146. self.field_activePowerSet = configData["activePowerSet"]
  147. self.field_activePowerAvailable = configData["activePowerAvailable"]
  148. return self
  149. # def add_W_if_starts_with_digit(self,s):
  150. # if s and s[0].isdigit():
  151. # return 'W' + s
  152. # return s
  153. # 定义一个函数,用于检查字符串首字母是否为数字,并在是的情况下添加'W'
  154. def add_W_if_starts_with_digit(self, s):
  155. if isinstance(s, str) and s[0].isdigit():
  156. return 'W' + s
  157. return s