12-19-2005 12:47 AM
12-19-2005 03:40 AM
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が付いてくるかも知れませんが、面倒なら無視しても良いかと思います。
12-19-2005 04:15 AM
白石様
いつもお世話になります。
早速のレスありがとうございます。
いろいろ考えていましたが、白石さんのような発想は、全くありませんでした。
まだまだ、自分自身の経験不足を痛感するしだいです。
頂いた、アイデアで早速試してみたいと思います。
また何かあるようでしたら、ご指導いただければありがたいです。