2012-06-17 4 views
4

Я даже не уверен, как задать этот вопрос, но я дам ему шанс.Получить переменную из одной программы в другую

У меня есть программа в C#, которая считывает значения от датчиков на производственной линии, которые указывают на состояние линии. Эти значения обновляются каждые 500 миллисекунд. У меня есть четыре строки, для которых это сделано. Я хотел бы написать «обзорную» программу, которая сможет получить доступ к этим значениям по сети, чтобы дать хорошее резюме о том, как работает завод. Мой вопрос в том, как получить значения из программ C# на линии в обзорную программу C# в реальном времени?

Если мой вопрос не имеет большого смысла, дайте мне знать, и я постараюсь его перефразировать.

Спасибо!

+3

Возможно, вы можете написать значения в базе данных? Вероятно, это был бы самый простой подход. Тогда другое приложение, или любые механизмы отчетности или другие потребности бизнес-аналитики, просто будет читать из этой базы данных. – David

+0

Спасибо Дэвиду Мне нравится звук базы данных, чтобы выполнить эту работу, быстро и легко реализовать. – user1003131

ответ

2

Это зависит от целого ряда вещей, я бы сказал. Прежде всего, это просто последнее значение каждой строки, интересное для приложения «обзор», или вам нужно несколько значений для определения состояния линии или вы, возможно, хотите иметь историю значений?

Если вас интересует только последнее значение, я напрямую передам это значение в приложение для обзора. Как было предложено другими, у вас есть множество возможностей здесь:

  • Исходный TCP с использованием TcpClient (может быть немного слишком низкоуровневым).
  • Экспозиция конечной точки http в обзорном приложении (возможно, это веб-приложение) и отправьте новые значения этой конечной точке.
  • Используйте WCF раскрыть некоторые endpoint (namedpipes, net.tcp, http и т.д.) на обзорном приложения и называют эту конечную точку из каждого клиентского приложения.
  • Используйте MSMQ, чтобы каждый клиент регистрировал сообщения, которые затем просматриваются приложением обзора (также напрямую поддерживаемым WCF).

Если вам нужна некоторая история значений или вам нужно несколько значений для определения состояния линии, я бы пошел с решением для базы данных. Затем вам нужно выбрать: каждый клиент пишет в базу данных или каждый клиент отправляет в обзорное приложение (используя любое из средств связи, описанное выше), и приложение для обзора записывается в базу данных.

Не зная каких-либо ограничений для вашей ситуации, трудно решить любую из этих проблем.

+0

Спасибо за прекрасный обзор всех! Проводка на этом сайте всегда спасает меня от дней исследований и испытаний и ошибок. Мне нравится идея базы данных, потому что она будет доступна для любой программы и, следовательно, масштабируема, если больше программ должны получить доступ к данным. Система уже поддерживается сервером sql для обработки номеров позиций для каждого выпускаемого продукта и маркировки информации, относящейся к этому продукту (то есть физических размеров, даты и времени производства, отчетов об инспекциях от массивов датчиков и т. Д.). С другой базой данных я мог бы обновлять ее каждую секунду или около того с помощью данных в реальном времени – user1003131

3

У вас есть несколько вариантов:

  • MSMQ

Написать сообщения в MSMQ (Microsoft Message Queuing). Это (необязательно) постоянное и быстрое хранилище для транспортировки сообщений между машинами. Поскольку вы говорите, что вам нужны сообщения в другом приложении почти в реальном времени, тогда имеет смысл использовать MSMQ, потому что вы не хотите писать логику в этом приложении для обработки больших объемов входящих сообщений. Держите MSMQ посередине и вытащите то, что вам нужно, а самое главное, когда сможете.

  • WCF

Другого приложение может подвергнуть службы WCF, которая может быть вызвана с помощью вашего приложения в режиме реального времени каждый раз, когда данные там доступны. Конечная точка может быть более net.tcp, что означает низкие накладные расходы, особенно если вы отправляете небольшие сообщения.

Другие варианты включают в себя то, что было сказано ранее: база данных, файл и т. Д. Таким образом, вы можете сделать свой выбор между широким спектром вариантов.

+1

Я очень люблю MSMQ. – Joe

+0

Все должны :). Это очень просто реализовать и практически не наносит накладных расходов, особенно при использовании в качестве протокола WCF. –

+0

hhmmm никогда не слышал о MSMQ раньше ... я думаю, что плохой ход с базой данных, потому что infastrucutre уже существует для других частей системы, но я определенно смотрю в нее просто потому, что это звучит действительно, действительно круто. – user1003131

2

Вы можете использовать именованные каналы (см. http://msdn.microsoft.com/en-us/library/bb546085.aspx), чтобы иметь быстрый способ связи между двумя процессами.

+2

Да, но следует отметить, что он не работает, когда процессы находятся на отдельных машинах. –

+0

Спасибо за ответ Sascha, но мне нужны процессы для работы на отдельных машинах. Спасибо, что указали это на marclen. – user1003131

2

База данных. Поместите свои значения в базу данных, а другое приложение вытащит их из той же базы данных. Это очень распространенное решение этой проблемы и открывает миры новых сценариев.

см: Relation database

Смежные вопросы