カテゴリー
制御設計

制御設計2 シーケンス制御とラダープログラムの基礎と工夫

ファクトリーオートメーション(FA)のシーケンス制御とラダー回路の基礎と工夫

ファクトリーオートメーション(FA:生産工場)の設備の多くはシーケンス制御を使用しています。その制御を行う制御装置をPLC(プログラマブルロジックコントローラ:通称シーケンサ)と呼ばれるものを使用しており、それらはラダー回路(一部言語記述もある)で記述するものが多いです。シーケンス制御とラダー回路について説明していきたいと思います。

シーケンス制御とは?

シーケンス制御とはシーケンス動作をするための制御で、「決められた順序・やりとりで制御の各段階を踏んで進めていく制御」のことです。
「決められた一連の動きを忠実に守ってひたすら動く制御」で生産工場で非常に使われています。
また、生産工場ではその生産特有の設備・動きをしなければならず、制御の仕様変更や汎用性が求められることが多いため比較的記述しやすいラダー回路で記述するタイプのPLCが多いです。

ラダー回路とは?

先ほども述べましたが、ファクトリーオートメーション(FA)では仕様変更や汎用性が求められることが多いです。
そんな中、ラダー回路はビジュアル的にプログラムをできるようにしたビジュアルプログラムの一種です。

例としては以下のような絵を組み合わせて回路を作りシーケンス動作にしていきます。
ただし、このビジュアルも細かな設定や機能はPLCメーカーにより異なります。
・a接点(ONで回路通過)
a接点
・b接点(OFFで回路通過)
b接点
・立ち上がりパルス接点(ONした1周期のみ通過)
立ち上がりパルス
・コイル(回路が繋がるとON)
コイル
・NOTコイル(回路が繋がるとOFF、回路が繋がっていないとON)
NOTコイル

ラダー回路作成前に

ラダー回路を作成する上で注意してもらいたいことがいくつかあり、それを踏まえることでラダー回路を記述する上でのメリットがたくさん出でくるので説明していきます。

入力と出力

PLCは基本的に外部へのやり取りとして入力と出力がリレーとしてシーケンス制御されます。
そのため、PLCにはそれぞれハード的な接続先があります。

・入力:センサ、スイッチ、エンコーダーなど
・出力:バルブ、ランプ、モーターなど

ラダー回路内では入力・出力をラダー回路名で使用していきます。
この記事の中では
入力:R2000, R2001
出力:R50000, R50001
としていきます。
それ以外にMR001等を使用していますが、内部のスイッチ(PLC内の制御)です。

これらはPLCのメーカー、ラダー回路のソフトウエアによって違ってきます。
入力・出力の挙動は直接動作の制御に関係していきます。

プログラムを作っていく基本ですが、外部とのやりとり部分は極力少なく、シンプルを心がけてください。
分かりやすくなり、ヒューマンエラーも低減できます。

ラダー回路内の入力・出力の使い方は極力シンプルに

ラダー回路の動作の流れ

PLCや作成ソフトウエアによりますが、最近の傾向としてラダー回路を記述するプログラム図面を複数持てるものが多くなってきています。
設定によりその順序を変えることができますが、その順序によりプログラムを実行していきます。また、プログラム図面内も上から順にラダー回路を実行していきます。

以下はプログラム図面の例です。
プログラム順
 ・Input :外部入力から受け取り処理のプログラム
 ・Input_work :入力からの変換のプログラム
 ・Main_Routine :主の制御プログラム
 ・Exception_Routine :例外処理プログラム
 ・Output_work :出力への変換プログラム
 ・Output :外部出力への処理プログラム
としました。
この場合上から順に
「入力」→「入力処理」→「主制御」→「例外制御」→「出力処理」→「出力」
となっています。

入力から制御を経由して出力に流れているため、入力があったらすぐに処理を行い出力まで出ます。(1周期内で処理が終了する)
この順番が曖昧だと、制御から出力まで数周期に渡ってしまい出力までに時間がかかってきます。
(周期はPLCやプログラム量により異なります。1周期:数μs〜数十ms程度)

「出力処理」→「出力」→「主制御」→「例外制御」→「入力」→「入力処理」の順の場合、
入力があったら
「入力」→「入力処理」<次の周期待ち>「主制御」→「例外制御」<次の周期待ち>「出力処理」→「出力」
になってしまいます。

