使用c#通过winform中的串行端口发送数据时未获得确认?

使用c#通过winform中的串行端口发送数据时未获得确认?,c#,serial-port,C#,Serial Port,我正在通过串行端口发送数据。。发送部分正常,我正在另一端获取数据,但我无法完成确认部分。。。这就是我正在做的 mySerialPort.Open(); mySerialPort.Write(databuffer, 0, 19); System.Threading.Thread.Sleep(2000); if (mySerialPort.BytesToRead > 0) // this condition not working

我正在通过串行端口发送数据。。发送部分正常,我正在另一端获取数据,但我无法完成确认部分。。。这就是我正在做的

mySerialPort.Open();
        mySerialPort.Write(databuffer, 0, 19);
        System.Threading.Thread.Sleep(2000);
        if (mySerialPort.BytesToRead > 0)      // this condition not working
        {
            string rdata = mySerialPort.ReadExisting();
            if (rdata.ToUpper().Trim() == "OK")
            {
                lblmsg.Text = "OK";
            }
            else
            {
                lblmsg.Text = "FL";
            }
        }

        mySerialPort.Close();
而且我的串口设置是这样的

public void SettingRS232(string port)
    {
        try
        {
            SerialPort mySerialPort = new SerialPort(port);
            mySerialPort.PortName = port;
            mySerialPort.BaudRate = 9600;
            mySerialPort.Parity = Parity.None;
            mySerialPort.StopBits = StopBits.One;
            mySerialPort.DataBits = 8;
            mySerialPort.Handshake = Handshake.None;
            mySerialPort.ReadTimeout = 2000;
            mySerialPort.WriteTimeout = 500;

            mySerialPort.DtrEnable = true;
            mySerialPort.RtsEnable = true;
        }
        catch (Exception ex)
        {
            lblmsg.Text = ex.Message;
        }
    }

您需要挂接到串行端口的事件中。有很多好的资源可以让你开始。本质上,连接一个事件处理程序,在事件处理程序内部,只要有数据(BytesToRead>0)

就从端口读取。首先使用另一个程序来测试连接,比如超级终端或Putty。这让你非常清楚,你得到了基本的正确,正确的电气连接和正确的波特率,奇偶校验,停止位和数据位设置。并检查设备是否在您选择的神奇数字2秒内返回响应

到目前为止,最常见的错误是没有注意到正确的握手。如果您将其设置为“无”,则必须自己打开握手信号。将RtsEnable和DtrEnable属性设置为true。当看到这些信号关闭时,设备不会发送任何信息,它假定您未通电(DTR)且未准备好接收数据(RTS)

通过避免混合二进制数据和字符串来进一步改进代码,消除糟糕的Sleep()。调用Read()方法来接收字节,注意返回值以了解得到的字节数。继续调用Read(),直到获得所有预期接收的内容


编辑:SettingRS232()方法存在错误:

 SerialPort mySerialPort = new SerialPort(port);
这将创建一个名为mySerialPort的局部变量。您正在初始化该局部变量,而不是代码其余部分正在使用的mySerialPort变量。通过这样编写来修复错误:

 mySerialPort = new SerialPort(port);

我已经这样做了
mySerialPort.DataReceived+=newserialdatareceivedeventhandler(port\u rec)但它在这行给我错误,请更准确。“错误”信息不足。我检查了另一端的数据。。现在不用担心了。。我不能承认你的评论与我的回答无关。关键是你没有得到任何数据。在基本操作完成之前,请避免在收到的数据中丢失。先生,我已经编辑了我的问题并添加了设置,如果我遗漏了什么,可以检查设置并更正我吗?是的,我这样做了,谢谢,但我仍然没有得到确认