Передача параметров между C # и Labview с ActiveX - PullRequest
1 голос
/ 18 ноября 2011

У меня два вопроса:

Я хотел бы знать, какие типы переменных я могу передать в labview из C # или python, используя activeX.Я предполагаю, что это будут такие вещи, как числовые типы, строки и т. Д. Но как насчет путей или кластеров ошибок?

Также в labview я обычно передаю объекты labview в мои subvi's.Как было бы возможно сделать это с другого языка?

Допустим, у меня есть самоопределяемый объект базы данных, который я обычно передаю в labview.Можно ли вызвать какой-либо заводской метод vi из C # и получить управление с передней панели после запуска vi.Привести это как универсальный объект в C #, а затем вызвать другой vi и передать объект?

Like.

// Get a vi reference, and run my databaseFactory vi.
string databaseFactoryPath = ...;  
VirtualInstrument viTest = labVIEWApp.GetVIReference(databaseFactoryPath "", false, 0);
databaseFactoryVi.Run(true);

// Get the database labview object from the frontpanel control called "database out"
object databaseObject = (object)viTest.GetControlValue("database out");

// Obtain a reference to a database method called load.vi
string databaseLoadPath = ...;
VirtualInstrument databaseload = labVIEWApp.GetVIReference(databaseLoadPath "", false, 0);

string parameterName = "database in";
databaseLoad.Call( parameterName, databaseObject );  

...

Это не работает, потому что исключение выдается в viTest.GetControlValue ("database out"): "Параметрневерно. (Исключение из HRESULT: 0x80070057 (E_INVALIDARG)) "

Кто-нибудь знает, возможно ли делать такие вещи?(Я пытаюсь выйти из программирования labview, но я не хочу делать весь мой код бесполезным в этом процессе.)

Спасибо, labjunky

Ответы [ 2 ]

1 голос
/ 23 ноября 2011

LabVIEW имеет возможность генерировать сборку .NET, которая оборачивает ваши VI и может вызываться из вашего приложения .NET.Я думаю, что это одна из опций, которой разработчики G часто пренебрегают при попытке использовать G-код в приложениях .NET. Это опция " .NET Interop Assembly " в вашей спецификации сборки в проекте LV.

Вы можете выбрать ВП из своего проекта, которые вы хотите использовать для вызова в своем приложении .NET (я думаю, он может генерировать и для LVOOP vis);создать сборку оболочки .NET;а затем используйте эту сборку оболочки для взаимодействия с кодом LabVIEW из приложения .NET.

Конечно, если типы являются базовыми, то при выборе ВП автоматически настраивается сигнатура функции.Я не уверен, что ссылки / дескрипторы могут быть легко переданы между границей .NET / LabVIEW.Но я уверен, что вам быстрее написать целочисленное / строковое-LVObject-map на стороне LabVIEW, а затем использовать общий тип для ссылки на них через границы, чем переписывать весь код в.NET язык.

1 голос
/ 18 ноября 2011

У вас есть много вопросов для ответа ... Я пойду на несколько общих ответов на все из них.

LabVIEW поддерживает .NET 4.0 начиная с LabVIEW 2010. Версии более старые, чем этаВ общем, поддержка .NET 3.5.Вы можете вызывать код .NET и использовать объекты .NET из LabVIEW, используя узлы конструктора, узлы свойств и узлы вызова.Ищите в палитрах .NET, и вы найдете хорошую поддержку.

Поддержка LabVIEW для передачи данных несколько ограничена.Передать объекты (классы) LabVIEW сложно (если не невозможно. Я работаю в команде LabVIEW, и я не уверен ... в основном потому, что я никогда не пробовал).Вы можете сгладить большинство других типов в строки (лучше описать как массив u8, которые мы рассматриваем как строку) и передать полученную строку в .NET или собственную DLL.Вы можете прочитать о формате сглаженных данных здесь.

Вы обязательно должны проверить Measurement Studio .У них есть несколько замечательных инструментов для создания элементов управления, подобных LabVIEW, в .NET.Вы также можете быть заинтересованы в LabWindows (я бы связал его, но ТАК не позволит мне, так как я относительно новый пользователь).Я знаю, что, похоже, я просто пытаюсь продать больше продуктов NI, но, честно говоря, это могут быть жизнеспособные решения для того, что вы пытаетесь сделать.

Нет общедоступного способа вызвать VI из кода .NET(последний раз я проверял. Прошло 3 года с тех пор, как я работал в Measurement Studio, наиболее вероятном продукте, который поможет вам вызывать ВП из .NET).

...