プログラム図面に記述するラダー回路はそのプログラムの上から下に向かって実行していきます。
(一番下まで実行が終わったら、次のプログラム図面の一番上から実行していきます)

そのためラダー回路記述順も同様に「入力」→「制御」→「出力」というように上から記述しましょう。
以下はプログラム図面であり、ラダー回路を記述するスペース
プログラム図面内

また、プログラム図面単位でスキャン周期(プログラム実行周期)を分けることもできることもできます。
分けることで、制御装置の負荷を下げスキャン周期を早くできる等があります。
メーカーによって異なるため、制御装置の取扱説明書で確認してください。

プログラム順、プログラム周期を考えて設定・記述することで周期遅れ等を防止できる

基本的なラダー回路

ラダー回路の基本的な使い方を説明していきます。

AND回路とOR回路(直列回路、並列回路)

基本中の基本の回路になります。

・AND回路(直列回路とも言われる)
 横並びにa接点つなげてコイルに渡します。
 条件が全て揃わないと回路が最後まで繋がりません。
 この場合、「R2000:ON」,「R2001:ON」のみ「MR001:ON」です。

スイッチ1
(R2000)
スイッチ2
(R2001)
コイル
(MR001)
OFF OFF OFF
ON OFF OFF
OFF ON OFF
ON ON ON

・OR回路(並列回路とも言われる)
 縦並びにa接点つなげてコイルに渡します。
 条件が1つでも揃えば回路が繋がります。
 この場合、「R2000:ON」または「R2001:ON」なら「MR001:ON」です。

スイッチ1
(R2000)
スイッチ2
(R2001)
コイル
(MR001)
OFF OFF OFF
ON OFF ON
OFF ON ON
ON ON ON

And回路Or回路

条件が揃って動作はAND回路、どれか1つでもの動作はOR回路

NAND回路とNOR回路

NAND回路とNOR回路はそれぞれ、AND回路とOR回路の反対(NOT)の意味になります。
そのため、コイルの動作も全く逆になります。
まず、NAND回路の説明をします。

・NAND回路
 下の表を見てわかると思いますが、スイッチ全てがONの時にコイルがOFFになります。
 そのため、並列でスイッチをb接点にすることで作れます。
 AND回路の動作の逆になります。そのため、AND回路を作りコイルをNOT回路にしても可能です。

スイッチ1
(R2000)
スイッチ2
(R2001)
コイル
(MR001)
OFF OFF ON
ON OFF ON
OFF ON ON
ON ON OFF

Nand回路

・NOR回路
 下の表を見てわかると思いますが、スイッチ全てがOFFの時にのみコイルがONになります。
 そのため、直列でスイッチをb接点にすることで作れます。
 OR回路の動作の逆になります。そのため、OR回路を作りコイルをNOT回路にしても可能です。

スイッチ1
(R2000)
スイッチ2
(R2001)
コイル
(MR001)
OFF OFF ON
ON OFF OFF
OFF ON OFF
ON ON OFF

NOR回路

NAND回路はAND回路の逆、NOR回路はOR回路の逆の挙動をする

XOR回路

排他的論理和回路とも呼ばれています。
あまり使うことはないかもしれませんが、以下の表のように動作は表せます。
スイッチ1もしくはスイッチ2のどちらか一方のみONの時にコイルがONする(排他)回路になります。

スイッチ1
(R2000)
スイッチ2
(R2001)
コイル
(MR001)
OFF OFF OFF
ON OFF ON
OFF ON ON
ON ON OFF

Xor回路

XOR回路は排他的な制御で使用される。

自己保持回路(セルフホールド回路)

自己保持回路の説明をします。
セルフホールド回路とも呼ばれ、一度押されるとスイッチを離しても(スイッチOFF)してもコイルがONし続ける回路です。
自己保持回路

動きの流れを説明します。
スイッチを押すとコイルまで繋がりコイルがONします。そうするとコイルのスイッチもONします。
自己保持回路2

次の周期で前回の周期でコイルがONであったため、コイルのスイッチがONになります。
そのスイッチがコイルまで繋がってコイルがONし続けます。
この周期の時にスイッチR20000のON/OFFは関係ありません。
自己保持回路3
自己保持回路では、一度コイルがONするとOFFできないため、ここではコイルOFF用のスイッチMR002をb接点で回路に入れています。
コイルがONしている時にMR002をONするとコイルがOFFします。
デッドロック(コイルがOFFできなくなる)で制御できなくなることがないように注意しましょう。

