首页 文章

串行通信在minicom中工作,但在python中不工作

提问于
浏览
1

我试图与我的智能电表进行通信,部分工作 . 基本上,我通过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 回答

  • 0

    我遇到了同样的问题,事实证明我的发送设备一次不发送一条线路,它正在传输单个字符 .

    使用:

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

    允许数据开始涌入 .

  • 1

    类似的问题,我可以阅读智能电表,但50%的时间它不起作用 . 从20行开始,它只读取前15行.15到20被忽略 .

    这是我的解决方案使用cu并捕获输出

    #!/usr/bin/python
    
    # test voor cu -l /dev/ttyUSB0 -s 9600 --parity=none
    
    import time
    import os
    import signal
    import sys
    import subprocess
    from subprocess import Popen, PIPE
    
    line = ''
    teller = 0
    stack = []
    #Use a process group so as to enable sending a signal to all the process in the groups.
    process = subprocess.Popen('cu -l /dev/ttyUSB0 -s 9600 --parity=none', shell=True, stdout=PIPE, bufsize=1, preexec_fn=os.setsid)
    
    while teller < 20:
        line = process.stdout.readline()
        stack.append(line)
        print str(teller) + ' ' + line
        teller = teller + 1
    
    #time.sleep(15)
    
    os.killpg(process.pid, signal.SIGTERM)
    

相关问题