我正在尝试与我的智能电表通信,该电表部分有效。 基本上,我通过 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)
允许数据开始涌入。