また、コイルを使用する点での注意点ですが、2重コイルに注意しましょう。
同じ出力名のコイルが2つ以上あると正常に動作しません。

一度のスイッチ操作でコイルをONし続けられる。ただし、デットロックに注意

セット・リセット回路

セット・リセット回路は自己保持をしてくれる回路です。そのため、ONはセット、OFFはリセットで行います。
自己保持回路と描き方が異なるぐらいで同じです。
セットリセット回路
デッドロック(コイルがOFFできなくなる)で制御できなくなることがないようにリセットを入れたりして注意しましょう。

セット・リセットの出力を使用する際には、セット出力を入れたらリセット出力も同時に作るようにしましょう。
そうすることで、デッドロックを予防できます。また、動作入れ忘れを防止できます。

自己保持と同じ描き方が異なる。同じように、デットロックに注意

オルタネート回路(フリップフロップ回路)

オルタネート回路はスイッチを押すたびにON/OFFを交互に繰り返します。
フリップフロップ回路とも呼ばれます。
オルタネート回路

OFF→ONに移る動きを説明します。
スイッチをONすると立ち上がりパルスで押した1周期スキャンのみONします。そのタイミングでコイルがONします。
オルタネート回路2

次の周期でスイッチの立ち上がりパルスは切れます。
ですが、前の周期でコイルがONしているためコイルのスイッチがONして自己保持がかかります。
オルタネート回路3

スイッチを押すたびにコイルのON/OFFが切り替わる

シーケンス制御として以下の本が詳しくわかりやすいです。
よければ参考にして見てください。
図解入門よくわかる最新シーケンス制御と回路図の基本 (How‐nual Visual Guide Book)

基本的な段階回路

プログラムをラダー回路で記述する際に段階的にシーケンス制御をしていくと思います。
段階的に制御することで、制御が次々と進んでいきます。
その際の段階的なシーケンスの動きについて簡単に説明していきます。

自己保持回路の段階回路

自己保持回路の段階回路として、一例を下に載せました。
作りは色々パターンがありますので、自分のやりやすいようにしてもらえればいいと思います。
制御の流れとして、
「R2000スイッチON」→「1段階目処理」→「R2001スイッチON」→「2段階目処理」→「R2002スイッチON」→「処理終了」
になります。

1段階目処理だけで処理をさせたい場合は「MR001:a接点」「MR002:b接点」のAND回路で動くように次に繋げればいいです。
自己保持回路の段階回路

セットリセットの段階回路

先ほどの自己保持の段階回路のセットリセットで作った等価回路になります。
制御の流れとしても同じで、
「R2000スイッチON」→「1段階目処理」→「R2001スイッチON」→「2段階目処理」→「R2002スイッチON」→「処理終了」
になります。
こちらも1段階目処理だけで処理をさせたい場合は「MR001:a接点」「MR002:b接点」のAND回路で動くように次に繋げればいいです。
セットリセット回路の段階回路
セットリセット回路の段階回路2

段階回路で制御を進めていき一連の動作とする

タイマー回路

意外と要望が多かったタイマー回路について追記して行きますね。
今回は基本的なタイマー回路について話します。

基本的なタイマー回路は大きく分けて3つあります。
・オンディレータイマー回路
・オフディレータイマー回路
・ワンショットタイマー回路

簡単に説明して行きたいと思います。

オンディレータイマー回路

簡単に言いますと、スイッチONしてから一定時間経過後にコイルがONする回路です。

用途としては
・タイムラグでONさせたい動作
・異常監視  など

回路を描くと以下になります。
オンディレイタイマー回路

タイマコイル
これはタイマコイルでPLCメーカーによって見た目が異なります。

この場合は100msタイマでカウント10になります。
そのため1秒経過するとT0スイッチがONします。

R2000がONした一秒後にMR001のコイルがONします。

オンディレイはコイルがONするまでに一定時間経過する

オフディレータイマー回路

簡単に言いますと、スイッチOFFしてから一定時間経過後にコイルがOFFする回路です。

用途としては
・タイムラグでOFFさせたい動作
・安全監視  など

回路を描くと以下になります。
オフディレイタイマー回路

先ほどのオンディレイタイマー回路と同様に、100msタイマでカウント10になります。
そのためスイッチOFFした後に1秒経過するとT0スイッチがONします。

