この記事では「パリティチェック」について、その具体例と実際にラダーでどのように起こせばいいのか・・・など、わかりやすく解説します。
目次
パリティチェックとは
データ内のビット「1」の個数が偶数か奇数なのかを別のビットで表示させます。
そして、データ通信などを介した時に転送先でそのデータに誤りが無いかをそのビットで確認します。その確認する手法のことをパリティチェックと言います。また、このビットのことをパリティビットと言います。
パリティチェックには2種類の方式があります。
・偶数パリティ
・奇数パリティ
それぞれどういった物なのか、説明します。
偶数パリティとは
文字列内のビット「1」の個数を数えます。その「1」の数の合計が偶数個なら、パリティビットと呼ばれる偶数・奇数情報を示すビットを「0」とする事です。
奇数パリティとは
「1」の数の合計が奇数個なら、パリティビットをビットを「0」とする事です。
それでは、なぜこういった物があるのでしょうか?偶数パリティを例に解説していきます。
データの誤りを簡単に検出できます
例として、PLCと印字機をRS-232Cで接続します。今回はシリアル通信で文字列を送信するとします。この印字機では偶数パリティを付加することで、チェックしてくれる機能がついています。
PLC側で印字したい文字をASCIIにて文字を生成して、そのデータを印字機に転送することで、印字機でその文字を印字することが出来ます。
その文字列にパリティビットを付加して、偶数パリティを書き込みます。
上記の例では「1」であるビット数が6つなので、パリティビットは「0」となります。
しかし転送中にノイズが乗ってしまい、印字機側にはPLCで生成したデータと異なったデータが転送されてしまいました。
印字機はPLCからのデータを受け取って、パリティビットをチェックします。
ノイズが乗ってしまっているので、「1」であるビット数が7つとなってしまい、パリティビットは本来「1」となります。しかし送信されてきたパリティビットが0なので、ここで印字機は情報がおかしいと判断し、PLC側に「情報がおかしいよー」と教えてあげることで、データに誤りがあることを伝える事が出来ます。
このようにして簡単にデータの誤りをチェックすることが出来ます。
しかしデメリットもあります
奇数と偶数しかチェックすることが出来ませんので、ノイズで2ビット変化してしまった場合は検出不可能となります。
欠点と言うよりは、もうここまで来ると確率の問題になります。強ノイズ系の近くにケーブルを這わしたりしない限り基本的には問題ありませんが、文字列がおかしい場合はラインモニタを使って転送中の文字列を確認しましょう。
パリティチェックの使用例
先ほどは通信の例でお話ししましたが、ワークの番号をセンサのON/OFFで見る場合にもパリティチェックが使われます。
偶数パリティにてホールの部分が「OFF(0)」、ホールの無い部分が「ON(1)」とする場合、絵の場合左から「01100」となります。Pはパリティチェック用です。
この時「0110」の末尾にあるパリティビットが「0」という意味としますので、「1」が2つあって偶数個でパリティが「0」ですから正解となります。
ここで問題になるのが、センサの誤検出です。ここではパリティビットを使ってセンサの誤検出をチェックします。パリティチェックにはこのような用途としても使うことができ、簡単に確認する手法として広がっているので様々なメーカーさんでこれを使っているのをよく見ます。
ラダーの作成方法
偶数パリティと奇数パリティについて解説しましたが、どの方向にパリティを設けるかでさらに2通りの決め方があります。今回は三菱電機IQ-Rシリーズを使った場合の例として紹介します。
その2通りとは次の通りです。
・垂直パリティ
・水平パリティ
後ほど解説しますが、どちらの方式かで使用する命令が違います。それでは、それぞれどういった物であるかを解説します。
まずはGX-Works3を使って文字列を書いていきます。
D0にASCIIにて文字列”AB”を、D1に文字列”CD”を書きます。今回は$MOV命令を使用しています。
それぞれ8bit単位で、このように書き込まれます。
垂直パリティについて
レジスタをワード単位で左から右へビットの個数を数えたパリティビットを垂直パリティと言います。
「えっ!?水平やん!」と思うかもしれませんが、これが垂直パリティです!偶数パリティでビットを立てた場合は上の絵のようになります。
実際に垂直パリティを求める場合、最初にSUM命令を使用します。
D0とD1の垂直パリティを取りたい場合は、このようにラダーを書いていきます。
このラダーを走らせた際のデバイス一括モニタはこのようになります。
このようにビットの個数が求められます。あとは必要に応じて奇数パリティ・偶数パリティの場合でビットをON/OFFするように作ればOKです。
水平パリティについて
その逆で、図のように上から下へビットの個数を数えたパリティビットを水平パリティと言います。
制御機器の仕様によりどちらを使用するか分かれると思いますが、それぞれに対応した命令が三菱電機では用意されています。(もちろん他のPLCメーカでも用意されています!!)
水平パリティを求める場合はCCD命令(チェックコード命令)を使います。
D0とD1の水平パリティを取りたい場合は、このようにラダーを書きます。
このラダーを走らせた際のデバイス一括モニタはこのようになります。
D5にはD0とD1をそれぞれ8ビットずつ分けたときの和が格納されています。水平パリティはD6に格納されています。
先ほどの水平パリティの例がこちらです。
D6がこの通りになっているのが分かります。水平パリティについてはこのCCD命令を使って求めます。
文字列が増えても簡単に使えるので、オススメです!
まとめ
今回の記事を要約するとこんな感じです。
ポイント要約
①偶数パリティと奇数パリティがある
②データの誤りを簡単に検出できるが、2ビット変わるとわからなくなってしまうデメリットがある
③シリアル通信やセンサを使った識別番号を検出する際に使用されている
④通信する制御機器によって垂直パリティを使用するか水平パリティを使用するかが決まる
-
【中級編】チェックサムとは?具体例とシーケンス制御においての使い方について解説します
この記事では「チェックサム」について、その具体例と実際にラダーでどのように起こせばいいのか・・・など、わかりやすく解説します。 チェックサムとは チェックサムとはデータ通信などを介した時 ...
続きを見る