DL−RS1

キーエンスの通信ユニット「DL−RS1」とPLCを接続してデータを受信してみます。接続はシリアル通信(RS232C)で行います。

メーカー:キーエンス
型式:DL−RS1
PLC:三菱Q02U程度
インテリジェント機能ユニット:QJ71C24N−R2

使用センサ
センサアンプ:GT-71A/GT-71AP(親機)
センサアンプ:GT-72A/GT-72AP(子機)
センサヘッド:GT-H10

動作内容
センサ使用数:7個
受信データ格納デバイス
D6250〜D6269:浮動小数点
D6290〜D6299:16ビット整数

キーエンスのセンサで「汎用接触式デジタルセンサ」というセンサがあります。このセンサはセンサヘッドの先端がストロークし、ストローク量を測定することが可能なセンサです。 今回はこのセンサを利用して、ネジの高さ検出のプログラム例を作成してみます。センサアンプから実際の測定値を「DL−RS1」を利用してシーケンサー内に受信します。
「DL−RS1」は1台で複数のセンサアンプからデータを受信できますが、接続できるのは親機1台のみです。そのため残りのセンサアンプは子機としてください。 又、接続可能な台数は親機含めて10台までです。

次の図のように配線を行います。

データ受信のみの場合は「RD」「SD」「SG」のみの配線で問題ありません。今回はPLC側からコマンドを送信しますので、「4番ピン−6番ピン」と「7番ピン−8番ピン」を接続しています。

配線の次は通信設定をあわせます。「DL−RS1」は横にDIPスイッチがあります。ここで設定できます。PLC側はスイッチ設定であわしてください。

ではプログラムを作成していきます。まずは「DL−RS1」に現在のデータを送りなさいと指示します。コマンドは”M0”です。出力コイルで行う場合は必要ありません。

単純にシリアル通信で”M0”と言うコマンドをASCIIで送信しています。シリアル通信の詳細はシリアル通信を参考にしてください。 「B0C7」がONするたびにデータを送信するようになっています。測定値がほしいときに「B0C7」をONさせてください。

次は受信です。「DL−RS1」に”M0”のコマンドを送信すると、測定値を返してきます。ここでは送信プログラムと受信プログラムは全く分けて考えています。 つまり送信しなくても、別の方法で「DL−RS1」がPLCにデータを送信すれば、受信します。送信した後のみ受信許可みたいなことはしていません。 それは、シリアルコミュニケーションのバッファにたまったデータは残さないためです。バッファが残っている状態で再度「DL−RS1」がデータを送信した場合エラーになるためです。 これをさけるために、受信バッファはすぐに処理をします。どうしてもコマンド送信した後のデータのみがほしい場合は、受信後にそのデータを破棄するか使用するか分岐させてください。

データを送信したり受信したりするだけなら簡単にできます。G.INPUT命令でデータを受信します。その後の命令は受信した文字列の先頭から2文字を抜き出し、正常なデータかどうかチェックします。 ”M0"コマンド送信したため、レスポンスの先頭は”M0”になります。正常に受信したら「M1483」というPLSを出します。

受信データが正常であればこのプログラムが実行されます。受信データのフォーマットは「DL−RS1」のマニュアルを参考にしてください。 受信データは、カンマで区切られていますが、「DL−RS1」はカンマの位置が固定になりますので、データの位置(何文字目か)は固定になります。
ここではちょっとしたテクニックを使っています。まず1個のセンサに対する文字列数は8文字です。「D1283」に転送しておきます。次は最初の開始位置です。 4文字目ですがとりあえず適当に「D1299」に転送しておきます。次にインデックスレジスタを初期化します。インデックスレジスタについてはインデックス修飾を参考にしてください。

「FOR」という命令があります。これは「FOR」〜「NEXT」の間を7回繰り返します。まず文字列の抜き出し開始位置を「D1282」に転送します。これは先ほどの「D1299」の値を転送します。 次にこれから文字を抜き出す位置に”0”を転送しておきます。その次の「MIDR」の命令で受信データ「D1230」から「D1282」の文字列開始位置と「D1283」の文字数を「D1284」へ抜き出します。 ここで開始位置を「D1282」と指定すれば自動で「D1283」の値が文字数となります。あらかじめ8を書き込んでいます。4文字目かた8文字を抜き出します。

