実質フリー(無料)で使えるのソフトウェアPLC「CODESYS」の使い方をまとめました。
「CODESYS」はラズベリーパイでデバッグできるため「自分でPLC(シーケンサ)を色々触ってみたい!」という方におすすめな記事となっています。
- IEC 61131-3に準拠
- 「CODESYS」のダウンロード・インストール方法
- 「CODESYS」のラズベリーパイでのデバッグ方法
- ①LD(Ladder Diagram_ラダー・ダイアグラム)
- ②FBD(Function Block Diagram_ファンクション・ブロック・ダイアグラム)
- ③SFC(Sequential Function Chart_シーケンシャル・ファンクション・チャート)
- ④IL(Instruction List_インストラクション・リスト)
- ⑤ST(Structured Text_ストラクチャード・テキスト)
- ⑥CFC(Continuous Function Chart_・コンティニュアス・ファンクション・チャート)
- PythonスクリプトでのCODESYSの制御方法
- CODESYSでPLC(シーケンサ)を遠隔操作・監視する方法
- CODESYSで産業ネットワークを動かす方法
- OPC UAサーバーをフリーで使えるCODESYS
- AWS IoTとCODESYSを接続する方法
- reTerminalにCODESYSをインストールしてみました
- Pythonの勉強会でCODESYSを応用したデモをしました
- FAの勉強会でCODESYSを紹介させてもらいました
- FAの勉強会でCODESYSとクラウドの通信デモをしました
- まとめ・感想
IEC 61131-3に準拠
前回まではラダーを紹介していましたが(最初から読みたい方はこちらから)「CODESYS」はPLCの規格であるIEC61131-3に準拠しているため5つの言語が使用可能です。ラダー(LD)は5つの言語の内の一つです。
5つの言語は下記となっています。今回はこの5つの言語で同じ内容のプログラムを動作させるまでの使い方をまとめたいと思います
①LD(Ladder Diagram_ラダー・ダイアグラム)
②FBD(Function Block Diagram_ファンクション・ブロック・ダイアグラム)
③SFC(Sequential Function Chart_シーケンシャル・ファンクション・チャート)
④IL(Instruction List_インストラクション・リスト)
⑤ST(Structured Text_ストラクチャード・テキスト)
またさらにIEC61131-3には入っていないようですが「CODESYS」が
⑥CFC(Continuous Function Chart_・コンティニュアス・ファンクション・チャート)
も使えるということですので一緒に説明していきます。
「CODESYS」のダウンロード・インストール方法
「CODESYS」のダウンロード・インストール方法に関しては記事「PLC(シーケンサ)・ラダーがフリーで使える!おススメ入門ソフト」に記載しましたのでリンク先から参照をお願いします
「CODESYS」のラズベリーパイでのデバッグ方法
「CODESYS」のラズベリーパイでのデバッグ方法に関しては記事「ラズベリーパイでPLC(シーケンサ)・ラダーの使い方を学んでみた」に記載しましたのでリンク先から参照をお願いします
「CPU各コアの負荷」「PLCのCPU各コアへの負荷」の測定方法
<<20190106追記>>
最新のラズベリーパイのマルチコア対応されたパッケージでは簡単に「各コアの負荷」に加えて「PLCの各コアへの負荷」がトレース・プロットできるようになっています。
20181214以降(Ver3.5.14.0以降)にダウンロード・インストールされた方は特に気にせず使えるはずです(それ以前にダウンロードされた方で試したい方はVerUPする必要があります)。
下記記事で確認しましたのでよろしければこちらもご覧ください
PLCの入出力数を増やす方法
<<20200223追記>>
デフォルトだとCODESYSとラズベリーパイでは実質8点しかPLCの入出力として使えませんでした。
簡単な設定の変更で17点まで増やすことが可能です。
下記記事をご参考ください(リンク先はこちらから)
①LD(Ladder Diagram_ラダー・ダイアグラム)
今回の5つの言語でプログラムする内容は記事「入門編!簡単なPLC・ラダーのプログラムの例を作って動かしてみた」の最後で動かしたプログラム(ラッチ(自己保持)回路 リセット付き)を使います。
そのため回路構成①LD(ラダー・ダイアグラム)については前記事と同じプログラムになりますのでリンク先から参照をお願いします
実際に①LD(ラダー・ダイアグラム)を動かした際の動画は下記となります
②FBD(Function Block Diagram_ファンクション・ブロック・ダイアグラム)
②のFBD(ファンクション・ブロック・ダイアグラム)でプログラム(ラッチ(自己保持)回路 リセット付き)作成していきます。
グラフィカルなブロック図になるので初見の方は①ラダーより②ファンクションブロックの方が見やすいかもしれません。
FBDでのプロジェクトの作り方
まずは新規プロジェクトを作成していきます。
更にオブジェクトをどうするか聞かれるので、下記選択をしてあげます
・デバイス…「CODESYS Control for Raspberry Pi SL」
・PLC_PRGの言語…「ファンクションブロックダイアグラム(FBD)」
これで無事プロジェクトが完成しました。ファンクションブロックでプログラム書いていきます。
FBDでのプログラム作成
基本的なプログラム(ラッチ(自己保持)回路 リセット付き)ですので幾らでも書き方はあるのですが一番楽する方法を取りたいと思います
右の「ツールボックス」からSRを選択してドラッグ&ドロップします。
入力は「SR」のファンクションブロックにそのまま割り当てれますが、出力はQ1にツールボックスの「割り当て」を選択してドラッグ&ドロップします。
名前はラダーで作成した回路をそのまま流用できるように同様に設定します。今回は「SR」回路だけでプログラムは終了です
FBDをラズベリーパイ上で動作させる
あとはラダー作成時と同じようにGPIOを割り振り、ビルドしてLAN経由でラズベリーパイにプログラムをダウンロードさせます。(ラズベリーパイ上で動作させる元記事のリンク先はこちらから)
ラズベリーパイで使用する入出力ピンも同じにしときます。
そして無事FBD(ファンクションブロックダイアグラム)でラッチ回路(リセット付き)が完成しました。
実際のプログラムの動きは動画が分かりやすいので下記に張り付けておきます
③SFC(Sequential Function Chart_シーケンシャル・ファンクション・チャート)
この章では③SFC(Sequential Function Chart_シーケンシャル・ファンクション・チャート)でプログラム(ラッチ(自己保持)回路 リセット付き)作成していきます。
SFCはシーケンス制御を「ステップ」間で状態遷移させていきます。プログラムが「今何をしていて」「今何処にいるか」分かりやすい言語となっています
SFCでのプロジェクトの作り方
オブジェクトは何時ものように、下記選択をしてあげます
・デバイス…「CODESYS Control for Raspberry Pi SL」
・PLC_PRGの言語…「シーケンシャルファンクションチャート(SFC)」
SFCでのプログラム作成
SFCでは主に「ステップ」「切り替え」「アクション」をドラッグ&ドロップしていくことになります。置きたい箇所にドラッグドロップしていきましょう
最初は初期ステップ「Init」しかありませんが、「ステップ」「切り替え」を2個重ねるとビルドする際にNGがでます。状態遷移をイメージして一つずつプログラムを書いていきましょう。
筆者も初めてSFCを触るのは初めて・素人でしたが、下記のプログラムを作成しました。※動作は似せましたが①②で作成したプログラムと細かい箇所が違っているかもしれません。ご了承ください
SFCをラズベリーパイ上で動作させる
GPIOの設定は①②と同様に設定すればOKです。SFCはプログラム動作させてから「Init」から遷移・スタートします。
こちらもプログラム動作は動画の方が見やすいですので下記に載せておきます
④IL(Instruction List_インストラクション・リスト)
④IL(Instruction List_インストラクション・リスト)に関しては結論から言いますとビルドが通らず、最後のプログラム動作までたどり着けませんでした。
しかしせっかくなので途中までの流れを記載しときたいと思います。
※もしILでビルド通せてプログラム実行できた方いれば、コツなどコメント欄につぶやいて貰えると大変助かります
ILでのプロジェクトの作り方
④ILはデフォルトでPLC言語の選択肢にありません。どうやら大分古い?言語で「CODESYS」側もどちらかというと非推奨みたいです。
ILを選択肢に出すには「ツール」⇒「オプション」を選択して
ILエディタの項目で「ILの有効化」をチェック入れる必要があります。
その後は何時ものプロジェクト作成後のPLC言語に選択肢が出てきます
ILでのプログラム作成
ILでもプログラム(ラッチ(自己保持)回路 リセット付き)作成してビルドしたところ「OR」「AND(N)」が使えないとエラーが出て止まってしまいました
色々と調べて対応したのですが上手くいかず、ILに関してはこれでギブアップとします。
⑤ST(Structured Text_ストラクチャード・テキスト)
⑤ST(Structured Text_ストラクチャード・テキスト)でプログラム(ラッチ(自己保持)回路 リセット付き)作成していきます。
STはソフトのC言語のように「IF」「+,-,=」など条件式・論理演算を使ってプログラムしく言語です。どちらかというとソフト向けの言語となっています
STでのプロジェクトの作り方
STでのプロジェクトの作り方も今までと同様です。下記選択をします
・デバイス…「CODESYS Control for Raspberry Pi SL」
・PLC_PRGの言語…「構造化テキスト(ST)」
STでのプログラム作成
STのプログラム作成は本当に自由です。C言語のようにプログラムを書いていくだけです。特にドラッグ&ドロップすることはありません
筆者もほぼST言語・ソフトに関して素人でしたが、下記のプログラムを作成しました。※動作は似せましたが①②③④で作成したプログラムと細かい箇所が違っているかもしれません。ご了承ください
STをラズベリーパイ上で動作させる
GPIO類は今までと同じですので、結果のみを貼っておきます。
書いたST言語の条件・論理演算に従い出力Y001が決まっていきました。ある意味ラダー初心者にはこれが一番書きやすいかもしれません。
動画は文字だけになってしまうので、プログラム箇所は何時もより大きくして下記に載せておきます。
⑥CFC(Continuous Function Chart_・コンティニュアス・ファンクション・チャート)
⑥CFC(Continuous Function Chart_・コンティニュースファンクション・チャート)はPLCの規格であるIEC61131-3に入っているわけではないですが、ブロックレベルで一番書きやすいかと思います。
既にある「AND」「OR」「SR」などのブロック(ツール)を自由な形で繋いでいきます
CFCでのプロジェクトの作り方
さすがにもうほぼ省略しますが、何時ものようにPLC言語で「CFC」を選択してもらえれば大丈夫です。
CFCでのプログラム作成
実質②のFBDで説明した「SR」のブロックが同様に使えますので、同様にブロックになった入力・出力に線をつないでいくだけです
CFCをラズベリーパイ上で動作させる
結果も②のFBDとほぼ変わらないので、動画だけ貼っておきます
PythonスクリプトでのCODESYSの制御方法
<<2019106追記>>
CODESYSではPythonスクリプトから「ログイン・ログアウト」「プログラム運転・停止」「データの読み出し」など多くのことができます。
詳細知りたい場合は「CODESYS」のヘルプページで「Creating Python Scripts」の箇所を参照お願いします。2例ほど筆者でプログラム・実行例を試してみました。よろしければこちらもご覧ください
PLCのデータを読み出す方法
記事へのリンク先は下記となっています
その際に実施した動画は下記内容となっています。
3秒辺り… STプログラムを起動する
7秒辺り… SW1を押し続ける(SW1を押した時間を測定)
18秒辺り… Pythonスクリプトを起動(10秒ディレイ前の「X003」の値がINT#104として返ってきてる)
28秒辺り… Pythonスクリプトが終了(10秒ディレイ後の「X003」の値がINT#203として返ってきてる)
PLCのプログラムの運転・停止
記事へのリンク先は下記となっています
その際に実施した動画は下記内容となっています。
~18秒辺り… Pythonスクリプト動作前(SW押してもPLC反応せず)
~31秒辺り… Pythonスクリプト動作中(SW押すとPLC反応有り)
31秒~辺り… Pythonスクリプト起動後(SW押してもPLC反応せず)
CODESYSでPLC(シーケンサ)を遠隔操作・監視する方法
<<20190615追記>>
CODESYSではPLC(シーケンサ)のスイッチをGUI(画面上)で操作できるようにすることも可能です。
また応用してスマートフォンから遠隔操作・監視できることも確認しました。
PLC(シーケンサ)をGUI(画面)上で動かす方法
記事へのリンク先は下記となっています
その際の動画は下記です。
3秒~ 「入力SWを押す」⇒「リセットSWを押す」を繰り返す。(左上のカウンタがアップしてく)
28秒~ 10回_24VリレーをON/OFFすると黄色のLEDがONする
PLC(シーケンサ)を遠隔操作・監視する方法
記事へのリンク先は下記となっています
その際の動画は下記です。
11秒辺りからスマートフォンで画面上のスイッチをタップして24VリレーのON/OFFを切り替えています。右下の画面はPC上で監視していた画面です。
CODESYSで産業ネットワークを動かす方法
ラズベリーパイ(raspberry pi)+CODESYSの環境ならば無料で産業ネットワーク(Ethercat,Ethernet/IP,PEOFINETなど)を試すことができます。
PROFINETの使い方
記事へのリンク先は下記となっています。PROFINETのマスターとスレーブがラズパイで作れます。
ラズパイでPROFINETのマスター・スレーブを作り、通信テストをさせてみました。その際の動画は下記です。
5秒辺り…マスター側のラズパイのプログラム開始(既にスレーブ側のラズパイは起動済)
5秒直後…PROFINETのマスターが起動→Y001を出力(TRUE)→左下動画の「黄色LED」がON
8秒辺り…PROFINETのマスター・スレーブが接続。→Y002を出力(TRUE)→左下動画の「赤色LED」がON
28秒辺り…マスター側のステータスを確認。Connections(接続数)が「1」になってスレーブのラズパイと接続できていること確認
43秒辺り…フレーム・リアルタイム(RT)フレームが飛んでいることを確認
EtherCATの使い方
記事へのリンク先は下記となっています。EtherCATのマスターが作れて、市販のスレーブ機器と接続することができます。
ラズベリーパイ1台でEtherCATマスターとPLC出力するテスト動画は簡単に紹介すると下記感じです。
10秒辺り…マスター側のラズパイのプログラム開始(スレーブ側は未接続)
10秒直後…EtherCATのマスターが動作(Enable)→Y001を出力(TRUE)→左下動画の「黄色LED」がON
(EtherCATの通信はできずY002は出力できず(False)→左下動画の「赤色LED」がOFF)
21秒辺り…マスター側のステータスを確認。通信できておらずフレームカウント・エラーカウントも止まっている
30秒以降…EtherCATのオブジェクトを確認。マスター内部的にはカウントしているところもあるが、基本Falseか止まっている
40秒辺り…EtherCATのオブジェクトとしてイネーブル「m_xEnable」が動作していること確認。
OPC UAサーバーをフリーで使えるCODESYS
CODESYSはOPC UAサーバーとしても使うことが可能です。
(もちろんフリー(無料)でテストできます)
記事のリンク先は下記となっています
実際にOPC UAでラダーの自己保持回路の入出力を監視したデモ動画が下記になります。
よろしければご覧ください
AWS IoTとCODESYSを接続する方法
CODESYSはライブラリを追加することでAWS(クラウド)とも接続が可能です。
記事のリンク先は下記となっています。
実際にAWSとCODESYSの間でMQTTのPub/Sub通信したデモ動画が下記です。
reTerminalにCODESYSをインストールしてみました
タッチパネル付のラズパイであるreTerminalに、CODESYSをインストールしてみました。
実際のテスト動画が下記となります。
詳細のリンク先はこちらです。
reTerminalにCODESYSをインストールして、PLCにしてみた
Pythonの勉強会でCODESYSを応用したデモをしました
「Python東海 第41回勉強会」でCODESYSを応用したプレゼンをさせていただきました。
その際の資料は下記スライドです。
PythonでOPC UAクライアントを作り、CODESYSの産業ネットワークの情報を収集しています。
複数台のラズベリーパイを使うことでEtherCATやPEOFINETをまとめて接続できています。
詳細の記事リンク先は下記です。(リンク先はこちらから)
FAの勉強会でCODESYSを紹介させてもらいました
「FA設備技術勉強会」でCODESYSを使ったシーケンス制御・ラダーの始め方を紹介しました。
その時の記事は下記です。
資料をまとめてSlideshareで公開しましたので、よろしければご覧ください
FAの勉強会でCODESYSとクラウドの通信デモをしました
「第3回 FA設備技術勉強会オンライン」でCODESYSとAWSの接続方法を紹介しました。
その際の記事が下記です。
資料をまとめてSlideshareで公開しましたので、よろしければご覧ください。
まとめ・感想
如何でしたでしょうか。「CODESYS」は個人でソフトウェアPLCをこれだけ使い倒してラズベリーパイでデバッグができます。
「自宅でPLC(シーケンサ)・ラダー回路の勉強・デバッグをしてみたい!」という方には非常に使いやすいソフト・環境だと思います。ぜひ使ってみてください
次の記事では今までの回路を改造してラズベリーパイからシーケンス制御で24Vリレーを動作させています。よろしければご覧ください
コメント
こんにちは
サーボモーター(SG92R)を、CodesysまたはpythonとCodesysを使って制御することは可能でしょうか?
例えば(物理)スイッチをOnして5秒後にモータを90度回転させ5秒後に逆回転で90度(元の位置)に戻すということをしたいです。
スクリプトをpythonで実行することでモータを動かすことはできたのですがCodesysを使ってオートメーションを実現したいと考えています。
LEDの制御はできたのですがモーターの制御についてもご紹介いただけますと幸いです。