【问题标题】:Python: Writing to and Reading from serial portPython:从串口写入和读取
【发布时间】:2013-10-02 17:44:29
【问题描述】:

我已阅读文档,但似乎无法找到直接的答案。 我有一个连接到计算机的调制解调器正在使用的所有 COM 端口的列表。从这个列表中,我尝试打开它,向它发送一个命令,如果它回复了任何内容,则将其添加到另一个列表中。我不完全确定我是否正确使用了 pyserial 的读写功能。

i=0
for modem in PortList:
    for port in modem:
        try:
            ser = serial.Serial(port, 9600, timeout=1)
            ser.close()
            ser.open()
            ser.write("ati")
            time.sleep(3)
            print ser.read(64)
            if ser.read(64) is not '':
                print port
        except serial.SerialException:
            continue
        i+=1

我没有从 ser.read() 中得到任何东西。我总是得到空白字符串。

【问题讨论】:

  • 你试过运行它吗?您收到错误消息吗?出乎意料的输出?还是……?
  • 到底是什么问题?
  • 对不起,我忘记写了。我总是从 ser.read() 中得到空白字符串。我让它打印出来看看它返回了什么。
  • 为什么初始化后立即关闭ser?这似乎很麻烦。
  • 我想到了几个其他问题:ser.read(64) 应该是 ser.read(size=64),你应该将它分配给一个变量(read_val = ser.read(size=64),然后是 print read_val,然后是 if 语句)因为现在,您正在执行两个单独的读取。

标签: python serial-port pyserial


【解决方案1】:

一段与python合作读取rs232的代码 以防万一其他人需要它

ser = serial.Serial('/dev/tty.usbserial', 9600, timeout=0.5)
ser.write('*99C\r\n')
time.sleep(0.1)
ser.close()

【讨论】:

    【解决方案2】:

    ser.read(64) 应该是ser.read(size=64); ser.read 使用关键字参数,而不是位置参数。

    另外,您正在从端口读取两次;你可能想要做的是:

    i=0
    for modem in PortList:
        for port in modem:
            try:
                ser = serial.Serial(port, 9600, timeout=1)
                ser.close()
                ser.open()
                ser.write("ati")
                time.sleep(3)
                read_val = ser.read(size=64)
                print read_val
                if read_val is not '':
                    print port
            except serial.SerialException:
                continue
            i+=1
    

    【讨论】:

      猜你喜欢
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      • 2017-04-22
      • 1970-01-01
      相关资源
      最近更新 更多