【问题标题】:read data from socket from SerialForwarder从 SerialForwarder 的套接字读取数据
【发布时间】:2013-04-28 02:47:13
【问题描述】:

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

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

warning unsuccessful read a timeout occurred before the terminator was reached

如何从SerialForwarder读取数据?

【问题讨论】:

    标签: matlab sockets tcp serial-port tinyos


    【解决方案1】:

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

    您可以直接从串口读取。在这种情况下,您不需要串行转发器。需要注意的事情很少。

    例如,如果您想读取发送到 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。因此,您可以在您的 c# 程序中,当您遇到7E 时开始从串行端口读取,并在您到达流中的下一个7E 时停止读取。介于两者之间的一切都将是您的数据包。

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-06-07
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多