Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
命令处的Shell脚本:无法通过串行端口发送sms_Shell_Expect_At Command - Fatal编程技术网

命令处的Shell脚本:无法通过串行端口发送sms

命令处的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”

我有下面的shell脚本(expect),我正在尝试发送短信。我参考了许多堆栈溢出引用,发现ctrl-z映射到\x1a。然而,即使在将其附加到消息并发送到端口或将ctrl z单独发送到端口后,也没有帮助我。稍后会超时

该脚本用于以pdu格式发送sms。尽管如此,我相信,将ctrl-z发送到端口是一个通用问题。如果您觉得脚本有其他错误,请共享解决方案

根据规范,下面提到的长度(34)也是(PDU_长度-2)/2的长度。此长度不包括ctrl-z字符

at_command=“at+CMGS=34\r” 消息内容=“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"; }
    }
}
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*
。我怀疑这一点。为什么您首先需要它?