【问题标题】:How to read from a port communication?如何从端口通信中读取?
【发布时间】:2016-11-15 16:06:04
【问题描述】:

我正在尝试使用 Python 文件与我的模块进行通信。我创建了换行点以确保在模块中写入时会中断。

但是,我没有任何从端口通信读取的结果。我需要在我的 cmd.exe 中显示所有数据,并且这些数据已经使用我的 python 文件显示在 COM4 上

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

这意味着这两行:

str=ser.readline() 
print str

不要给我任何结果。

【问题讨论】:

  • 您要从哪个设备读取数据?它是 Windows 操作系统吗(我猜是这样)?如果您使用 ser.readline() 方法,它将等到引入断线 ('\n')。更好地使用 ser.read() 方法。此外,您不需要在 ser 分配指令上使用反斜杠 ()。
  • str 是一个 Python 数据类型/类 - 如果您尝试使用 str 并且它不再是一个数据类型/类而只是一个变量,那么为该名称分配其他内容可能会导致您误入歧途名字。
  • 亲爱的 Jalo,我需要使用我的 python 文件在我的 cmd.exe 中显示所有已显示在 COM4 上的数据。我使用 Windows,我的 UART 包含在 FPGA 设备中。
  • 您的意思是,您的 CMD 窗口中已经有数据,并且您想运行 Python 脚本来读取它?我不确定这是否可能,至少不是您想要的方式。
  • 我的意思是我的 COM4 中有数据,我想在我的 cmd 中显示它。

标签: python uart


【解决方案1】:

最有可能发生的是ser.readline() 正在等待串行端口上接收到的换行符 (\n),但没有得到它所以它挂起。如果您的串行端口设置为回显您发送的内容,您可能需要在发送的数据中包含换行符,即

ser.write(b'Hello\n')

或者,如果您的串行设备需要 Windows 样式的换行符:

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

如果您仍然没有得到任何响应,您可以在 ser.write 语句之后尝试调试

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

为了在返回时显示每个字节注意:仅使用上述进行调试,它会一直挂起,直到设备在您的脚本之外关闭。

如果您什么也没看到,那么可能有一些更基本的东西正在发生,比如串行端口设置。我注意到你的波特率不是standard baud rate,你确定这是对的吗?

旁注:serial.Serial 声明中的每个参数后不需要反斜杠,文本位于括号内的事实使代码有效。此外,您为大多数参数提供了默认参数,因此根本不需要包含它们。

另外一点:使用阻塞reads 的 I/O 设备可能会很棘手,设置一个读取器线程将接收到的数据推送到queue.Queue 对象中可能很有用,就像描述的here 一样。或者,如果您喜欢冒险,请尝试使用 asyncio 模块。

【讨论】:

  • 我需要使用我的 python 文件在我的 cmd.exe 中显示所有已经显示在 COM4 上的数据
  • 亲爱的@Bill,我试试你让我做什么,但是,我不明白这个注释:注意:仅使用上述调试,它会挂起,直到设备在您的外部关闭脚本。
  • import serial ser = serial.Serial( port='COM4',\ baudrate= 230400) # 打开串口 print(ser.name) # 查看真正使用的端口 ser.write(b' hello') # 写一个字符串 #str=ser.readline() while True: print(ser.read(1).decode()) ser.close() # 关闭端口
  • 你试过ser.write(b'hello\n')吗?
  • stackoverflow.com/questions/19908167/…我看到了这个链接,我的情况也是这样,虽然我尝试使用tera term而不是putty
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多