suzukiyou blog

建築設計とかpythonとかその辺をとりあえずする

電気設備の計算をpythonでやる(1)-電灯コンセント用変圧器容量の算定

[電気設備の計算をpythonでやる]

あらすじ

電気主任技術者3種がほしいなぁと思いながら
オーム社「絵とき 電気設備設計の設計・施工実務早わかり」(田尻睦夫)を買いました。

絵とき 電気設備の設計・施工実務早わかり

絵とき 電気設備の設計・施工実務早わかり

趣旨としては、勉強するついでに、プログラミングしといて便利に使いたいので、そんな感じのコードを書いてみよう、というものです。

取り決め

取り決めとしては以下のように考えています。

  • 上のオーム社「絵とき 電気設備設計の設計・施工実務早わかり」(田尻睦夫)を参照してプログラムを書く。
  • 対象の計算例をプログラム上でやってみる。
  • pythonでゴリゴリコードを書く。使用言語はpython。浮気をしない。
  • 環境はWindows7 32bit + Python2.7.7+ipython2.1.0+その都度必要になったライブラリ類
  • 後でXMLにでも放り込んでデータを使いまわせるようにしたいので、データっぽいものは全部dictっぽいもので管理する。
  • ブサイクなコードでも動けばとりあえず上げる
  • コードに関して一切の責任は追わない

です。

XMLに投げるためのdictっぽいものはただのdictのサブクラスです。後でなんか機能を追加したくなるかもしれんのでそうする。

class Mydict(dict):
	def __init__(self):
		dict.__init__(self)

電灯コンセント用変圧器容量算定

流れとしては以下の通りです。

  1. 建物種別(事務所とかホテルとか)を決める。
  2. 回路ごとに電灯とコンセントの負荷(W)を決める。負荷Wごとに入力換算容量(VA)を決める。
  3. 回路ごとに負荷種別(電灯用の回路とかコンセント用の回路とか)を決めて需要率DFを決める。
  4. 入力換算容量(VA)と需要率DFの積をとって回路の最大需要電力(kVA)を決める。
  5. 負荷がよくわからん100V回路に関しては想定容量で最大需要電力に代える。
  6. トランスにつながる回路の最大需要電力を足して、変圧器を選ぶ。

ただ盤ごとに計算したほうがいいかなーって気がする。この計算の中には回路遮断機の容量や分電盤主幹遮断機容量の計算は含まれてないので、拡張した方がいいと思うけど、とりあえず書かれてあることだけやる。

#sample150124.py
#coding:utf-8

class Mydict(dict):
  def __init__(self):
    dict.__init__(self)

class Load(Mydict):
  def __init__(self):
    Mydict.__init__(self)
    
def createLoad(Loadtype,inputVA="NoinputVA"):
  Loadtypedict={"hakunetsuto":None,\
        "keikoto40W":60.0,\
        "keikoto20W":40.0,\
        "suiginto100W":150.0,\
        "suiginto200W":250.0,\
        "suiginto300W":350.0,\
        "suiginto400W":500.0,\
        "suiginto700W":800.0,\
        "suiginto1000W":1200.0,\
        "motor100W":250.0,\
        "motor200W":400.0,\
        "motor400W":600.0,\
        "motor750W":1000.0,\
        "socket":150.0,\
        "spsocket":None}
  
  a=Load()
  if Loadtype in Loadtypedict.keys():
    a["Loadtype"]=Loadtype
    if Loadtype in ["hakunetsuto","spsocket"]:
      if type(inputVA)==float:
        a["kansanVA"]=inputVA
      elif type(inputVA)==int:
        a["kansanVA"]=float(inputVA)
      else:
        raise
    else:
      a["kansanVA"]=Loadtypedict[Loadtype]
  else:
    raise
  return a

class MCCBLoad(Mydict):
  def __init__(self):
    Mydict.__init__(self)

