C# Putty默认串行配置

C# Putty默认串行配置,c#,serial-port,putty,serial-communication,C#,Serial Port,Putty,Serial Communication,使用C#时,我只能读取COM2中值的最后4个字符 Putty正确读取了它 我无法控制或了解对COM2进行估值的来源 我的C#设置类似于Putty配置屏幕上的基本设置,但C#提供了更多设置,因此Putty必须有一些基本设置未显示 我查看了Putty上的文档,在串行端口上找不到默认设置 我的代码: using System.IO.Ports; ... SerialPort mySerialPort = null; mySerialPort = new SerialPort("COM2"); m

使用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() == '\0')
            {
                myString = myString.Trim('\0').Trim();
                if (!string.IsNullOrWhiteSpace(myString))
                {
                    Console.WriteLine(myString);
                }
                sp.DiscardInBuffer();
                myString = string.Empty;
            }
        }
    }
}

我注释掉了//sp.DiscardNull=true;因为它删除了所有的空字符,并且工作正常,所以无论如何都要感谢下一票。

这是一个“过早退出编程”的问题。如果你没有像Putty那样对字符串做任何有用的事情,那么你的眼睛就没有足够快的速度来看到由早期的DataReceived事件生成的字符串。很有可能您应该使用ReadLine()顺便说一句。告诉我们。现在还不清楚你在用
mySerialPort
做什么,一旦你设置好了一切。mySerialPort就在那里,声明为一个实例变量,我有关闭和打开端口的方法,当用户关闭应用程序Tanks@HansPassant时我会处理它。事实上,我收到的字符串分为两部分,我需要连接。