R2000がOFFした一秒後にMR001のコイルがOFFします。

オフディレイはコイルがOFFするまでに一定時間経過する

ワンショットタイマー回路

簡単に言いますと、スイッチONしたらコイルがONし、スイッチ関係なく一定時間経過後にコイルがOFFする回路です。

用途としては
・時間基準で動作させたい動作
・時間監視  など

回路を描くと以下になります。
ワンショットタイマー回路

先ほどと同様に100msタイマでカウント10になります。

この回路はスイッチONでコイルがONします。
これはスイッチの立ち上がりで自己保持がかかります。

その後はスイッチ動作に関係なく、一秒後にコイルがOFFします。

R2000がONしたらMR001がONをして、その一秒後にMR001のコイルがOFFします。

ワンショットタイマーはコイルがONしたらコイルがON、一定時間経過後にOFFする

ラダー回路の工夫

私がラダーを描く際に少し注意・工夫している点を少しだけ説明します。
・並列回路の見にくさ軽減
・コマンド、インターロック、出力と分ける
・出力でソレノイドバルブ制御の場合

並列回路の見にくさ軽減

以下のように並列回路を書きます。
ですが、どんどん並列回路のスイッチが増えると縦に回路が伸びてビジュアルプログラムではとても見にくくなります。
並列回路の工夫

その場合、以下のように等価回路が作れます。
並列を直列にする場合AND回路さらにNOT回路にすることで同じ回路になります。
すこしわかりにくい形になりますが、プログラムとしてはとても見やすくなります。
並列回路の工夫

ラダー回路を極力見やすくして間違いを低減する

誤動作防止

入力及び出力は極力シンプルにするのは基本と言いました。(ヒューマンエラー、バグの防止)
それ以外にも注意点があり、基本的に誤動作防止を考えて描いていきます。

・入力をそのまま使用しない。
入力をそのままするのではなく、誤動作防止を踏まえて使用する。
誤動作が起こらないと思われる場所はそのまま使用しても問題ないと思います。

センサで待機側、動作側2点取っている場合、そのセンサ2点の状態から待機側、動作側を判断してプログラムに使用します。
センサ、スイッチ等が壊れないとは言い切れません。
故障の際にプログラムを進めさせないためです。

・動作コマンドを出力にそのまま使用しない。
こちらも誤動作が起こらないと思われる場所はそのまま使用しても問題ないと思います。
インターロック(動作が可能な状態を監視・判断)するのを使用します。

常時、出力の動作に対して状態を監視・判断を作っておきます。
コマンド+インターロックで出力に渡します。

入出力は誤動作防止を考えて利用・接続をする

出力でソレノイドバルブ制御の場合

シングルソレノイドやダブルソレノイドを出力で使用する場合の工夫点です。
ダブルソレノイドバルブを制御する場合、2点出力が繋がっていると思います。
制御状態により、両方OFF、片一方ONがありますが通常両方ONはあり得ません。
そのため、両方ONを制御として作らせない方法です。

また、シングルソレノイドバルブの制御をダブルソレノイドバルブのプログラムを作っておくと、シングル→ダブルと変更になった際にプログラム修正が容易になります。

・自己保持回路
特徴として、R50000,R50001が同時にONしないようになっています。
例えばMR000(MR010,MR011がON状態として)がONした場合MR1000が一度ONします。
その周期ではR50000がONをせず、R50001の回路を切ります。(R50000,R50001がOFFする)
次の周期でR50001がONします。

ここでMR100(両方出力OFF)を作っているのは両方を切りたい場合のスイッチになります。
ダブルソレノイド回路

・セットリセット回路
先ほどの自己保持回路の等価になります。
同様にR50000,R50001が同時にONしないようになっています。
ただし、MR000もしくはMR001(MR010,MR011がON状態として)がONした場合R50000,R50001が両方OFFの1周期はありません。
すぐに(その周期で)ON/OFFが切り替わります。
ダブルソレノイド回路
ダブルソレノイド回路
ダブルソレノイド回路

ソレノイドバルブ制御ではダブルソレノイドで回路を作っておくと変更にすぐに対応できる

シーケンス制御として以下の本が詳しくわかりやすいです。
よければ参考にして見てください。

2017/09/27 タイマーについて追加

カテゴリー
制御設計

制御設計1 画像制御 カメラ選定〜制御

画像制御 カメラ選定〜制御

