我们需要从安全系统,火警,摄像系统等系统中采集数十种不同的协议,并将它们集成到一个通用协议中。
我希望这是一个许多系统可以订阅和/或通过它进行通信的消息服务器。
biztalk适合这个吗?
是否有开源替代品?
是否有Java / Java EE方法可以做到这一点?
一方面,系统将是一个SCADA系统,另一方面是一种中间件/消息服务器。
任何关于最佳进展方式的想法都将受到赞赏。我知道在驱动程序方面会涉及大量的编程,但是尽管我很有诱惑,但从头开始构建整个系统并不合适。
答案 0 :(得分:6)
我会避免使用BizTalk for SCADA和RS232 / RS485,因为这些通常需要实时(或至少是低延迟)解决方案。 BizTalk针对高吞吐量进行了优化,但缺点是默认情况下具有高延迟。
你可以调整BizTalk以获得低延迟,但此时你会发现你几乎绕过了BizTalk内置的所有东西,它可能会妨碍你而不是帮助你。
答案 1 :(得分:3)
如果您不介意在Java平台上工作,那么在名为Enterprise Integration Patterns的开源项目中有一个轻量级协议切换器和Apache Camel的实现。
Camel已经可以说common protocols and technologies files,email,JMS,XMPP等大多数MINA component,所以没有实际的编码这些东西需要。
要添加新的自定义协议,最简单的方法是在HL7 component之上构建,它负责所有网络,套接字处理,线程等(例如NIO与BIO等)。
然后你只是扩展它来添加你自己的协议编解码器(如何在套接字上编组/解组消息,可能使用框架等)。
detail on writing MINA codecs here就是这样做的一个例子。更多Enterprise Integration Patterns。
然后,一旦你有了你的camel组件(让我们称之为foo),你就可以使用简单的URI从任何协议桥接到任何其他协议来实现任何Content Based Router,例如Recipient List, Routing 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读卡器的驱动程序。