Обмен данными между приложением *.exe и другой программой

Простейшие вопросы в области инженерной разработки

Обмен данными между приложением *.exe и другой программой

Postby Юрий on 18 Jan 2020, 21:50

Приложение принимает данные по COM порту с разных устройств, заранее не известных. То есть структура данных становиться известна только по мере появления устройств. А хотелось бы иметь представление о данных в виде таблицы или графика. Один из вариантов рассматриваю такой. Приложение одно, которое имеет возможность отдавать из себя полученную информацию. А для каждого нового устройства писать свою программку, которая выделяла бы нужные данные и выводила их, или, в строго заданном формате, отдавала обратно приложению. Вижу, что обмен данными можно обеспечить через файлы. Если это единственный вариант, то интересно какую максимальную частоту такая система может пропустить через себя? Может, есть варианты без использования файлов?
Юрий
professional
professional
 
Posts: 332
Joined: 28 Feb 2010, 18:04
LabVIEW Version: LV2015
Karma: 55

Re: Обмен данными между приложением *.exe и другой программо

Postby dadreamer on 18 Jan 2020, 23:06

Обойду пока стороной вопросы архитектуры, наверняка кто-нибудь выскажется на этот счёт и предложит что-то оптимальное (плагины и т.д.). Коммуникацию между экзешниками можно реализовать множеством разных способов: TCP/IP, UDP, Network Streams, Shared Variables, CVT, Pipes, Shared Memory. Что-то попроще (Network Streams, Shared Variables), что-то посложнее (TCP/IP, UDP). Pipes и Shared Memory - функционал Windows, обеспечивает наименьшую латентность из всех способов. Но нужно немного понимать, как это работает. Про Pipes было несколько тем, где я описывал эту технологию и как её встроить в :labview: . К сожалению, из-за глюков форума часть сообщений (все, где были ссылки) пропала и кэши гугла/яндекса и вебархив не помогают. ( Например, одна из них: viewtopic.php?f=52&t=7553&hilit=pipes Файлы для этой задачи я бы использовал не стал, ни к чему при каждой транзакции дёргать диск. Да и с файлами возможны разные "весёлые" ситуации: https://en.wikipedia.org/wiki/Race_cond ... le_systems Вот здесь кратко расписаны плюсы и минусы каждого подхода IPC (Inter-Process Communication): https://forums.ni.com/t5/Developer-Cent ... anguage=en Однако всё-таки первым делом надо железно определиться с архитектурой приложения или приложений. Потому что если реализовать всё в рамках одного проекта :labview: (например, на плагинах), то и возня с IPC не имеет смысла. Нужно определиться, как программа по работе с устройствами будет передавать данные в прочие программы: или это будет множество каналов "точка-точка" или это будет канал "один-многим", то же самое в обратную сторону. Все подобные вещи желательно продумать.
User avatar
dadreamer
professor
professor
 
Posts: 3423
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 858
I/O VIP vision internet

Re: Обмен данными между приложением *.exe и другой программо

Postby Юрий on 18 Jan 2020, 23:35

dadreamer, спасибо. С архитектурой сразу было понятно, что будут вопросы и предложения, но это не главное. Главное я услышал о других вариантах обмена данными с приложением, практически с ними не работал. Действительно, когда то по вашим ссылкам просматривал вариант с Pipes, но это было совсем давно. По поводу прочих программ хоть и их и будет какое то количество, но все они одновременно работать не будут - будет всего одна, что, конечно, облегчает работу. Структура такая: устройство (разные) - приложение (одно) - прочая программа (конкретно под текущее устройство). Ну что ж, буду анализировать предложенные варианты.
Юрий
professional
professional
 
Posts: 332
Joined: 28 Feb 2010, 18:04
LabVIEW Version: LV2015
Karma: 55

Re: Обмен данными между приложением *.exe и другой программо

Postby toshas on 19 Jan 2020, 10:17

Сделайте передачу на базе сетевых протоколов (UDP или TCP), нативная поддержка, простота реализации, возможность перейти потом на распределенную архитектуру.
User avatar
toshas
junior
junior
 
Posts: 59
Joined: 05 Apr 2009, 22:45
LabVIEW Version: 9.0
Karma: 0

Re: Обмен данными между приложением *.exe и другой программо

Postby dadreamer on 19 Jan 2020, 14:42

>> Структура такая: устройство (разные) - приложение (одно) - прочая программа (конкретно под текущее устройство).

При такой структуре можно выбрать любой способ коммуникации. Я бы взял Network Streams и не парился. Сколько с ним не работал, никогда проблем не было, как по сетке, так и на локалке. Имеющихся в LV примеров за глаза хватает, чтобы построить базовые алгоритмы приёма-передачи. Вот статья о том, как это работает и как выглядит: https://www.ni.com/ru-ru/innovations/wh ... chite.html Есть, конечно, и минусы, но в конкретном случае они не ощутимы.
User avatar
dadreamer
professor
professor
 
Posts: 3423
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 858
I/O VIP vision internet


Return to Для чайников

Who is online

Users browsing this forum: Bing [Bot] and 9 guests

cron