Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 Python串口无法写入_Python 2.7_Serial Port - Fatal编程技术网

Python 2.7 Python串口无法写入

Python 2.7 Python串口无法写入,python-2.7,serial-port,Python 2.7,Serial Port,我正在使用Python2.7和Serialv2.6来监听串行端口。我可以很好地收听端口,但我不能向端口写入数据 import serial cp = 5 br = 9600 ser = serial.Serial(5,br) a = ser.readline() 使用它,我可以监听输出的数据流。但是,如果我想更改仪器的状态(例如,将GPS设置为off),我会编写一个命令: ser.write('gps=off') 当我这样做时,返回“6L”并且gps保持开启。但是,如果我通过TeraTe

我正在使用Python2.7和Serialv2.6来监听串行端口。我可以很好地收听端口,但我不能向端口写入数据

import serial
cp = 5
br = 9600

ser = serial.Serial(5,br)

a = ser.readline()
使用它,我可以监听输出的数据流。但是,如果我想更改仪器的状态(例如,将GPS设置为off),我会编写一个命令:

ser.write('gps=off')
当我这样做时,返回“6L”并且gps保持开启。但是,如果我通过TeraTerm连接,我可以实时看到数据流。当数据流输入时,我可以键入gps=off,然后返回,然后突然我的gps关闭。为什么我在Python中的命令不像TeraTerm那样工作

更新

如果我改为 a=ser.write('gps=on')

“a”的赋值为6。我还尝试通过发送“垃圾”命令

a = ser.write('lkjdflksdjflksdjf')

“a”的值为17,因此它似乎将字符串的长度指定给a,这没有意义

我认为问题在于ser.write命令被卡在缓冲区中(我不确定这一点,但这是我的怀疑)。当我检查输入缓冲区时,我发现它已满。冲洗完之后,我能在仪器上写字了

import serial

ser = serial.Serial(5, 9600)

# the buffer immediately receives data, so ensure it is empty before writing command
while ser.inWaiting()>0:
    ser.read(1)

# now issue command
ser.write('gps=off\r')

这是可行的。

显而易见的做法是在输出字符串中附加一个行终止符。您是说ser.write('gps.off\r\n')?我试过了,但它只改变了返回值(“14L”我想…虽然我不确定)。我不懂Python,那么“无法写入”是否意味着系统调用返回错误(传统意义),或者设备没有响应您的期望(您似乎正在使用它)?如果是后者,那么这个“仪器”是什么?我所说的“无法写入”是指仪器(气象探空仪)没有改变状态。令人困惑的是,在状态完全改变的情况下,发出命令(gps=of/off)。在Python中,我从未处理过通过串行发送命令的问题,所以我认为我做错了什么,不过在阅读教程之后,我没有发现任何错误。