In [1]:
    
%pylab notebook
%precision 0
    
    
    Out[1]:
Given a 13.8-kV, 50-MVA, 0.9-power-factor-lagging, 60-Hz, four-pole, Y-connected synchronous machine with:
The OCC of this generator is shown in Figure P4-1 below
In [2]:
    
Vl = 13.8e3    # [V] 
PF = 0.9
Xs = 2.5       # [Ohm]
Ra = 0.2       # [Ohm]
P      =  50e6 # [W]
Pf_w   = 1.0e6 # [W]
Pcore  = 1.5e6 # [W]
Pstray =     0 # [W]
n_m = 1800     # [r/min]
    
Suppose that this generator is running at rated conditions, and then the load is removed without changing the field current.
In [3]:
    
ia = P / (sqrt(3) * Vl)
Ia_angle = -arccos(PF)
Ia = ia * (cos(Ia_angle) + sin(Ia_angle)*1j)
print('Ia = {:.0f} A ∠{:.1f}°'.format(abs(Ia), Ia_angle/pi *180))
    
    
The phase voltage of this machine is: $$V_\phi = V_T / \sqrt{3}$$
In [4]:
    
V_phase = Vl / sqrt(3)
print('V_phase = {:.0f} V'.format(V_phase))
    
    
The internal generated voltage of the machine is: $$\vec{E}_A = \vec{V}_\phi + R_A\vec{I}_A + jX_S\vec{I}_A$$
In [5]:
    
Ea = V_phase + Ra*Ia + Xs*1j*Ia
Ea_angle = arctan(Ea.imag/Ea.real)
print('''
Ea = {:.0f} V ∠{:.1f}°
=================='''.format(abs(Ea), Ea_angle/pi*180))
    
    
In [6]:
    
print('''
V_phase = {:.0f} V
================'''.format(V_phase))
    
    
In [7]:
    
Vt_oc = sqrt(3) * abs(Ea)
print('Vt_oc = {:.0f} kV'.format(Vt_oc/1000))
    
    
From the OCC, the required field current is $\underline{\underline{I_F = 10\,A}}$.
In [8]:
    
abs(Ea)
    
    Out[8]:
The corresponding terminal voltage would be $\underline{\underline{V_T = 20\,kV}}$.
In [9]:
    
Pout = P*PF
print('Pout = {:.0f} MW'.format(Pout/1e6))
    
    
In [10]:
    
Pcu = 3 * abs(Ia)**2 * Ra
print('Pcu = {:.1f} MW'.format(Pcu/1e6))
    
    
In [11]:
    
Pin = Pout +Pcu + Pf_w + Pcore + Pstray
print('Pin = {:.1f} MW'.format(Pin/1e6))
    
    
Therefore the prime mover must be capable of supplying $P_{in}$. Since the generator is a four-pole 60 Hz machine, to must be turning at 1800 r/min. The required torque is:
$$\tau_{app} = \frac{P_{in}}{\omega_m}$$
In [12]:
    
w_m = n_m * (2*pi/60.0)
tau_app = Pin / w_m
print('''
tau_app = {:.0f} Nm
==================='''.format(tau_app))
    
    
In [13]:
    
Q = - (3 * V_phase**2) / Xs
print('Q = {:.2f} Mvar'.format(Q/1e6))
    
    
The radius of the rotor current limit is:
$$D_E = \frac{3V_\phi E_A}{X_S}$$
In [14]:
    
De = (3 * V_phase * abs(Ea)) / Xs
print('De = {:.0f} Mvar'.format(De/1e6))
    
    
The stator current limit is a circle at the origin of radius:
$$S = 3V_\phi I_A$$
In [15]:
    
S = 3 * V_phase * abs(Ia)
print('S = {:.0f} Mvar'.format(S/1e6))
    
    
Get points for stator current limit:
In [16]:
    
theta = arange(-95,95) # angle in degrees
rad = theta * pi/180   # angle in radians
s_curve = S * ( cos(rad) + sin(rad)*1j)
    
Get points for rotor current limit:
In [17]:
    
orig = Q*1j
theta = arange(65,115)  # angle in degrees
rad = theta * pi / 180  # angle in radians
r_curve = orig + De * ( cos(rad) + sin(rad)*1j )
    
Plot the capability diagram:
In [18]:
    
fig= figure()
ax=fig.add_subplot(1, 1, 1)
ax.plot(real(s_curve/1e6),imag(s_curve/1e6),'b')
ax.plot(real(r_curve/1e6),imag(r_curve/1e6),'r--')
ax.set_title('Synchronous Generator Capability Diagram')
ax.set_xlabel('Power (MW)')
ax.set_ylabel('Reactive Power (Mvar)')
ax.set_aspect('equal', 'datalim')
ax.legend(('stator current limit', 'rotor current limit'), loc=3);
ax.grid()