PLC制御設計 初心者必見 ラダープログラミング設計手法テクニック集めました

IT

PLC制御設計 初心者必見 ラダープログラミング設計手法テクニック集めました

  今回は、シーケンス制御・PLC制御の初心者の方のために、設計・ラダープログラミングテクニックを紹介していきたいと思います。

初めに私の自己紹介ですが、PLCエンジニアとして5年経験しています。 今まで数多くのメーカーの自動化設備の調整立ち上げを経験してきました。 その経験を元に、現場で役立つテクニック等を紹介できればと思います。

今回ポイントしては、5つテーマで紹介していきたいと思います。

・インタロックの考え方

・ラダープログラミング パルスの使い分け

・ラダープログラミング チャタリングタイマを使おう

・ラダープログラムの順番

・既存ラダープログラムの解析方法

・制御対象物をイメージする

インタロックの考え方

インタロックとは、安全装置・安全機構の考え方の一つで、ある一定の条件が整わないと他の動作ができなくなるような機構のこと こちらはWikipediaから引用させていただいていますが、 つまり、インタロックを取る事で安全を担保するという事です。 安全設計という意味では、 フェールセーフ機器やシステムの設計などについての考え方の一つで、部品の故障や破損、操作ミス、誤作動などが発生した際に、なるべく安全な状態に移行するような仕組みにしておくこと。 e-wordsから引用 フールプルーフ機器の設計などについての考え方の一つで、利用者が操作や取り扱い方を誤っても危険が生じない、あるいは、そもそも誤った操作や危険な使い方ができないような構造や仕掛けを設計段階で組み込むこと。また、そのような仕組みや構造。 e-wordsから引用 2つの考え方があります。 ざっくりとまとめると フェールセーフ:ハード的なインタロック フールプルーフ:ソフト的なインタロック になります。

  ハード的なインタロック例:メカストッパー

動作範囲が決まっている装置であれば、その動作範囲以上の動作ができないメカ構造的なインタロックのことを言います。

 

ソフト的なインタロック例:モータの運転

モータに正転指令を送るとします。その際逆転指令が出力されないように出力でインタロックを取ったりします。

よくPLCとセットでタッチパネルもありますが、そのタッチパネルも入力条件があらかじめ設定されており、設備の作業者が誤操作をしても異常が起きない安全設計が行われています。 

ラダープログラミング パルスの使い分け

ラダープログラムを作成していてパルス命令と普通の命令とどっちを使ったらいいんだろうと思うことがあると思います。

例をあげると、MOV命令です。 MOVMOVPと命令が二種類ありますが、前者は毎スキャン命令が走ります。

後者は条件が成立した時に1スキャンのみ命令が走るというものです。  

スキャンてそもそも何??という方いるかもしれません。  

PLCではRUN状態になってからラダープログラムを上から下のEND命令まで走り、ENDまでいくとまたプログラムの先頭に戻りEND命令まで常時走り続けています。  

これをスキャンといいます。

 この最初のスキャンを1スキャンといいます。   イメージができたでしょうか。早速ですが、回路を作成してみます。

実践編 ラダープログラムの違い (毎スキャン・1スキャン)

  プログラム説明 1スキャン・毎スキャン   上の回路は、M100がONの時に毎スキャンMOV命令が走ります。 下の回路は、M100がONした1スキャン目のみMOV命令が走ります。  

うーん、毎スキャンの時と1スキャン目なのはわかったけど、いまいち使い分けがわからないな。。

 

じゃあ次の回路で違いを見ていきましょう。

  プログラム例2 1スキャン・毎スキャン詳細説明

①と②の回路があるとします。ここでM100がONしてその後M101がONするとします。すると①の回路と②の回路ではD100に格納される値は同じではないですよね。①のD100には20が、②のD100には10が入ることがわかります。 プログラムは上から下に流れるので、1スキャン終了時にはD100には10が入るわけです。
つまり、信号の状態とスキャン順に依存されるわけです。

 

