raspberry piをPLC(シーケンサ)にしてpythonで制御してみた

Python

PythonのスクリプトでPLC(シーケンサ)を起動・停止まで行います。環境は「ラズベリーパイ(raspberry pi)」+「CODESYS」上で動作・デバッグしています。

 

PythonのスクリプトでPLCを起動・停止させる

前回記事の「PythonでPLC(シーケンサ)と通信してデータを読み出す方法」で「Python」でデータの読み込みを行いました。

PythonでPLC(シーケンサ)と通信してデータを読み出す方法
PythonでPLC(シーケンサ)のプログラム・データと通信しました。「ラズベリーパイ(raspberry pi)」+「CODESYS」上で動作・デバッグしていますので、誰でも簡単に実行することができます。 Pythonのスクリプ...

 

今回は「PLCの起動⇒(データの読み込み)⇒PLC停止」までPythonのスクリプトで行っていきます。あとプログラムは前回のST言語を流用します。

 

Python未経験の方でも大丈夫です

前回同様Pythonのインストール・実行環境が無い未経験の方でも大丈夫です。今回の記事も簡単な導入・例にしましたのでメモ帳・テキストベースの編集でも対応可能です。

 

ちなみに筆者も少し前までPythonを始めプログラム自体が全くの未経験でしたが、少しづつですが使えるようになってきています。その際の記事は下記となります

未経験・社会人向け! Pythonと機械学習の勉強方法・始め方
未経験で社会人である筆者がPythonと機械学習を学ぶにあたって「今回の勉強方法はかなり実用的かつ効率的!」と強く実感した内容でしたので紹介したいと思います。 UdemyがPythonと機械学習の始め方に最適! 結論から言いますとの講座...

 

CODESYSをダウンロード・インストールする

今回使うソフトウェアPLCの「CODESYS」のダウンロード・インストール方法に関しては記事「PLC(シーケンサ)・ラダーがフリーで使える!おススメ入門ソフト」に記載しましたのでリンク先から参照をお願いします

PLC(シーケンサ)・ラダーがフリーで使える!おすすめ入門ソフト
ラズベリーパイをPLC(シーケンサ)として使う準備編で「PLC(シーケンサ)・ラダーがフリーで使える!おすすめ入門ソフト」を紹介します フリーでラダーのプログラムを実際に動かす手順を紹介しています。「自分でPLC(シーケンサ)...

 

CODESYSをラズベリーパイで使う方法

「CODESYS」をラズベリーパイ(raspberry pi)で使う方法に関しては記事「ラズベリーパイでPLC(シーケンサ)・ラダーの使い方を学んでみた」に記載しましたのでリンク先から参照をお願いします

ラズベリーパイでPLC(シーケンサ)・ラダーの使い方を学んでみた
ラズベリーパイをPLC(シーケンサ)として使う実践編で「ラズベリーパイでPLC(シーケンサ)・ラダーの使い方を学んでみた」を紹介します ラズベリーパイでラダーのプログラムを実際に動かす手順を紹介しています。「自分で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(シーケンサ)」を操作してみました。よろしければご覧ください(リンク先はこちらから)

AIと画像認識の事例!Pythonでプログラミングして試してみた
AIで画像認識させて特定の物を検出した場合には外部機器を制御するようにPythonでプログラミングしました。 実際に動く物を検出しますので「人・動物の検知」「工場ラインの管理」等に応用できます。 リアルタイムで動体をAI+画...

 

今回はここまでにしたいと思います。ご覧戴きありがとうございました。

 

次の記事ではラズベリーパイ(raspberry pi)のGPIOと三菱PLC(シーケンサ)FX3Gを接続・配線して、実際に動かしてみました。電圧レベルが違うためフォトカプラで絶縁して対応しています。

raspberry piと三菱PLC(シーケンサ)FX3Gを接続してみた
ラズベリーパイ(raspberry pi)のGPIOと三菱PLC(シーケンサ)FX3Gを接続・配線して、実際に動かしてみました。電圧レベルが違うためフォトカプラで絶縁して対応しています。 ラズベリーパイと三菱PLC(シーケンサ)は...

 

コメント