【问题标题】:Send USSD code to modem in C# and ERROR in return always在 C# 中将 USSD 代码发送到调制解调器,并始终返回错误
【发布时间】:2016-05-01 20:53:00
【问题描述】:

我通过串口在调制解调器上发送 USSD 代码。但它总是给出 ERROR 作为响应。

我发送的 AT 命令是: 按顺序:

serialPort.Write("AT+CMGF=0" + "\r\n");
serialPort.Write("AT+CUSD=1,\"*135#\"" + "\r\n");

当我在第一个 AT 命令中配置消息格式时,它给出“OK”响应。但是在发送 USSD 代码时,响应总是“错误”。为什么会这样?

【问题讨论】:

    标签: c# decode at-command modem ussd


    【解决方案1】:

    不要在命令末尾使用\n,只使用\r

    CUSD 命令格式为:AT+CUSD=1,"*135#",15

    在 C# 中应该是:

    serialPort.Write("AT+CMGF=0" + "\r");
    serialPort.Write("AT+CUSD=1,\"*135#\",15" + "\r");
    

    【讨论】:

    • 这是正确的,总是用 \r 终止 AT 命令行。
    【解决方案2】:

    首先,AT命令在C#中以“\r”结束。 您也可以检查调制解调器的 TE 字符集。

    serialPort.Write("AT+CSCS?\r");
    

    如果字符集是“UCS2”,则使用以下对话:

    serialPort.Write("AT+CUSD=1,\"" + UnicodeStr2HexStr("*135#") + "\",15" + "\r");
    

    还有

    public static String UnicodeStr2HexStr(String strMessage)
    {
        byte[] ba = Encoding.BigEndianUnicode.GetBytes(strMessage);
        String strHex = BitConverter.ToString(ba);
        strHex = strHex.Replace("-", "");
        return strHex;
    }
    

    另请参阅https://stackoverflow.com/a/25155746/638977(转换为 UCS2)

    【讨论】:

    • 如何再次将十六进制转换为 Str
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 2013-12-05
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多