ものづくりニュース by aperza

シーケンス制御講座「シリアル通信」

シーケンス制御講座「シリアル通信」

基礎からはじめるシーケンス制御講座

上級:シリアル通信

PLCと外部機器をシリアル通信で通信させてみます。

ただしここでは通信の詳細までは説明しません。

通信の詳細については別途シリアルコミュニケーションのマニュアルを見るか、ネットで検索してみてください。私が説明するよりもいいと思います。

 

シリアル通信にも種類がたくさんあります。パソコンからPLC(シーケンサー)に接続し、プログラムを書き込んだりするのもシリアル通信です。

USBで接続する機器も、基本的にはシリアル通信です。今回説明する接続は「RS-232C」という接続方式を使った説明です。

 

難しそうに見えますが、実は通信の詳細まで知らなくても232C通信は使いえます。通信相手の機器と通信設定を合わせれば、細かいことは気にする必要はありません。

細かい部分は機器同士が勝手に処理してくれるからです。後は普通に通信すればいいのです。

ちなみに「GOT」と呼ばれるタッチパネルを使用することがあると思いますが、これもシリアル通信です。RS-232Cケーブルで接続されている場合もあります。

 

この接続についてはあらかじめ手順が決まっています。そのため通信の部分のプログラムを作成する必要がありません。

「このような信号が来たら、このように返しなさい。」という感じで、手順が決まっています。そのためお互いの機器を接続すれば、勝手に通信を開始し、GOT画面に設定した内容を動作させているのです。

先ほど説明した「通信の詳細まで知らなくてよい」というのは、実際に作業するうえで、そこまで意識する必要がないからです。

 

それではQシリーズでの説明から行ってみます。QJ71C24Nを空きスロットに挿します。 これはシリアルコミュニケーションと呼ばれるユニットで、シリアル通信用のポートがついています。

このポートと外部機器をケーブルで接続し、使用します。計算機リンクというユニットもありますが、こちらはAシリーズのときの呼び方です。 Aシリーズの計算機リンクの場合は少し使い方が違いますので、後で説明します。

QJ71C24Nを空きスロットに挿したら「PCパラメータ」から「スイッチ設定」を行います。

img1

「PCパラメータ」の「I/O割付設定」タブの「スイッチ設定」のボタンを押します。

ちなみに今回はユニバーサルタイプCPUのパラメータ設定なので「シリアルコミュニケーション設定」というタブがあります。

これはCPUの232Cポートをシリアルコミュニケーションのように使用するための設定なので、変更する必要はありません。

img2

スイッチ設定の画面です。スロット5に設定をしています。スロット6にも同じような形名のものがありますが、これは232Cポートが2個ついているタイプと1個しかないタイプの違いです。

スロット5で行くと、スイッチ1は「05C2」となっています。まず最初の「05」は通信速度で9600bpsとなります。次の「C2」は、

 

動作設定→独立
データビット→8
パリティビット→なし
奇数パリティ(パリティビットなしなのでどちらでもよい)
ストップビット→1
サムチェックコード→なし
RUN中書込み→許可
設定変更→許可

 

に設定しています。これは通信相手の機器に合わせてください。

 

スイッチ2の「0006」は交信プロトコル設定で、無手順で設定しています。スイッチ3と4はもう片方のポート設定となります。

詳しいところはシリアルコミュニケーションユーザーマニュアル(基本編)を参考にしてください。SH(名)-080001で、4章の5(PDFで96ページ)に詳しく記載されています。マニュアルは三菱のMELFANSWEBからダウンロードできます。

設定をシーケンサに書き込んだら(PCパラメータを書き込む)シーケンサを再起動させてください。

 

次はプログラムを書きます。下のように書いてみてください。

img3

説明するとまず「D200」〜にあらかじめ設定を書き込んでおきます。

「D200」〜と言うのは一番下の[G.INPUT U0C D200 D210 M602]の部分で指定しています。 例えば「D200」は受信チャンネルで、K1となっているので1チャンネル目を使用します。

もう一つの232Cポートを使用する場合はK2とします。しかしこのままでは「D200」に値が入っただけなので、さらに下の専用命令を実行するのです。

 

少しややこしくなりますが、RS232Cでデータを受信しても直接はCPUに反映されません。

シリアルコミュニケーションの中にはバッファ領域といって、データを一時的に保存する場所があります。

RS232Cでデータを受信すると、このバッファ領域に一時的に保存されます。このバッファ領域からデータを呼び出す必要があります。それが上の回路図なのです。

 

