реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Программная прослойка для сопряжения сторонних, программ с моим устройством
shreck
сообщение May 26 2011, 07:48
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Добрый день.

Есть устройство подключаемое к компу. Устройство управляется исключительно с компа. Есть компьютерная управляющая программа. Но, вариантов использования устройства - великое множество и моя программа их все охватить не может. Нужно дать пользователю устройства возможность легко написать заточенную под него программу. Т.е. предоставить ему некую программную прослойку, скрывающую особенности низкоуровнего обмена с устройством.

Навскидку приходят на ум следующие варианты (ни в одном из них я не профи, могут быть накладочки).

1. Использовать DLL, где и предоставить необходимые функции.
Большой плюс решения - очень просто как для меня - писателя DLL, так и для клиента - писателя основной программы.
Минус - нет совместимости между DLL, созданной разными компиляторами, или требуются неудобные телодвижения для использования "неродной" DLL. Отсюда проистекают ограничения на использование клиентской программой языка программирования.

2. Написать OPC сервер.
Плюсы. Есть стандарт, кроме самописной программы можно использовать какую-нибудь SCADA систему. Нет никакого навязывания языка программирования для клиента.
Минусы. Сложность. Конкретно нам придется заказывать разработку сервера на стороне. Клиент должен иметь программиста с подходящей квалификацией.

3. ??? что еще можно придумать. В нулевом приближении требования такие. Простота реализации как для меня, так и для клиента. Без навязывания клиенту языка программирования.

Go to the top of the page
 
+Quote Post
ReAl
сообщение May 26 2011, 08:30
Сообщение #2


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(shreck @ May 26 2011, 10:48) *
Минус - нет совместимости между DLL, созданной разными компиляторами, или требуются неудобные телодвижения для использования "неродной" DLL. Отсюда проистекают ограничения на использование клиентской программой языка программирования.
А не надо из DLL классы плюсовые экспортировать.
Лет восемь назад писал именно такого применения DLL-ку.
Внутри С++ для того, что было мне удобно.
Наружу только стандартный для Win интерфейс, местами с регистрацией call-back-ов пользовательского приложения, вызываемых моей DLL, в духе
Код
DLLIMPORT void APIENTRY EU_SetLogger(int32_t level, log_func func);

Собирал её GCC (mingw32), использовалось это с Delphi. Уж более разные компиляторы поискать надо.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
shreck
сообщение May 26 2011, 08:47
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(ReAl @ May 26 2011, 15:30) *
А не надо из DLL классы плюсовые экспортировать.

Это то понятно.

Цитата(ReAl @ May 26 2011, 15:30) *
Лет восемь назад писал именно такого применения DLL-ку...
Собирал её GCC (mingw32), использовалось это с Delphi. Уж более разные компиляторы поискать надо.

Хм... я в dll-ках не специалист, но беглый поиск показал, что dll от Visual C++ и С++ Builder несовместимы между собой без всяких ++. Тут еще надо поразбираться. На данный момент рассматриваю использование dll как наиболее верояное решение. Но может еще кто чего интересного подскажет.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 26 2011, 08:59
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(shreck @ May 26 2011, 12:47) *
На данный момент рассматриваю использование dll как наиболее верояное решение. Но может еще кто чего интересного подскажет.

Есть ещё технология OPC и DDE.
Но это зависит от пользователя. Некоторые могут и не понять.
А вот в АСУ ТП - это стандарт. Нативно поддерживается практически всеми SCADA-ми.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение May 26 2011, 09:03
Сообщение #5


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(shreck @ May 26 2011, 10:48) *
Добрый день.

Есть устройство подключаемое к компу. Устройство управляется исключительно с компа. Есть компьютерная управляющая программа. Но, вариантов использования устройства - великое множество и моя программа их все охватить не может. Нужно дать пользователю устройства возможность легко написать заточенную под него программу.


