ソフトウェアPLC「CODESYS」の使い方まとめ

PLC(シーケンサ)

実質フリー(無料)で使えるのソフトウェアPLC「CODESYS」の使い方をまとめました。

「CODESYS」はラズベリーパイでデバッグできるため「自分でPLC(シーケンサ)を色々触ってみたい!」という方におすすめな記事となっています。

 

スポンサーリンク
  1. IEC 61131-3に準拠
  2. 「CODESYS」のダウンロード・インストール方法
  3. 「CODESYS」のラズベリーパイでのデバッグ方法
    1. 「CPU各コアの負荷」「PLCのCPU各コアへの負荷」の測定方法
    2. PLCの入出力数を増やす方法
  4. ①LD(Ladder Diagram_ラダー・ダイアグラム)
  5. ②FBD(Function Block Diagram_ファンクション・ブロック・ダイアグラム)
    1. FBDでのプロジェクトの作り方
    2. FBDでのプログラム作成
    3. FBDをラズベリーパイ上で動作させる
  6. ③SFC(Sequential Function Chart_シーケンシャル・ファンクション・チャート)
    1. SFCでのプロジェクトの作り方
    2. SFCでのプログラム作成
    3. SFCをラズベリーパイ上で動作させる
  7. ④IL(Instruction List_インストラクション・リスト)
    1. ILでのプロジェクトの作り方
    2. ILでのプログラム作成
  8. ⑤ST(Structured Text_ストラクチャード・テキスト)
    1. STでのプロジェクトの作り方
    2. STでのプログラム作成
    3. STをラズベリーパイ上で動作させる
  9. ⑥CFC(Continuous Function Chart_・コンティニュアス・ファンクション・チャート)
    1. CFCでのプロジェクトの作り方
    2. CFCでのプログラム作成
    3. CFCをラズベリーパイ上で動作させる
  10. PythonスクリプトでのCODESYSの制御方法
    1. PLCのデータを読み出す方法
    2. PLCのプログラムの運転・停止
  11. CODESYSでPLC(シーケンサ)を遠隔操作・監視する方法
    1. PLC(シーケンサ)をGUI(画面)上で動かす方法
    2. PLC(シーケンサ)を遠隔操作・監視する方法
  12. CODESYSで産業ネットワークを動かす方法
    1. PROFINETの使い方
    2. EtherCATの使い方
  13. OPC UAサーバーをフリーで使えるCODESYS
  14. Pythonの勉強会でCODESYSを応用したデモをしました
  15. FAの勉強会でCODESYSを紹介させてもらいました
  16. まとめ・感想

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(シーケンサ)のスキャンタイムの短縮が難しい
CODESYSとラズベリーパイ(raspberry pi)でマルチコア対応のパッケージが出てきましたので動作確認しました。今までのマルチコア非対応のと比較してスキャンタイムがどれだけ短縮できるかを試して失敗したのを記事にしています。 ...

 

PLCの入出力数を増やす方法

<<20200223追記>>

デフォルトだとCODESYSとラズベリーパイでは実質8点しかPLCの入出力として使えませんでした。

簡単な設定の変更で17点まで増やすことが可能です。

下記記事をご参考ください(リンク先はこちらから)

CODESYSとラズベリーパイで使えるGPIOを増やす方法
CODESYSとラズべリーパイのデフォルト設定では使えるGPIO数は限られています。 しかし簡単な変更でPLCに使えるGPIO数を実質8点から17点に増やすことが可能です。 最新のラズベリーパイ4含めて多くあるGPIOを有効活用...

 

①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のデータを読み出す方法

記事へのリンク先は下記となっています

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

 

その際に実施した動画は下記内容となっています。

3秒辺り…  STプログラムを起動する

7秒辺り…  SW1を押し続ける(SW1を押した時間を測定)

