2016-03-03 200 views
1

我有下面的shell腳本(期望),我試圖發送短信。我引用了許多堆棧溢出引用,並發現ctrl-z映射到\ x1a。但是,即使將它附加到消息併發送到端口或將ctrl z單獨發送到端口也沒有幫助我。它稍後超時。Shell腳本AT命令:無法通過串口發送短信

腳本被寫入發送pdu格式的短信。無論如何,我相信,這是發送ctrl-z到端口的通用問題。如果您覺得該腳本有其他錯誤,請分享相同的解決方案。

另外,下面提到的長度(34)是根據規範的(PDU_LENGTH -2)/ 2的長度。該長度不包括ctrl-z字符。

at_command = 「AT + CMGS = 34 \ R」 MESSAGE_CONTENT = 「0011000C810056890 ......」

腳本:

set PROMPT "0" 
set timeout "$COMMAND_TIMEOUT" 
send "$at_command" 
expect { 
    "OK" { puts "Command Accepted\n"; } 
    "ERROR" { puts "Command Failed\n"; } 
    timeout { puts "Unable to connect to $HOSTIP at $HOSTPORT"; exit 1 } 
    "*>*" { set PROMPT "1"; } 
} 

if { "$PROMPT" == "1" } { 
    send "$message_content" 
    send "\x1a" 
    expect { 
     "OK" { puts "\nCommand accepted"; } 
     "ERROR" { puts "\nCommand failed"; } 
     "*>*" { puts "CTRL-Z dint reach UT. Error..."; } 
     "*" { puts "Unexpected return value received"; } 
    } 
} 

非常肯定的腳本發送$ MESSAGE_CONTENT 「到港,但退出後立即發送 」$ MESSAGE_CONTENT「

OUTPUT:

AT+CMGS=34 

> 
+0

是'有message_content''末\ r'?發送信息後,你沒有收到任何回覆嗎? – Dinesh

+0

@Dinesh:它也可以。 – Vasanth

+0

發送郵件內容後,「預計」。 (可能有一些迴應)。然後發送嘗試發送'ctrl + z'。刪除'expect *'。我懷疑這一點。爲什麼你首先需要這個? – Dinesh

回答

0

我在c#用SMS-Gateway-Modul做了這樣的事情。

我不得不switch to PDU-Mode first!
之後,我不得不傳輸預期的PDU長度,最後傳輸PDU本身。

每個命令都必須提交,可以回車ASC[13],最後PDU必須提交ASC[26]

在這裏你可以看到一個流程示意圖,我做到了在c#(!):

1)創建PDU並獲得長度

int len; 
var pdu = PDUGenerator.GetPdu(destination, message, "", out len); 

2)切換到PDUMode

SendToCom("AT+CMGF=0" + System.Convert.ToChar(13)); 

3)宣佈消息長度

SendToCom("AT+CMGS=" + len + System.Convert.ToChar(13)); 

4)發送PDU,並承諾

SendToCom(pdu + System.Convert.ToChar(26));