今回は少し基本に戻っててSiemensのプログラム構造について紹介したいと思います。Siemensには大体OB、FC、FB、DBとその4つのブロッグがありましてそれそれの功能があってきちんと理解しておかないと効率いいのプログラム作れないですし、SiemensのPLCを使うのももったいないじゃないと思わないですか?でもよろしくお願いしますね!
プログラムの流れ
SiemensのPLCシステムにはオペレーティングシステムとユーザープログラム2つがあります。
ーオペレーティングシステムは様々な特定な制御タスク、例えばハードウェア割り込み用のOB40−OB47、エラー処理用のOB80-OB87、OB121とOB122…などなどのファンクションとシーケンスを管理する。
ーユーザープログラムはいわゆるプログラマー(つまりあなた)が特定のオートメーションタスクの処理とかコントロールとかのプログラムが作成する部分です。OB は OB 番号によって順番に処理されます。
OB1ー周期プログラム処理のオーガニゼーションブロック
OB1は周期プログラム処理のブロッグですべての標準なプログラムがここから呼びされて実行します。オペレーティングシステムはOB1を呼び出し更にそのOB1の中にユーザー プログラムの周期的実行するんです。*プログラムの中にOB1が必ず存在します!
ファンクション(FC)
ファンクション(FC)はメモリなしのブロッグです。FCの中の変数は実行された後消されますのでもしその中のデータが保存したいならデータプロック(DB)を使用するしかありません。更にメモリがないのため呼び出しの時すべてのパラメータを提供しないといけません。ファンクション値はSCL の構文で直接再利用可能できるので、計算結果は戻り値のそのまま利用しよりよって複雑な計算式もっと簡潔にかけることができます。だから、ファンクション(FC)は計算関数として使われたり、私はよくアラーム演算とか使うんです。
ファンクションブロック(FB)
ファンクションブロック(FB)はメモリ付きのブロックです。だからもしFB が呼び出されたとき入力パラメータが転送されないされない場合は、以前の値がそのままインスタンス DB(Instance DB つまり FB のメモリ)に格納され、テンポラリ変数は、ローカルデータスタックに保存されています。そのため、FBが実行終わった後にもデータが失われません(ローカルデータスタック除く)。文字だけだとちょっとわかりにくいと思いますが、例えばモーターが10つがありまして、それそれの設定と現在スピード、ON/OFF/エラー状態などなどのパラメータたくさいんありまして、FBを使うことによって色々なデータを1つのインスタンスデータブロックでまとめることができます。最後はFBを10回Ctrl+C→Ctrl+Vしてパラメータ入力して完成です;)!
共有データブロック(DB)
OB、FCとFBと違って、データプロックはプログラムがありません。1つのDBの最大サイズはCPUによって違いますので使っているのCPUの取り扱い書を確認してくださいね。データブロックはユーザープログラムの動作に使用される変数データを保存するところです。いわゆる三菱のDですね。共有 DB は各OB、FC、FBからデータを読み込みと書き込むことができ、そのデータが処理完了した後に結果がDBの中に残ります。
インスタンスデータブロック
OB、FCとFCと違って、データプロックはプログラムがありません。インスタンスデータブロックは先のFBの様々なデータを保存することために作られたデータプロックで、FB 内で宣言された変数がそのデータプロックの構造決定します。例えば先の例でファンクションブロックが 10回呼び出された場合、このブロックのインスタンスは 10 つあります。この方法を使用すると、いくつかのFBに対してファンクションブロックは 1 つしか必要ありません。*IECタイマー、カウンターを宣言する場合も自動的にインスタンスデータプロックが作成されます。
別の話ですが、日本製のPLC例えばMIXXXX、OXXRXNはネットにある情報がSiemensより圧倒的少ない。SiemensのHPには技術のFourmがありまして世界中のSiemens製品の使用者があそこで一緒に問題を考え解決し(もちろん英語で、僕も何回もそのFourmの専門家達に助けられたこともありました)、プログラムのサンプル例も先MIさんとOさんより多いのは現状です。そこにも日本のメーカーさんがもっと頑張ってほしいな…MIさんのHPをみてあのアホみたいQ&Aをみると呆れます。ばかされていると気がします。サンプル例の質と解説文にSiemensのほうがはるかに優秀で、お願いんだからもっとしっかりしてくださいよ!だから僕もこのブログに通じて色々こと発信しようと思って。
これからもよろしくお願いしますね。
コメント
初めまして
Jwataと申します。
CODESYSのプログラム関連を検索して、当ページ到達いたしました。
私は地熱や排熱の熱を利用した、小型の発電装置を開発・販売しております。
広く普及させるために装置を安価・耐久性を持たせるために開発をしています。
当初は制御部にCODESYSを利用したモバイル用コントローラーとCANを採用していました。
しかし、CODESYSを使いこなせなくてM社のPLCを使用しています。
今後は小型化や耐環境性を考慮していく必要もあることから、いつかはまた
モバイル用ファンレスコントロラーとCANシステムを採用して産業用として
使いこなせるようになりたいと思いCODESYSを学ぼうかと思って探しておりました。
しかしながら、機械設計を主にして来たのでプログラムは全くの素人なので
出来れば一緒に制作や協力してくれる方を探しております。
もしよろしければ情報交換させていただれば幸いです。
以上、よろしくお願いいたします。
渡邊
Jwataさま
はじめまして、コメントありがとうございます。
そしてBlogを見てい頂いてありがとうございます。
CODESYSのこと私も答える範囲で回答しますので、
どうぞよろしくお願います。
メールで改めてご挨拶させていただきます。