Устройство должно стать WEB сервером и предоставлять WEB сервисы на основе SOAP с описанием на WSDL.
Это будет самый универсальный и дальновидный подход.
Эти штуки есть во всех серьезных языках и фреймворках - .NET (С++, C#, VB), Delphi, PHP, Python, Java, JavaScript ...
Go to the top of the page
 
+Quote Post
shreck
сообщение May 26 2011, 09:23
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(AlexandrY @ May 26 2011, 16:03) *
Устройство должно стать WEB сервером и предоставлять WEB сервисы на основе SOAP с описанием на WSDL.
Это будет самый универсальный и дальновидный подход.
Эти штуки есть во всех серьезных языках и фреймворках - .NET (С++, C#, VB), Delphi, PHP, Python, Java, JavaScript ...

Правильно ли я понимаю, что устройство не переделывается, физическое соединение с компом не меняется. А WEB-сервер - это моя программа, работающая на компе. Я в этом "тупой доцент" sm.gif, а как программа клиента должна взаимодействовать с этим сервером. Как это выглядит с точки зрения программиста (мне бы оценить сложность освоения данного подхода)?
Go to the top of the page
 
+Quote Post
mdmitry
сообщение May 26 2011, 10:04
Сообщение #7


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Возможный вариант при малом потоке управления: что-то типа wake протокола для обмена. Ещё вариант, более сложный, реализуемый в измерительной аппаратуре: на приборе стоит сервер, например, telnet. Клиент посылает запросы в формате SCPI (NI). Реализовано в генераторах R&S SMC100A и других. Клиент (Ваш пользователь) пишет приложение на чем ему удобно. Потребуется оценка необходимой скорости обмена и выполнения действий. Прибор должен иметь соответствующую периферию для обмена и ресурсы. В R&S SMC100A стоит linux.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
shreck
сообщение May 26 2011, 10:12
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(mdmitry @ May 26 2011, 17:04) *
Возможный вариант при малом потоке управления: что-то типа wake протокола для обмена. Ещё вариант, более сложный, реализуемый в измерительной аппаратуре: на приборе стоит сервер, например, telnet. Клиент посылает запросы в формате SCPI (NI). Реализовано в генераторах R&S SMC100A и других. Клиент (Ваш пользователь) пишет приложение на чем ему удобно. Потребуется оценка необходимой скорости обмена и выполнения действий. Прибор должен иметь соответствующую периферию для обмена и ресурсы. В R&S SMC100A стоит linux.

Идея сделать сервер из самого устройства заманчива, но возможно ли это, если физическое соединение USB HID.
Go to the top of the page
 
+Quote Post
mdmitry
сообщение May 26 2011, 10:23
Сообщение #9


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(shreck @ May 26 2011, 14:12) *
Идея сделать сервер из самого устройства заманчива, но возможно ли это, если физическое соединение USB HID.

Не знаю. Наверно можно сделать, если из USB сделать виртуальный коммуникационный порт (COM/ttyx). Для прибора и для хоста соединение по последовательному каналу. Протоколы поверх такого соединения ложатся, скорость только мала. Сам не проделывал.

Кстати, wake поверх последовательного порта и ложиться, там прибор слэйвом идет. Такое делал.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение May 26 2011, 10:45
Сообщение #10


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(shreck @ May 26 2011, 12:23) *
Правильно ли я понимаю, что устройство не переделывается, физическое соединение с компом не меняется. А WEB-сервер - это моя программа, работающая на компе. Я в этом "тупой доцент" sm.gif, а как программа клиента должна взаимодействовать с этим сервером. Как это выглядит с точки зрения программиста (мне бы оценить сложность освоения данного подхода)?


Вообще-то я предполагал, что потребуется слегка переписать фирмваре устройства.
Если XML применяемый в SOAP слишком тяжелый для каналов передачи, то можно было бы использовать формат JSON и либы JSONP.
Это сужает круг совместимых фреймворков, но может оказаться перспективней, поскольку на JSONP плотно сидят фреймворки Google и Yahoo.

Но можно конечно и промежуточный локальный сервер-шлюз сделать для перевода локального проприетарного M2M протокола в JSON поверх HTTP.
Какой пользовательский интерфейс можно сделать в броузерах на основе бесплатных либ можно посмотреть например здесь: http://jqueryui.com/
Плюс тут в том, что пользовательский интерфейс совместим с кучей броузеров и операционок, а писать его могут разработчики WEB страниц которые как правило дешевле тех же писателей на Delphi.

Цитата(shreck @ May 26 2011, 13:12) *
Идея сделать сервер из самого устройства заманчива, но возможно ли это, если физическое соединение USB HID.


Переделайте HID на RNDIS. Даже проще будет.
Go to the top of the page
 
+Quote Post
ReAl
сообщение May 26 2011, 12:37
Сообщение #11


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(shreck @ May 26 2011, 11:47) *
Хм... я в dll-ках не специалист, но беглый поиск показал, что dll от Visual C++ и С++ Builder несовместимы между собой без всяких ++. Тут еще надо поразбираться.
Не знаю, я тоже не специалист.
Но мой преемник на той работе несколькими взмахами кистей над клавиатурой дорисовал в исходниках той dll-ки пару #include и стал модифицировать/пересобирать её в более привычном ему Visual-C++. Всё до сих пор работает с программой из-под дельфи.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
shreck
сообщение May 26 2011, 14:06
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(ReAl @ May 26 2011, 19:37) *
Не знаю, я тоже не специалист.
Но мой преемник на той работе несколькими взмахами кистей над клавиатурой дорисовал в исходниках той dll-ки пару #include и стал модифицировать/пересобирать её в более привычном ему Visual-C++. Всё до сих пор работает с программой из-под дельфи.

Да, там только с декорированием имен надо аккуратно. Но все это легко решаемо.

Пока останавлюсь на dll способе как самом простом и удобном. А поверх этого потом можно будет добавить все что угодно.
Go to the top of the page
 
+Quote Post
vvs157
сообщение May 26 2011, 20:34
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(shreck @ May 26 2011, 12:47) *
Хм... я в dll-ках не специалист, но беглый поиск показал, что dll от Visual C++ и С++ Builder несовместимы между собой без всяких ++.
Это откуда такие сведения? Несовместимы, как правило, не dll, а lib, у них действительно разный формат, но у Борланда есть утиль, который их преобразует. К примеру, у меня не возникало трудностей использования dll от Agilent в их библиотеке VISA к IEEE-488 контроллеру. Использовались эти DLL как для С++ Builder'a, так и для QT4 с mingw. Все работает.
Go to the top of the page
 
+Quote Post
miga
сообщение May 26 2011, 22:58
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 117
Регистрация: 6-04-05
Пользователь №: 3 928



Цитата(shreck @ May 26 2011, 11:48) *
Минус - ... требуются неудобные телодвижения для использования "неродной" DLL.

Однако, ИХМО это вообще не проблема.
Использую для таких целей AxtiveX контролл. Втыкается и в Студио и Борланд (с "телодвижениями"). Наверняка еще много где можно подцепить. На то компонентный интерфейс и задумывался.
Go to the top of the page
 
+Quote Post
shreck
сообщение May 27 2011, 01:57
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(vvs157 @ May 27 2011, 03:34) *
Это откуда такие сведения? ...

Да это все от отсутсвия базовых знаний в этой области. Я в этом сразу признался. Сейчас читаю об этом и потихоньку все становится на свои места. А пока
Цитата(shreck @ May 26 2011, 21:06) *
Пока останавлюсь на dll способе как самом простом и удобном. А поверх этого потом можно будет добавить все что угодно.

Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 17:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.0149 секунд с 7
ELECTRONIX ©2004-2016