[英]System.IO.Ports.SerialPort won't behave like PuTTY
我最近購買了一個調制解調器,該調制解調器通過USB連接,並在操作系統中顯示為串行端口設備:COM19
為確保調制解調器正常,我首先嘗試在串行模式下使用PuTTY。 從那里,我可以發出AT命令並從調制解調器接收響應。 根據PuTTY配置,我當時用於控制本地串行線的默認選項是:
這是我在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.