命令处的Shell脚本:无法通过串行端口发送sms
我有下面的shell脚本(expect),我正在尝试发送短信。我参考了许多堆栈溢出引用,发现ctrl-z映射到\x1a。然而,即使在将其附加到消息并发送到端口或将ctrl z单独发送到端口后,也没有帮助我。稍后会超时 该脚本用于以pdu格式发送sms。尽管如此,我相信,将ctrl-z发送到端口是一个通用问题。如果您觉得脚本有其他错误,请共享解决方案 根据规范,下面提到的长度(34)也是(PDU_长度-2)/2的长度。此长度不包括ctrl-z字符 at_command=“at+CMGS=34\r” 消息内容=“0011000C810056890……” 脚本:命令处的Shell脚本:无法通过串行端口发送sms,shell,expect,at-command,Shell,Expect,At Command,我有下面的shell脚本(expect),我正在尝试发送短信。我参考了许多堆栈溢出引用,发现ctrl-z映射到\x1a。然而,即使在将其附加到消息并发送到端口或将ctrl z单独发送到端口后,也没有帮助我。稍后会超时 该脚本用于以pdu格式发送sms。尽管如此,我相信,将ctrl-z发送到端口是一个通用问题。如果您觉得脚本有其他错误,请共享解决方案 根据规范,下面提到的长度(34)也是(PDU_长度-2)/2的长度。此长度不包括ctrl-z字符 at_command=“at+CMGS=34\r”
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"; }
}
}
AT+CMGS=34
>
我非常确定脚本将$message\u content“发送到端口,但在发送“$message\u content”后立即退出
输出:
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"; }
}
}
AT+CMGS=34
>
我用短信网关模块在
c#
中做了类似的事情
我必须先切换到PDU模式!
之后,我必须传输预期的PDU长度,最后是PDU本身 每个命令都必须使用can回车
ASC[13]
提交,最后必须使用ASC[26]
提交PDU
在这里,您可以看到一个示意图(!)流程,我是如何在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));
我用短信网关模块在
c#
中做了类似的事情
我必须先切换到PDU模式!
之后,我必须传输预期的PDU长度,最后是PDU本身 每个命令都必须使用can回车
ASC[13]
提交,最后必须使用ASC[26]
提交PDU
在这里,您可以看到一个示意图(!)流程,我是如何在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));
message\u content
结尾有\r
吗?发送消息后你没有得到任何响应吗?@Dinesh:也没用。发送消息内容后,期望得到一些东西。(这可能是某种响应)。然后发送尝试发送ctrl+z
。删除expect*
。我怀疑。你为什么首先需要它?在message\u content
末尾有\r
吗?在发送消息之后,你没有得到任何响应吗?@Dinesh:它也不起作用。在发送消息内容之后,expect
有什么作用。(这可能是某种响应)。然后发送尝试发送ctrl+z
。删除expect*
。我怀疑这一点。为什么您首先需要它?