【发布时间】:2017-03-20 09:40:09
【问题描述】:
我尝试通过打开串行端口连接来发送 AT 命令,而我的目标是发送短信。我能够做到这一点并且消息已发送出去,这表明 WriteLine() 方法已成功完成。但是,我似乎无法在接收缓冲区中得到任何响应。我通过查看 stackoverflow 上的一些答案打开了 echo。
但还是没有反应。我尝试使用 Thread.Sleep() 以及使用处理程序 p_DataReceived 来等待。仍然没有回应。
一个例子是简单的“AT”命令,它的响应应该是“ok”。但是根本没有响应(即 BytesToRead 属性大小为 0)
我正在尝试使用 D-Link 的 dwm222 4G LTE USB 适配器
任何指针将不胜感激!
private void button_Click(object sender, RoutedEventArgs e)
{
mySerialPort = new SerialPort("COM15");
mySerialPort.BaudRate = 9600;
mySerialPort.Parity = Parity.None;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.None;
mySerialPort.NewLine = Environment.NewLine;
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(p_DataReceived);
mySerialPort.Open();
mySerialPort.DiscardInBuffer();
mySerialPort.DiscardOutBuffer();
mySerialPort.WriteLine("ATE1"); //turn on echo
mySerialPort.WriteLine("AT"); //test response
Thread.Sleep(3000);
string responseSTR = mySerialPort.ReadLine();
if (responseSTR.Contains("OK")) //empty string
{
MessageBox.Show(responseSTR);
}
this.SendSms("+XXXXXXXXXXXXXXXXXXX", "Hello From C#");
mySerialPort.Close();
}
public void p_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string s = (sender as SerialPort).ReadExisting();
buff += s;
MessageBox.Show(buff);
}
void SendSms(string destination, string text)
{ ........}
【问题讨论】:
-
您的活动正在触发吗?并且消息框显示为空?
-
未触发事件且responseSTR为空,即responseSTR=""。
-
另一个问题:你能尝试不同的“mySerialPort.NewLine =”设置吗?因为 "Environment.NewLine" 在 Windows (CR +LF) 上是 "\r\n"。也许你的调制解调器只用“CR”回答。值得一试: mySerialPort.NewLine = "\r" ,或者 C# 中的任何正确代码。
-
(实际上,如果您在 COM15 上使用我们的 Docklight.de 工具发送 AT 命令并检查响应,您可以发现“行尾”行为。这是显示的基本示例之一Docklight 欢迎屏幕。免费评估就足够了。)
-
感谢 Oliver,抱歉我的回复晚了,我让它与“\r\n”组合一起工作。猜猜我的调制解调器接受了。
标签: c# serial-port usb at-command modem