CoDeSys っていう会社がありまして、FA業界ではまぁ有名なほうなんですが
例えば、Raspberry PI を使って 簡単に UI やらをサクッと作ってスマートホームをチャラっと実現することも 夢じゃないとかなんとか。(※ だいぶ大げさに言ってる)
まぁ、そんなCoDeSys っつーツールなんですが、起動時にコマンドラインからPythonスクリプトを渡すことで、動作を自動的に実行することができそうなんです。
https://forum.codesys.com/viewtopic.php?f=18&t=1890
ここら辺に中の人がいくつかスクリプト上げてるんで、それを参考にやると、結構自動で動いてくれたりします。
今のところ、POU の操作は PLCopen XML 経由でしかできないみたいですが、そもそも POUを作っている場合で
単純に、動作を自動化したいときなんかは重宝しそうですね。
サンプルは読み出ししかなかったので、下に書き込みもできるバージョンを張っておきます。
PLC_PRG っていうPOUの下に WORD1 っていう変数があること前提です。
# We use the python 3 syntax for print from __future__ import print_function # Our project file is in the data subdirectory of the directory containing # the script, so we calculate the appropriate path. import os scriptdir = os.path.dirname(__file__) # Directory of our script. datadir = os.path.join(scriptdir, "Data") # Enter the subdirectory. projectpath = os.path.join(datadir, "untitled.project") # And add the project name. # Now, we can open the project. proj = projects.open(projectpath) # We fetch the active application. app = proj.active_application # And create the online application for it. onlineapp = online.create_online_application(app) # We login into the device. onlineapp.login(OnlineChangeOption.Try, True) # We start the application, if necessary. if not onlineapp.application_state == ApplicationState.run: onlineapp.start() # We let the app do its work for some time... system.delay(1000) # 値を設定 onlineapp.set_prepared_value("PLC_PRG.WORD1", "100") # 値を書く onlineapp.write_prepared_values() # We read the value of the variable we're interested in. value = onlineapp.read_value("PLC_PRG.WORD1") # We output the value to standard output, so our caller can process it. print(value) # Last but not least, we clean up. onlineapp.logout() proj.close()
コマンドプロンプトからは以下のようにして起動するみたいです
C:\Program Files\3S CoDeSys V3.4 SP3\CoDeSys\Common>start /wait CoDeSys.exe --profile="CoDeSys V3.4 SP3" --noUI --runscript="D:\TestScripts\ReadVariable.py"
--profile
に指定する文字列は自身が使っているバージョンとマッチさせる必要があります。一旦 start /wait CoDeSys.exe
で起動して出てくるプロファイル一覧からお好みのものを選ぶといいと思います。私の場合は CODESYS V3.5 SP13 Patch 1
でした。