2012-11-08 61 views
2

如何確定AT命令的結束髮送到GSM模塊?對AT命令的響應結束

我需要一些字符或字符串代表AT命令結束每個案件由於找到整個響應時收到。

我想它有一些「\ r \ n」序列,但是,這個序列可能在AT命令響應的開始?

+0

EOF/CTRL + Z呢? http://en.wikipedia.org/wiki/Control-Z – rkosegi

+0

所以你真實**而不是**尋找指示命令**結束的東西,但是**表示響應結束的東西(如果有的話) )? – alk

+1

@alk是的,我試圖指示AT命令的響應結束 –

回答

3

像你想的那樣是\r\n
這定義了一條線的末端。

而且它只處理完整的行是有意義的。

某些命令僅響應OK\r\n,其中一些命令帶有一些數據。
所以你應該首先構建一個解析器,它可以檢測完整的行,因此它們可以用一個處理響應的函數處理 。

有時您甚至可以得到您沒有請求的回覆,例如更改事件net login或SIM卡狀態#QSS: 2\r\n

所以,你需要知道你所期望的答案,等到你這個

+0

是的,很好的建議。 AT命令響應應始終[逐行解析](https://stackoverflow.com/a/36899432/23118)。 – hlovdal

0

響應格式是命令特定的。儘管有一些相似之處(「OK \ r \ n」),但最後你需要對每個進行明確的處理。

1

Referring the original Hayes command set Wikipedia is stating

<CR>回車字符,是在命令行和結果代碼 終止字符,該值,在0和255之間的十進制ASCII,指定 在參數S3內。默認值是13.

所以應該可以設置任何字符來表示響應的結束(以及發送到調制解調器的命令的結束)。


無論如何<CR> s不僅作爲最後一個字符被許多調制解調器的響應返回。

因此,它可能是一個有趣的實驗是否寫一個不同的字符值S3只想改變在調制解調器的響應端發送的最後一個字符,或者這是否會改變調制解調器的應答期間發送的任何<CR>是值存儲在S3

+0

有趣的想法,我一定會嘗試,我會發布調查結果。 –

1

以下是我在Python中使用。有用。可能還有其他更好的解決方案。

ser = serial.Serial(com, baudrate, timeout=5) 
while True: 
# a simple AT return result parser 
    new_char = ser.read(1) 
    byte_flow += new_char 

    if len(byte_flow) >=4 and byte_flow[-4:] == b'\r\nOK': 
     break 
    elif len(byte_flow) >= 7 and byte_flow[-7:] == b'\r\nERROR': 
     break 
byte_flow += ser.read(2) # the final '\r\n' 

如果還有其他模式,您可以添加更多elif