[英]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
我的問題是:
任何幫助將不勝感激。 謝謝。
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.