「X0DE」はバッファにデータが入ってきたらONします。つまりデータを受信したらONするので、「X0DE」を条件にデータを吸い出せばいいのです。

「X0DE」はスロットにさす場所によってアドレスが変わります。

入出力ユニットがスロットによって順番になるように、シリアルコミュニケーションにもI/Oみたいなものがあり、スロットの位置によって変わってきます。

 

このプログラムによって、RS232Cでデータを受信するたびに、「D210」〜に受信データが入ってきます。

ただし注意しないといけないのは、入ってくるデータはASCIIコードです。テキストで“3”を送れば、シーケンサにはH33(Hは16進数)と入ってきます。

これを数値に直したり、処理をしなければいけません。シリアルコミュニケーションでデータを受信するのは簡単ですが、ここからの処理が難しい部分なのです。

 

RS232Cについてもっと簡単に適当に説明すれば、シーケンサからみて相手機器にたいして「データをよこせ!」「設定をかえなさい!」と命令しているのです。

この命令文は各機器により違いますが、一般的に「コマンド」などと呼ばれています。これは説明書に記載されているはずなので、機器により確認をしてください。

 

まずこちらからデータ要求コマンドを機器に送ると、機器側からデータが送られてきます。このデータもASCIIコードで来るので処理が必要です。バーコードリーダーなどは設定により一方的に送信されてきます。

データ送信はG.INPUTをG.OUTPUTに変更すればいいのですが、送信用と受信用のデータレジスタは違うアドレスを指定しておきましょう。 また、どうしても送信ができない場合は、D-SUB9ピンの7番、8番を短絡させます。一番手っ取り早い方法です。

今回使用した命令は、Qシリーズ専用の命令です。専用命令と呼ばれています。共通命令では「TO」「FROM」を使用します。この命令は単純にバッファメモリ内を読み出したり、バッファメモリ内に書き込んだりする命令です。 基本的には専用命令と同じようなイメージです。FXシリーズにも専用命令が存在します。

 

それでは「TO」「FROM」の説明をします。

「TO」「FROM」命令はバッファメモリアクセス命令といいます。先ほど説明したシリアルコミュニケーションユニットなど、バッファメモリを持っているユニットをインテリジェント機能ユニットや特殊ユニットと呼びます。

先ほどは専用命令でバッファメモリからデータを受信しましたが、今度は直接バッファメモリからデータを取り出してみます。基本的にどのインテリジェントユニットにも使用できる命令です。

 

注意しないといけないのが、この命令の場合バッファメモリのアドレスをあらかじめ調べておく必要があることです。これはインテリジェントユニットのマニュアルの仕様の部分に乗っていますので確認して置いてください。

実際に使用して説明します。今回使用する機器は計算機リンクユニットです。Aシリーズの物を使用します。Aシリーズでは専用命令が無いので、このバッファメモリアクセス命令でデータを受信する必要があります。

またAシリーズの計算機リンクユニットにはスイッチ設定という項目はありません。ユニット表面にあるディップスイッチで通信設定を行う形になります。最初にディップスイッチで通信設定をしてください。 モード設定スイッチ(丸いやつ)は無手順であれば「5」に設定しておきます。

 

次にプログラムで通信設定をします。

img4

まずは「TO」という命令が出てきました。

Pがついているのはパルスということです。これは起動時に計算機リンクの準備ができたら一回のみ書き込むということです。

「TO」という命令はバッファメモリに書き込みを行います。「TO」から始まって最初の「H0A」はユニット番号です。

 

これは計算機リンクをシーケンサのベースユニットのどのスロットに装着されているかということです。

ユニット番号といっても、何個目のユニットということではなく、CPU側から数えて16点ユニットごとに1番ずつあげていってください。

その部分に入力ユニットを装着したときの、デバイス先頭番号です。

 

例えばの話ですが、このプログラムでは計算機リンクをスロットの4番目くらいに装着していると想定しています。

この計算機リンクを取り外して変わりに入力ユニットを装着すると、ユニット先頭のデバイスNoは「XA0」となります。

もっと簡単な確認方法はPLCとパソコンを接続して、メニューバーの「オフライン」→「モニタ」→「バッファメモリ一括」を選択します。

 

バッファメモリアドレスは適当な値をいれ、ユニット先頭アドレスに例えば「H0A0」と入れます。

「モニタ開始」で通信できればユニット番号は「H0A」となります。注意しないといけないのが、ユニット先頭アドレスに「H0AO」と入力しましたが、実際のTO、FROM命令で使用するのは「H0A」です。

