NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

シリアル通信でBCCコードの計算をしたい

現在、恒温槽の制御をシリアル通信でしようとしていますが、
ひとつ問題が、あります。
それは、通信パケットのSTXの次からETXまでの値をXORした値を
BCCに付けないといけないことが分かりました。
 
そこで、皆様の中でシリアル通信でBCCコードをLabviewを使って生成した方が
居られましたら、お教えいただければと思います。
 
0 件の賞賛
メッセージ1/3
65,560件の閲覧回数

BCC(Block Checking Code?)ですが、既にその機器でのBCCの計算方法をご存知のようなので(STXの次からETXまでの間にある各バイト値を次々とXORして求める)、それをまさに計算して最後のバイトに付加すればよいのではないかと思われますが、如何でしょうか。

なお、BCCは、1つに定まった方式は無いようで、相手の機器によってどう定めているか違うようなので、あくまで参考としての一例ですが(試してないので良いかどうか分かりませんが)、この例では、本体データをSTXとETXで挟み、STXを含まないデータ+ETXの各バイトのBCCを作り、それをETXの後ろに付加するものとし、データビットは7ビットであると想定した場合です。BCCを作るには、文字列を一旦数値(U8)の配列にし、ビット計算し、最後に文字列に戻します。BCCを作る時にETXを含むかどうかとか、BCCがETXの直後かどうかとか、シリアル通信のデータビットが何ビットかによって、多少変わります。データビットが8ビットなら「7FHとのAND」は不要です。(もっとも、データビットが7ビットなら本体データにも8ビット目は無いので、7FHとのANDはそもそも不必要か・・・)

機器によっては、BCCを計算するのに単にXORするだけでなく、ビットローテートしながらXORを取る方式もあるようですね・・・

ちなみに、機器から返ってくる文字列にもBCCが付いてくるかも知れませんが、面倒なら無視しても良いかと思います。

メッセージ2/3
65,552件の閲覧回数

白石様

いつもお世話になります。

早速のレスありがとうございます。

いろいろ考えていましたが、白石さんのような発想は、全くありませんでした。

まだまだ、自分自身の経験不足を痛感するしだいです。

頂いた、アイデアで早速試してみたいと思います。

また何かあるようでしたら、ご指導いただければありがたいです。

 

0 件の賞賛
メッセージ3/3
65,546件の閲覧回数