2電力計法とプログラムによる解析

# はじめに
2電力計法は、3相の電力系統が消費する電力を求めるときに使用される。メリットとしては、ブロンデルの定理より2つの単相用の電力計で3相の電力を計算できるといった点にある。今回は、複素数を用いてY-Y結線のときについて平衡・非平衡問わず2電力計法が成立することを示したのち、平衡負荷の場合は無効電力は2つの電力計の値の差を用いて表せることについて言及する。そして最後にはPythonを用いたプログラムによってそのことを確かめる。

# 問題設定

以下のようなY-Y結線を考える。

![2電力計法.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/b4a6cb66-cc56-ed35-449a-8f0ec7f79e76.jpeg)

# 証明
## 有効電力
負荷に供給される複素電力は以下のように表すことができる。

```math
\dot{S}=E_{ra}\bar{I_a}+E_{rb}\bar{I_b}+E_{rc}\bar{I_c}=(Z_a \dot{I_a})\bar{I_a}+(Z_b \dot{I_b})\bar{I_b}+(Z_c \dot{I_c})\bar{I_c}
```
ここで、キルヒホッフの電流則より表される

```math
\dot{I_a}+\dot{I_b}+\dot{I_c}=0
```
を用いて整理すると以下のように表すことができる。

```math
\dot{S}=\dot{E_{ra}}\bar{I_a}+\dot{E_{rb}}\bar{I_b}+\dot{E_{rc}}\bar{I_c}=\dot{E_{ra}}\bar{I_a}+\dot{E_{rb}}\bar{I_b}+\dot{E_{rc}}(-\bar{I_a}-\bar{I_b})
=(\dot{E_{ra}}-\dot{E_{rc}})\bar{I_a}+(\dot{E_rb}-\dot{E_rc})\bar{I_b}=\dot{V_{ca}}\bar{I_a}+\dot{V_{cb}}\bar{I_b}
```
この式から、有効電力については実部を取れば良いので2つの電力計に示される有効電力の数値を加算すればよい。

ただし、無効電力については、電力計において計測対象は無効電力ではなく、『有効電力』なので、工夫するべきである。（『測定対象の有効電力は測定できるが無効電力は測定できないことに注意する！！』）

したがって、3相式では、各相が並行している状態に限り、2つの電力計の示す『有効電力』の差の絶対値を用いて測定を行うことが可能である。

## 無効電力
次に、対称3平衡回路とみなせる場合について考える。

ベクトルオペレータを用いて、各相電圧、相電流を求めると以下のようになる。
```math
\dot{E_a}=E,\dot{E_b}=a^2 E,\dot{E_c}=a E
```

```math
\dot{I_a}=\dot{I},\dot{I_b}=a^2 \dot{I},\dot{I_c}=a \dot{I}
```



ゆえに、 複素電力は以下のように表すことができる。
```math
\dot{S}=(\dot{E_{ra}}-\dot{E_{rc}})\bar{I_a}+(\dot{E_rb}-\dot{E_rc})\bar{I_b}=(1-a)E\bar{I}+(1-a^2)E\bar{I}=3E\bar{I}
```
ゆえに、無効電力は以下のようになる。
```math
Q=Imag(3E\bar{I})
```

ここで2つの電力計に表示される有効電力の差は以下のように表すことができる。
```math
P_1-P_2=Real{(1-a)E\bar{I}}-Real{(1-a^2)E\bar{I}}=Real((-a+a^2)E\bar{I})=Real(-\sqrt{3}j(E\bar{I}))=Imag(\sqrt{3}E\bar{I})=\frac{1}{\sqrt{3}}Q
```

ゆえに、平衡した系統全体の無効電力はたった2つの電力計の差で表すことができる。


# Y-Y結線の電流の求め方
Y-Y結線の電流の求め方は、不平衡・平衡の場合合わせてミルマンの定理を用いるのが一般的である。

![ミルマンの定理-300x192.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/25e9e049-ebc4-237e-75ae-8d15b1fd2473.jpeg)

まず、上の回路図において、相電流を各電圧で表すと以下のようになる。

```math
\dot{I_a}=\frac{\dot{E_a}-\dot{V}}{\dot{Z_a}},\dot{I_b}=\frac{\dot{E_b}-\dot{V}}{\dot{Z_b}}, \dot{I_c}=\frac{\dot{E_c}-\dot{V}}{\dot{Z_c}}
```

次に、

```math
\dot{I_a}+\dot{I_b}+\dot{I_c}=0
```

を用いると以下のような式を得ることができる。
```math
\dot{V}=\frac{\dot{E_a}/\dot{Z_a}+\dot{E_b}/\dot{Z_b}+\dot{E_c}/\dot{Z_c}}{1/\dot{Z_a}+1/\dot{Z_b}+1/\dot{Z_c}}
```

# プログラム

これらのことを用いて以下のようなプログラムを書いた。

