CoDeSys V3 には Pythonスクリプトを実行する機能がついている

CoDeSys っていう会社がありまして、FA業界ではまぁ有名なほうなんですが

https://www.codesys.com/

例えば、Raspberry PI を使って 簡単に UI やらをサクッと作ってスマートホームをチャラっと実現することも 夢じゃないとかなんとか。(※ だいぶ大げさに言ってる)

www.youtube.com

まぁ、そんな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 でした。