使用C#中的USSD命令检查余额

时间:2015-07-28 12:57:43

标签: c# at-command ussd

我更新了这个问题并知道它工作正常..

我尝试检查我的mavecom调制解调器中的平衡但我的文本框中没有响应。它保持空白。

这是我的代码:

private SerialPort _port;

private void simpleButton1_Click(object sender, EventArgs e)
    {
        _port = new SerialPort();
        _port.PortName = cbPort.Text;
        _port.BaudRate = 115200;
        _port.Parity = Parity.None;
        _port.DataBits = 8;
        _port.StopBits = StopBits.One;
        _port.Handshake = Handshake.RequestToSend;

        port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
        port.Open();

        port.Write("AT+CUSD=1,\"" + txtUSSD.Text + "\",15" + "\r");
    }

private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        try
        {
            // read the response.
            var response = ((SerialPort)sender).ReadLine();

            // Need to update the txtProvider on the UI thread .
            //showing result in txtOutput based on txtProvider USSD Command
            this.Invoke(new Action(() => txtOutput.Text = response)); 
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

这已解决,可用于检查余额......

1 个答案:

答案 0 :(得分:1)

良好的开端,您正在使用<DataGrid ItemsSource="{Binding Items}"> <DataGrid.Resources> <stackOverflow:DateTimeConverter x:Key="DateTimeConverter"/> </DataGrid.Resources> <DataGrid.Columns> <DataGridTextColumn Binding="{Binding LastRunTime, Converter={StaticResource DateTimeConverter}}" Header="Last Run Time" /> </DataGrid.Columns> </DataGrid> 正确终止AT命令行(不使用WriteLine或任何其他不正确的方法,不幸的是常见的初学者问题)。但是,命令的格式在27.007中定义为

\r

和字符串参数应始终用双引号括起来(V.250第5.4.2.2节字符串常量:AT+CUSD=[<n>[,<str>[,<dcs>]]] ... Defined values ... <str>: string type USSD-string ... )。

因此,如果不详细了解textProvider对象,我相信您的代码应该是

String constants shall be bounded at the beginning and end by the double-quote character

但请注意,如果port.Write("AT+CUSD=1,\"" + txtProvider.Text + "\",15" + "\r"); 包含任何txtProvider.Text个字符,则必须将其转义(顺便说一下,",请查看5.4.2.2)。< / p>

然而,即使有上述修复,您也需要认真修改您的接待处理。您必须读取并解析来自调制解调器的每一行响应,直到您获得最终结果代码(最常见的是\"OK,但还有其他几个)。任何其他方式都无法可靠地工作。有关如何正确执行此操作的伪代码结构,请参阅this answer

如评论所述,您过早关闭了该端口。