これからどんどん画像認識・画像制御による製品・設備が増えてきます。
それに伴って精度や設計方法も変わっていきます。ここでは使い方をわかりやすく説明したいと思います。

画像装置での検査、計測例:
Keyence_CV-Xシリーズ参考
©Keyence/CV-Xシリーズ

開発の順序だてて書き込みをしていこうと思っていましたが、特にこのトピックの要望がありましたので先に書いていこうと思います。

画像制御・設計の流れ

画像装置を組み込んで使用するために、設計として簡単に以下を考える必要があります。

・何をするか(計測、認識)
・どこをどのように見たいか
・ワークの距離
・必要精度
・維持の仕方

・何をするか(計測、認識)

 モデル画像(事前登録画像)と比較
  →OK/NGもしくは有無判定
  →モデル画像位置を計測
 画像から計測範囲を指定して計測
  →エッジを検出して位置を計測
  →円を検出して位置を計測

・どこをどのように見たいか

 ワークの縁の形状のみ
  →透過照明・バックライト照明
  →グレーまたは白黒カメラ
  (グレースケール、2値化処理)
(形を投影:影絵のような画像になる)

 ワークの対する外乱光、乱反射を抑えたい
  →ドーム照明・リング照明
  (カメラを囲んだ照明)

 ワークに対して光量を多くしたい、照明を追加したい
  →バー照明
  →スポット照明
  (部分的な照明、シャッター速度など上げたい際)

 細かな傷、浅い溝を見たい
  →青系の照明色、カメラの色フィルタ

 特定の色を無視したい
  →カメラの色フィルタ
  →カラーカメラ

 色で判断したい
  →カラーカメラ
  (色相、彩度、明度より判断)

 色フィルタ(特定の色を無視したい)
 グレースケール(コントラストのみ)

・ワークの距離

  →ワークディスタンス
  (ワークとレンズの距離、視野範囲)
  →被写界深度
  (ワークまでの距離のばらつき)

・必要精度

  →直接的な精度
  (レンズの倍率、受光する面積(撮像面積)、画素数)
  →考える必要がある精度、範囲
  (レンズの歪み(ディストーション)、許容のピントのボケ量(許容錯乱円))

・維持の仕方

  →ホワイトバランス
   (グレーカード(反射率18%))
  →ワーク基準位置
  →カメラ座標系とワーク座標系の校正

これらを頭の片隅に入れておいて選定の際に考慮しましょう。

選定前に(画素、カメラの考え方)

画素

画素またはピクセル(pixel)は画像の情報を表示できる最小単位になります。
200万画素(2メガピクセル)≒200万個点(画像の情報)で画像を表わすことができるということになります。簡単にいうと分解能ですね。
関連するのがカメラ自体の受光素子の大きさになります。受光する面積(撮像面積)とレンズで取り込める倍率により視野の範囲が決まります。
その視野範囲が画素数で表示できるため、1画素で表せる精度が求まります。
そのため、「画素数」「受光する面積(撮像面積)」「レンズの倍率」の組み合わせで精度・視野範囲が変わります。

サブピクセル処理

 画素と画素の間を仮想的に計算でだす方法です。画素が取得した値ともう一つの画素が取得した値の中間の数値と判断して表示させる方法です。
 実際に取り込んでいる値ではないのですが、画像の曖昧さ(ごく小さい範囲では極端に変化が起こりにくい)
 として値を補完している方法になります。画像からエッジを計測する際の誤差を抑えます。
 ですが、分解能の公差の最小とはしない方が良いと考えています。
(カメラの分解能=画素数、画素数*2にはならない)

サブピクセル処理の考え方

ベイヤー配列

 カラーカメラの場合、赤色、緑色、青色(RGB)のフィルタを通した素子が並び配列されています。
 それによりカラーを認識しますが、実際の画素の大きさがカメラ分解能の公差になりません。
 (2倍になったりします。)
 そのため、グレースケールで取り込む際は白黒カメラで取り込む方が良い場合があります。
 サブピクセル処理により、その分解能を補完したりしているメーカーもあります。
 カメラにより異なるので詳しく知りたい方は各メーカーに問い合わせてみてください。

ベイヤー配列の考え方

「画素数」「受光する面積(撮像面積)」「レンズの倍率」の組み合わせで精度・視野範囲が変わる

カメラ・レンズの選定方法

視野と精度

