协议转换/规范化:Biztalk,替代方案?

时间:2008-10-23 11:40:51

标签: biztalk messaging scada

我们需要从安全系统,火警,摄像系统等系统中采集数十种不同的协议,并将它们集成到一个通用协议中。

我希望这是一个许多系统可以订阅和/或通过它进行通信的消息服务器。

  • 轮询和非轮询“驱动程序”(协议转换器)
  • 处理RS232 / RS485 / tcp
  • Java或C#等管理语言中的可编程“驱动程序”
  • 规则引擎功能

biztalk适合这个吗?

是否有开源替代品?

是否有Java / Java EE方法可以做到这一点?

一方面,系统将是一个SCADA系统,另一方面是一种中间件/消息服务器。

任何关于最佳进展方式的想法都将受到赞赏。我知道在驱动程序方面会涉及大量的编程,但是尽管我很有诱惑,但从头开始构建整个系统并不合适。

4 个答案:

答案 0 :(得分:6)

我会避免使用BizTalk for SCADA和RS232 / RS485,因为这些通常需要实时(或至少是低延迟)解决方案。 BizTalk针对高吞吐量进行了优化,但缺点是默认情况下具有高延迟。

你可以调整BizTalk以获得低延迟,但此时你会发现你几乎绕过了BizTalk内置的所有东西,它可能会妨碍你而不是帮助你。

答案 1 :(得分:3)

如果您不介意在Java平台上工作,那么在名为Enterprise Integration Patterns的开源项目中有一个轻量级协议切换器和Apache Camel的实现。

Camel已经可以说common protocols and technologies filesemailJMSXMPP等大多数MINA component,所以没有实际的编码这些东西需要。

要添加新的自定义协议,最简单的方法是在HL7 component之上构建,它负责所有网络,套接字处理,线程等(例如NIO与BIO等)。

然后你只是扩展它来添加你自己的协议编解码器(如何在套接字上编组/解组消息,可能使用框架等)。

detail on writing MINA codecs here就是这样做的一个例子。更多Enterprise Integration Patterns

然后,一旦你有了你的camel组件(让我们称之为foo),你就可以使用简单的URI从任何协议桥接到任何其他协议来实现任何Content Based Router,例如Recipient ListRouting Slip,{{3}}等

e.g。在Java代码中

// route all messages from foo
// to a single queue on JMS
from("foo://somehost:1234").
  to("jms:MyQueue");

// route all messages from foo component
// to a queue using a header
from("foo://somehost:1234").
  recipientList().
    simple("activemq:MyPrefix.${headers.cheese}");

答案 2 :(得分:3)

www.livedata.com

它有点贵但它是一个基于python的引擎,可以采用一个协议并吐出另一个协议,它已经设置了多个scada协议,如ICCP,modbus,OPC和开箱即用的DNP。然后你可以在下游谈论任何你想要的东西。

  • 约翰

答案 3 :(得分:2)

我建议OpenSCADA。该网站目前有点混乱,但该软件正在积极使用和积极开发。一个明确的目标是为SCADA用例创建一个通用的,独立于技术的接口(虽然目前方向或多或少是针对java [但我们也尝试使用ikvm来创建.NET版本])。

因此,您可以使用OpenSCADA与所有“硬件”设备进行通信,然后创建与其他中间件的桥接,或者在中间件中创建OpenSCADA桥接器作为插件。例如,我们已经连接到通过串行服务器链接到LAN读卡器的驱动程序。