PythonのスクリプトでPLC(シーケンサ)を起動・停止まで行います。環境は「ラズベリーパイ(raspberry pi)」+「CODESYS」上で動作・デバッグしています。
PythonのスクリプトでPLCを起動・停止させる
前回記事の「PythonでPLC(シーケンサ)と通信してデータを読み出す方法」で「Python」でデータの読み込みを行いました。
今回は「PLCの起動⇒(データの読み込み)⇒PLC停止」までPythonのスクリプトで行っていきます。あとプログラムは前回のST言語を流用します。
Python未経験の方でも大丈夫です
前回同様Pythonのインストール・実行環境が無い未経験の方でも大丈夫です。今回の記事も簡単な導入・例にしましたのでメモ帳・テキストベースの編集でも対応可能です。
ちなみに筆者も少し前までPythonを始めプログラム自体が全くの未経験でしたが、少しづつですが使えるようになってきています。その際の記事は下記となります
CODESYSをダウンロード・インストールする
今回使うソフトウェアPLCの「CODESYS」のダウンロード・インストール方法に関しては記事「PLC(シーケンサ)・ラダーがフリーで使える!おススメ入門ソフト」に記載しましたのでリンク先から参照をお願いします
CODESYSをラズベリーパイで使う方法
「CODESYS」をラズベリーパイ(raspberry pi)で使う方法に関しては記事「ラズベリーパイでPLC(シーケンサ)・ラダーの使い方を学んでみた」に記載しましたのでリンク先から参照をお願いします
Pythonのスクリプトを作る
実際に動かす前にPythonのスクリプトを作っておきます。今回のプログラム内容は下記です。※PLC起動⇒10秒後にデータ読み込み⇒PLC停止⇒ログアウトまでの内容です。
# current project
proj = projects.primary
# set "current.project" to active application
app = proj.active_application
onlineapp = online.create_online_application(app)
# login to device
#onlineapp.login(OnlineChangeOption.Try, True)
# set status of application to "run", if not in "run"
if not onlineapp.application_state == ApplicationState.run:
onlineapp.start()
# wait 10 second
system.delay(10000)
# read value of SW1
value = onlineapp.read_value("PLC_PRG.X003")
# display value in message view or command line
print(value)
# stop and log out from device and close "current.project"
onlineapp.stop()
onlineapp.logout()
#proj.close()
※「ログインもスクリプトに入れたい」「ログアウトはスクリプトから外したい」という方は「#」を消したり付けたりで対応できます。
初心者・未経験者向けpythonスクリプトの作り方
もしPython未経験の方はテキスト(メモ帳)を開いてもらって、「~~~.py」で保存してください。~~~は好きな名前でいいです。筆者は「Python_Act_ReadVariable.py」としています
ラズベリーパイにログインしておく
今回筆者が作成したのPythonのスクリプトはログイン前提で「PLC起動⇒10秒後にデータ読み込み⇒PLC停止」するので予めラズベリーパイ(raspberry pi)にログインしておきます。
「CODESYS」のラズベリーパイ(raspberry pi)でログインする方法に関しては記事「ラズベリーパイでPLC(シーケンサ)・ラダーの使い方を学んでみた」に記載しましたのでリンク先から参照をお願いします
実際の動作としては、プログラム運転中はSW1を押しているとき(LEDが光ると同時に)「X003」がカウントアップしていきます。またSW2を押すとLEDが消えます
「X003」は制御周期(サイクルタイム・スキャンタイム)の100ms(0.1秒)でカウントアップされていきます
Pythonのスクリプトの実行方法
最後に本題のCODESYSでPythonのスクリプトを実行します
プログラムの実行中に「ツール」⇒「スクリプト作成」⇒「スクリプトファイルの実行」で実行できます。※今回はログも見たいので実行前に「スクリプトトレースの有効化」もONしておきます
PythonでPLCを起動・停止する必要性
今回のケースは実使用の場合では「PLCの運転・停止・データ収集まで一括でPythonで管理したい!」と場合等に利用ができるのではと考えています
Pythonのスクリプト実行結果
今回は起動・停止の結果を分かりやすくするためにSW1を押したり、リセットSW2を押したりしてPythonスクリプト実行をしてみます。
Pythonスクリプトが動く前後はSW1,SW2は反応がなく、スクリプトが実行最中だけSWが反応(PLCが動作)できていることを確認できます
動画でも上げてみました。動画を時系列で並べると下記流れです。Pythonスクリプト実行前後ではSWを押してもPLCが反応していないことが分かります
~18秒辺り… Pythonスクリプト動作前(SW押してもPLC反応せず)
~31秒辺り… Pythonスクリプト動作中(SW押すとPLC反応有り)
31秒~辺り… Pythonスクリプト起動後(SW押してもPLC反応せず)
Pythonのスクリプトで無事PLCを起動・停止できました。
まとめ
如何でしたでしょうか。pythonスクリプトでPLCを制御(起動・停止)することができました
「pythonのスクリプトでPLC(シーケンサ)を一度制御してみたい!」という人には今回のように簡単に体験できます。
筆者が紹介したスクリプトは機能の一部で全ては紹介できていないですので、よろしければ皆様もぜひトライして見てください。
<<20190430追記>>
CODESYS上での単なるスクリプト起動だけではなく、「PythonによるAIの画像認識」から「PLC(シーケンサ)」を操作してみました。よろしければご覧ください(リンク先はこちらから)
今回はここまでにしたいと思います。ご覧戴きありがとうございました。
次の記事ではラズベリーパイ(raspberry pi)のGPIOと三菱PLC(シーケンサ)FX3Gを接続・配線して、実際に動かしてみました。電圧レベルが違うためフォトカプラで絶縁して対応しています。
コメント