精度を考える上で以下のことに注意する必要があります。
直接的な精度:「レンズの倍率」「受光する面積(撮像面積)」「画素数」
考える必要がある精度、範囲:「レンズの歪み(ディストーション)」「許容のピントのボケ量(許容錯乱円)」

・「レンズの倍率」「受光する面積(撮像面積)」= 視野範囲
カメラとレンズの組み合わせにより視野範囲が決まります。カメラとレンズが一緒に販売しているところではレンズからのワークまでの距離(ワーキングディスタンス)と視野のグラフが以下のように提供されていると思います。

以下は一例としての表の見方です。
ワーキングディスタンス確認

レンズからのワークまでの距離(ワーキングディスタンス)と視野範囲から交わった点のカメラ及びレンズを選定します。
このグラフの場合、ワーキングディスタンス110mm,視野(長い軸)11mmとなります。

・「画素数」「視野範囲」= 直接的な精度
200万画素(1600×1200の場合、正確には192万画素)、視野11mmx8.25mmの場合を考えてみます。
11[mm]/1600[pixel]=0.00688[mm/pixel]=6.88[μm/pixel]
となります。ただし、これが精度としてそのまま使えるわけではありません。

レンズの歪み(ディストーション)

レンズには必ず歪みがあります特にレンズの端には歪みが発生しやすくなっています。そのため使用する場合は範囲が狭くなること、もしくは考査を踏まえた考え方をする必要があります。アプリケーションによっては歪みのない座標系に変換するものもあります。
レンズの端の方が歪むためレンズの他の部分のように精度よく使えません。

 以下は歪曲収差のイメージになります。
歪曲収差のイメージ

ここで歪みのない範囲は以下の図の赤枠の範囲になります。
ディストーション

レンズの仕様に光学ディストーション率またはTVディストーション率があります。この場合の関係式は以下になります。
光学ディストーション
光学ディストーション式

TVディストーション
TVディストーション式

例として、先ほどの視野範囲(11mmx8.25mm)の場合で光学ディストーション0.1%として説明します。
計算は割愛しますが、Y=6.875mm, y’=6.868mmになります。
そのため実際の視野範囲(使用範囲)を10.99mmx8.24mmに制限、もしくは歪みを考慮に入れた補正計算が必要になります。

・許容のピントのボケ量(許容錯乱円)
 ピントが合っているとされる時の許容されるピントのボケ量
 明記されていない場合は1画素分と考えて良いと思います。

許容錯乱円の考え方
ここでは先ほどからの例として1画素あたり5.5[μm]x5.5[μm]と考えるとその分の精度が悪くなります。

・結局どの程度精度を考える必要があるのか?
「直接的な精度」+「考える必要がある精度、範囲」がカメラで画像を取得した際の精度、範囲になります。

ここまでの200万画素カメラ、視野範囲11mmx8.25mmで考えると「直接的な精度」は6.88[μm/pixel]。
「考える必要がある精度」は許容錯乱円の5.5[μm]
合計精度=6.88[μm]+5.5[μm]=12.38[μm]
サンプリングの考え方(2倍以上)から24.76[μm]以上をこのカメラとレンズで検出することができます。
ただし、ピントが合っていることが前提となります。
使用できる範囲としては10.99mmx8.24mmとなります。

・レンズとカメラのマウンタ形状
カメラとレンズの選定の最後に、レンズとカメラを取り付けるマウンタの形状の種類がたくさんあります。
Cマウント、CSマウント、M12マウントなど様々な種類があり、径やネジのピッチなど異なります。
カメラとレンズが適合しているものを同じメーカーで購入する際は特に問題ないと思います。

カメラの選定はレンズとカメラより見たい精度を割り出して選定する

照明の選定

照明選定はとても重要になります。
シャッタースピードや被写界深度、画像を認識させる方法により変わってきます。
画像は実際に一度使って試して見ないと、思いと違う場合が出てきたりします。

材質による光の当て方の違い

・金属上のワーク画像(金属上の刻印類)
 光の反射が強いので正反射(直接反射光)を利用
 →光を正面より当てる

・フィルム下のワーク画像(反射しやすい物体下のワーク)
 ハレーション(照明の写り込み)が強いので、拡散反射(直接反射光を使用しない)
 →照明を斜めに当てる

・薄い紙等の下のワーク画像
 紙自体が反射率が悪いためその下のものは見えにくい
 →紙の下より照明を当てる(透過照明)

機能による照明の違い

