我正在尝试与我的智能电表进行通信,但只能部分成功。 基本上,我通过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也无法获取数据。
有人有任何想法吗?
^MAT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0^M 与此有关。很久以前我玩过调制解调器,所以很抱歉不能提供更多帮助。 - adrianmcmenamin