2017-08-11 85 views
0

我最近购买了一台调制解调器,它通过USB重视并出现操作系统为串行端口设备:COM19System.IO.Ports.SerialPort不会表现得像腻子

为了确保调制解调器是确定的,我第一次尝试在串行模式下使用PuTTY。从那里,我没有问题发出AT命令和接收调制解调器的响应。据腻子配置,控制本地串口线我的默认选项是(当时):

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

这是我在腻子看(当我输入的AT命令):

 
AT 
OK 

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

但是,当我尝试从.NET访问相同的COM端口(与运行PuTTY不同时),我从来没有收到“OK”响应。我仍然收到(似乎是)回声,以及偶然的来自调制解调器的未经请求的消息,所以我可以看到我已连接到正确的设备。有时调制解调器会以“错误”响应格式错误的命令,但从不“确定”。下面是C#代码片段,我初始化COM端口:

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中的等价物能够查询调制解调器状态,拨打电话等。我做错了什么?

回答

0

使用SerialPort类的NewLine属性。默认情况下,它被设置为“\ n”。这需要是“\ r”,那么你可以使用WriteLine(...)方法发送AT命令。

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

commandPort.WriteLine("AT");