Преобразование / нормализация протокола:Biztalk, альтернативы?
Вопрос
Нам необходимо использовать десятки различных протоколов из таких систем, как системы безопасности, пожарная сигнализация, системы видеонаблюдения и т.д..и интегрировать их в единый общий протокол.
Я бы хотел, чтобы это был сервер обмена сообщениями, на который многие системы могли бы подписаться и / или общаться через него.
- опрашивающие и непроверяющие "драйверы" (преобразователи протоколов)
- обрабатывать RS232/ RS485 / tcp
- программируемые "драйверы" на управляемом языке, таком как Java или C#
- возможности двигателя правил
Подходит ли biztalk для этого?
Существуют ли альтернативы с открытым исходным кодом?
Есть ли Java / Java EE способ сделать это?
На одном конце система будет представлять собой SCADA-систему, на другом - своего рода промежуточное программное обеспечение / сервер обмена сообщениями.
Будем признательны за любые мысли о наилучшем способе действий.Я знаю, что на стороне драйвера потребуется значительный объем программирования, однако, как бы у меня ни было искушение, создавать всю систему с нуля было бы нецелесообразно.
Решение
Если вы не возражаете работать на платформе Java, есть облегченный переключатель протоколов и реализация Шаблоны корпоративной интеграции в проекте с открытым исходным кодом под названием Верблюд - апач.
Верблюд уже может говорить на большей части общие протоколы и технологии Нравится Файлы, Адрес электронной почты, JMS, XMPP и так далее, чтобы для этих вещей не требовалось никакого фактического кодирования.
Чтобы добавить новые пользовательские протоколы, самый простой способ - создать поверх Компонент MINA который заботится обо всех сетевых процессах, обработке сокетов, передаче потоков и так далее (напримерNIO против BIO и др.).
Затем вы просто расширяете его, чтобы добавить свой собственный кодек протокола (как маршалировать / отменять маршалирование сообщений в сокете с возможным использованием фрейминга и т.д.).
В Компонент HL7 является примером того, как это делается.Еще подробно о написании кодеков MINA читайте здесь.
Затем, как только у вас будет ваш компонент camel (назовем его foo), вы сможете перейти от любого протокола к любому другому протоколу, используя простые URI для реализации любого из Шаблоны корпоративной интеграции такие , как Маршрутизатор на основе контента, Список получателей, Маршрутный лист и т.д.
например ,в коде 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}");
Другие советы
Я бы избегал BizTalk для SCADA и RS232 / RS485, потому что для них обычно требуются решения в реальном времени (или, по крайней мере, с низкой задержкой).BizTalk оптимизирован для высокой пропускной способности, но имеет недостаток в том, что по умолчанию имеет высокую задержку.
Вы можете настроить BizTalk на низкую задержку, но на этом этапе вы обнаружите, что обходите почти все, что встроено в BizTalk, и это, вероятно, будет мешать, вместо того чтобы помогать вам.
www.livedata.com
Это немного дорого, но это движок на базе python, который может принимать один протокол и выдавать другой, он уже настроен для нескольких протоколов scada, таких как ICCP, modbus, OPC и DNP "из коробки".Тогда вы сможете говорить все, что захотите, ниже по течению.
- Джон
Я предлагаю OpenSCADA ( ОпенСКАДА ).На данный момент веб-сайт находится в некотором беспорядке, но программное обеспечение активно используется и находится в активной разработке.Явная цель - создать общий, независимый от технологии интерфейс для вариантов использования SCADA (хотя на данный момент направление более или менее ориентировано на java [но мы экспериментируем также с ikvm для создания версии .NET]).
Таким образом, вы могли бы использовать OpenSCADA для связи со всеми "аппаратными" устройствами, а затем создать мост к остальной части вашего промежуточного программного обеспечения или создать OpenSCADA bridge в качестве плагина в вашем промежуточном программном обеспечении.Например, у нас уже есть драйверы, которые подключаются к кард-ридерам, подключенным через последовательный сервер к локальной сети.