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

モデムを設定した後、モデムを一度読み取るだけです。DataReceivedEventポートから継続的にデータを取得するには、on 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 に答える