对串口发送很多命令,如何对收到的数据进行响应?

wdw1985 2011-08-18 05:25:21
程序里有一个string类型的变量用来存放我要发送的数据,
比如我要发送:
a
b
c

每一行是一个命令,每一行后面都有回车符“\n”,串口每收到一个命令都要再传回来一些数据

发送完 a 之后,等待串口传回来的数据,如果有数据返回,再接着发送B,如果返回了error或者过了n秒还没有数据返回,那么就提示用户超时,后面的就不发了

请问这个该怎么实现呢。

...全文
345 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
llsus 2011-08-19
  • 打赏
  • 举报
回复
调用这个函数发送,返回True就发下一条。想要返回的数据自己改函数。

        private bool sendDone(string sendstring, int timeout)
{
try
{
serialPort1.WriteLine(sendstring);
for (int i = 0; i < timeout * 10; i++)
{
System.Threading.Thread.Sleep(100);
if (serialPort1.BytesToRead > 0)
{
if (serialPort1.ReadLine() == "error")
return false;
else
return true;
}
}

return false ;
}
catch
{
return false;
}
}
wdw1985 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 syx151 的回复:]
当然可以,你写下试试不就知道啦
[/Quote]

我是觉得这个是比较笨的方法

用了2L的方法,每次ReadLine的时候就超时。。。
syx151 2011-08-19
  • 打赏
  • 举报
回复
当然可以,你写下试试不就知道啦
wdw1985 2011-08-19
  • 打赏
  • 举报
回复
我想这样做

把每一行都放在一个栈里,从头开始传,传一个退一个,然后在comm_DataReceived()事件里面进行判断,不知道可不可以
hui_play 2011-08-18
  • 打赏
  • 举报
回复

serialport sp=new serialport ();
sp.PortName = "com3";
sp.BaudRate = 9600;
sp.ReadTimeout = 5000;//5秒后时间过期
sp.Open();
sp.WriteLine("a");
string aa=sp.readLine();
sp.WriteLine("b");
string bb=sp.readLine();
sp.WriteLine("c");
string cc=sp.readLine();


xiaotiange 2011-08-18
  • 打赏
  • 举报
回复
用serialport 控件
在serialport 的dataReceive事件中处理接受的数据
用timer控制回传和超时问题

111,097

社区成员

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

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

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