2015-11-09 19 views
0

这是关于一个需要通过软件控制的机电系统。目前还不清楚它将被写入哪种语言,但由于它并不重要,所以让我们用Java来说。控制软件中的层从真正的机电系统和仿真程序中提取

1.问题是我们需要通过CAN发送消息。所以我们有控制软件,发生了一些事件,我们通过CAN发送消息。机电系统将作出反应。

现在的第2件事情是,显然它能够在没有真正的机电系统的情况下测试软件,因为它减少了工作量。所以我想写另一个程序,一个模拟程序。

所以我想象一下,仿真程序会通知CAN消息何时发送并作出反应。

如何实现这一目标?

我指的是真正的机电一体化系统,控制软件需要在总线上直接发送CAN信息(也许通过一些本地代码)。对于仿真程序,需要某种进程间通信。控制软件的设计必须如何设计:它不在意是否有一些正在侦听的仿真程序或真正的机械系统获取CAN消息?

我首先想到的是控制软件总是通过进程间通信方式发送“CAN消息”。让我们说,为了简单起见,它是RMI。然后通过总线发送真正的CAN消息,同一控制软件中有一些模块通过RMI获取“CAN消息”,并将它们转发给真正的CAN总线。 现在仿真程序也可以通过RMI接收“CAN消息”,并且可以对其做出反应。

这是一个很好的方法吗?因为我发现控制软件中存在一些开销,通过进程间通信与自己进行通信,这在原则上并不是必需的。但是我看不出有其他可能性有抽象层,这样我就没有特殊的代码用于控制软件中的模拟程序。

谢谢您的反馈!

回答

0

您正在描述Hardware-in-the-loop测试的一个方面。这是开发结合了软件和硬件的机电一体化系统的标准方法。

在软件设置中,解决此问题的一种方法是提供一个接口(如在Java接口中,而不是在物理接口中)。您最终会得到该接口的两个具体实现,一个用于您的真实硬件,另一个用于您的测试版本。由于实际版本和测试版本提供相同的界面,因此它们应该是interchangeable。一旦你得到了你的接口描述了你如何实现它们应该是不相关的(即/你可以使用脚本语言来更快或更便宜地开发测试代码) - 所以RPC可能是一种可能性,但肯定有其他选择。