0

我有一个函数可以向连接在串行端口上的设备发送命令,然后保存到 ini 文件中。但是,我发现它并没有返回所有的行。下面是代码:

    def get_config():
        config.read("config/map.ini")
        ser = serial.Serial(3)
        ser.write(bytes("D" + '\r\n', encoding='ascii'))
        time.sleep(1)
        while ser.inWaiting() > 0:
            r = ser.readline()
            r = r.decode('UTF-8').replace('\r\n', '')
            r = r.split()
            print("map", r[0], r[1].replace('V', ''))

        f = open("config/map.ini", "w")
        config.write(f)
        ser.close()

这是返回的内容:

    001 = 013
    002 = 015
    003 = 028
    004 = 027
    005 = 015
    ... (save space)
    070 = 013

当使用 Putty 发送“D”命令时,我得到了上面的列表,但实际上,该列表应该一直到 '112 = ###'。有什么我遗漏的东西使输出中途停止吗?

4

1 回答 1

0

您只会获得在睡眠期间到达的数据,并且一旦您赶上阅读内容的时间,inWaiting即使途中有更多字符,您也将返回 0 - 您要么需要继续尝试阅读直到一段时间限制或直到消息字符结束 - 可能两者兼而有之。尝试:

def get_config():
    config.read("config/map.ini")
    ser = serial.Serial(3)
    ser.write(bytes("D" + '\r\n', encoding='ascii'))
    time.sleep(1)
    while ser.inWaiting() > 0:
        r = ser.readline()
        r = r.decode('UTF-8').replace('\r\n', '')
        r = r.split()
        config.set("map", r[0], r[1].replace('V', ''))
        time.sleep(0.01)

    f = open("config/map.ini", "w")
    config.write(f)
    ser.close()

这并不理想,但应该确认这是问题所在。

于 2013-08-05T20:58:26.570 回答