串口如何接收返回的成功的字符串

KEecho 2011-08-08 10:45:17

这里是发送的代码是成功的
private void btnUSB_Click(object sender, EventArgs e)
{
#region 简单的发送
try
{
if (serialPort1.IsOpen == false)
{
serialPort1.PortName = portName;
serialPort1.Open();
serialPort1.BaudRate = 115200;
//设置数据位
serialPort1.DataBits = 8;
//设置奇偶效验;
serialPort1.Parity = Parity.None;
//设置停止位;
serialPort1.StopBits = StopBits.One;
////读超时,即在1000内未读到数据就引起超时异常
serialPort1.ReadTimeout = 1000;
serialPort1.WriteTimeout = 1000;
//设置数据流控制;数据传输的握手协议;
serialPort1.Handshake = Handshake.None;
if (!serialPort1.IsOpen)
{
MessageBox.Show("请先打开端口");
return;
}
else
{
协议内容....
this.serialPort1.Write(start);
}
}
else
{
MessageBox.Show("端口未打开");
}


catch
{
MessageBox.Show("未找到端口!");
}
#endregion
}

//这里是接收的serialPort1_DataReceived方法
public string RecvText;
#region 处理serialPort对象的数据接收事件的方法
public void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(500);
//this.serialPort1.ReceivedBytesThreshold = 2;
byte[] buffer = new byte[serialPort1.BytesToRead]; //定义一个用于存放接收缓冲区中的数据的字节型数组
CheckForIllegalCrossThreadCalls = false;
try
{
serialPort1.Read(buffer, 0, buffer.Length); //从缓冲区中读数据,放到buffer中
for (int i = 0; i < buffer.Length; i++)
{
RecvText += buffer.ToString() + " "; //将buffer中的字节转行成16进制,然后赋值给全局变量RecvText
}
RecvText = RecvText.Trim();
//MessageBox.Show(RecvText);
this.serialPort1.DiscardInBuffer();
this.serialPort1.DiscardOutBuffer();
}
catch (Exception e2)
{
MessageBox.Show(e2.Message + "读取串口数据失败!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}



而我现在要做的是如何接收到我发送数据成功后
返回的一串字符串 "T0000OK"
...全文
393 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bai_bing_wei 2011-08-08
  • 打赏
  • 举报
回复
主要是你的问题不是很清楚。。。
我理解你的问题是一次接收接收到了RecvText,如何接收一段数据,最后判断接收到 "T0000OK "。
如果是这样的话,那么根据你的数据长度不同可以采用两种方法:
第一种:适用数据不是很长,那么可以将发送数据和"T0000OK "合成一串发送,接收端采用string的方法判断最后几个字符即可。。。
第二种:适用数据比较长,那么可以将发送数据分成多段发送,完成后,把"T0000OK "作为一串发送,接收端每次都判断一下是否"T0000OK "即可。。。。
rabbit5 2011-08-08
  • 打赏
  • 举报
回复
而我现在要做的是如何接收到我发送数据成功后
返回的一串字符串 "T0000OK "

接收的代码你已经写了,发送是用一个button实现的,问题lz是打算把 "T0000OK "返给谁呢?
KEecho 2011-08-08
  • 打赏
  • 举报
回复
没有人么
自己顶下
KEecho 2011-08-08
  • 打赏
  • 举报
回复
RecvText是这样子的


for (int i = 0; i < buffer.Length; i++)
{
RecvText += buffer.ToString() + " "; //将buffer中的字节转行成16进制,然后赋值给全局变量RecvText
}


这一段是否有问题 有的话又该如何修改
在线等呐
KEecho 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bai_bing_wei 的回复:]
主要是你的问题不是很清楚。。。
我理解你的问题是一次接收接收到了RecvText,如何接收一段数据,最后判断接收到 "T0000OK "。
如果是这样的话,那么根据你的数据长度不同可以采用两种方法:
第一种:适用数据不是很长,那么可以将发送数据和"T0000OK "合成一串发送,接收端采用string的方法判断最后几个字符即可。。。
第二种:适用数据比较长,那么可以将发送数据分成多段发……
[/Quote]
我的代码实现的功能是发送数据一条成功后 就会返回一条T0000OK 如果没有成功则是NG 在这里我要做判断的 不成功抛出错误给用户
而现在在一条数据发送成功后 如何接收到所返回的T0000OK 在接收代码中没得到呐所返回的T0000OK
KEecho 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 rabbit5 的回复:]
而我现在要做的是如何接收到我发送数据成功后
返回的一串字符串 "T0000OK "

接收的代码你已经写了,发送是用一个button实现的,问题lz是打算把 "T0000OK "返给谁呢?
[/Quote]
问题lz是打算把 "T0000OK "返给谁呢?
返回给我的后台 根据T0000OK我来做判断
接收的代码中没有正接收到T0000OK呐
我之所以知道所有数据发送成功 及返回是否为T0000OK是在串口监测工具中监测到的
RecvText += buffer.ToString() + " "; //将buffer中的字节转行成16进制,然后赋值给全局变量RecvText 这句有些问题

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