串口通讯。以正确的方式发送DTR?

时间:2010-03-01 17:11:42

标签: python serial-port modem

我正在处理索尼爱立信的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还是其他一些东西?或者,很容易,我错过了什么?

提前致谢。


好的,这让我很生气。线索是电源供应商“破损”,或者更好,它可以通过测试仪进行良好的测试,但插入调制解调器时,一些电线会移动并且不会带电压......

无论如何,谢谢你的答案,标记为正确的'couse it:D

1 个答案:

答案 0 :(得分:4)

我在这里发生了几件事。

1)规范说DTR处于低有效状态,因此您可能需要将truefalse值交换为setDTR(),具体取决于此处的人员。

2)唤醒调制解调器后,您将DTR设置为false。这告诉调制解调器脱机,并忽略所有输入,直到它再次true。请尝试以下方法:

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可能是您的串行连接的错误名称。