2016-11-15 141 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