def createMCCB(Loadtype,Buildtype,LoadList="Estimate"):
  LoadtypeList=["dento","socket","spsocket"]
  BuildtypeList=["office","hotel","shisetsu","hospital","house_shugo","house_kodate"]
  DF=[[80,40,80],\
    [70,40,80],\
    [90,40,80],\
    [70,30,80],\
    [80,30,80],\
    [80,30,80]]
  EstimateVA=[920,880,930,860,990,770]
  a=MCCBLoad()
  if Loadtype in LoadtypeList:
    a["Loadtype"]=Loadtype
    if Buildtype in BuildtypeList:
      if LoadList=="Estimate":
        a["nyuryokuVA"]="Estimate"
        a["DF"]="Estimate"
        a["maxjuyokVA"]=EstimateVA[BuildtypeList.index(Buildtype)]
        a["LoadList"]=LoadList
      else:
        a["nyuryokuVA"]=0.0
        a["DF"]=DF[BuildtypeList.index(Buildtype)][LoadtypeList.index(Loadtype)]
        for load in LoadList:
          if type(load)==Load:
            a["nyuryokuVA"]+=load["kansanVA"]
          else:
            raise
        a["maxjuyokVA"]=a["nyuryokuVA"]*a["DF"]/100000.0
        a["LoadList"]=LoadList
    else:
      raise
  else:
    raise
  return a

class Transe(Mydict):
  def __init__(self):
    Mydict.__init__(self)

def createTranse(MCCBLoadList,futureLoad=0.0):
  TranseSizeList=[30,50,75,100,150,200,300]
  a=Transe()
  a["maxjuyokVA"]=0.0
  for mccbload in MCCBLoadList:
    if type(mccbload)==MCCBLoad:
      a["maxjuyokVA"]+=mccbload["maxjuyokVA"]
    else:
      raise
  a["futureLoadkVA"]=futureLoad
  a["maxjuyokVA"]+=futureLoad
  a["transeSize"]=None  
  for i in TranseSizeList:
    kyoyoTranseSize=float(i)*1.1
    if a["maxjuyokVA"]<kyoyoTranseSize:
      a["transeSize"]=i
      break
  assert a["transeSize"]!=None
  return a

if __name__=="__main__":
  buildtype="office"
  ban=[]
  mccb=[]
  for i in range(30):
    mccb.append(createLoad("keikoto40W"))
  ban.append(createMCCB("dento",buildtype,mccb))
  mccb=[]
  for i in range(30):
    mccb.append(createLoad("keikoto40W"))
  ban.append(createMCCB("dento",buildtype,mccb))
  mccb=[]
  for i in range(10):
    mccb.append(createLoad("keikoto40W"))
  for i in range(4):
    mccb.append(createLoad("keikoto20W"))
  for i in range(2):
    mccb.append(createLoad("socket"))
  ban.append(createMCCB("dento",buildtype,mccb))
  mccb=[]
  for i in range(8):
    mccb.append(createLoad("socket"))
  ban.append(createMCCB("socket",buildtype,mccb))  
  mccb=[]
  mccb.append(createLoad("spsocket",1000.0))
  ban.append(createMCCB("socket",buildtype,mccb))
  mccb=[]
  for i in range(4):
    mccb.append(createLoad("socket"))
  ban.append(createMCCB("socket",buildtype,mccb))
  a=MCCBLoad()
  a["maxjuyokVA"]=6.7
  ban.append(a)
  a=MCCBLoad()
  a["maxjuyokVA"]=2.4
  ban.append(a)
  a=MCCBLoad()
  a["maxjuyokVA"]=1.2
  ban.append(a)
  a=MCCBLoad()
  a["maxjuyokVA"]=8.3
  ban.append(a)
  a=MCCBLoad()
  a["maxjuyokVA"]=3.6
  ban.append(a)
  a=MCCBLoad()
  a["maxjuyokVA"]=2.8
  ban.append(a)
  t=createTranse(ban)
  print t["transeSize"]

で実行結果が

>> ipython sample150124.py
>> 30