仕様に定義されているシリアルポートと通信しようとしています。バイト配列フレームを構築してチェックサムを計算する方法
ser = serial.Serial("/dev/ttyUSB0", baudrate="115200")
frame = bytearray([
0x00, 0x00, #frame control (2 bytes)
0x00, 0x00, #machine id (2 bytes)
0x07, # number of bytes in data field
0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, #data field itself
0x00, 0x0A #checksum
])
ser.write(frame)
ser.close()
コードはエラーなく実行され、別のスクリプト/プロセスで同じポートを監視しています。デバイスは、成功したフレームを受信するとフレームを返すと想定されます。
この例では、私は手動でのように定義されるチェックサム計算した:...データをFSN.msbからreangingフレーム全体にわたって計算
二バイトチェックサム、まずMSBを、[DSIZE] 。チェックサムは、バイトの単純な16ビット符号なし加算で計算されます。
この場合、チェックサムを除いて、フレーム内のすべてを加算すると、合計なしで。それを加えれば、合計は20です。
このデバイスは故障している可能性がありますので、これは作業するのが難しい環境ですが、これまで誰かが私のアプローチを吟味することができたらうれしいですね。
文字通り単純なチェックサムを生成していますか、それとも別のものが必要ですか?
質問とは正確には何ですか?チェックサムの役割は、実際のデータが変更されていないことを合理的に保証することです。したがって、信頼できない場合でも、すべてのバイトを単純に追加すると、その役割を果たすことができます。通常、チェックサムはペイロードのハッシュであり、より信頼性が高くなりますが、より多くの計算が必要になります。 – Guillaume