控制台不显示来自串行端口的整个 answar
Console does not show the entire answar from serial port
我正在使用 Quectel 的 BC66 调制解调器。在我的程序中,当我向调制解调器键入一些 AT 命令时,它无法显示调制解调器的完整响应,而是显示 AT 命令的回复。见下图:
而是使用终端程序并键入 AT 命令,我得到了请求的状态。见下图:
这是我在我的程序中所期望的,但不幸的是没有发生。
代码片段:
static void Main(string[] args)
{
if (InitPort() == true)
{
Console.WriteLine("Port initialized");
TestAT();
}
}
private static void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] data = new byte[serialPort.BytesToRead];
serialPort.Read(data, 0, data.Length);
Console.WriteLine(Encoding.ASCII.GetString(data));
//Console.WriteLine(serialPort.ReadExisting());
}
private static void TestAT()
{
for (int i = 0; i < 10; i++)
{
serialPort.Write("at");
Thread.Sleep(2000);
serialPort.Write("at+cereg");
Thread.Sleep(2000);
}
}
private static bool InitPort()
{
serialPort.PortName = "COM51";
serialPort.BaudRate = 115200;
serialPort.DataBits = 8;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
serialPort.DataReceived += SerialPort_DataReceived;
try
{
serialPort.Open();
return true;
}
catch
{
return false;
}
}
有什么错误的建议吗?
如第 7 页 here 所示,您需要使用 <CR><LF>
完成命令。
The “AT” or “at” prefix must be set at the beginning of each command
line. Entering <CR>
will terminate a command line.
在 C# 中等价于 \r\n
正如@Mong Zhu 指出的那样,您可以通过使用
serialPort.WriteLine("at");
我正在使用 Quectel 的 BC66 调制解调器。在我的程序中,当我向调制解调器键入一些 AT 命令时,它无法显示调制解调器的完整响应,而是显示 AT 命令的回复。见下图:
而是使用终端程序并键入 AT 命令,我得到了请求的状态。见下图:
这是我在我的程序中所期望的,但不幸的是没有发生。
代码片段:
static void Main(string[] args)
{
if (InitPort() == true)
{
Console.WriteLine("Port initialized");
TestAT();
}
}
private static void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] data = new byte[serialPort.BytesToRead];
serialPort.Read(data, 0, data.Length);
Console.WriteLine(Encoding.ASCII.GetString(data));
//Console.WriteLine(serialPort.ReadExisting());
}
private static void TestAT()
{
for (int i = 0; i < 10; i++)
{
serialPort.Write("at");
Thread.Sleep(2000);
serialPort.Write("at+cereg");
Thread.Sleep(2000);
}
}
private static bool InitPort()
{
serialPort.PortName = "COM51";
serialPort.BaudRate = 115200;
serialPort.DataBits = 8;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
serialPort.DataReceived += SerialPort_DataReceived;
try
{
serialPort.Open();
return true;
}
catch
{
return false;
}
}
有什么错误的建议吗?
如第 7 页 here 所示,您需要使用 <CR><LF>
完成命令。
The “AT” or “at” prefix must be set at the beginning of each command line. Entering
<CR>
will terminate a command line.
在 C# 中等价于 \r\n
正如@Mong Zhu 指出的那样,您可以通过使用
serialPort.WriteLine("at");