Translate

2018/01/09

TRNSYSでPythonスクリプトを動かす

Type169(Python)

TRNSYS18からPython(Type169)が使えるようになりました。TRNSYSのプロジェクトで、ちょっとした計算や判定処理をPythonで手軽(?)に記述できます。

でも、いきなりType169を利用すると図のようなエラーが発生します。

image

詳細なメッセージは以下。

*** Fatal Error at time   :         0.000000

     Generated by Unit     : Not applicable or not available

     Generated by Type     :   169

     TRNSYS Message    105 : A TYPE was called in the TRNSYS input file but was either not linked into trndll.dll or was not found in an external dll. A dummy subroutine was called in its place. Please link the TYPE or remove it from the input file

     Reported information  :  Type169 could not be located in either the trndll.dll or in an external dll. Please relink theTRNDll.dll including this Type or make sure that an external DLL in the \UserLib\DebugDLLs and \UserLib\ReleaseDLLs folders contain the Type.


これ、普段はTypeのDLLが無い、もしくは関連するDLLが不足しているときに表示されるメッセージです。分かりにくいですが、Type169ではPyhtonの実行環境が必須なので、予め環境を整えてないとこのエラーになります。

Pythonの環境を整える

ということで、事前にPythonの実行環境の設定が必要です。
一般的にはPythonの公式サイト(https://www.python.org/)からインストーラーをダウンロードして、インストールしますが、ここではAnacondaのパッケージを使って環境を整えます。(サイズは少々大きくなりますが、こちらの方が取り扱いが簡単です)

AnacondaのダウンロードサイトからPython3.6,64bit版のインストーラーをダウンロードしてインストールします。いくつかオプションが表示されますが、すべてデフォルトでOKです。

https://www.anaconda.com/download/

image

環境変数の設定

インストールが終了したら、次は環境変数、PathにAnacondaのパスを追加します。

デフォルトでインストールしていれば、環境変数PathC:\Users\<ユーザー名>\Anaconda3 を追加すれば準備完了です。

image

Simulation Studioでなにかプロジェクトを用意して、うまく動けば設定環境です。

image

Pythonスクリプト

この例で使っているスクリプト(以下)を簡単に説明すると、Type169からはPythonFunction()を呼び出して、さらにmyFunc()を呼び出しています。エラーが起きたときにログファル(_error.log)に書き出したかったので、2段階の呼び出しになっています。直接myFunc()を呼び出してもそのまま動くはずです。

type169_wtih_try.py

"""type169(Python) sample"""
import TRNSYSpy as trn
import traceback
import os

def myFunc():
    # retrieve values from the Inputs
    inp1 = trn.getInputValue(1)
    inp2 = trn.getInputValue(2)
    inp3 = trn.getInputValue(3)
    # processing
    out1 = inp1+inp2
    out2 = inp3**inp2
    # return the new values to the Outputs
    trn.setOutputValue(1, out1)
    trn.setOutputValue(2, out2)
    return

def PythonFunction():
    """This function is called from TRNSYS/Type169"""
    # delete the previous log file if it exists.
    logfile = "_error.log"
    if os.path.exists(logfile):
        os.remove(logfile)

    try:
        myFunc()

    except:
        # save messages to the log file when something goes wrong.
        print('error')
        with open(logfile, 'w') as f:
            f.write(traceback.format_exc())

上記サンプルのダウンロードはこちらから。

Github/TRNSYS.JP

https://github.com/TRNSYSJP/TRNSYS.JP/tree/master/TRNSYS18/Examples/Type169_Calling_Python


動作環境

以下の環境で動作を確認しています。

Windows10 Pro(64bit)
Python:Anaconda 5.0.1(Python 3.6/64bit) https://www.anaconda.com/download/
TRNSYS18.00.0015(64bit)

0 件のコメント:

コメントを投稿