・ワークの縁の形状のみ
  →透過照明・バックライト照明

・ワークの対する外乱光、乱反射を抑えたい
  →ドーム照明・リング照明
  (カメラを囲んだ照明)

・ワークに対して光量を多くしたい、照明を追加したい
  →バー照明
  →スポット照明
  (部分的な照明、シャッター速度など上げたい際)

・細かな傷、浅い溝を見たい
  →青系の照明色、カメラの色フィルタ

・特定の色を無視したい
  →カメラの色フィルタ

照明は位置や強さ、色によってもカメラ画像認識に影響が出てくる

ピントの設定・考え方

ピントは合えば一番いいですが、ワークによりレンズとワークの距離がばらつくことがあります。
ピントが合う範囲を広げることも可能です。
光の量を調節することで可能です。

F値

辺縁はカメラを使ったことがある人はわかると思いますが絞りの部分ですこの絞りにより明るさを調整します。
 レンズの明るさを表す指標。F値が小さいほど明るい。
 レンズを通る明るさは1/(F値*F値)になる

被写界深度

ワーク面がレンズに対して前後しても、ピントがボケずに鮮明に受けられる範囲になります。
先にワークがレンズに対してどの程度ばらつくか調べましょう。

正確な範囲として計算を説明していきます。
まず、光学倍率が必要です。
レンズもしくは以下の式よりも止めてください。
光学倍率M=受光する面の1辺(撮像面の1辺)/視野範囲の1辺
例:(撮像面のH)8.8mm/(視野H)11mm=0.8

次に実行Fが必要で計算式はF値より求めます。
実行Fは距離において明るさを表す値になります。
実行F値式
実行F=(1+光学倍率)*F値
FNO:F値, M:光学倍率
例:(1+0.8)*(F値)2=3.6

被写界深度の計算をしていきます。
被写界深度式

被写界深度=2*(許容錯乱円*実行F)/(光学倍率*光学倍率)
c:許容錯乱円, F:実行F, M:光学倍率
例:2*(0.01*3.6)/(0.8*0.8)=0.11[mm]幅

F値が大きいほど暗く、被写界深度が広くなります。簡単に特徴を説明します。
 特徴:
  F値が大きいほど被写界深度は大きくなる(絞るほどピントがボケにくい)
  焦点距離が近いと被写界深度は小さくなる
  ワークが近くにあると被写界深度は小さくなる

カメラの選定はレンズとカメラより見たい精度を割り出して選定する

画像検出方法(エッジ検出方法の仕組み)等は各制御装置の方法を使うということで、今回は割愛させていただきます。
ここからは画像から実際のワークに対してどのように関連付けるかの工夫の仕方(画像からの制御方法)を教えていきます。
そのため、画像処理方法の仕組みについて詳しく知りたい方はこちらの本などを参考にしてください。
図解入門よくわかる最新画像処理アルゴリズムの基本と仕組み (How‐nual Visual Guide Book)

画像制御の方法

画像の制御をする上で下記に記す内容は最低限考慮した方が良い内容になります。

・座標系の違い
・検出範囲の設定方法
・モデルサーチの工夫
・エッジ検出の工夫

座標系の違い

カメラで画像を撮っていますが、本来欲しいのはワーク本来の座標系です。
OK/NG等の判定ではいりませんが、位置や計測を使う場合には必要になります。

イメージとしては以下のようになります。
座標系の違い

動くようなワークの場合は動かして画面上を最低2点以上、機械的な基準がある場合はそれを基準に画面に位置がわかるようにこれも画面に2点以上撮って校正します。座標系の校正がない場合は2点位置から傾き、切片をだしてワークの座標の変換単位を掛ければカメラの座標系からワークの座標系に変換ができます。この計算をして位置を割り出してください。

今回は簡単に軸の角度の違いからの変換を示していきます。方法としてはこの限りでなく色々なやり方があるので検討してみてください。
以下のようにカメラの座標系の軸(x,y)とワークの座標系の軸(X,Y)が傾いている(角度がついている)とします。その際にワークの座標系の1軸のみ変化させた際の値をカメラの座標系と比較します。
座標変換1

この際に角度θは以下のように表すことができます。
座標変換1

カメラの座標系からワークの座標系の変換後の比率は以下のようになります。
変換比率

一度このように変換定数を割り出します。(X側も同じようにします)
そこから以下のような任意座標に変換式を展開して、ワーク座標として考えます。
任意座標に展開

