2010-09-07 57 views
0

我正在使用C#的SerialPort類嘗試向設備發送「AT」命令並獲取響應。我已經驗證了它在超級終端中的正常工作,如果我發送了一個「AT」命令,它會迴應「OK」。但是,在我的控制檯應用程序中,如果我發送「AT」,它將回送回「AT」。代碼如下,任何見解,我在我的接收代碼做錯了什麼,將不勝感激:使用SerialPort類讀取連接設備的響應

ComPort.DataReceived += new SerialDataReceivedEventHandler(ComPort_DataReceived); 

public void Open() 
     { 
      Console.WriteLine(); 
      //close port if already open. 
      if (ComPort.IsOpen) 
      { 
       ComPort.Close(); 
      } 
      //setup port. 
      ComPort.PortName = ConfigurationManager.AppSettings["PortName"].ToString(); 
      ComPort.BaudRate = Convert.ToInt32(ConfigurationManager.AppSettings["BaudRate"]); 
      ComPort.Parity = Parity.None; 
      ComPort.StopBits = StopBits.One; 
      ComPort.DataBits = 8; 
      ComPort.DtrEnable = true; 
      ComPort.RtsEnable = true; 
      if (Convert.ToBoolean(ConfigurationManager.AppSettings["HWFlowControlEnabled"])) 
      { 
       ComPort.Handshake = Handshake.RequestToSend; 
      } 
      //open port. 
      Console.WriteLine("Opening port " + ComPort.PortName + "..."); 
      ComPort.Open(); 
      Console.WriteLine("Opened port " + ComPort.PortName); 
     } 

void ComPort_DataReceived(object sender, SerialDataReceivedEventArgs e) 
     { 
      string message = ComPort.ReadExisting(); 
      Console.WriteLine("RECEIVED: " + message); 
      if (message.IndexOf("OK") > -1) 
      { 
       ReceivedOK = true; 
      } 
     } 

回答

1

我覺得默認的是呼應你的命令回到你身邊,然後就OK了。第一發送ATE0到回波關閉:

http://tigger.cc.uic.edu/depts/accc/network/dialin/modem_codes.html

+0

感謝您的迴應,但沒有奏效。它回擊ATE0,然後以兩行發送AT(「A」然後「T」)。超級終端會在幕後發送此命令嗎?如果沒有,那麼爲什麼我需要從我的程序發送這個命令,但它在HT中沒有這個命令就可以工作? – Justin 2010-09-07 19:49:55

+0

得到它的工作,我沒有添加\ n \ r的命令,因爲我寫他們到港口。 – Justin 2010-09-07 20:26:21

+0

\ n \ r是否停止沒有ATE0的回聲?我認爲編劇像hypertermianal發送,連接到港口。 – Decker97 2010-09-08 04:49:55

0

缺省情況下,設備(調制解調器我想)被配置爲回聲的所有通信回來。有AT命令打開和關閉回聲。此外,還有幾種硬件信令方法來控制數據流。請參閱here以獲得基本概述。

自從我進行調制解調器通信以來,這已經有一段時間(實際上> 10年),所以如果我的答案不是100%準確的,我很抱歉。