なるほど。毎スキャン命令と1スキャン命令の違いはわかりました。 要するに、その指令が常に毎スキャン走っていいのか、最初の1スキャンのみ走る必要があるかで使い分けることが必要だということですね。
その通りです。使い分けの目安ですが、具体的にMOV指令で例をあげると、 毎スキャン ・設定値などの不変の値 1スキャン ・状態の変化など可変する値(ステップ回路等…) がいいでしょう。。

 

    いかがだったでしょうか。 同じ命令でも毎スキャンなのか1スキャンなのかでこうも意味合いが違ってきますね。

ますます奥が深いところでもあるようなないような。 意外とスキャンの意識がない設計者が多くいると思います。

初学者の方はまずはこのスキャンを意識ながらプログラムを作っていくことがまずは大事だと思います。

最後に、回路を一つ紹介します。 プログラム例 命令記載方法   上の回路と下の回路とありますが、二つともM100がONした時1スキャンだけMOV命令が走る回路になります。

違いとしては、入力条件を立ち上がりパルスにするか、出力命令をパルスにするかの違いになります。

このように作り方が違いますけど、同じ処理を行うものがたくさんあります。

正解の作り方は一つではないので、あくまで参考に、自分の好きなように回路を作成していきましょう。 

ラダープログラムのコツ チャタリングタイマを使おう

基本的にセンサの入力信号はチャタリングタイマを使って取り込むわけです。 そもそもチャタリングとは、、、 信号のレベル(ON/OFF)が安定せず、信号の状態が不安定なことを表します。 スイッチを例に挙げると、スイッチを押すとスイッチがONの状態が安定するまで、ON/OFFが繰り返されている状態のことです。

PLCは電圧を0〜24Vで信号として取り込んでいますが、このチャタリングによって信号の状態が不安定なまま取り込んでしまう可能性があるわけです。

つまり、何が言いたいかと、 →必要なタイミングで信号を拾えず、誤動作する可能性がある 正しいシーケンスを組んでいるはずなのに、おかしい動きをする。

一種のバグを生みやすいというわけです。 実際にラダープログラムを書いていきましょう。

ラダープログラムを作成するソフトウェアは三菱のGX-Works3を使用しています。

実際にプログラムを作成

チャタリングタイマ プログラム例 上記のようなラダープログラムを書いてみました。 何をしているか解説していきます。

プログラムの解説① タイマ値設定

チャタリングタイマ プログラム例 タイマ設定 ①の処理は、タイマ値を設定しています。今回は0.2sを設定しています。

タイマ値は直接定数でも入力することができますが、定数ではなくDのようなレジスタを使用することで、プログラムを効率的に作成することができます。

今回はセンサ一個だけなので直接定数を入力してもいいですが、センサが複数個存在する場合各センサのタイマ値を定数で設定することは適切とはいえません。

定数を入力した場合とデバイスを使用した場合では、タイマ値を変更したい時の修正箇所が明らかにデバイスを使用した場合の方が少ないですよね。

プログラムを作成する際は、できるだけ変更箇所が少ないように設計しましょう。

プログラムの解説② センサ処理

チャタリングタイマ プログラム例 センサ入力 ②は入力信号X0がONしてD0秒後T0で出力し、入力信号X0がOFFしてD1秒後T100で出力しています。

T0のa接点とT100のb接点を条件にしX1000を出力しています。

要するにやりたい事としては、入力信号のタイマ後を別のデバイスに置き換えているということです。

実際にシーケンスで使用するのは、X1000を使って自動運転などの回路を作成していくわけです。

ここでは、内部デバイスMを使用していないのは、入力信号のイメージがXなので可読性を高める為に敢えてXにしています。 プログラムは人それぞれ作り方が違いますので、正解のプログラムの作り方はいくらでもあります。

今回私が作成したプログラムもあくまで一例です。

ただしこれから作成する上で注意していただきたいのは、可読性や判読性のあるプログラムを作成するように心がけるということです。

自分だけしかわからないようなプログラムを作成するのはNGです。 

