2013-07-25 91 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() 

爲什麼我得到這些奇怪的字符?該文件指出它應該返回年份和周。

編輯:經過一些搜索和故障排除後,我現在很確定它與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 

希望這能幫助未來的其他人。