はじめに
電力円線図は、送電端電圧と受電端電圧の大きさを一定のものとして単純化することにより描写することができる簡易的な電力解析方法である。パラメータとしては、送電端電圧と受電端電圧の位相角δを変えることによって描写する。そこで、今回は位相角だけでなく送電端電圧もパラメータとする電力円線図を拡張させた場合においてどのような図が得られるのかをプログラムを用いてシミュレーションすることを目的とする。具体的には、送電端電圧を変化させたときの送電端電力円線図と受電端電力円線図がどのように推移するのかをコンター図を用いて考察する。
ただし、送電端電圧を固定した場合の電力円線図を以下に示す。
また、これを用いて送電端電圧を動かした場合の電力円線図の動く領域を以下に示す。
送電モデル
送電モデルとしては、以下のような中距離型の送電線モデルを採用する。また、以下単位法とする。
導出
送電インピーダンスを以下のように定義する。ただしαはインピーダンス角である。
\dot{Z}=Z(cos\alpha + j sin \alpha)= r+jx
ここで、$\dot{E_s},E_r$を送電端電圧と受電端電圧とおくと、送電線に流れる電流は、
\dot{V_s}=V_r + \dot{Z}\dot{I} (\dot{E_s}=E_r+\dot{Z}\dot{I})
より、以下のように表すことができる。
\dot{I}=\frac{E_s e^{j\delta}-E_r}{Ze^{j\alpha}}=\frac{E_s e^{j(\delta-alpha)}-E_r e^{-j\alpha}}{Z}
したがって、電流の共役複素数は以下のように表すことができる。
\bar{I}=\frac{E_s e^{-j(\delta -\alpha)}-E_r e^{j \alpha}}{Z}
ゆえに、送電端の複素電力は以下のように表すことができる。
\dot{S_s}=\dot{E_s}\bar{I}=\frac{E_s e^{j\delta}(E_s e^{-j(\delta - \alpha)}-E_r e^{j \alpha})}{Z}
=\frac{{E_s}^2 e^{j \alpha}-E_s E_r e^{\alpha + \delta}}{Z}=(-\frac{E_r E_s cos(\delta + \alpha)}{Z}+\frac{E_s^2}{Z}cos\alpha)+j(-\frac{E_r E_s sin(\delta + \alpha)}{Z}+\frac{E_s^2}{Z} sin \alpha)
一方で、受電端の複素電力は以下のように表すことができる。
\dot{S_r}=E_r \bar{I}=\frac{E_r (E_s e^{-j(\delta -\alpha)}-E_r e^{j\alpha})}{Z}=(\frac{E_r E_s cos(\delta- \alpha) }{Z}-\frac{E_r^2}{Z} cos \alpha)+j(\frac{E_r E_s sin(\delta -\alpha)}{Z} -\frac{E_r^2}{Z} sin \alpha)
これらを用いることでδをパラメータとして$0<\delta <2 \pi$の範囲で動かすことにより電力円線図を描写することができる。
複素数を用いたプログラム
上式を用いてプログラムを書くと、以下のようになる。
"""複数のグラフを重ねて描画するプログラム"""
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math #度数法を使用できるようにする
PI = np.pi # 円周率をPIで使えるようにする
fig, ax = plt.subplots()
# delta の範囲
delta = np.linspace(0, 2*PI, 1000000)
alpha= math.radians(int(input("インピーダンス角を入力してください")))
Z= 1.0 #インピーダンスの大きさを1p.u.とした。
E_s=1.0 #単位法で受電端電圧、送電端電圧それぞれ1.0[p.u.]で固定してある。
E_r=1.0
# 関数を記述
P_s = E_s**2*np.cos(alpha)/Z-E_s*E_r*np.cos(delta+alpha)/Z
Q_s = E_s**2*np.sin(alpha)/Z-E_s*E_r*np.sin(delta+alpha)/Z
P_r = -E_r**2*np.cos(alpha)/Z-E_s*E_r*np.cos(-delta+alpha)/Z
Q_r = -E_r**2*np.sin(alpha)/Z+E_s*E_r*np.sin(-delta+alpha)/Z
c1,c2 = "blue","green" # 各プロットの色
l1,l2 = "送電円","受電円" # 各ラベル
ax.set_xlabel('有効電力') # x軸ラベル
ax.set_ylabel('無効電力') # y軸ラベル
ax.set_title("電力円線図:一般角の送電インピーダンスの場合") # グラフタイトル
ax.set_aspect('equal') # スケールを揃える
ax.grid() # 罫線
#ax.set_xlim([-10, 10]) # x方向の描画範囲を指定
#ax.set_ylim([0, 1]) # y方向の描画範囲を指定
ax.plot(P_r, Q_r, color=c1, label=l1)
ax.plot(P_s, Q_s, color=c2, label=l2)
ax.legend(loc=0) # 凡例
fig.tight_layout() # レイアウトの設定
# plt.savefig('hoge.png') # 画像の保存
plt.show()
これを実行して位相角を30度として入力すると以下のようなグラフがプロットされる。
また、Pythonの複素数機能を用いて描写すると以下のようになる。
"""複数のグラフを重ねて描画するプログラム"""
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math #度数法を使用できるようにする
PI = np.pi # 円周率をPIで使えるようにする
fig, ax = plt.subplots()
n=1000
# delta の範囲
delta = np.linspace(0, 2*PI, n)
#インピーダンス角は30度で固定
alpha= math.radians(int(30))
Z= 1.0 #インピーダンスの大きさを1p.u.とした。
E_s=1.0 #単位法で受電端電圧、送電端電圧それぞれ1.0[p.u.]で固定してある。
E_r=1.0
#送電端電圧の複素表示
E_s1=E_s*(np.cos(delta)+1j*np.sin(delta))
#複素インピーダンス
Z_1=Z*(np.cos(alpha)+1j*np.sin(alpha))
#複素電流
I=(E_s1-E_r)/Z_1
#共役複素電流
I_var=I.conjugate()
#受電端、送電端複素電流
S_r=E_r*I_var
S_s=E_s1*I_var
#実部、虚部の分解
P_r=S_r.real
Q_r=S_r.imag
P_s=S_s.real
Q_s=S_s.imag
c1,c2 = "blue","green" # 各プロットの色
l1,l2 = "送電円","受電円" # 各ラベル
ax.set_xlabel('有効電力') # x軸ラベル
ax.set_ylabel('無効電力') # y軸ラベル
ax.set_title("電力円線図:一般角の送電インピーダンスの場合") # グラフタイトル
ax.set_aspect('equal') # スケールを揃える
ax.grid() # 罫線
#ax.set_xlim([-10, 10]) # x方向の描画範囲を指定
#ax.set_ylim([0, 1]) # y方向の描画範囲を指定
ax.plot(P_r, Q_r, color=c1, label=l1)
ax.plot(P_s, Q_s, color=c2, label=l2)
ax.legend(loc=0) # 凡例
fig.tight_layout() # レイアウトの設定
# plt.savefig('hoge.png') # 画像の保存
plt.show()
送電端電圧を変化させた場合
送電端電圧を変化させるコンター図のプログラムを作成したので以下に示す。ただし、位相角は30度として、$0<E_s<2$の範囲で$E_s$を動かした。
"""複数のグラフを重ねて描画するプログラム"""
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math #度数法を使用できるようにする
PI = np.pi # 円周率をPIで使えるようにする
fig, ax = plt.subplots()
n=1000
# delta の範囲
delta = np.linspace(0, 2*PI, n)
#alpha= math.radians(int(input("インピーダンス角を入力してください")))
#インピーダンス角は30度で固定
alpha= math.radians(int(30))
Z= 1.0 #インピーダンスの大きさを1p.u.とした。
E_s=np.linspace(0,2,n) #単位法で受電端電圧、送電端電圧それぞれ1.0[p.u.]で固定してある。
delta,E_s=np.meshgrid(delta,E_s)
E_r=1.0
#送電端電圧の複素表示
E_s1=E_s*(np.cos(delta)+1j*np.sin(delta))
#複素インピーダンス
Z_1=Z*(np.cos(alpha)+1j*np.sin(alpha))
#複素電流
I=(E_s1-E_r)/Z_1
#共役複素電流
I_var=I.conjugate()
#受電端、送電端複素電流
S_r=E_r*I_var
S_s=E_s1*I_var
#実部、虚部の分解
P_r=S_r.real
Q_r=S_r.imag
P_s=S_s.real
Q_s=S_s.imag
#以下描写設定
c1,c2 = "blue","green" # 各プロットの色
l1,l2 = "送電円","受電円" # 各ラベル
ax.set_xlabel('有効電力') # x軸ラベル
ax.set_ylabel('無効電力') # y軸ラベル
ax.set_title("電力円線図:一般角の送電インピーダンスの場合") # グラフタイトル
ax.set_aspect('equal') # スケールを揃える
ax.grid() # 罫線
#ax.set_xlim([-10, 10]) # x方向の描画範囲を指定
#ax.set_ylim([0, 1]) # y方向の描画範囲を指定
#ax.plot(P_r, Q_r, color=c1, label=l1)
#ax.plot(P_s, Q_s, color=c2, label=l2)
plt.contourf(P_r,Q_r,E_s,cmap='jet')
plt.contourf(P_s,Q_s,E_s,cmap='jet')
plt.colorbar(label="送電端電圧")
#ax.legend(loc=0) # 凡例
fig.tight_layout() # レイアウトの設定
plt.savefig('電力円線図_コンター図.png') # 画像の保存
plt.show()
これを実行すると以下のようなコンター図を得ることができる。
左の円が受電端で右の円が送電端である。
受電端の円は、送電端電圧を上げる程大きくなる。ゆえに、受電可能な電力も増加する。一方で、送電端の円も同様の傾向を示すが、無効電力も増加してしまう。したがって、適切な送電電圧を選択することが大切である。
まとめ
今回は、電力円線図の式を送電モデルから導出した。その上でPythonを用いてプログラムを書き、電力円線図を描写した。また、送電端電圧を変化させることにより、コンター図を作成した。この図から、送電端電圧が上がれば、送電可能な有効電力も増加するが、無効電力も増加してしまうということが分かった。
参考文献