【发布时间】:2015-05-19 16:07:32
【问题描述】:
我正在尝试实现一个类似于 Labview 的系统(在 Java 中),其中一些块能够
- 采购
- 下沉
- 传递
数据。
每个块都有多个输入 (>= 0) 和多个输出 (>= 0),并专门用于输入、输出和转换数据的功能。数据流表示为样本,取自各种设备(温度计、风速计、辐照传感器、功率计等)的现场测量数据。
每个样本都与一个“纪元”相关,即从触发器开始捕获所有值的瞬间(源块应具有特殊的触发输入),因此来自纪元的样本组应与其他样本一起处理来自同一个。
例如,典型的区块链可以由源(温度传感器)表示,然后是平均块(传递),最后是能够将数据记录到数据库中的接收器(接收器块)。
我已经实现了一个类似推送的策略,其中每个块都拥有“下一个块”引用并在其上调用一个方法,将数据传递给处理。在遇到块(如比较器块,具有两个浮点输入和一个布尔输出)需要输出基于相同样本时期的比较值的情况之前,此策略可以完美运行。
问题是我无法找到并应用抽象这个问题的模式。也许这类似于 Labview 或 Simulink 块在内部工作的方式,但我仍然没有成功找到“最佳实践”。我的“推送策略”的主要问题是,根据链的大小和深度,具有多个输入的块完成处理属于不同时期的样本(想象一个比较器块比较来自两个不同测量的两个样本)。
在此先感谢您提供的所有建议、技巧、最佳实践以及能够解决我比编程更哲学的问题的一切。
【问题讨论】:
-
你能澄清一下“比较块”的问题吗?是否因为 2 个输入在不同时间出现的时间有问题?
-
要回答您的最佳实践问题,您可能会发现诸如此类的企业解决方案很有趣(无从属关系)inductiveautomation.com/scada-software
-
我知道已经有商业解决方案在做我的工作。由于我必须从头开始编写软件并且我有特殊要求,因此我的选择倾向于概念验证和最佳实践搜索。您正在解决的比较器块问题之所以发生,是因为在仅由事件驱动的环境中移动,时间变得至关重要。
标签: design-patterns block implementation flow