「H0A0」は違います。後ろの「0」はとってください。ただし連続してインテリジェントユニットを装着している場合はあまり参考にはなりませんが。

 

プログラムの説明に戻ります。最初のTO命令はユニット「H0A」のバッファメモリ「H100」に「H0A0D」を1個書き込みなさい、という命令です。

番号の先頭についている「H」は16進数で指定しています。これは説明用に書いたのですが、バッファメモリ「H100」はターミネータです。これは通信の末尾につく終了コードです。

「H0A0D」は[CR][LF]をASCIIコードで指定しています。デフォルトでターミネータは[CR][LF]なので特にこの命令は必要ではないのですが、一応書いてみました。 ターミネータは通信相手の機器と合わせてください。

 

次はバッファメモリ「H10B」に「1」を書いています。これはCD端子チェックを行わない設定にしています。相手機器が必要ない場合は行わない設定にしておきます。

初期設定が終わったので、データを受信してみます。

img5

外部機器がデータを送信してくると、計算機リンクはデータを受信します。このとき計算機リンクのバッファメモリに保存されるので、これを読み込まなければいけません。

上の回路の「X01A」という接点は、計算機リンクのバッファメモリに受信バッファ(データ)があればONします。

「データがあるので受信してください。」と要求して来ています。そのためこの接点を利用してデータをCPU側に引き込めばいいのです。

 

最初のFMOV命令ですが、これからD250~にデータを受信しますので、一度D200~50個のデータレジスタに“0”を書き込んでいます。受信領域をクリアしているのです。

次はFROM命令です。まずバッファメモリのアドレスH80からデータを受信し「D248」に転送しています。

これはバッファメモリに読み込まれた受信データ数を先に読み込んでいるのです。その受信データ数を「Z」に書き込んでいます。

 

次のFROMで実際のデータを受信しています。バッファメモリのアドレスH81~データ受信数だけデータを受信してD200~に転送しています。

例えばD248のデータ受信数が10だったとします。このときインデックスレジスタの「Z」には10が入っています。

K0Zと指定すればK(0+10)でK10となり、10個のデータ数を受信することになります。つまりこのプログラムでは変動する受信数でも対応可能なのです。

 

最後に計算機リンクに「受信しましたよ」と教えるために、「Y81」をONします。

これで受信バッファもクリアしてくれるので、「XA1」のOFFとなり、回路はリセットされます。

最後についている「M160」は受信完了のパルスです。この接点を利用して受信データを処理したりします。ここは自由に設定して使ってください。

 

次はデータ送信です。計算機リンクから外部機器にデータを送信してみます。

送信コマンドは“M0”を送ります。

img6

最初の「B0」は特に気にしないでください。テストなのでGOT上に適当にスイッチを設定し、デバイスに「B0」を設定しているだけです。

そしてその信号を「M171」にパルスで出力しています。 バッファメモリに書き込む部分は、「送信データ数」「送信文字列」「ターミネータ」となります。

「D250」に送信データ数を書き込み、後は順番に「D252」まで書き込んでいます。

 

そのデータをバッファメモリのH0へ必要な数(ここではD250〜D252の3個)を書き込みます。

そのあと「YB0」で計算機リンクへ送信命令を出します。 計算機リンクは送信完了すると「X0A0」を返してくるので、この接点で「YB0」をリセット(OFF)します。この流れがコマンド送信部分になります。

古い方のPLCでは専用命令が無く、この「TO」「FROM」命令でインテリジェントユニットと通信を行います。逆にQシリーズのように専用命令が存在する機器でも、「TO」「FROM」命令は使用できます。

出典:『基礎からはじめる シーケンス制御講座』

参考書

これだけ!シーケンス制御 (これだけ!シリーズ)
武永 行正
秀和システム
売り上げランキング: 70,884
図解入門よくわかる最新シーケンス制御と回路図の基本 (How‐nual Visual Guide Book)
武永 行正
秀和システム
売り上げランキング: 31,176

1977年、広島県福山市生まれ。武永制御 代表。「基礎からはじめるシーケンス制御講座」管理人。◎福山職業能力開発短期大学校(制御科)を卒業。某電機会社にて設備エンジニアを務めた後、武永制御を創業。◎著作に『図解入門よくわかる最新シーケンス制御と回路図の基本』(2013年 秀和システム)、『これだけ!シーケンス制御』(2014年 秀和システム これだけ!シリーズ)がある。◎基礎からはじめるシーケンス講座 http://plckouza.com/index.html