次は「EVAL」です。この命令はASCIIの数値部分を浮動小数点に変換してくれる便利な命令です。指数表示も浮動小数点に変換してくれます。 「D6250」に浮動小数点に変換された数値が入ってきます。「D6250」の後ろについている「Z8」は後で説明します。

浮動小数点でデータを扱う場合ここまででいいのですが、さらに16ビット整数まで変換しておきます。データレジスタも1個でいいですし、扱いも簡単になると思います。 まず小数点を消すために1000を掛け算します。その次に「INT」命令で16ビット整数に変換します。「DL−RS1」はセンサヘッドが反応していない場合、「−FFFFF」となり、”−99999”というデータが返ってきます。 16ビットに変換はできないので、値がマイナスであれば”0”に変換します。

これで一番目のデータの変換は完了です。残り6個のデータが残っています。ここで「D1299」に”9”を足しています。その後インデックスレジスタの「Z8」と「Z9」にもそれぞれ数値を足しています。 そして「NEXT」があるので、プログラムをさかのぼりして「FOR」の下に移動します。するとどうでしょう。「D1299」は先ほど”9”を足していますので”14”になっています。 その”14”を「D1282」に転送します。次の「MIDR」命令では14文字目から8文字を抜き出すことになります。最初は4文字目からでした。 そして次の「EVAL」の「D6250」には「Z8」がついています。最初のループでは「Z8」は”0”のため「D6250」へ値を転送しました。 今は2回目のループなので「Z8」は”2”になっています。そのため「D6252」へ値を転送することになります。

このように、ループする前に文字抜き出し開始位置とインデックスレジスタに値を足していけば、データレジスタの番号をずらしながら連続した処理を行うことが可能になります。 このループを7回繰り返すと「D6290」〜「D6296」へ16ビットに変換された測定値が入ってきます。

同じ処理を7回も書くとプログラムの長くなり、変更があった場合7個すべて変更する必要があります。この書き方なら変更も楽にできますし、変更時の間違えも少ないと思います。 シーケンスプログラムは誰が見ても分かりやすく書くことが基本ですが、この書き方は慣れた人でないと分かり難いと思います。ただ私の考え方は、このような複雑なデータ処理については、メインのプログラムと別な部分に書き、少し考えれば解読できるくらいなら「あり」だと思います。 これは一般的にいうブラックボックスではなく、処理内容さえ理解すれば誰でも編集できます。メインのプログラムとは違う部分に書くということも重要です。Qシリーズであれば別のプログラムに書くといいでしょう。 例えば、メインのプログラムでネジを測定するとき、データ要求指令を出します。その後「D6290」〜「D6296」のデータを必要なときに転送して使用すればいいのです。 メインのプログラムを作成しているときは、この文字列変換部分の処理内容をいちいち確認する必要もありません。逆にこの文字列処理部分をメインプログラム内に書いてしまうと余計分かり難いプログラムができてしまいます。

このようにプログラムを構造化してしまうことはさらにメリットがあります。それは同じ機器を使う場合、この部分だけコピーして入力と出力とユニット番号だけ書き換えれば他のシステムでも簡単に使用できてしまいます。 今までシーケンスプログラムしか使ったことがない方は、このような書き方や、「FOR」「NEXT」命令の使い方も新鮮に感じると思います。しかしVisual Basic などの言語ではあたりまえのように使われる方法です。 シーケンサーも進化し色々なことができるようになってきました。色々なことができるということは、色々な書き方ができ、より複雑にプログラムを作成できます。 複雑になるからこそ、プログラムを構造化して、分けていくことも重要になってくるのです。



PCによるシーケンス制御の活用

シーケンス制御を短期間で理解するには通信講座がお勧めです。シーケンス制御講座(このサイト)ではシーケンス制御をできるだけわかりやすく説明していますので、一度目を通していただければ通信講座も短期間で身につくと思います。


わかりやすい電気保全

シーケンス制御講座(このサイト)ではシーケンス制御について詳しく解説していますが、実際の保全業務となるともう少し広い範囲の知識も必要です。故障した設備を素早く原因を探して素早く直す。実際はなかなか難しいことです。 浅くてもいいので少し広く知識を持っていれば、役にたつと思います。


図解入門 よくわかる最新 シーケンス制御と回路図の基本はKindle版(電子書籍)です。単行本ご希望の方は、フォーマットで単行本を選択してください。または、トップページよりご購入ください。

Copyright (C) 2010 シーケンス制御講座, All rights reserved.