```python 2_den.py

#ログファイルの作成
import os

path = 'out_log.txt'
f = open(path, 'w')


#円周率を扱うため
import math
#ベクトルオペレーターの定義
a= math.cos(2*math.pi/3)+math.sin(2*math.pi/3)*1j
print("ベクトルオペレーター")
print(a)



#Y結線パラメーターの定義
z_a=3+1j
z_b=2+2j
z_c=1+3j

E=100
E_a=E
E_b=E*a**2
E_c=E*a

f.write("z_a="+str(z_a)+"\n") 
f.write("z_b="+str(z_b)+"\n") 
f.write("z_c="+str(z_c)+"\n") 

f.write("E_a="+str(E_a)+"\n") 
f.write("E_b="+str(E_b)+"\n") 
f.write("E_c="+str(E_c)+"\n") 

#ミルマンの定理
V=(E_a/z_a+E_b/z_b+E_c/z_c)/(1/z_a+1/z_b+1/z_c)
print("中性点電位差")
print(abs(V))


f.write("中性点電位差="+str(abs(V))+"\n") 

#相電流（線電流）
I_a=(E_a-V)/z_a
I_b=(E_b-V)/z_b
I_c=(E_c-V)/z_c

#三相電流の和は必ず０
print("三相電流の和=0")
print(abs(I_a+I_b+I_c))

f.write("三相電流の和=0"+"\n")
f.write(str(abs(I_a+I_b+I_c))+"\n")



#負荷側の有効電力

E_aa=z_a*I_a
E_bb=z_b*I_b
E_cc=z_c*I_c

#複素電力を計算する

S= E_aa*I_a.conjugate()+E_bb*I_b.conjugate()+E_cc*I_c.conjugate()

print("負荷側の有効電力")

P=S.real

print(P)
f.write("負荷側の有効電力:"+str(P)+"\n")
#負荷側の無効電力

Q=S.imag
print("負荷側の無効電力")
print(Q)
f.write("負荷側の無効電力:"+str(P)+"\n")
#2電力計法

#線間での複素電力を求める：電圧と複素共役電流の積
S_1=(E_a-E_c)*(I_a.conjugate())
S_2=(E_b-E_c)*(I_b.conjugate())

#計測される有効電力
P_1=S_1.real
P_2=S_2.real

P_c=P_1+P_2
print("計算される負荷側の有効電力")
print(P_c)
f.write("計算される負荷側の有効電力:"+str(P_c)+"\n")
#計測される無効電力



Q_c = (P_1-P_2)*3**0.5

print("計算される負荷側の無効電力(対称三相負荷のときのみ意味ある値となる)")
print(Q_c)
f.write("計算される負荷側の無効電力(対称三相負荷のときのみ意味ある値となる):"+str(Q_c)+"\n")

#計算される有効電力と実際の有効電力の差
print("計算される有効電力と実際の有効電力の差")
print(P-P_c)
f.write("計算される有効電力と実際の有効電力の差:"+str(P-P_c)+"\n")

#計算される無効電力と実際の無効電力の差
print("計算される無効電力と実際の無効電力の差(対称三相負荷のときのみ意味ある値となる)")
print(Q-Q_c)
f.write("計算される無効電力と実際の無効電力の差(対称三相負荷のときのみ意味ある値となる):"+str(Q-Q_c)+"\n")


f.close()



```
このプログラムを実行すると以下のようなファイルが生成される。


```
z_a=(1+1j)
z_b=(1+1j)
z_c=(1+1j)
E_a=100
E_b=(-50.000000000000036-86.60254037844383j)
E_c=(-49.99999999999998+86.60254037844388j)
中性点電位差=1.430920090398825e-14
三相電流の和=0
0.0
負荷側の有効電力:15000.0
負荷側の無効電力:15000.0
計算される負荷側の有効電力:14999.999999999996
計算される負荷側の無効電力(対称三相負荷のときのみ意味ある値となる):14999.999999999996
計算される有効電力と実際の有効電力の差:3.637978807091713e-12
計算される無効電力と実際の無効電力の差(対称三相負荷のときのみ意味ある値となる):3.637978807091713e-12

```

これは、実際の複素電力と2電力計法を用いて計算した値が一致するか確認するプログラムである。logファイルを見て分かるとおり、
対称3相であれば、両者の差は0となる。

しかし、非平衡の場合は無効電力のときだけ成立しないので注意が必要である。
```
z_a=(3+1j)
z_b=(2+2j)
z_c=(1+3j)
E_a=100
E_b=(-50.000000000000036-86.60254037844383j)
E_c=(-49.99999999999998+86.60254037844388j)
中性点電位差=18.954627808751965
三相電流の和=0
1.0658141036401503e-14
負荷側の有効電力:6923.076923076922
負荷側の無効電力:6923.076923076922
計算される負荷側の有効電力:6923.076923076922
計算される負荷側の無効電力(対称三相負荷のときのみ意味ある値となる):6923.076923076922
計算される有効電力と実際の有効電力の差:0.0
計算される無効電力と実際の無効電力の差(対称三相負荷のときのみ意味ある値となる):1463.0182989589866
```

# まとめ
今回は2電力計法について有効電力の場合と無効電力の場合それぞれに分けて証明を行った。そして後半では、それが成立することをPythonを用いたプログラムで確認した。2電力計法のメリットは、たった2つの電力計で平衡・非平衡問わず有効電力を測定できることにある。ただし、無効電力の場合は、系統が平衡している場合のときだけ、差を用いることによって計算することができるということが分かった。