2016-11-15 163 views
1

我想通過使用Python文件與我的模塊進行通信。我創建了一個換行點,以確保在寫入模塊時我會有中斷。如何從端口通信讀取?

但是,我沒有從港口通信中讀取任何結果。我需要顯示在我的CMD.EXE的所有數據,並已經通過我的Python文件

import serial 
ser = serial.Serial(
    port='COM4',\ 
    baudrate= 230400,\ 
    parity=serial.PARITY_NONE,\ 
    stopbits=serial.STOPBITS_ONE,\ 
    bytesize=serial.EIGHTBITS,\ 
     timeout=0) # open serial port 
print(ser.name)   # check which port was really used 
ser.write(b'hello')  # write a string 
str=ser.readline() 
print str 
ser.close()    # close ports 

這意味着diplayed上COM4,這些兩行:

str=ser.readline() 
print str 

不給我任何結果。

+0

你想從哪個設備讀取?它是一個Windows操作系統(我猜是這樣)?如果使用ser.readline()方法,它將一直等到分隔線('\ n')被引入。使用更好的ser.read()方法。而且,你不需要在* ser *賦值指令中使用反斜槓(\)。 – Jalo

+2

['''str'''](https://docs.python.org/3/library/stdtypes.html#str)是一個Python數據類型/類別 - 如果將其他名稱分配給該名稱,可能會在以後導致您誤入歧途你嘗試使用'''str''',它不再是一個數據類型/類,而只是一個變量名。 – wwii

+0

親愛的Jalo,\t 我需要顯示已經在我的cmd.exe中使用我的python文件在COM4上顯示的所有數據。我使用Windows,我的UART包含在FPGA器件中。 – user7161303

回答

1

最可能發生的事情是,ser.readline()正在等待串行端口接收到一個換行符(\n),但沒有得到它,因此掛起。如果您的串行端口設置爲呼應你送它什麼,你可能需要包括與數據換行字符發送它,即

ser.write(b'Hello\n') 

,或者,如果您的串行設備期待的Windows風格的換行符:

ser.write(b'Hello\r\n') 

如果你stilll沒有得到任何迴應,您可以ser.write後聲明,以便爲它合作,以顯示每一個字節嘗試調試與

while True: 
    print(ser.read(1).decode()) 

mes back 注意:只有使用上述進行調試時,它會掛起,直到設備在腳本外部關閉。

如果您什麼都看不到,那麼可能會有更基礎的事情發生,比如串口設置。我注意到你的波特率不是standard baud rate,你確定這是正確的嗎?

備註:在您的serial.Serial聲明中的每個參數後沒有必要使用反斜槓,文本在圓括號內的事實使得代碼有效。另外,你爲大多數參數提供了默認參數,所以根本不需要包含它們。

另一邊:與我的工作/上read S擋O設備可能會非常棘手,它可能是有用的建立是推動接收到一個queue.Queue的物體,像什麼描述here數據的讀線程。或者,如果你感覺很冒險,請嘗試使用asyncio模塊。

+0

我需要在我的cmd.exe中使用我的python文件顯示已經在COM4上顯示的所有數據 – user7161303

+0

親愛的@Bill,我試試你要求我做的事情,但是,我不會不理解這個注意:注意:只有使用上述進行調試時,它會掛起,直到設備在腳本之外關閉。 – user7161303

+0

進口串行 SER = serial.Serial( 端口= 'COM4',\ 波特率= 230400)#打開串口 打印(ser.name)#查看哪些端口是真正用來 ser.write(b'hello」 )#寫一個字符串 #海峽= ser.readline() 而真: 打印(ser.read(1).decode()) ser.close()#關閉端口 – user7161303