从SerialForwarder的套接字读取数据

时间:2013-04-28 02:47:14

标签: matlab sockets tcp serial-port tinyos

使用tinyos,SerialForwarder将数据转发到套接字。 我试图用主机打开套接字:“localhost”,port =“9001”,,但这总是会返回两个字节=“T!” !!

然后我尝试打开具有相同属性的TCP连接,但是我收到了这个警告:

warning unsuccessful read a timeout occurred before the terminator was reached

如何阅读SerialForwarder中的数据?

1 个答案:

答案 0 :(得分:0)

你必须仔细阅读串行堆栈......它不是很容易,但它能做到。

您可以直接从串口读取。在这种情况下,您不需要串行转发器。几乎没有什么可以照顾的。

例如,如果您想要读取正在发送到PC串行端口的串行消息(usb传感器板就像串行一样工作,因为它们使用USB转换为FTDI芯片的串行转换器。)

在C#中(对于Java等同样...),您可以读取串行端口中的字节流。您可以解析此字节流以提取tinyos的标准串行消息。

这在TEP #113中以某种方式解释,虽然它有一些问题,但您应该能够找到这些问题并使您的程序正常工作。

正如在TEP 113中所述,标准串行数据包类似于:

  

7e 40 09 00 ef 05 7d 5d 06 01 02 03 04 05 7e

这意味着,数据包以十六进制7E开头(我相信它的126或127),并以7E结束。最后2个字节是数据包的CRC。因此,当您遇到7E时,您可以在c#程序中开始从串口读取数据,并在到达流中的下一个7E时停止阅读。介于两者之间的一切都将是你的数据包。

您必须小心escaping,如果7E是您的数据包内容的一部分,不要与开始和结束的血液计量器混淆,它将被转义为其他东西..那也是在TEP 113中解释的。

我相信有一些用于计算CRC的C ++代码,您可以轻松地将其转换为C#或Java代码。

同时检查Serial.h的源代码,其中包含有关如何在TinyOS中形成串行数据包的一些细节。