如何確定AT命令的結束髮送到GSM模塊?對AT命令的響應結束
我需要一些字符或字符串代表AT命令結束每個案件由於找到整個響應時收到。
我想它有一些「\ r \ n」序列,但是,這個序列可能在AT命令響應的開始?
如何確定AT命令的結束髮送到GSM模塊?對AT命令的響應結束
我需要一些字符或字符串代表AT命令結束每個案件由於找到整個響應時收到。
我想它有一些「\ r \ n」序列,但是,這個序列可能在AT命令響應的開始?
像你想的那樣是\r\n
。
這定義了一條線的末端。
而且它只處理完整的行是有意義的。
某些命令僅響應OK\r\n
,其中一些命令帶有一些數據。
所以你應該首先構建一個解析器,它可以檢測完整的行,因此它們可以用一個處理響應的函數處理 。
有時您甚至可以得到您沒有請求的回覆,例如更改事件net login
或SIM卡狀態#QSS: 2\r\n
。
所以,你需要知道你所期望的答案,等到你這個
是的,很好的建議。 AT命令響應應始終[逐行解析](https://stackoverflow.com/a/36899432/23118)。 – hlovdal
響應格式是命令特定的。儘管有一些相似之處(「OK \ r \ n」),但最後你需要對每個進行明確的處理。
Referring the original Hayes command set Wikipedia is stating:
<CR>
回車字符,是在命令行和結果代碼 終止字符,該值,在0和255之間的十進制ASCII,指定 在參數S3內。默認值是13.
所以應該可以設置任何字符來表示響應的結束(以及發送到調制解調器的命令的結束)。
無論如何<CR>
s不僅作爲最後一個字符被許多調制解調器的響應返回。
因此,它可能是一個有趣的實驗是否寫一個不同的字符值S3
只想改變在調制解調器的響應端發送的最後一個字符,或者這是否會改變調制解調器的應答期間發送的任何<CR>
是值存儲在S3
。
有趣的想法,我一定會嘗試,我會發布調查結果。 –
以下是我在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
。
EOF/CTRL + Z呢? http://en.wikipedia.org/wiki/Control-Z – rkosegi
所以你真實**而不是**尋找指示命令**結束的東西,但是**表示響應結束的東西(如果有的話) )? – alk
@alk是的,我試圖指示AT命令的響應結束 –