1

我正在尝试构建一个简单的应用程序,该应用程序通过调制解调器返回呼叫号码,但是我似乎只获得了从调制解调器接收到的数据的第一行。

当我运行超级终端并通过 AT#CID=1 命令时,拨打号码,我得到完整的输出:

好的

日期=0314

时间=1111

NMBR=4936

姓名=斯图尔特 E

戒指

在我的应用程序中,我似乎只收到包含“OK”部分的第一部分。对我做错了什么或遗漏有任何帮助吗?

代码:

 public partial class Form1 : Form
 {
    public SerialPort port = new SerialPort("COM3", 115200,Parity.None,8,StopBits.One);
    public String sReadData = "";
    public String sNumberRead = "";
    public String sData = "AT#CID=1";

    public Form1()
    {
        InitializeComponent();
    }

    private void btnRun_Click(object sender, EventArgs e)
    {
        SetModem();

        ReadModem();

        MessageBox.Show(sReadData);
    }

 public void SetModem()
    {

        if (port.IsOpen == false)
        {
            port.Open();
        }

        port.WriteLine(sData + System.Environment.NewLine);
        port.BaudRate = iBaudRate;
        port.DtrEnable = true;
        port.RtsEnable = true;

    }

    public string ReadModem()
    {

        try
        {
            sReadData = port.ReadExisting().ToString();

            return (sReadData);
        }
        catch (Exception ex)
        {
            String errorMessage;
            errorMessage = "Error in Reading: ";
            errorMessage = String.Concat(errorMessage, ex.Message);
            errorMessage = String.Concat(errorMessage, " Line: ");
            errorMessage = String.Concat(errorMessage, ex.Source);

            MessageBox.Show(errorMessage, "Error");
            return "";
        }
    }

    private void btnExit_Click(object sender, EventArgs e)
    {
        port.Close();
        Close();
    }
}
}
4

2 回答 2

1

ReadModem()尝试在循环中使用并port.ReadLine()循环直到你得到一行说RING(如果这是你期望的最后一行)。

于 2013-03-14T11:33:30.297 回答
1

您只是在设置后读取调制解调器一次。您需要订阅DataReceivedEventon serialPort 以不断从端口获取数据。

public void SetModem()
    {

        if (port.IsOpen == false)
        {
            port.Open();
        }

        port.WriteLine(sData + System.Environment.NewLine);
        port.BaudRate = iBaudRate;
        port.DtrEnable = true;
        port.RtsEnable = true;

        port.DataReceived += port_DataReceived;

    }

    void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
            //For e.g. display your incoming data in RichTextBox
            richTextBox1.Text += this.serialPort1.ReadLine();           

           //OR
           ReadModem();
    }
于 2013-03-14T11:33:56.777 回答