18秒辺り… Pythonスクリプトを起動(10秒ディレイ前の「X003」の値がINT#104として返ってきてる)

28秒辺り… Pythonスクリプトが終了(10秒ディレイ後の「X003」の値がINT#203として返ってきてる)

PLCのプログラムの運転・停止

記事へのリンク先は下記となっています

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

 

その際に実施した動画は下記内容となっています。

~18秒辺り… Pythonスクリプト動作前(SW押してもPLC反応せず)

~31秒辺り… Pythonスクリプト動作中(SW押すとPLC反応有り)

31秒~辺り… Pythonスクリプト起動後(SW押してもPLC反応せず)

 

CODESYSでPLC(シーケンサ)を遠隔操作・監視する方法

<<20190615追記>>

CODESYSではPLC(シーケンサ)のスイッチをGUI(画面上)で操作できるようにすることも可能です。

また応用してスマートフォンから遠隔操作・監視できることも確認しました。

 

PLC(シーケンサ)をGUI(画面)上で動かす方法

記事へのリンク先は下記となっています

PLC(シーケンサ)を無線化!遠隔操作・監視した事例を試してみた
PLC(シーケンサ)をパソコン・スマートフォンから(有線・無線の両方で)遠隔操作・監視してみました。汎用的なラズベリーパイ(raspberry pi)をPLC化していますので誰でも同様に試すことができます。 PLC(シーケンサ)の...

 

その際の動画は下記です。

3秒~  「入力SWを押す」⇒「リセットSWを押す」を繰り返す。(左上のカウンタがアップしてく)

28秒~  10回_24VリレーをON/OFFすると黄色のLEDがONする

 

PLC(シーケンサ)を遠隔操作・監視する方法

記事へのリンク先は下記となっています

PLC(シーケンサ)を無線化!遠隔操作・監視した事例を試してみた
PLC(シーケンサ)をパソコン・スマートフォンから(有線・無線の両方で)遠隔操作・監視してみました。汎用的なラズベリーパイ(raspberry pi)をPLC化していますので誰でも同様に試すことができます。 PLC(シーケンサ)の...

 

その際の動画は下記です。

11秒辺りからスマートフォンで画面上のスイッチをタップして24VリレーのON/OFFを切り替えています。右下の画面はPC上で監視していた画面です。

 

CODESYSで産業ネットワークを動かす方法

ラズベリーパイ(raspberry pi)+CODESYSの環境ならば無料で産業ネットワーク(Ethercat,Ethernet/IP,PEOFINETなど)を試すことができます。

 

PROFINETの使い方

記事へのリンク先は下記となっています。PROFINETのマスターとスレーブがラズパイで作れます。

PROFINETとPLCを接続!マスターとスレーブをラズパイで作ってみた
Raspberry piで「PROFINET」のマスター・スレーブを作ってみました。 産業用Ethernet・フィールドバスの高価な機器を購入しなくても、接続テスト程度ならばラズパイで無料で簡単に試せる内容を紹介します。 P...

 

ラズパイでPROFINETのマスター・スレーブを作り、通信テストをさせてみました。その際の動画は下記です。

5秒辺り…マスター側のラズパイのプログラム開始(既にスレーブ側のラズパイは起動済)

5秒直後…PROFINETのマスターが起動→Y001を出力(TRUE)→左下動画の「黄色LED」がON

8秒辺り…PROFINETのマスター・スレーブが接続。→Y002を出力(TRUE)→左下動画の「赤色LED」がON

28秒辺り…マスター側のステータスを確認。Connections(接続数)が「1」になってスレーブのラズパイと接続できていること確認

43秒辺り…フレーム・リアルタイム(RT)フレームが飛んでいることを確認

Raspberry PIでPROFINET通信してPLC出力してみた

 

EtherCATの使い方

記事へのリンク先は下記となっています。EtherCATのマスターが作れて、市販のスレーブ機器と接続することができます。

EtherCATのマスターの作り方 市販のスレーブ機器と接続を想定
EtherCATのmasterをラズベリーパイで作ってみました。CODESYSを使って簡単にスレーブ機器と接続する方法を説明します。 特殊なマイコン・開発環境なくとも、簡単なマスターを作る程度ならばラズパイ1台で可能です。 ...

 

ラズベリーパイ1台でEtherCATマスターとPLC出力するテスト動画は簡単に紹介すると下記感じです。

 

10秒辺り…マスター側のラズパイのプログラム開始(スレーブ側は未接続)

10秒直後…EtherCATのマスターが動作(Enable)→Y001を出力(TRUE)→左下動画の「黄色LED」がON

(EtherCATの通信はできずY002は出力できず(False)→左下動画の「赤色LED」がOFF)

21秒辺り…マスター側のステータスを確認。通信できておらずフレームカウント・エラーカウントも止まっている

30秒以降…EtherCATのオブジェクトを確認。マスター内部的にはカウントしているところもあるが、基本Falseか止まっている

40秒辺り…EtherCATのオブジェクトとしてイネーブル「m_xEnable」が動作していること確認。

ラズパイをEthercatのmasterにしてPLC出力してみた

 

OPC UAサーバーをフリーで使えるCODESYS

CODESYSはOPC UAサーバーとしても使うことが可能です。(もちろんフリー(無料)でテストできます)

記事のリンク先は下記となっています

OPC UAでPLC(シーケンサ)と接続!サーバーの環境構築してみた
OPC-UAでPLCと接続して、クライアント側からデータ取集まで試してみました。無料で対応可能です。 汎用的なラズベリーパイで「OPC UAサーバー」かつ「PLC(シーケンサ)」にする手順を紹介します。 OPC UAでPLC...

 

実際にOPC UAでラダーの自己保持回路の入出力を監視したデモ動画が下記になります。

よろしければご覧ください

OPC UAのソフト(UaExpert)でPLCのデータを監視してみた

 

Pythonの勉強会でCODESYSを応用したデモをしました

「Python東海 第41回勉強会」でCODESYSを応用したプレゼンをさせていただきました。

その際の資料は下記スライドです。

 

PythonでOPC UAクライアントを作り、CODESYSの産業ネットワークの情報を収集しています。

 

複数台のラズベリーパイを使うことでEtherCATやPEOFINETをまとめて接続できています。

詳細の記事リンク先は下記です。(リンク先はこちらから)

PythonでIoT!Raspberry Piで産業用のデータ収集してみた
PythonでEtherCAT,PROFINETの産業用データを収集してみました。 ラズパイと無料ソフト環境でテストしていますので誰でも実施可能です。 使用したライブラリからプログラムまで一から紹介します。 Pytho...

 

FAの勉強会でCODESYSを紹介させてもらいました

「FA設備技術勉強会」でCODESYSを使ったシーケンス制御・ラダーの始め方を紹介しました。その時の記事は下記です。

シーケンス制御とラダーの始め方 ラズパイとCODESYSで入門
初心者が簡単にシーケンス制御・ラダーを始める・勉強できるための資料をまとめてみました。 無料でラダープログラムを書けてシミュレーション・デバッグ動作できる方法を一から紹介します。 シーケンス制御とラダーの始め方 ラズパイとC...

 

資料をまとめてSlideshareで公開しましたので、よろしければご覧ください

 

まとめ・感想

如何でしたでしょうか。「CODESYS」は個人でソフトウェアPLCをこれだけ使い倒してラズベリーパイでデバッグができます。

 

「自宅でPLC(シーケンサ)・ラダー回路の勉強・デバッグをしてみたい!」という方には非常に使いやすいソフト・環境だと思います。ぜひ使ってみてください

 

次の記事では今までの回路を改造してラズベリーパイからシーケンス制御で24Vリレーを動作させています。よろしければご覧ください

ラズベリーパイでシーケンス制御入門! 24Vリレーを動かしてみた
今回はラズベリーパイ(raspberry pi)でソフトウェアPLC「CODESYS」とNPNトランジスタを使って簡単なシーケンス制御を組んでみました。 実際の工場で使われるPLC(シーケンサ)のように24Vリレーを動作させていきます...

 

コメント

  1. くま より:

    こんにちは

    サーボモーター(SG92R)を、CodesysまたはpythonとCodesysを使って制御することは可能でしょうか?

    例えば(物理)スイッチをOnして5秒後にモータを90度回転させ5秒後に逆回転で90度(元の位置)に戻すということをしたいです。
    スクリプトをpythonで実行することでモータを動かすことはできたのですがCodesysを使ってオートメーションを実現したいと考えています。

    LEDの制御はできたのですがモーターの制御についてもご紹介いただけますと幸いです。