y変換式

x変換式
a:ワーク座標Y軸の変換比率
b:ワーク座標X軸の変換比率

検出範囲の設定方法

実際のワークが同じ位置に毎回くれば範囲は最小限になります。
そのため極力同じ位置に来るように設計しましょう。ただし、それでもそういうわけにはいきません。
同じ位置に来るようにしたとしても、以下を考慮に入れましょう。

・機械の積み上げ公差、加工公差、組み付け公差(組み付け直しで発生、校正により無視できる)
・ワークの加工公差(ワークのばらつき)
・その他設計上考慮部分

これらを全て足した設計上の最大公差以上の範囲を検出範囲としましょう。

モデルサーチ時の工夫

基準となるモデル画像(基準のワークの姿)のより実際のワークの位置・ワークの有無を割り出す方法です。
メーカーにより異なりますが、エッジの姿と色認識により探しています。
そのため、以下のことを注意しないと検知できない場合があります。

・モデルを小さくしすぎない
・モデル認識感度(相関値レベル:一致性)をあげすぎない
・モデルと同じような形状・色が検出範囲内に存在させない

モデルサーチはワークの位置・向きがどんな状態でも比較して特定します。
ただし、検出範囲が広すぎたり向きを360°対応したりすると、検出に時間がかかります。
なるべく検出範囲を規制したり、検出向き(モデル画像の比較の向き)を規制した方が良いです。

エッジ検出時の工夫

ここでは特に画像を計測として使用する際の注意点を説明します。
モデル比較や計測の大半は色の変化部分(濃淡微分)をエッジとして抽出します。
モデル比較ではどの程度、モデル画像と近いか判断するのでさほど検出にこだわる必要がありませんが、エッジから計測をする場合(濃淡の変化部分で計測)の場合は注意が必要です。

濃淡の変化の中心(本来のエッジ)と画像がエッジとして認識する場所は多少異なります。
また、材質によりエッジ感度を変える必要があります。(金属類は反射率が高く、紙類は反射率が低いため)

以下はイメージ画像になります。
エッジとして認識する感度を設定するのです(ここでは50がこれにより位置が多少異なります)
エッジ検出時の誤差

このように実際の変化の中心と差が出ます。「エッジとして取り込んでる範囲の中心」(ここでいうエッジ感度50%以上の場所の中心)を取れば「変化の中心」と一致するのでは?と思いますが、画像の変化の度合い(感度)が色により均一に変化とはいかないため幾分か誤差が出ます。その為、画像と実物の位置の校正を取るもしくは、計測方法を工夫します。

計測方法の工夫としては、1つのエッジから位置を割り出すのでは無くもう片方のエッジも抽出して、そのエッジとエッジの中心を計測点とする方法です。

上の図は「白→黒」でしたが、そのまま「黒→白」に変化する場所(もう一つのエッジ)を逆方向からエッジを検出するようにします。
そうすることで、ピントがボケた場合などにより差が出てしまうことを防ぎます。

簡単な図で説明します。
エッジ検出の工夫の仕方

逆方向から同じエッジ感度でエッジを検出します。順方向のエッジの位置と逆方向のエッジの位置の中心が実際のワークの中心になります。そうすることでワーク中心とエッジより検出した基準が同じになります。

これらの「画像制御の方法」は制御のほんの一部の工夫になります。たくさんのものに応用できますし、活用できます。試して見てください。

工夫次第ではかなりの精度や様々なことに応用できます。

最近の画像処理装置の傾向

画像処理装置は維持管理及び調整がとても難しいものがほとんどでした。
ですが、最近は調整レスやファイバセンサ、光電センサと同じような簡易的な画像処理装置(センサ)が出てきています。
これからも徐々に増えていくと思います。
それはFA(ファクトリーオートメーション)だけでなく、製品の加える技術としても主流になっていくと思われます。

画像処理技術は徐々に色々な分野で多く使われてくる

参考になったでしょうか、他にも様々な方法がありますし、各メーカーもより簡単にできる方法に変えてきています。
ただし、考慮しないと精度や速度が出ないなどのものがありますのでそこをしっかり踏まえて設計していきましょう。

画像検出方法(エッジ検出方法の仕組み)等は各制御装置の方法を使うということで、今回は割愛させていただきました。
画像処理方法の仕組みについて詳しく知りたい方は、こちらがわかりやすいです。