pySerial:端口只工作第一个命令

Posted

技术标签:

【中文标题】pySerial:端口只工作第一个命令【英文标题】:pySerial: port only work the first command 【发布时间】:2015-06-08 07:54:56 【问题描述】:

我在使用 pySerial 时遇到了问题。端口只能写入和读取数据一次。当我键入相同的命令时,端口不起作用并且什么也不返回。它仅适用于第一个命令。 wxTerminal 也只适用于第一个命令。为什么端口不能连续指挥?

编辑:我正在运行 Win7 64 位、Python 2.7.9 和 pySerial 2.7

代码在这里:

import time
import serial
import wx

def init_serial():         
    global ser          
    ser = serial.Serial()
    ser.baudrate = 115200
    ser.port = 3   
    ser.bytesize = 8
    ser.parity = 'N'
    ser.timeout = None
    ser.xonxoff = False
    ser.rtscts=False
    ser.dsrdtr=False
    ser.timeout = 1
    ser.open()          

    if ser.isOpen():
        print 'Open: ' + ser.portstr     

init_serial()
while True:
    cmd = raw_input('Type what you want to send:\r\n')
    ser.write(cmd.encode('ascii')+'\r\n')
    if cmd =='q':
        ser.close()
        print ser.portstr +' is closed'
        exit()
    else:
        bytes = ser.readline() 
        print ('Return: ' + bytes)     

结果在这里:

Open: COM4
Type what you want to send, hit enter:
RR 500                **command and work**
Return: CCW_OK        
Type what you want to send, hit enter:
RR 500                **command again, but it doesn't work**
Return:               **return nothing**
Type what you want to send, hit enter:

感谢您的帮助!

【问题讨论】:

只是一个想法:尝试仅使用\r 或仅使用\n 终止您的命令。那里使用的是本地回声还是远程回声?您的命令“RR 500”是在您键入时在本地显示,还是远程回显然后显示? 【参考方案1】:

我自己解决了这个问题。 需要在循环命令前添加ser.close()、ser.open()和time.sleep(2)。

init_serial()
while True:
    ser.close()
    ser.open()
    time.sleep(2)  #at least wait for 2s 
    cmd = raw_input('Type what you want to send:\r\n')
    ser.write(cmd.encode('ascii')+'\r\n')
    if cmd =='q':
        ser.close()
        print ser.portstr +' is closed'
        exit()
    else:
        bytes = ser.readline() 
        print ('Return: ' + bytes) 

【讨论】:

以上是关于pySerial:端口只工作第一个命令的主要内容,如果未能解决你的问题,请参考以下文章

无法多次写入同一端口(pyserial)

pySerial 运行命令列出端口

pySerial list_port准确性

PySerial 丢失数据

我应该为使用 Pyserial 通过串口传输的数据实现校验和过程吗?

如何使用 PySerial 从 COM 端口读写?