Putty 默认串行配置
Putty Default Serial Configuration
使用 C# 时,我只能读取 COM2 中值的最后 4 个字符。
Putty 读对了
我无法控制或了解将值放在 COM2 上的来源。
我的 C# 设置类似于 Putty 配置屏幕上的基本设置,但 C# 提供了更多设置,因此 Putty 必须有一些未显示的基础设置。
我查了Putty的文档,找不到串口的默认设置
我的代码:
using System.IO.Ports;
...
SerialPort mySerialPort = null;
mySerialPort = new SerialPort("COM2");
mySerialPort.BaudRate = 19200;
mySerialPort.Parity = System.IO.Ports.Parity.None;
mySerialPort.StopBits = System.IO.Ports.StopBits.One
mySerialPort.DataBits = 8;
mySerialPort.Handshake = System.IO.Ports.Handshake.None;
mySerialPort.DiscardNull = true;
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
mySerialPort.ReadBufferSize = 2147483647;
...
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string value= sp.ReadExisting(); //I onle get the last four characters
}
所以我应该获得值“17159160118A”但我只得到“118A”,Putty 正确读取了整个字符串
鉴于我没有关于信号源的信息,我最好的选择是在我的代码中使用与 Putty 类似的配置,你知道这可能是什么配置吗?或者我做错了什么?
所以,我删除了所有代码并重新开始一个干净的控制台应用程序,源将数据分两部分发送,我只读了第二部分,我只需要知道什么是字符串终止符,我发现它是空终止符 ('\0') 所以我用它来连接我的字符串,这是我的代码:
class Program
{
static void Main(string[] args)
{
using (SerialPort sp = new SerialPort("COM2", 19200, Parity.None, 8, StopBits.One))
{
//sp.DiscardNull = true;
sp.Handshake = Handshake.XOnXOff;
sp.ReadBufferSize = 16384;
sp.Open();
sp.DataReceived += sp_DataReceived;
AppDomain.CurrentDomain.ProcessExit += new EventHandler((x, y) =>
{
sp.Close();
});
Console.ReadKey();
}
}
static string myString = string.Empty;
static void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (sender as SerialPort);
if (sp.BytesToRead > 0)
{
myString += sp.ReadExisting().Trim();
if (myString.Last() == '[=10=]')
{
myString = myString.Trim('[=10=]').Trim();
if (!string.IsNullOrWhiteSpace(myString))
{
Console.WriteLine(myString);
}
sp.DiscardInBuffer();
myString = string.Empty;
}
}
}
}
我注释掉了 //sp.DiscardNull = true;因为它删除了所有空字符并且它起作用了,所以无论如何感谢您的反对票。
使用 C# 时,我只能读取 COM2 中值的最后 4 个字符。
Putty 读对了
我无法控制或了解将值放在 COM2 上的来源。
我的 C# 设置类似于 Putty 配置屏幕上的基本设置,但 C# 提供了更多设置,因此 Putty 必须有一些未显示的基础设置。
我查了Putty的文档,找不到串口的默认设置
我的代码:
using System.IO.Ports;
...
SerialPort mySerialPort = null;
mySerialPort = new SerialPort("COM2");
mySerialPort.BaudRate = 19200;
mySerialPort.Parity = System.IO.Ports.Parity.None;
mySerialPort.StopBits = System.IO.Ports.StopBits.One
mySerialPort.DataBits = 8;
mySerialPort.Handshake = System.IO.Ports.Handshake.None;
mySerialPort.DiscardNull = true;
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
mySerialPort.ReadBufferSize = 2147483647;
...
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string value= sp.ReadExisting(); //I onle get the last four characters
}
所以我应该获得值“17159160118A”但我只得到“118A”,Putty 正确读取了整个字符串
鉴于我没有关于信号源的信息,我最好的选择是在我的代码中使用与 Putty 类似的配置,你知道这可能是什么配置吗?或者我做错了什么?
所以,我删除了所有代码并重新开始一个干净的控制台应用程序,源将数据分两部分发送,我只读了第二部分,我只需要知道什么是字符串终止符,我发现它是空终止符 ('\0') 所以我用它来连接我的字符串,这是我的代码:
class Program
{
static void Main(string[] args)
{
using (SerialPort sp = new SerialPort("COM2", 19200, Parity.None, 8, StopBits.One))
{
//sp.DiscardNull = true;
sp.Handshake = Handshake.XOnXOff;
sp.ReadBufferSize = 16384;
sp.Open();
sp.DataReceived += sp_DataReceived;
AppDomain.CurrentDomain.ProcessExit += new EventHandler((x, y) =>
{
sp.Close();
});
Console.ReadKey();
}
}
static string myString = string.Empty;
static void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (sender as SerialPort);
if (sp.BytesToRead > 0)
{
myString += sp.ReadExisting().Trim();
if (myString.Last() == '[=10=]')
{
myString = myString.Trim('[=10=]').Trim();
if (!string.IsNullOrWhiteSpace(myString))
{
Console.WriteLine(myString);
}
sp.DiscardInBuffer();
myString = string.Empty;
}
}
}
}
我注释掉了 //sp.DiscardNull = true;因为它删除了所有空字符并且它起作用了,所以无论如何感谢您的反对票。