簡體   English   中英

pySerial調制解調器結果代碼

[英]pySerial modem result codes

我在Debian盒子上使用pySerial和python 2.7。 我正在編寫python代碼來控制USRobotics USB USR5637調制解調器。 我想檢查調制解調器的響應是否有問題/錯誤,但是我的代碼得到了異常的結果。 我已經寫了一些基本的測試代碼。 我的電話線確實斷開了,因此我可以看到結果代碼“ NO CARRIER”。 如果任何人都可以使用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

我的問題是:

  1. ser.read(4)或ser.read(8)中的數字是多少。 超時了嗎?
  2. 在代碼的ATH部分之后,我似乎沒有得到“ NO CARRIER”信息。 我希望在ATDT部分之后直接得到它。
  3. 為什么最后只有四個結果?
  4. 為什么打印結果中的間距異常?

任何幫助將不勝感激。 謝謝。

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命令,您將獲得“ NO CARRIER”。

請參閱此MS支持說明(鏈接)中的“撥打電話”部分

根據說明,發送掛斷命令將導致NO CARRIER響應。 發送ATH時,調制解調器可能仍在嘗試建立連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM