2013-07-25 1 views
0

У меня есть релейная плата Velleman k8090, с которой я пытаюсь прочитать некоторые данные. Я могу хорошо писать на доске, но всякий раз, когда я выводю прочитанные данные, я получаю странные символы, такие как алмаз или перевернутый вопросительный знак. Вот часть моего кода:Python: чтение данных через последовательный порт от 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() 

Почему я получаю эти странные символы? В документации указывается, что он должен вернуть год и неделю.

EDIT: После некоторого поиска и устранения неполадок, я уверен, что он имеет какое-то отношение к коду или типам Python, а не к аппаратным средствам. This forum содержит пример в C, который читается с доски. Я получил этот пример, чтобы правильно читать с доски, поэтому я уверен, что он имеет какое-то отношение к коду Python, а не к самому аппарату.

+0

Это обычно, когда вы не имеете все значения последовательной конфигурации справа (особенно скорость передачи). Дважды проверьте документы для вашей последовательной платы. – tdelaney

+0

Я проверил несколько раз, и значения верны, но все тот же вывод. – Josh

ответ

0

После долгих усилий я, наконец, нашел проблему. Это проблема с кодировкой Python. Выходные данные на самом деле были закодированы для странных символов, которые я получал. Только необходима одна строка кода, чтобы получить выход я ожидал:

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

Надеюсь, это поможет некоторым другим в будущем.

Смежные вопросы