0

我将有 4 个硬件数据采集单元通过硬连线以太网 LAN 连接到单个控制 PC。此应用程序的编码将驻留在 PC 上,并且完全基于 Python。每个数据采集单元的配置相同,并且将以相同的方式从 PC 轮询。它们连接的测试盒提供我们寻求进行测试的可变输出。

这些测试是长期的(8-16 个月或更长时间),数据采集率相对较低(每分钟不到 500 个样本,可能接近 200 个)。一般工艺流程也很简单。我将遍历每个数据采集设备并:

  • 从设备中读取数据;
  • 对数据进行一些计算;
  • 如果计算结果是一回事,请打开加热器;
  • 如果他们说别的,什么也不做;
  • 将数据写入磁盘和文件以供后续处理

我会等一段时间,然后再重复一遍这个过程。以下是我的问题:

  1. 我计划使用一个while TRUE:循环来开始执行我上面概述的序列,并允许通过异常退出循环,但我欢迎任何关于我应该检查的特定异常的建议 - 甚至,这是最好的方法是什么?另一种方法可能是:一旦进入while循环,我可以使用try: - except: - finally:构造退出循环。
  2. 我上面概述的过程是针对主要数据采集的东西,但是考虑到收集时间的长度,我还需要能够做其他事情:检查硬件单元是否运行正常,进行测试台上和下线根据需要等。这些“管理”功能与主循环不同,所以我想保持它们的区别。我应该在同一脚本中的不同线程中设置此活动,还是有更好的方法?

提前谢谢各位。欢迎所有反馈!

4

2 回答 2

2

我认为使用客户端-服务器模型对您有好处

它将很好地分开,因此一个脚本不会影响另一个脚本 - 状态检查/数据收集

基本上你会做什么来运行服务器以在主机上收集数据,这可能有一些用于维护的终端输入(日志记录、优雅退出等),并且数据收集 PC 将像客户端一样使用 while True 循环(可以除非被杀死,否则无限运行),并且在每台数据收集 PC 上将是服务器/客户端(取决于观点)以进行状态检查,并将数据发送到 MAIN pc,您将在其中决定做什么

此外,如果您使用 unix/linux 甚至 Windows,则只需使用 ssh 到机器并检查状态(手动或通过主机上的脚本)...取决于特定需求...

享受

于 2012-08-28T19:20:11.393 回答
1

您可能需要不止一个循环。如果仪器是 TCP 服务器,您可能希望在内部循环中捕获“断开连接”异常并尝试重新连接,而不是永久终止仪器线程。

不确定Python。在 C++、C#、Delphi 上,我可能会通过在生产者-消费者队列上等待超时来产生等待。如果没有发布任何内容,您概述的序列将按照您的意愿重复。如果需要发生其他一些偶尔的事情,您可以排队一条消息,指示线程向仪器发出必要的命令,或者断开连接并设置内部“不要轮询,等到指示重新连接和再次轮询'标志,或任何需要做的事情。

这种方法比停止线程并从其他线程连接只是为了偶尔做一些事情要干净。任何语言都最好避免停止/终止/重新创建线程。

于 2012-08-28T19:23:46.553 回答