弱问一个关于串口接收的问题

大家好,

我现在用write和read写了一个串口发送和接收的程序,
具体就是我每次用write给传感器发一个命令,传感器就会返回相应的数据。但是数据的长度是变化的。我现在就是在write和read之间加了一个延时,来确保数据接收完整了。这个延时的时间都是我随便加的,我怎样才能找到一个正好的合理的延时时间呢?或者有什么其它的办法?
tcdrain()这个函数是等待output发完再往下进行,有没有类似这个针对接受数据的命令阿?

谢谢各位!

串口是个“字符流”设备。要在这个流中区分出一块一块“命令”和“数据包”的话,最普通的办法是象ppp那样定义分隔字符,两个分隔符间的就是一个数据包。

不过,这个比较麻烦。工控里更多的是看设备。比如你的传感器,如常如规定在收到命令后多少时间内应答,有的还会规定应答超时。返回数据长度应该也会有上限吧。再加上波特率,从命令被”写“出去,到可以”读“第一个字节,到读完所有数据的时间间隔是可以计算的。多少加点余量,就可以得出你的延时值。

“从命令被”写“出去,到可以”读“第一个字节”,这个怎么计算阿?这个是传感器的参数吗?
resource mangaer用起来会不会比write和read好点,下了一个别人给写的代码,不知道怎么用?怎样能直接使resource mangaer现成的代码跑起来,我想先看看它是怎么数据交换的?

谢谢!!

不好弄啊,如果传感器那边的收发程序能改,那么可以实现一个简单的软件握手。