ラダープログラムの順番を考える

まず、プログラムを作る前に恐らく多くの人がプログラムの構成を考えてから作り出すと思います。 その構成の考え方を紹介していきたいと思います。 まずプログラムの処理をパーツにして分けると以下のように分かれます。  

プログラムの処理の構成

 

  • 初期化処理:変数(デバイス)の初期化
  • 入力処理 :入力信号(X,etc…)を取り込む(内部デバイスに置き換えたり)など
  • 出力処理 :出力信号(Y,etc..)に出力する
  • MAIN処理  :MAINの処理(自動運転,手動運転,データ処理など)

 

ざっくりと分けるとラダープログラムの処理はこれくらいになると思います。

もっと細かく分ける必要があるとするとMAINの処理の中で細かく分かれるだろうと思います。

システムの規模で上手に分けてください。基本的にはこの上記の処理をベースにしてください。  

プログラムの順番

次にプログラムの順番を説明します。  

  1. 初期化処理
  2. 入力処理
  3. MAIN処理
  4. 出力処理

  この順番になると思います。   この順番を見て、前回の記事を見た人は、  

PLCはRUNするとプログラムの先頭からEND命令までずっとループしているから、初期化処理が毎回走ってたらおかしいことになるんじゃないの?

と思うかもしれません。  

ただ、ここでの初期化処理はRUN後の1スキャン目のみ処理を行うようにすれば、問題ありません。

なので、2スキャン目からは、入力処理→MAIN処理→出力処理→入力処理→…でプログラムが走るようにすればいいのです。 プログラムの順番を意識することで、プログラムの作成スピードが上がると思います。

自分のテンプレートを作ることで作業工数も減らすことができるはずです。

とはいえ今回紹介したプログラム順はあくまで一例なので、いろいろな作り方で作ってデバッグしながら自分の型を作っていければいいと思います。  

ちなみに、プログラムを設計する上でフローチャートを作るのをおすすめしています。

作り方は以下の記事で紹介しているのでこちらも参考にしてみてください。 →PLC ラダープログラムの設計のコツ フローチャート は絶対書く  

既存ラダープログラムの解析方法

プログラムを作れるようになったけど、他人が作ったプログラムを見るとさっぱりよくわからない。 こんなことありませんか。

他の人が作ったプログラムを読むのって難しいよね。
人によってもプログラムの作り方が違うもんね。
自分の作ったプログラムしかわからないのはプログラマーとしては、良いとは言えないよ。他の人が作ったプログラムでもその人の意図を読み取って自分で修正したり改造できる人が凄いプログラマーだと思うよ。
そんなこと言われても難しいよ。。。
僕が実践しているプログラムの解析の仕方を紹介するよ。 今回はラダープログラムの場合での解析ポイントを紹介するね。

自分でプログラムを作成できるようになったけど、0から作ることって意外と少ないですよね。誰かと共同で作成していたり、既に作成済みのプログラムを変更することになったりすることが意外と多いと思います。

そんな時にプログラムを解析するポイントについて、ラダープログラムを例に紹介していきたいと思います。

プログラムのスタートになるきっかけを見つける

解析のポイント1つ目は、プログラムのスタートになるきっかけを見つけることです。

具体的な例を挙げると、スタート(起動)ボタン、タッチパネルのボタンなど、必ず制御のきっかけになる入力インターフェースがあるはずです。 それをまず見つけましょう。

ラダープログラムで例えるなら、その入力デバイスを追うことで自動運転の起動フラグがわかります。そこから自動運転の制御内容を理解しやすくなります。

また、電気図面がある場合はそこから探すのもいいと思います。

制御フラグを洗い出す

次に制御フラグを洗い出すです。

先程のポイント1でプログラムのスタートのきっかけとなる箇所を見つけることができると、そこから接点・コイルを探すと、制御用に使用されているものがあるはずです。

制御内容にもよると思いますが、順序制御用のデバイス、ステップ回路であるならば、ステップを格納しているデバイスがあると思います。

