2016-03-03 146 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));