背景:
我想在 C++ 中创建一个自动化框架,一方面“传感器”和“参与者”,另一方面“逻辑引擎”可以连接到“核心”。
“传感器”和“执行器”可能连接到运行“核心”的机器,但有些也可以通过现场总线或普通计算机网络访问。有些可能连续或周期性工作(例如每 100 毫秒一个新值),其他可能工作事件驱动(例如,仅当开关被 [de] 激活时,消息才会带有新状态)。
“逻辑引擎”可以插入到内核中,例如由嵌入式众所周知的脚本语言(Perl、Python、Lua、...)组成。
“核心”将传感器/参与者信息路由到订阅的脚本并调用它们。有些是在事件发生之后,有些是在调度程序中定义的周期性的。
其他要求:
- 运行此自动化应用程序的系统(“服务器”)也可能非常小(500MHz x86 和 256 MB RAM),或者可能甚至很小(基于 OpenWRT 的路由器),因为功耗是一个问题
=> 效率很重要
=> 多核支持不目前,但我相信它很快就会变得重要 - 所以设计必须支持它 - 某种故障保存模式必须是可能的,例如两个系统互相监视
- 应用程序/框架将是 GPL => 所有使用的库必须兼容
- 服务器将运行 Linux,但跨平台会很好
最大的问题:
这种应用程序/框架的最佳架构是什么?
我的理由:
不要重新发明轮子,我想使用 MPI 来完成所有的事件处理。
这将使我能够专注于相关的东西而不是消息处理,尤其是当两个或多个“服务器”一起工作时(相互看门狗以及每个都有一些传感器和参与者连接)。每个传感器和参与者处理程序以及逻辑引擎本身只需要实现一个预定义的基于 MPI 的接口,因此可以保存崩溃。当核心不再响应时,核心可以重新启动。
附加问题:
- 使用 MPI 甚至可能吗?(它会被使用有点脱离上下文......)
- MPI的开销会不会太大?我应该使用套接字和线程自己编写吗?
- 在这种情况下是否有其他可能更适合的库?