我试图与我的智能电表进行通信,部分工作 . 基本上,我通过FT232 USB串行电缆从仪表获取串行数据 . 智能电表有一个数据 Logger 端口,每隔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脚本将获得所需的数据 . 我也尝试将Initialization字符串更改为'',但是如果我没有设置它,minicom也不会获取数据
有谁有想法吗 ?
2 回答
我遇到了同样的问题,事实证明我的发送设备一次不发送一条线路,它正在传输单个字符 .
使用:
允许数据开始涌入 .
类似的问题,我可以阅读智能电表,但50%的时间它不起作用 . 从20行开始,它只读取前15行.15到20被忽略 .
这是我的解决方案使用cu并捕获输出