Python和连续剧。如何发送消息和接收ans

2024-05-01 21:57:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须通过与python的串行通信发送ZANE:1:00004:XX_X.X_XXXX_000XX:\r\n

这是我的代码:

import serial
ser = serial.Serial('/dev/cu.usbserial-A901HOQC')
ser.baudrate = 57600

msg = 'ZANE:1:00004:XX_X.X_XXXX_000XX:\r\n'

如果我写:

>>> ser.write(msg)

答案是33,这是我发送的消息的字节长度。

我怎样才能得到答案?连接的设备将在他收到消息后立即应答,但如果我键入

>>> ser.write(msg); ser.readline()

结果将是readline永远不会得到任何消息。。。

有什么想法吗?


Tags: 答案代码devimport消息readlineserialmsg
3条回答

要进行读取,需要先打开侦听端口(超时),例如:

ser = serial.Serial('/dev/cu.usbserial-A901HOQC', 19200, timeout=5)
x = ser.read()          # read one byte
s = ser.read(10)        # read up to ten bytes (timeout)
line = ser.readline()   # read a '\n' terminated line
ser.close()

查看更多详细信息here

我相信前面的答案不明白你在用同一个端口来写和读。

我也有同样的问题,用睡眠功能解决了。基本上:

import serial
from time import sleep
ser = serial.Serial('/dev/cu.usbserial-A901HOQC', timeout=1)
ser.baudrate = 57600

msg = 'ZANE:1:00004:XX_X.X_XXXX_000XX:\r\n'
ser.write(msg)
sleep(0.5)
ser.readline()

所以睡觉的时候你给了接收器时间(一台机器?)发送回复。还要注意,如果要使用readline,必须添加超时。

您的设备可能没有用换行符终止其响应。 .readline()方法需要以换行符结尾的字符串。 请看这里:http://pyserial.sourceforge.net/shortintro.html#readline 更多信息。

尝试设置串行连接超时

ser.timeout = 10

并将ser.readline()替换为ser.read(n),其中n是要读取的字符数。 序列读取(100) 将尝试读取100个字符。如果100个字符在10秒内没有到达,它将放弃并返回它收到的任何内容。

相关问题 更多 >