代码之家  ›  专栏  ›  技术社区  ›  Enrico Carlesso

串行通信。以正确的方式发送DTR?

  •  0
  • Enrico Carlesso  · 技术社区  · 14 年前

    我正在处理一个 gm29 索尼爱立信。

    这个 datasheet 表示插上电源不足以打开调制解调器。上面写着:

    • 启动RS232控制线DTR,高达>0.2s。

    我正在用Python编写一些测试,但是:

    #!/usr/bin/env python                                                                                         
    
    import serial
    from time import sleep
    
    socket = serial.Serial('/dev/ttyS0',
                           baudrate=9600,
                           bytesize=serial.EIGHTBITS,
                           parity=serial.PARITY_NONE,
                           stopbits=serial.STOPBITS_ONE,
                           timeout=1,
                           xonxoff=0,
                           rtscts=0
                           )
    socket.setDTR(True)
    sleep(3)
    socket.setDTR(False)
    try:
        while True:
            socket.write('AT'+chr(13));
            sleep(1)
            print "Reading"
            print socket.readlines()
    except:
        socket.close()
    

    不起作用…我有其他方法来提高DTR吗?比如说Minicom或者其他什么东西?或者,很容易,我是不是错过了什么?

    事先谢谢。


    好吧,那让我很生气。提示是电源供应器“坏”了,或者更好,用测试仪可以很好地测试,但是在调制解调器上插上一些电线会移动,不带电压…

    不管怎样,谢谢你的回答,标记为“当然是:d”

    1 回复  |  直到 14 年前
        1
  •  4
  •   Simon Callan    14 年前

    我在这里发生了几件事。

    1)规格说明DTR处于低激活状态,因此您可能需要交换 true false 值到 setDTR() 这取决于谁在这里感到困惑。

    2)您正在设置 DTR 唤醒调制解调器后出错。这会告诉调制解调器脱机,并忽略所有输入直到它停止。 再一次。请尝试以下操作:

    import serial
    from time import sleep
    
    conn = serial.Serial('/dev/ttyS0',
                         baudrate=9600,
                         bytesize=serial.EIGHTBITS,
                         parity=serial.PARITY_NONE,
                         stopbits=serial.STOPBITS_ONE,
                         timeout=1,
                         xonxoff=0,
                         rtscts=0
                         )
    # Wake Modem
    conn.setDTR(True)
    sleep(3)
    conn.setDTR(False)
    
    sleep(5)
    
    # Start talking
    conn.setDTR(True)
    try:
        while True:
            conn.write('AT'+chr(13));
            print conn.readline() # readlines() will probably never return.
    finally:
        conn.close()
    

    3) socket 可能是串行连接的错误名称。