【问题标题】:System.IO.Ports.SerialPort won't behave like PuTTYSystem.IO.Ports.SerialPort 不会像 PuTTY
【发布时间】:2017-08-11 11:05:33
【问题描述】:

我最近购买了一个调制解调器,它通过 USB 连接并在操作系统中显示为串行端口设备:COM19

为确保调制解调器正常,我首先尝试在串行模式下使用 PuTTY。从那里,我可以毫无问题地发出 AT 命令和接收来自调制解调器的响应。根据 PuTTY 配置,我控制本地串行线路的默认选项是(当时):

  • 速度(波特):9600
  • 数据位:8
  • 停止位:1
  • 奇偶校验:无
  • 流控制:XON/XOFF

这是我在 PuTTY 中看到的内容(当我键入 AT 命令时):

在 好的 ^引导:30645964,0,0,0,75

但是,当我尝试从 .NET 访问同一个 COM 端口时(不是在运行 PuTTY 的同时),我从未收到“OK”响应。我仍然收到(似乎是)回声,以及偶尔来自调制解调器的未经请求的消息,因此我可以看到我已连接到正确的设备。有时调制解调器会以“ERROR”响应格式错误的命令,但绝不会“OK”。这是我初始化 COM 端口的 C# sn-p:

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 事件处理程序添加的):

在 ^引导:30645964,0,0,0,75

.NET 应用程序发出的所有 AT 命令都不执行任何操作,尽管它们在 PuTTY 中的等效命令能够查询调制解调器状态、发出呼叫等。我做错了什么?

【问题讨论】:

    标签: c# .net serial-port putty at-command


    【解决方案1】:

    使用SerialPort 类的NewLine 属性。默认情况下,它设置为“\n”。这个必须是"\r",然后可以使用WriteLine(...)的方式发送AT指令。

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

    【讨论】:

    • 这对我有用!
    猜你喜欢
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多