0

Velleman k8090 リレー ボードを使用して、データを読み取ろうとしています。ボードに書き込むことはできますが、読み取ったデータを出力するたびに、ひし形や逆さまのクエスチョン マークなどの奇妙な文字が表示されます。ここに私のコードの一部があります:

import serial
COM_PORT = 'COM4'
class Velleman8090:
    def __init__(self, port=COM_PORT):
        self.port = port
        self.baud_rate = 19200
        self.data_bits = 8
        self.parity = 'N'
        self.stop_bits = 1
        self.flow_control = 'N'

    def open_device(self):
        self.talk = serial.Serial(self.port, self.baud_rate, self.data_bits, self.parity, self.stop_bits)

    def firmware_version(self):
        data = packet(0x71, 0x00, 0x00, 0x00)
        self.talk.write(data)
        print self.talk.read()

    def close_device(self):
        self.talk.close()

def chksum(cmd,msk,p1,p2):
    return (((~(0x04 + cmd + msk + p1 + p2)) + 0x01) & 0xff)

def packet(cmd,msk,p1,p2):
    return str(bytearray([0x04, cmd, msk, p1, p2, chksum(cmd, msk, p1, p2), 0x0f]))

def main():
    vm8090 = Velleman8090()
    vm8090.open_device()        
    vm8090.firmware_version()
    vm8090.close_device()

奇妙な文字が表示されるのはなぜですか? ドキュメントには、年と週を返す必要があると記載されています。

編集: いくつかの検索とトラブルシューティングの後、ハードウェアではなく、Python コードまたはデータ型に関係があると確信しています。 このフォーラムには、ボードから読み取る C の例が含まれています。その例をボードから適切に読み取ることができたので、ハードウェア自体ではなく、Python コードに関係があると確信しています。

4

1 に答える 1

0

多くの努力の後、私はついに問題を見つけました。これは Python エンコーディングの問題でした。出力データは、実際に取得していた奇妙な文字にエンコードされていました。私が期待していた出力を得るために必要だったのは、たった 1 行のコードだけでした。

 output = self.talk.read(7)
 output = output.encode('hex')  #converts the strange characters to hex
 print output

うまくいけば、これは将来的に他の人に役立つでしょう。

于 2013-07-26T15:37:11.067 に答える