obsidian_backup/多体+耦合求解器/steady power curve Operational loads 控制.md

7.4 KiB
Raw Blame History

Theory manual

!Pasted image 20250310105322.pngOnce Demanded Generator Torque is reached at point D, the torque demand is kept constant for all higher wind speeds. Once the Demanded Generator Speed is reached the pitch control regulates the rotor speed. This is know as the full load regime. A small (optional) margin is allowed between points D (where the torque reaches maximum) and E (where pitch control begins) to prevent excessive mode switching between below and above rated control modes. However, this margin may not be required, in which case points D and E coincide. The line CD may collapse to a point if also desired.

In the full load regime, the blade pitch is adjusted to maintain the chosen operating point, designated E. Effectively, changing the pitch alters the lines of constant wind speed, forcing them to pass through the desired operating point.

The pitch angle is limited to the Minimum pitch angle the lower limit of pitch or aileron deployment angle. The Maximum pitch angle that is the upper limit of pitch or aileron deployment angle. There is also an option to schedule pitch angle against hub wind speed during the initial condition calculation.

The user can select between Pitch feathering or Assisted stall to specify the direction of pitching. If pitch feathering is selected, the Minimum pitch angle will be set for normal operation below rated wind speed, and the pitch (or aileron) angle will increase above rated. If Assisted Stall is selected, the maximum pitch setting is used below rated, and the pitch (or aileron) angle decreases (or moves to more negative values) above rated.

The feature allows the user to easily specify pitch angles below rated wind speed for initial conditions. This is useful for model linearisation calculations. For above rated wind speeds, the initial condition algorithm finds a pitch angle that maintains maximum rotor speed. However, the minimum pitch angle set by the pitch scheduling routine is still used as the minimum angle even though a smaller angle might be needed to maintain the maximum rotor speed. Furthermore, it provides a convenient method for matching the behaviours in the initial condition algorithm and a time domain pitch scheduling routine implemented in a User-Defined Controller. Note that this feature only supports VSPR control strategies, and does not support the “Assisted Stall” type controller. In addition, this option only applies when the turbine is in power production mode.

The user can specify hub wind speeds and minimum pitch angles in a lookup table. During the initial condition calculation, a linear interpolation of the data points is utilized to calculate the minimum pitch angle for the current hub wind speed (both above and below rated wind speed conditions). The points in the lookup table must be in a monotonic ascending order and if the current hub wind speed is out of range of the specified lookup table the nearest value will be used.

user manual

The steady state parameters define the operating envelope of the turbine, and are required for calculation of the steady power curve and steady operational loads. Click on Controller Dynamics to define additional parameters which model the dynamic action of the controller, such as controller gains and transducer and actuator time constants.

!Pasted image 20250310144609.png

Steady state parameters

  • Demanded electrical power: the power set-point, i.e. the electrical power output required above rated wind speed.
  • Minimum pitch angle: the lower limit of pitch or aileron deployment angle.
  • Maximum pitch angle: the upper limit of pitch or aileron deployment angle.
  • Select Pitch feathering or Assisted stall: to specify the direction of pitching. If Pitch Feathering is selected, the Minimum pitch angle will be set for normal operation below rated wind speed, and the pitch (or aileron) angle will increase above rated. If Assisted Stall is selected, the Maximum pitch setting is used below rated, and the pitch (or aileron) angle decreases (or moves to more negative values) above rated.

!Pasted image 20250310162659.png

稳态功率+转速、变桨算法

输入:

  • 风速 3, 25, 0.1
  • 转速min(rpm)
  • 转速max(rpm)

1、算Cp-lambda -> Cpmax + 对应lambda 2、根据追踪最佳cp方法得到3-25每个风速对应的转速

        # 根据转速上下界,找到风速上下界 rpm -> deg
        omegalb = self.omega_rpmlb * 2 * np.pi / 60
        omegaub = self.omega_rpmub * 2 * np.pi / 60
        
  	   # 根据relalabmda_R找到风速上下界在此风速范围内可以追踪最佳Cp
        V0lb =  omegalb * self.RPlusHub / relalabmda_R
        V0ub =  omegaub * self.RPlusHub / relalabmda_R

        for V in self.v_w:
        # self.v_w 风速序列 3, 25, 0.1

            # 形成转速规律

            if V < V0lb:

                # 转速为最小转速

                append(omegalb)

            elif V > V0ub:

                # 转速为最大转速

                append(omegaub)

            else:

                # 转速为最大Cp对应的转速

                append(relalabmda_R * V / self.RPlusHub)

        self.omega_list = omega_list

3、遍历速度

for i in range(self.numv_w):

	V = np.round(self.v_w[i], 3)

	omega = self.omega_list[i]

	Cp, CThrust, Power, Thrust, Mxy = self.SolveAlongBlade(V, omega) #对整只叶片解BEM

	if Power > self.Rated_P:  # 达到额定风速了,开始变桨
		min_angle = 0

		max_angle = 90

		init_pitch_angle = pitch_angle[i-1] # 从前一步变桨角度开始

		tolerance = 0.01

		max_iterations = 1000
		error = Power - self.Rated_P
		print(f"Iteration {0}: pitch_angle={init_pitch_angle}, Power={Power}, Error={error}")

		delta_pitch_angle = compute_delta_pitch(Power, self.Rated_P, 0.05)
		# 我直接把delta变桨角度加到扭角里了
		self.Twist += np.full((self.SectionNum,), delta_pitch_angle)

		total_pitch_angle = init_pitch_angle + delta_pitch_angle
		
		# 开始迭代
	    for iteration in range(max_iterations):    
	    Cp, CThrust, Power, Thrust, Mxy = self.SolveAlongBlade(V, omega)
	    error = Power - self.Rated_P

		if abs(error) < tolerance:
			Power_re[i] = Power
			self.V0 = V
			Thrust_re[i] = Thrust
			Mxy_re[i] = Mxy
			Cp_re[i] = Cp
			pitch_angle[i] = total_pitch_angle
			iteration_step[i] = iteration + 1
			break

		else:
			delta_pitch_angle = compute_delta_pitch(Power, self.Rated_P, 0.05)
			total_pitch_angle = total_pitch_angle + delta_pitch_angle
			
			# 约束检查
			if total_pitch_angle < min_angle:
				total_pitch_angle = min_angle
			elif total_pitch_angle > max_angle:
				total_pitch_angle = max_angle
			self.Twist += np.full((self.SectionNum,), delta_pitch_angle)

	else:

		Power_re[i] = Power
		Thrust_re[i] = Thrust
		Mxy_re[i] = Mxy
		Cp_re[i] = Cp
		pitch_angle[i] = 0
		iteration_step[i] = 0
def compute_delta_pitch(current_power, target_power, sensitivity):

    delta = (current_power - target_power) * sensitivity

    return delta

[steady控制算法.excalidraw]