3

我正在尝试将 Python 数据记录器放在一起,并正在寻找一些建议。这是我的情况。我不希望任何用户干预。只需插入并记录。到目前为止,我正在使用 PySerial 模块,并且能够将所有串行数据记录到文本文件中。我读了一行,存储在一个变量中,然后将该变量以附加模式写入文件。

现在我想将这些数据传输到网络上进行绘图。这就是我头疼的地方。我应该尝试将其发送到 SQL 服务器还是仅发送到文本文件?我正在使用 3g 模块,但速度/带宽是有限的。数据以每 0.25 秒 1 个样本流式传输到记录仪 这是一个示例:

1 324 23454 2342 0 233 0 0 12223 66453 443 33 33 20 0 0 0 0

所以我认为我不需要发送每个样本,也许每秒或每隔一秒只发送一条线。

记录器只会运行大约 5 天,然后将记录所有数据。现在我的问题是,关于我应该如何/在哪里发送数据有什么建议吗?SQL 或文本文件?接下来,如果我有这些数据在线,是否有一种简单的方法可以在数据流式传输时实时绘制这些数据?

为了锦上添花,有时原始数据会以空格分隔,有时以制表符分隔,有时以逗号分隔。

任何输入将不胜感激!

4

1 回答 1

1

好的,所以您在这里有很多问题/问题。我将尝试解决每个问题:

数据库

将每一行保存在数据库的表中。它会让你的生活更轻松。我建议使用可以处理大负载的东西,例如 MySQL 或 Postgres。我可以建议以下表格设计。line是您的数据,uploaded是一个标志,指示此行是否已上传到服务器。line_date可以记录读数的确切日期时间,这可能有助于捕获。如果您的数据行是可变的并且您不想设置固定长度,请将 varchar(200) 更改为文本。我建议您将此表保留在客户端,并使用上传字段作为标志来指示此行是否已上传到服务器。这样您就不会在任何网络连接问题期间丢失任何数据,并且您可以跟踪哪些线路仍在等待上传。然后,您可以拥有一个仅插入行的脚本,另一个脚本或线程读取未上传行的列表并每隔一秒左右上传一次。为简单起见,您还可以在服务器上使用几乎相同的表格设计。

CREATE TABLE data_lines (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    line VARCHAR(200),
    uploaded INT,
    line_date DATETIME
);

解析行

您提到原始数据将以空格分隔,有时以制表符分隔,有时以逗号分隔。这行简单的代码可以处理所有这些情况。

>>> line = "1,2 3\t4"
>>> print line.replace(',', ' ').split()
['1', '2', '3', '4']

实时图表

弗洛特是要走的路。他们做了非常棒的基于网络的实时图表。你可以在这里看到一个例子

于 2012-12-04T17:02:16.950 回答