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