それらを洗い出して、それぞれのデバイスが自動運転の中で何を行っているのかが分かると、プログラムの全体像がわかると思います。

レイアウトからイメージする

最後にレイアウトからイメージするです。

これは、機械図面を見ながら機器の配置とプログラムを比較しながら動作の流れを解析していくものになります。

ラダープログラムを作成する制御技術屋さんは、制御対象の装置を見ながらプログラムを作成することが多いと思います。

もしも、装置を見ることができない場合は機械図面からセンサの配置アクチュエータの配置(IO割付)を見ながら、プログラムでの動作の流れを見ていきましょう。

プログラムを解析するポイントとしては、

入力インターフェースからプログラムのスタート(起点)を見つける

制御用のフラグを洗い出してプログラムの全体像を把握する

機械図面などのレイアウト図のセンサ

アクチュエータの配置(IO割付)からイメージする

になります。

自分以外の誰かが作ったプログラムを見て、プログラムの解析が大変だと思う方は是非参考にしてみてください。

制御対象物をイメージする

プログラムを設計していてよくあるのが、自分が思っていた通りに制御対象物が動かない。 こんなこと多いと思います。 ここで重要なことはタイトル通り「イメージする」という事です。 それでは、本題に入っていきましょう。

設計時に動作のイメージできていないことが多い

プログラムを設計する前に事前に装置の仕様を決めると思います。

いわゆる仕様書と呼ばれるものです。 装置の運用方法、制御方法があらかじめ決まっていたりします。

プログラマはこれを元に、設計を行うのが普通です。

逆に仕様書がないと、何を作れば良いのかわからない状態から始めることになります

これは絶対にやめましょう

自分で何か作りたいという方もまずは、どういう動きの物を作りたいのか、紙でもいいので一度書いてみましょう。

プログラムはそれに合わせて作るだけなので、仕様書を作ってみましょう。

仕様書を作れるということは、自分の頭の中にゴールがある状態なのでより完成度の高いプログラムを作ることができます。

あらゆるパターンを想定する

次に「あらゆるパターンを想定する」です。

これは、正常な動作のみしか考えるのではなく、イレギュラーな動作を考えるということです。

例えばですが、2つのスイッチがあります。片方のスイッチを押すと、シリンダが出る。

もう片方のスイッチを押すと、シリンダが戻る。というプログラムがあるとします。

このスイッチを2つ同時に押すとどうなるかとか、更にはこのシリンダの付近には干渉物があり、干渉物にシリンダがぶつかる可能性があるとか装置の周辺の状況から想像できることがたくさんあります。

これが装置のインタロックとも言われるわけですが、プログラム設計時点である程度想定しなければなりません。

上記に述べた仕様書を更に細かく考えて制御ロジックを構築する。

これが重要になります。

正常な方向のみ考えられたプログラムだと何か異常が起きた時に復旧できません。

フローチャートを作ることであらゆるパターンを想定しやすくなります。

フローチャートの書き方については以下の記事を参考にしてください。

PLC ラダープログラムの設計のコツ フローチャート は絶対書く 

物の動きを知る

最後に「物の動きを知る」です。

これはアクチュエータの動きを知るという意味です。

ハード的な動きを知らないとそもそもプログラムなんて作れません。

シリンダの動き、モータの回し方などたくさんあります。

ラダープログラミングをする上ではとても重要なことです。

普通に出力出しているのに動かないなんてこと多々あります。

まず、ハード的な制限、動作順序を調べましょう

まとめると、

  • 設計仕様書を作成する
  • イレギュラーな操作を想像する
  • ハード的な制限、動作順序を明確にする

この3点に注意してプログラム設計を行うといいでしょう。

まとめ

いかがでしょうか。

今回PLC制御設計において簡単なポイントをピックアップして解説してみました。

上記以外にもまだまだ考えないといけない点はありますが、初心者の方などは一旦今回の内容を理解してみてください。

まだまだ解説が欲しければ、ご意見ください。

コメント

タイトルとURLをコピーしました