Skip to main content
 首页 » 编程设计

python之串行通信在 minicom 中有效,但在 python 中无效

2025年05月04日8xxx_UU

我正在尝试与我的智能电表通信,该电表部分有效。 基本上,我通过 FT232 USB 串行电缆从仪表获取串行数据。 智能电表有一个数据记录器端口,每 10 秒发送一次电报消息(9600 波特、7 个数据位、偶校验、1 个停止位)。我用minicom的配置文件是

pu port             /dev/ttyUSB0 
pu baudrate         9600 
pu bits             7 
pu parity           E 
pu stopbits         1 
pu minit            ~^M~AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0^M 

这有效,我能够成功接收我的数据。但我的目标是在 python 中接收数据,所以我尝试了以下脚本

import serial 
 
ser = serial.Serial() 
ser.baudrate = 9600 
ser.bytesize=serial.SEVENBITS 
ser.parity=serial.PARITY_EVEN 
ser.stopbits=serial.STOPBITS_ONE 
ser.xonxoff=0 
ser.rtscts=0 
ser.timeout=20 
ser.port="/dev/ttyUSB0" 
 
ser.close() 
ser.open() 
print ("Waiting for P1 output on "  + ser.portstr) 
 
counter=0 
#read 20 lines     
while counter < 20: 
    print ser.readline() 
    counter=counter+1 
 
try: 
    ser.close() 
    print ("Closed serial port.") 
except: 
    sys.exit ("Couldn't close serial port.") 

这似乎不起作用,它只是在 20 秒后超时。我也尝试过“cu”:

cu -l /dev/ttyUSB0 -s 9600 -oe

我发现当运行python脚本时,再运行minicom脚本,python脚本会得到需要的数据。我也曾尝试将初始化字符串更改为 ' ',但如果我根本不设置它,minicom 也不会获取数据

有人知道吗?

请您参考如下方法:

我遇到了同样的问题,原来我的传输设备不是一次传输一条线,而是传输单个字符。

使用:

bytesToRead = ser.inWaiting() 
ser.read(bytesToRead) 

允许数据开始涌入。