簡體   English   中英

System.IO.Ports.SerialPort的行為不會像PuTTY

[英]System.IO.Ports.SerialPort won't behave like PuTTY

我最近購買了一個調制解調器,該調制解調器通過USB連接,並在操作系統中顯示為串行端口設備:COM19

為確保調制解調器正常,我首先嘗試在串行模式下使用PuTTY。 從那里,我可以發出AT命令並從調制解調器接收響應。 根據PuTTY配置,我當時用於控制本地串行線的默認選項是:

  • 速度(波特):9600
  • 數據位:8
  • 停止位:1
  • 奇偶校驗:無
  • 流量控制:XON / XOFF

這是我在PuTTY中看到的內容(當我鍵入AT命令時):

AT
OK

^BOOT:30645964,0,0,0,75

但是,當我嘗試從.NET訪問同一COM端口(而不是同時運行PuTTY)時,我再也沒有收到“確定”響應。 我仍然收到(看起來像是)回聲,並且偶爾也收到來自調制解調器的不請自來的消息,因此我可以看到我已連接到正確的設備。 有時,調制解調器將以“錯誤”響應格式錯誤的命令,但從不響應“確定”。 這是我初始化COM端口的C#代碼段:

var commandPort = new SerialPort(portName, 9600, Parity.None, 8, StopBits.One);
commandPort.DataReceived += CommandPort_DataReceived;
commandPort.Handshake = Handshake.XOnXOff;
commandPort.Open();

commandPort.Write("AT\n");
for (var i = 0; i < 30; i++)
{
    Thread.Sleep(1000);
}

這是事件處理程序:

private static void CommandPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    Console.Write(((SerialPort)sender).ReadExisting());
}

這是打印回C#應用程序控制台的內容(請注意,我沒有將命令顯式寫入控制台,它是由CommandPort_DataReceived事件處理程序添加的):

AT

^BOOT:30645964,0,0,0,75

.NET應用程序發出的AT命令均未執行任何操作,盡管它們在PuTTY中的等效命令能夠查詢調制解調器狀態,發出呼叫等。我在做什么錯?

使用SerialPort類的NewLine屬性。 默認情況下,它設置為“ \\ n”。 這需要為“ \\ r”,然后可以使用WriteLine(...)方法發送AT命令。

commandPort.NewLine = "\r";
commandPort.Open();

commandPort.WriteLine("AT");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM