Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 串行调制解调器结果代码_Python_Pyserial_Modem - Fatal编程技术网

Python 串行调制解调器结果代码

Python 串行调制解调器结果代码,python,pyserial,modem,Python,Pyserial,Modem,我正在Debian box上使用pySerial和Python2.7。我正在编写python代码来控制USRobotics USB USR5637调制解调器。我想检查调制解调器的响应是否存在问题/错误,但我的代码中出现异常结果。我已经为测试编写了一些基本代码。我确实断开了电话线,因此我可以看到“无载波”的结果代码。如果有人能够访问pySerial和调制解调器,我将非常感谢能够提供的任何帮助 我创建了以下测试代码: import serial ser = serial.Serial('/dev/t

我正在Debian box上使用pySerial和Python2.7。我正在编写python代码来控制USRobotics USB USR5637调制解调器。我想检查调制解调器的响应是否存在问题/错误,但我的代码中出现异常结果。我已经为测试编写了一些基本代码。我确实断开了电话线,因此我可以看到“无载波”的结果代码。如果有人能够访问pySerial和调制解调器,我将非常感谢能够提供的任何帮助

我创建了以下测试代码:

import serial
ser = serial.Serial('/dev/ttyACM0', 9600, timeout=5)
ser.write("ATE0\r")  # Attention - Echo disable
response =  ser.read(4)
print "ATE0 %s" % response
ser.write("ATX0\r")  # Attention - Echo disable
response2 =  ser.read(8)
print "ATX0 %s" % response2
ser.write("ATDT411\r")  # Attention - Dail - Tone - 411
response3 =  ser.read(32)
print "ATDT %s" % response3
ser.write("ATH\r")  # Attention - Hang up line
response4 =  ser.read(16)
print "ATH %s" % response4
ser.write("ATZ\r")  # Reset
response5 =  ser.read(16)
print "ATZ %s" % response5
print "================================================="
print "%s %s %s %s %s" % (response, response2, response3, response4, response5)
ser.close()
我得到的答复是:

ATE0 
OK
ATX0 

OK

ATDT 
ATH 
NO CARRIER

ATZ 
OK

=================================================

OK 

OK

NO CARRIER

OK
我的问题是:

  • 读序列(4)或读序列(8)中的数字是多少。是超时吗
  • 我似乎直到代码的ATH部分之后才得到“无载波”。我希望在ATDT部分之后直接得到它
  • 为什么我最终只有四个结果
  • 为什么打印结果中出现异常间距
  • 任何帮助都将不胜感激。谢谢。

    ser.read(4)
    表示从串行端口读取4个字节。您已使用构造函数调用配置了5秒超时:

    serial.Serial('/dev/ttyACM0', 9600, timeout=5)
    
    因此,
    ser.read(4)
    可能返回少于4个字符。使用
    timeout=None
    进行阻塞读取,在这种情况下,只有收到4个字符后才会返回

    因为调制解调器发送的每个响应都以CR字符结尾(可能是CR/LF对),所以会出现奇怪的间隔

    您可能会发现使用此
    getline()
    函数与调制解调器交互更容易:

    def getline(ser):
      buf = ""
      while True:
        ch = ser.read(1)
        if ch == '\r':    # or perhaps '\n'
          break
        buf += ch
      return buf
    
    至于#2,我相信由于您发送的ATH命令,您将获得“无载波”

    请参阅本MS支持说明中的“拨打电话”部分

    根据注释,发送挂断命令将导致无载波响应。
    当您发送ATH时,调制解调器可能仍在尝试建立连接。

    这解决了问题1和4。谢谢我可以告诉调制解调器返回一个单值代码,而不是冗长的文本,上面的代码会很好。答案更新。如果你觉得其中任何一条有用的话,请投赞成票。我现在明白了。谢谢