1

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

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

warning unsuccessful read a timeout occurred before the terminator was reached

如何从SerialForwarder读取数据?

4

1 回答 1

0

你必须彻底阅读串行堆栈......它不是很容易,但它确实可以。

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

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

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

这在TEP #113中以某种方式进行了解释,尽管它存在一些问题,但是您应该能够找到这些问题并使您的程序正常工作。

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

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

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

您必须注意的escaping是,如果 a7E是您的数据包内容的一部分,请不要与开始和结束直径计混淆,它将被转义为其他内容......这也在 TEP 113 中进行了解释。

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

还要检查源代码,Serial.h其中包含有关如何在 TinyOS 中形成串行数据包的一些详细信息。

于 2013-04-28T15:43:16.453 回答